“可以使用DWORD声明包含另一个变量的32位偏移量的变量”是什么意思?

Tho*_*hor 2 x86 assembly masm

我目前正在按照Kip Irvine的“汇编语言x86编程”书来学习汇编编程。

我知道SDWORD可以将32位值赋给变量,例如

myVariable SDWORD -2147483648 
; assign the minimum negative number -2147483648 that can be contained within a SDWORD
; to variable named myVariable
Run Code Online (Sandbox Code Playgroud)

但在书中,作者也写道

DWORD可用于声明一个包含另一个变量的32位偏移量的变量。下面,pVal包含val3的偏移量:

pVal DWORD val3
Run Code Online (Sandbox Code Playgroud)

我不确定这句话是什么意思?有人可以给我解释一下吗?特别是作者的意思是什么32 bit offset of another variable

Cod*_*ray 5

(杰斯特基本上已经在评论中回答了这个问题,但是为了完整起见,我将其发布为实际答案。)

您已经知道DWORD可以用于声明32位变量,因为这是x86上双字的大小。因此,唯一令人困惑的部分是“另一个变量的偏移量”的含义。

在这种情况下,这只是表示该变量的地址的另一种方式,因为在平面(非分段)32位内存模型中,段(又称基数)始终为0,这意味着偏移量是唯一的一部分确实对地址有所帮助。

如果您熟悉C之类的语言的指针,那么他只是说您可以使用a DWORD存储指向另一个变量的指针。在32位x86上,指针的长度始终为32位,因此无论指针指向什么类型/大小的变量,都将始终使用a DWORD来存储指针。您甚至可以使用它来存储指向函数(的地址)的指针。

但是请注意,您最初标记了问题。在64位长模式下,指针不是 32位,而是64位。因此,您不能DWORD用来保存另一个变量的地址/指针/偏移量。你代替需要使用QWORD,这是一种 -word,长度为64位,大小相同的指针。