2016-08-29 9 views
0

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

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

エラー:行の末尾のジャンクは、最初に認識されない文字は、私は二つの問題があると思い、 `\」

答えて

0

です。 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つだけ作成されました。

関連する問題