私はアセンブリコードで新しくなっています。私は次のように関数を作成するマクロを書いている
:ASM - プリプロセッサのラベルを連結する
.macro CREATE_FUNC ARG1 ARG2
.align 4
.func ARG1
cmpl $0x1, some_var
je skip_exec
call ARG2
skip_exec:
iret
.endfunc
.endm
は、今私は2つの機能とBを作成したいので、私は次のコードを書いている:
CREATE_FUNC a, aa
CREATE_FUNC b, bb
を
しかし、コードをコンパイルするときに、 "skip_exec 'がすでに定義されています"エラーが発生しました。つまり、ののCREATE_FUNCは、' skip_exec 'が既に機能。
私は、次のいずれかでそれを解決するために考えた:skip_exeC##のARG1のようなもの、入力パラメータARG1にラベルskip_execを連結
- - しかし、それは動作しませんでしたし、私は方法がわかりませんそれは...
- マクロの先頭に "LOCAL skip_exec"セクションを定義することができます。しかし、それは問題を解決しなかった、私はコンパイルでエラーを取得し続けます。
誰でも私のやり方を理解するのを手伝ってもらえますか(1)、なぜ(2)が私にはうまくいかないのですか?
ありがとうございます!
ありません。このソリューションは、* *作業してはなりません。 GNUアセンブラは '\ @'をマクロカウンタとして保持しているので、このサンプルコードでは 'skip_exec0'と' skip_exec1'という2つのシンボルを定義し、 'skip_exec'を呼び出す' je skip_exec'を呼びます。 – starrify
また、 '\ @'は実際にカウンタとして働いているので、多くの場合役に立ちますが、これは役に立ちません。 – starrify
skip_execの代わりにskip_exec \ @にジャンプするようにコードに変更しました。うまくいきます。 – RRR