我目前正在学习汇编编程,方法是遵循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 位,与指针大小相同。