iTe*_*hno 3 assembly pointers cpu-word mov
.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
Run Code Online (Sandbox Code Playgroud)
对于mov ax,单词ptr num,AH = 04,AL = 33.
为什么?有人可以向我解释如何解决这个问题吗?
Run Code Online (Sandbox Code Playgroud)num dd 090F0433H
这在内存中定义了一个双字.由于x86使用很小的字节序,因此该双字的最低字节将存储在最低地址.您选择将此最低地址命名为"num".
在记忆中:
33h,04h,0Fh,09h
^
|
\num points here
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)mov ax, word ptr num
当你写这篇文章时,mov ax, word ptr num你有效地要求只检索"num"地址的最低字(2个字节).
你得到第一个字节33h in AL和第二个字节04h in AH,结合在一个寄存器中:AX=0433h.
Run Code Online (Sandbox Code Playgroud)mov bx, word ptr num+2
这个工作方式类似,但只会给出最高的单词.
你会得到BX=090Fh
Run Code Online (Sandbox Code Playgroud)mov cl, byte ptr num+1
在这里,您要求仅检索"num"地址处的第二个字节.
你会得到的CL=04h.