一道汇编语言的题

来源:百度知道 编辑:UC知道 时间:2024/05/27 00:48:06
dword1 DWORD 10h, 20h, 30h, 40h

mov ebx, OFFSET dword1
sub ebx, 2
mov ax, [ebx]

程序运行完后ax的值是多少?
a. 0000h
b. 0010h
c. 9000h
d. 0020h

我知道答案是C, 但是如何算出来的, 请详细解释, 谢谢!
如解释合理还有追加20分!

是不是还有其它程序,从这里看不出dword1所在的地址,上一个地址的内容
mov ebx, OFFSET dword1 ;得到dword1所在的相对地址
sub ebx, 2 ;减掉2
mov ax, [ebx] ;得到dword1 的上一个单元的内容给AX,你看上个单元存多少就是多少了

D

dword1 DWORD 10h, 20h, 30h, 40h;一个双字占4个字节,该伪指令相当于dword1 DWORD 00000010h, 00000020h, 00000030h, 00000040h,即Dword1定义的内容从低地址到高地址中依次存储的字节内容为10h,00h,00h,00h,20h,00h,00h,00h,30h,00h,00h,00h,40h

mov ebx, OFFSET dword1;让EBX指向Dword1的首地址
sub ebx, 2;让EBX指向Dword1-2的首地址,
mov ax, [ebx] ;需要知道dword1-2定义的内存空间的内容,但题中没给,所以无法判断.

应该的还有其他的内容的
dword1 DWORD 10h, 20h, 30h, 40h---只是相当于一个以 dword1 为首地址的双字的数组。而他的内容是10h, 20h, 30h, 40h。

mov ebx, OFFSET dword1 --是取dword1的地址
sub ebx, 2 ---是说dword1地址的前一个单元地址
mov ax, [ebx]---把dword1地址的前一个单元内容取出来,放到ax 之中 。
没有明确的指出。所以,应该的是默认a 0000h 的。是c 的话 就应该 有别的东西没有说清楚

题目缺少了程序