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

时间:2017-06-20 23:36:52

标签: assembly x86 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

但在书中,作者也写过

  

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

pVal DWORD val3

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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