请问这两个汇编指令有什么区别。

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:56:33
3、 指令执行后,(al)=((ds)*16+(bx)),(ah)=((ds)*16+(bx)+1)
4、 指令执行后,((ds)*16+(bx))=(al),((ds)*16+(bx)+1)=(ah)
能不能解释下。后面的BX+1是怎么回事?

指令执行后,(al)=((ds)*16+(bx)),(ah)=((ds)*16+(bx)+1)
-------------------------------------------------------
al,ah都为8位寄存器,但al占低位,ah占高位,所以ah才有bx+1
合并为:mov ax,[bx]
意思:
把数据段ds:[bx](8位,一个字节,低位)的内容传送给al(低位),
把数据段ds:[bx+1](8位,一个字节,高位)的内容传送给ah(高位)。

下面合并为:mov [bx],ax
注意ax一定要看成ah和al,才能传送。
(不要以为是16位ax传送到8位上去了)

上面都是16位(只是分成2个8位)的数据在传送。

第一个是 mov ax,[bx]
第二个是 mov [bx],ax

区别就是源操作数和目的操作数的不同。

第一个是 mov ax,[bx]
取数操作,从当前数据段BX位移处取一字数据送入AX;
第二个是 mov [bx],ax
存数操作,把AX中的值存入当前数据段BX位移处。