如何在.S汇编代码中编写调用其他宏的多寄存器处理宏?
解决GNU汇编器(GAS)中宏作为参数传递的问题
你的代码报错是因为GAS不会自动把宏参数func解析为传入的宏名,必须用**反斜杠\**标记需要展开的宏参数,同时注意GAS的宏参数用空格分隔而非逗号。以下是修正后的代码:
.macro add_macro reg1 reg2 add \reg1, \reg2 .endm .macro apply_macro func reg1 reg2 \func \reg1, \reg2 .endm test_rax: apply_macro add_macro %rax %rdi
关键说明:
- 宏内部引用参数时,必须加上
\前缀(比如\func、\reg1),告诉汇编器这是需要替换的参数值,而非字面指令名。 - GAS的宏参数通过空格分隔,调用时不能加逗号(原代码里的
%rax, %rdi会把逗号当成%rax的一部分,导致寄存器名无效)。
编译验证:执行gcc test.S -c -o test.o即可正常编译通过。
内容的提问来源于stack exchange,提问作者cryptobeginner
相关产品推荐
相关产品推荐

