为什么我不能在 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 寻址可能性无关。
在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 寻址可能性无关。