%macro printhello 0
section .rodata
%%msg: db "Hello, world.", 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
問題は、マクロがプログラムに表示されるたびに、NASM プリプロセッサがラベルの新しい名前を発明しmsg
、同じ文字列の複数の定義が存在することです。プレフィックス"Hello, world."
なしで文字列を定義できますが、マクロがさらに使用される場合%%
一度ならず、同じシンボルを再定義するとアセンブリ エラーが発生しますmsg
。では、その文字列の複数の定義を回避するにはどうすればよいでしょうか?