9

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

.macro set_up_jumptab_entry 前缀,from=0, to=10
     .quad \prefix_\item
     .if \to-\from
     set_up_jumptab_entry \prefix,"(\from+1)",\to
     。万一
 .endm
 set_up_jumptab_entry myfunc 0 10

这里的 \prefix_\item 类似于 myfunction_7。现在,我可以找到很多递归调用的示例,但我还没有找到涉及传入宏参数的标签连接之一。气体的记录很差,所以对我来说很难回答这个问题。

  1. 您可以将宏的参数与其他标记连接起来以生成单个标记吗?
  2. 您最喜欢的气体装配工参考资料是什么?
4

2 回答 2

7

\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

这只是gcc -S test.c最小 C 代码的输出(惰性:D)。(意大利语的prova意思test

于 2010-06-07T15:16:30.240 回答
4

您最喜欢的气体装配工参考资料是什么?

文档很好地涵盖了这一点https://sourceware.org/binutils/docs/as/Macro.html

字符串 `()' 可用于将宏参数的结尾与以下文本分开。例如:

.macro opcode base length
    \base\().\length
.endm
于 2015-09-23T09:59:39.900 回答