鱼C论坛

 找回密码
 立即注册
查看: 10906|回复: 10

汇编语言 2.1 mov al,bh mov ah,bl 有些不明白

[复制链接]
发表于 2013-10-30 05:36:50 | 显示全部楼层 |阅读模式
1鱼币
mov bx,826CH   BX=826CH  
mov cx,ax      CX=6246H  
mov ax,bx      AX=826CH  
add ax,bx      AX=04D8H  
mov al,bh      AX=0482H    BX=826C  BH=82  BL=6C   AX=04D8   AH=04  AL=D8    结果0482H 我是把04D8里的04直接落下来
mov ah,bl      AX=6C82H    BX=826C  BH=82  BL=6C   AX=0482   AH=04  AL=82  结果是6C04 我是把0482里的04直接落下来
为什么是把  0482 里的82用到  而不是  04  那  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-30 08:20:54 | 显示全部楼层
0482中的04是AH,82是AL
mov al, bh只用到82H,因为al=82H把bh的82H值转移到al中,所以最后al就为82H

mov ah, bl 把BL中的值6CH转移到AH中,所以AH为6CH

AX、BX、CX、DX这四个16位通用寄存器都可以拆开来用,分别拆成两个8位寄存器AH、AL、BH、BL、CH、CL、DH、DL。

如果是mov ax,bx说明进行操作的是16位寄存器,加减乘除会有进位借位
如果是mov ah,bl说明进行操作的是8位寄存器,加减乘除产生的进位错位不会改变另外一个8位寄存器,进位会被舍弃。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-30 16:45:59 | 显示全部楼层

mov ah,bl      AX=6C82H    BX=826C  BH=82  BL=6C   AX=0482   AH=04  AL=82  结果是6C04     为什么用到的是   AL=82   不是04?

有人说是用 BX=826C    BX里的82     那为什么mov al,bh   BX=826C    用到的不是BL=6C?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-30 16:47:03 | 显示全部楼层
bh是bx的高位
bl是bx的低位,
0482中04是高位,82是低位,
mov哪一个就用哪一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-30 17:03:56 | 显示全部楼层
本帖最后由 福禄娃娃 于 2013-10-30 17:06 编辑
amr小龙 发表于 2013-10-30 16:45
mov ah,bl      AX=6C82H    BX=826C  BH=82  BL=6C   AX=0482   AH=04  AL=82  结果是6C04     为什么用 ...

mov ah, bl   AX=6C82H   BX=826CH 你要把BL中的值放到AH中,BL的值为6C,所以最后AX只改变了AH的值,AL的值不变。

因为mov ah,bl 只进行相同的位数寄存器的运算,这条指令只用到了ah和bl,把bl的值放到ah中。

而mov al, bh 用到了al和bh,把bh的值放入al中。
如果还不清楚,建议再看下小甲鱼的视频和王爽的书。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-30 17:11:36 | 显示全部楼层
随风听雨雪 发表于 2013-10-30 16:47
bh是bx的高位
bl是bx的低位,
0482中04是高位,82是低位,

mov bx,826ch   BX=826C

mov ax,bx      AX=04D8

mov al,bh      AX=0482

mov ah,bl      AX=6c   AX=0482  AH=04  AL=82   为什么不是0482  中的高位置04  而是的位置82  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-30 17:15:43 | 显示全部楼层
福禄娃娃 发表于 2013-10-30 17:03
mov ah, bl   AX=6C82H   BX=826CH 你要把BL中的值放到AH中,BL的值为6C,所以最后AX只改变了AH的值,AL的 ...

mov bx,826ch   BX=826C

mov ax,bx      AX=04D8

mov al,bh      AX=0482

mov ah,bl      AX=6c   AX=0482  AH=04  AL=82   为什么不是0482  中的高位置04  而是低位置82  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-30 17:34:11 | 显示全部楼层
amr小龙 发表于 2013-10-30 17:11
mov bx,826ch   BX=826C

mov ax,bx      AX=04D8

mov bx,826CH   BX=826CH

add ax,bx      AX=04D8H

mov al,bh      AX=0482H  ;将bx的高八位赋给ax的低八位,其他的不变,即al=82H,ax=0482H 是因为BH占用了82H 关键是这个H么

mov ah,bl      AX=6C82H  ;将bx的低八位赋给ax的高八位,其他不变,ah=6CH,ax=6C82H   是因为BL用了AH高位置就变成了6CH  因为6C有了高八位值     所以           AX=0482H     AH=04被抛弃  因为不用用俩个高八位地址   所以只能用  0482H中的  82H     还是因为  82H他有这个H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-30 18:09:12 | 显示全部楼层
amr小龙 发表于 2013-10-30 17:34
mov bx,826CH   BX=826CH

add ax,bx      AX=04D8H

H表示的是十六进制数
mov ah, bl 这句指令执行后,BX中的BH和BL的值都不会改变,改变的是AX中AH的值,只是把BL的值放到了AH中,覆盖了原先AH的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-31 14:37:07 | 显示全部楼层
从右到左依次升高,高低位就相当于阿拉伯数字的高低位,譬如百位比个位高,而且汇编里的高位与低位互不影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-21 11:27:58 | 显示全部楼层
高八位和低八位    自己好好看书
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 12:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表