pointers - 汇编词ptr含义

标签 pointers assembly 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

对于 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

关于pointers - 汇编词ptr含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315449/

相关文章:

在matlab中调用C函数的变量地址

assembly - MASM 中的 Push/Pop 与 Mov

c# - 预定义单词集中包含的单词的正则表达式

memory - 可寻址和可移动的最小存储单元

c - c中的多维指针有困难吗?

C- printf() 正在覆盖我的变量

c - 从外部函数中释放指针

c++ - gcc-c++ 是否没有为当前的 x86-64 处理器优化原子操作

程序集中的字符串

unix - grep -w 只有空格作为分隔符