.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.
为什么?有人可以向我解释一下如何解决这个问题吗?
请您参考如下方法:
num dd 090F0433H
这在内存中定义了一个双字。由于 x86 使用 little endianness,因此该 dword 的最低字节将存储在最低地址。您选择将此最低地址命名为“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
。