在 .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'
有沒有辦法定義一個宏,將另一個宏應用于某些暫存器?請注意,對于手頭的用例,我必須使用宏并且不能使用函式。
uj5u.com熱心網友回復:
當我想編譯這個宏時,它不起作用:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/505314.html