"DWORD can be used to declare a variable that contains the 32-bit offset of another variable"是什么意思?



我目前正在学习汇编编程,方法是遵循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

但在书中,作者还写道

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

pVal DWORD val3

我不太确定这句话是什么意思?有人可以向我解释一下吗?尤其是作者所说的32 bit offset of another variable是什么意思?

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

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

在这种情况下,这只是该变量地址的另一种说法,因为在平面(非分段)32 位内存模型中,段(又名基数)始终为 0,这意味着偏移量是唯一真正贡献地址的部分。

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

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

相关内容

最新更新