英特尔汇编语法中是否需要 ptr 关键字?
Is ptr keyword necessary in Intel assembly syntax?
括号和PTR
都暗示后面的值(内存地址或寄存器值)被解引用,从语言设计的角度来看,是否真的有必要让它们同时出现?
is it really necessary to have both of them to appear at the same time from language design perspective?
通常不会。虽然您必须特别指出您想要符号的值(而不是地址),但既不要求也不禁止同时使用两者。
使用方括号只是许多人用来表示他们使用的是值,而不是地址或指针的约定。有时你会听到它叫做 "contents".
如果您想要查看两者都需要的示例,请参阅Addressing variables (or, what is ML64 generating?)。但这并不是语言要求 本身 。相反,两者都是必需的,因为 MASM/ML 和 MASM64/ML64.
使用相同的来源
在 MASM64/ML64 下,汇编程序似乎无法正确处理符号定义和快速调用,因此由于 <symbolic name> EQU <register>
,两者都需要。或者,也许代码是这样写的,所以汇编程序 无法 处理它...
如果你仔细观察,你会看到 MASM 使用基本相对寻址(所有内容都通过 EBP
访问),而 MASM64 由于 fastacll
而有不同的要求,其中前两个参数可用通过寄存器(ECX
和 EDX
)。
Both brackets and PTR imply the following value (memory address or register value)
您可能已经知道这一点,但万一其他人发现它有用...
在 C 中,你总是处理值并且必须做一些特殊的事情来获取地址:
int value = 1;
在您的 C 代码中,您将始终使用 1
,除非您获取变量的地址。
在 ASM 中,正好相反。当您声明一个变量并象征性地引用它时:
LOCAL value:QWORD
除非您采取特殊步骤来处理值,否则您始终使用地址。要获取该值,您可以使用 QWORD PTR value
或 [value]
。或者你可以同时使用QWORD PTR [value]
,这是无害的。
括号和PTR
都暗示后面的值(内存地址或寄存器值)被解引用,从语言设计的角度来看,是否真的有必要让它们同时出现?
is it really necessary to have both of them to appear at the same time from language design perspective?
通常不会。虽然您必须特别指出您想要符号的值(而不是地址),但既不要求也不禁止同时使用两者。
使用方括号只是许多人用来表示他们使用的是值,而不是地址或指针的约定。有时你会听到它叫做 "contents".
如果您想要查看两者都需要的示例,请参阅Addressing variables (or, what is ML64 generating?)。但这并不是语言要求 本身 。相反,两者都是必需的,因为 MASM/ML 和 MASM64/ML64.
使用相同的来源在 MASM64/ML64 下,汇编程序似乎无法正确处理符号定义和快速调用,因此由于 <symbolic name> EQU <register>
,两者都需要。或者,也许代码是这样写的,所以汇编程序 无法 处理它...
如果你仔细观察,你会看到 MASM 使用基本相对寻址(所有内容都通过 EBP
访问),而 MASM64 由于 fastacll
而有不同的要求,其中前两个参数可用通过寄存器(ECX
和 EDX
)。
Both brackets and PTR imply the following value (memory address or register value)
您可能已经知道这一点,但万一其他人发现它有用...
在 C 中,你总是处理值并且必须做一些特殊的事情来获取地址:
int value = 1;
在您的 C 代码中,您将始终使用 1
,除非您获取变量的地址。
在 ASM 中,正好相反。当您声明一个变量并象征性地引用它时:
LOCAL value:QWORD
除非您采取特殊步骤来处理值,否则您始终使用地址。要获取该值,您可以使用 QWORD PTR value
或 [value]
。或者你可以同时使用QWORD PTR [value]
,这是无害的。