.data
num dd 090F0433H
.code
mov ax, @data
mov ds, ax
mov ax, word ptr num
mov bx, word ptr num+2
mov cl, byte ptr num+1
对于mov ax,word ptr num,AH = 04,AL = 33。
为什么呢?有人可以向我解释如何解决这个问题吗?
答案 0 :(得分:8)
num dd 090F0433H
这在内存中定义了一个双字。由于x86使用很小的字节序,因此该双字的最低字节将存储在最低地址。您选择将此最低地址命名为“num”。
在记忆中:
33h,04h,0Fh,09h
^
|
\num points here
mov ax, word ptr num
当你写下mov ax, word ptr num
时,你有效地要求在“num”地址检索仅最低字(2字节)。
你得到AL
中的第一个字节33h和AH
中的第二个字节04h,合并在一个寄存器中:AX=0433h
。
mov bx, word ptr num+2
这个工作方式类似,但只会提供最高的单词
你会得到BX=090Fh
mov cl, byte ptr num+1
您要求在“num”地址检索仅第二个字节
你会得到CL=04h
。