如何将GNU GAS宏参数与其他标记连接起来制作单个标签?

时间:2010-06-07 14:36:05

标签: assembly gas

我想使用气体宏在装配函数中动态创建一组标签。我想做这样的事情:

 .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。现在,我可以找到许多递归调用的例子,但我还没有找到一个涉及传入宏参数的标签连接。天然气记录很少,所以回答这个问题对我来说很难。

  1. 您可以将宏与其他令牌的参数连接起来制作单个令牌吗?
  2. 你最喜欢的气体装配工参考是什么?

2 个答案:

答案 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