Skip to main content
 首页 » 编程设计

pointers之汇编词ptr含义

2024年12月31日22JeffreyZhao

.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