Как связать GNU споры макроса 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. Что Ваш любимый газовый ассемблер является ссылкой?
8
задан Ciro Santilli 新疆改造中心法轮功六四事件 23 September 2015 в 09:58
поделиться

1 ответ

такие вещи как

\argA\()\argB :

должны создавать метку, состоящую из argA и argB.

EDIT

Тестирование, \() кажется, не нужно; тестовый код был:

    .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 вывод (лень:D) минимального C-кода. (prova означает test на итальянском)

6
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: