宏代替GAS中的常数

Mic*_*kov 8 x86 assembly gnu gnu-assembler

X86 GNU Assembly上的宏有什么问题?它表示符号S在链接期间未定义.

.macro S size=40
\size
.endm
Run Code Online (Sandbox Code Playgroud)

我正在使用它

mov %eax, S
Run Code Online (Sandbox Code Playgroud)

ugh*_*fhw 17

宏用于为您经常使用的代码创建模板,而不是输入常量数字.因此,我不相信汇编程序在表达式中进行宏扩展.由于您只需要一个数字,您可以使用它.set来定义一个常量.

.set S, 40
mov %eax, S
Run Code Online (Sandbox Code Playgroud)

此外,如果您通常使用intel语法,请确保您了解此代码正在执行的操作:它当前将eax的值存储在地址0x28的内存中.如果你想将数字40放在eax中,你需要反转操作数并在S前面使用一个美元符号.

mov $S, %eax
Run Code Online (Sandbox Code Playgroud)