gcc .S汇编代码将另一个宏应用于.S中多个寄存器的宏

nwsw7zdq  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(176)

在.S汇编代码中,我想编写一个宏,它将另一个宏作为“参数”,然后将其应用于多个寄存器。最简单的示例如下:

.macro add_macro reg1 reg2
    add reg1 reg2
.endm

.macro apply_macro func reg1 reg2
    func reg1
.endm

test_rax:
    apply_macro add_macro %rax, %rdi

但是,当我想编译这个宏时,它不起作用:

gcc test.S -c -o test.o
test.S: Assembler messages:
test.S:10: Error: no such instruction: `func reg1'

有没有办法定义一个宏,将另一个宏应用到某些寄存器?注意,对于手头的用例,我必须使用宏,而不能使用函数。

kgqe7b3p

kgqe7b3p1#

当我想编译这个宏时,它不起作用:test.S:10: Error: no such instruction:func reg1'这是因为apply_macro`的主体没有进行任何参数替换。下面是宏的编辑变体:

.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

相关问题