为什么我不能在 Assembly 中声明一个采用取消引用变量值的变量?

Why can't I declare a variable that takes the value of a dereferenced variable in Assembly?

在assembly(x86 NASM)中,完全可以这样做

a dd 17h
a2 dd a

通过数据段中的这两行代码,我声明了一个双字 a,并为其赋值 17h。然后我声明了另一个双字,并将 a 的地址值赋予这个双字。这行得通,我明白发生了什么。

但是当我尝试这样做时:

a dd 17h
a2 dd [a]

我收到一个语法错误!我真的不知道为什么。我希望这段代码定义一个双字 a,其值为 17h(这与前面的示例相同),然后定义一个双字 a2,其值为 a,所以 17h。但正如我所说,这似乎行不通。我很困惑为什么这行不通。据我所知,只要按照[base + index * scale + constant]形式的地址偏移量公式就可以对内存进行寻址。在我的例子中,a a 的地址是常量,因此它将是公式中的常量,基数和小数位数将为零。至少我是这么想的。但显然,它不起作用。

But as I said, this doesn't seem to work. I am confused why this wouldn't work.

只是因为汇编程序不支持它,尽管它们可以。

From what I know, we can address memory as long as we follow the address offset formula which is in the form of [base + index * scale + constant]

是的,这是表达 x86 CPU 寻址可能性的英特尔语法。但是,这仅适用于运行时,即芯片进行实际寻址时。

您要求的是汇编程序支持类似的语法来定义源文件中的数据,该数据采用另一个定义的值。他们绝对可以做(或不做)类似的事情,但这取决于汇编程序的设计者。这与 x86 寻址可能性无关。