amr小龙 发表于 2013-10-30 05:36:50

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

mov bx,826CH   BX=826CHmov cx,ax      CX=6246Hmov ax,bx      AX=826CHadd ax,bx      AX=04D8H mov al,bh      AX=0482H    BX=826CBH=82BL=6C   AX=04D8   AH=04AL=D8    结果0482H 我是把04D8里的04直接落下来 mov ah,bl      AX=6C82H    BX=826CBH=82BL=6C   AX=0482   AH=04AL=82结果是6C04 我是把0482里的04直接落下来 为什么是把0482 里的82用到而不是04那

福禄娃娃 发表于 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位寄存器,进位会被舍弃。

amr小龙 发表于 2013-10-30 16:45:59

福禄娃娃 发表于 2013-10-30 08:20 static/image/common/back.gif
0482中的04是AH,82是AL
mov al, bh只用到82H,因为al=82H把bh的82H值转移到al中,所以最后al就为82H



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

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

随风听雨雪 发表于 2013-10-30 16:47:03

bh是bx的高位
bl是bx的低位,
0482中04是高位,82是低位,
mov哪一个就用哪一个

福禄娃娃 发表于 2013-10-30 17:03:56

本帖最后由 福禄娃娃 于 2013-10-30 17:06 编辑

amr小龙 发表于 2013-10-30 16:45 static/image/common/back.gif
mov ah,bl      AX=6C82H    BX=826CBH=82BL=6C   AX=0482   AH=04AL=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中。
如果还不清楚,建议再看下小甲鱼的视频和王爽的书。

amr小龙 发表于 2013-10-30 17:11:36

随风听雨雪 发表于 2013-10-30 16:47 static/image/common/back.gif
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=0482AH=04AL=82   为什么不是0482中的高位置04而是的位置82

amr小龙 发表于 2013-10-30 17:15:43

福禄娃娃 发表于 2013-10-30 17:03 static/image/common/back.gif
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=0482AH=04AL=82   为什么不是0482中的高位置04而是低位置82

amr小龙 发表于 2013-10-30 17:34:11

amr小龙 发表于 2013-10-30 17:11 static/image/common/back.gif
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

福禄娃娃 发表于 2013-10-30 18:09:12

amr小龙 发表于 2013-10-30 17:34 static/image/common/back.gif
mov bx,826CH   BX=826CH

add ax,bx      AX=04D8H


H表示的是十六进制数
mov ah, bl 这句指令执行后,BX中的BH和BL的值都不会改变,改变的是AX中AH的值,只是把BL的值放到了AH中,覆盖了原先AH的值。

羊羽生 发表于 2013-10-31 14:37:07

从右到左依次升高,高低位就相当于阿拉伯数字的高低位,譬如百位比个位高,而且汇编里的高位与低位互不影响

要没时间了 发表于 2013-11-21 11:27:58

高八位和低八位    自己好好看书
页: [1]
查看完整版本: 汇编语言 2.1 mov al,bh mov ah,bl 有些不明白