【问题标题】:What does it mean that "DWORD can be used to declare a variable that contains the 32-bit offset of another variable"?“DWORD 可用于声明包含另一个变量的 32 位偏移量的变量”是什么意思?
【发布时间】:2017-11-23 16:19:09
【问题描述】:

我目前正在按照 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 位地址的变量”。因此,对于“pVal DWORD val3”,我们并不是将“val3”中包含的值分配给“pVal”,而是将“val3”的地址分配给“pVal”。我希望我的理解是正确的。
  • 是的,没错。从技术上讲,它是一个段中的偏移量,但在平面内存环境中,除特殊情况外,基数为零。
  • @Jester 真棒。再次感谢您的帮助!真的很感激!

标签: assembly x86 masm


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 2021-12-16
    • 2011-05-14
    • 2010-09-19
    • 2016-12-14
    • 2013-12-04
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多