当前位置: 代码迷 >> 汇编语言 >> 汇编程序一个疑点
  详细解决方案

汇编程序一个疑点

热度:107   发布时间:2016-05-02 04:28:45.0
汇编程序一个疑问


指令执行后 bx = 00beH , 谁能帮忙解释一下
------解决思路----------------------
MOV AX,[BX]
其中AX是16位寄存器,那么就会在DS:[BX]地址出,读取一个word长度的数据放入AX中,
你看你的PDF97页的图5.1,21000H地址数据为BEH,21001H地址的数据为00H,这两个
字节合并成一个word,低位在前,高位在后,所以合并后的数据是00BEH,放入AX寄存器,
所以AX = 00BEH
------解决思路----------------------
先是确定数据段ds地址

mov ds,ax
这是ds为2000H

mov ax,[bx]
此时 [bx]的默认段地址为ds也就是2000H   偏移地址为bx  也就是1000H

所以就是将段地址为2000H偏移地址为1000H的内存数据放入ax中,由于ax为十六位,所以读取此时十六位放入ax中,也就是00beH放入ax
------解决思路----------------------
" [  ] " 的意思 指 内存单元
 假定 bx= 1000H,  
如果  mov ax,bx    执行后ax=1000H     
如果 mov  ax,[bx]  执行后ax=00beH      默认是DS 段,2000H:1000H  处内存单元存储的值 是00beH  

mov ax, ds:[bx]     ;默认是DS 段,一般是不这么写的,不知这解答靠谱不。。。书上有解释,应该讲到了,仔细看书。

------解决思路----------------------

[bx]表示内存地址的偏移地址是bx中的值,即1000h,而段地址没有明确指出,表示段地址是ds中的值,即2000h,所以mov ax,[bx]表示把内存中2000:1000中的字(两个字节)的值送入ax寄存器中,字数据在内存中存储时低地址(本问题中21000h)存储低字节,高地址(本问题中21001h)存储高字节,本程序中21000h中处是BEh,21001h中存储的是00h,所以合起来就是00BEh,传送到AX中就是00BEH,如果内存中的数据不是如图所示,结果就不一定是00BEh,处决于内存2000:1000处当时的字数据是什么,比如如果21000h处字节数据是AAh,21001处字节数据是CCh,则执行结果子CCAAh