9

ガス マクロを使用して、アセンブリ関数で一連のラベルを動的に作成したいと考えています。私はこのようなことをしたいと思います:

.macro set_up_jumptab_entry プレフィックス、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. お気に入りのガス アセンブラーのリファレンスは何ですか?
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 コードの単なる出力 (lazyness: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 に答える