有关汇编的一个简单的问题,会的进
执行下列指令后, AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50
ENTRY DW 3
.
.
.
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
答案:
(AX)=40
这个答案是怎么得出来的???
参考答案:将前第二行改成:ENTRY DW 6进制才能得到40
解释如下:
MOV BX,OFFSET TABLE ;将TABLE 的有效地址送入BX寄存器中,或者说BX指向了TABLE 存储器单元
ADD BX,ENTRY ;BX寄存器的值加上ENTRY 的值,即加了3
MOV AX,[BX] ;以寄存器间接寻址方式,将BX寄存器所指向的存储单中的数据转储到AX寄存器中。BX原来是指向第一个字(即10)的,加6之后,便指向第四个字,即为40。
要注意:一个字(DW类型)的存储单元,包含两个字节(DB类型)的存储单元。所以字类型的10和40之间的地址差值是6个字节,所以BX从TABLE(即10)的位置加上地址差值6个字节之后,就指向了40.
处理这种问题时,要对存储器编址很熟悉。
我画了一个图,在参考资料中,比较直观,你可以看一下。
参考资料: