我想使用气体宏在装配函数中动态创建一组标签。我想做这样的事情:
.macro set_up_jumptab_entry prefix, from=0, to=10 .quad \prefix_\item .if \to-\from set_up_jumptab_entry \prefix,"(\from+1)",\to .endif .endm set_up_jumptab_entry myfunc 0 10
这里\ prefix_ \ item就像myfunction_7。现在,我可以找到许多递归调用的例子,但我还没有找到一个涉及传入宏参数的标签连接。天然气记录很少,所以回答这个问题对我来说很难。
答案 0 :(得分:6)
\argA\()\argB :
应该创建一个由argA和argB组成的标签。
修改
测试,\()
似乎没有必要;测试代码是:
.file "test.c"
.macro prova argA, argB
\argA\argB :
.endm
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl $0, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
prova abc, def
jmp abcdef
ret
.size main, .-main
.ident "GCC: (GNU) 4.3.2"
.section .note.GNU-stack,"",@progbits
这是最小C代码的gcc -S test.c
输出(懒惰:D)。 (prova
表示意大利语test
)
答案 1 :(得分:2)
你最喜欢的气体装配工参考是什么?
文档非常清楚https://sourceware.org/binutils/docs/as/Macro.html
字符串`()'可用于将宏参数的结尾与以下文本分开。例如:
.macro opcode base length
\base\().\length
.endm