0

ラベルを作成するマクロがありますが、ラベルがまだ定義されていない場合にのみラベルを作成したいと考えています。問題は、ラベルがマクロ引数を使用して作成され、アセンブラーがマクロ引数を使用して生成されたシンボルを好まないことです。これは動作しないコードです。ifndef でエラーになります。これを書く他の方法はありますか?

.macro create_handler modifier
  .ifndef handler\modifier
    handler\modifier:
    some code
    some more code
  .endif
.endif

エラー: 行末にジャンクがあります。認識されない最初の文字は `\' です

4

1 に答える 1

1

2つの問題があると思います。1 つは、コロン付きの ,\modifier:という名前のマクロ引数を探すものです。代わりmodifier:に使用する必要があります。文字列を分割して、引数の名前が終了したことをパーサーが認識できるようにします。\modifier\():\()

次に、最後は次のように.endifする必要があります.endm

.macro create_handler modifier
  .ifndef handler\modifier
    handler\modifier\():
      .4byte 0
  .endif
.endm

create_handler foo
create_handler foo

これにより、次のリストが表示されます (行番号は無視してください。これを既存のファイルの 1 つに追加しました)。

  74 0010 00000000  create_handler foo
  75                create_handler foo
DEFINED SYMBOLS
  ../src/core_dict.S:74     .text:00000010 handlerfoo

ご覧のとおり、handlerfoo作成されたのは 1 つだけです。

于 2016-10-21T05:02:09.933 に答える