nasmプリプロセッサ(3)
nasmは限定子を提供する.nolistは、マクロ定義に含めることができ、リストファイルでマクロが展開されないようにします.限定符nolistはパラメータの後ろに直接配置されます.
条件アセンブリは、Cプリプロセッサと同様に、nasmでは、特定の条件が満たされた場合にのみソースコードをアセンブリできます.
%ifdefと%ifndefは単行マクロが存在するかどうかをテストし、分岐テストにも同様の%elifdefと%elifndefがあります.
%ifmacroは、マルチラインマクロが存在するかどうかをテストし、同じように単行マクロに類似する%ifnmacro、%elifmacro、%elifnmacroが存在するかどうかを判断します.
%ifctx ctxnameはコンテキストスタックをテストし、プロセッサコンテキストスタックの上部のコンテキストがctxnameである場合に条件が成立します.
%ifidnと%ifidniは、テキストが同じ場合にのみコードをアセンブリし、2セグメントのテキストのスペース数の違いは無視されます.後者は前者の大文字と小文字の不感度バージョンです.
%ifidパラメータが記号の場合条件成立%ifnumパラメータが数字の場合条件成立%ifstrパラメータが文字列の場合条件成立
%errorはエラーを生成しますnasmのtimes接頭辞は便利ですが、1つのマルチラインマクロに使用することはできません.nasmがマクロを展開した後にtimesが処理されるので、nasmは別のプリプロセッサレベルでのループを提供します.%rep%repはrepコードが繰り返される回数を表す数値式を持つことができます.
%exitrepを使用して%repループをスキップできます
%includeを使用して他のソースファイルを含み、nasmが実行されているディレクトリ検索に含まれるファイルは、nasmコマンドラインで-iを使用して検索パスを追加できます.コマンドラインで-pを使用してファイルを含めることもできます.
%macro foo 1.nolist
条件アセンブリは、Cプリプロセッサと同様に、nasmでは、特定の条件が満たされた場合にのみソースコードをアセンブリできます.
%if<condition>
%elif<condition2>
%else
%endif
%ifdefと%ifndefは単行マクロが存在するかどうかをテストし、分岐テストにも同様の%elifdefと%elifndefがあります.
%ifmacroは、マルチラインマクロが存在するかどうかをテストし、同じように単行マクロに類似する%ifnmacro、%elifmacro、%elifnmacroが存在するかどうかを判断します.
%ifctx ctxnameはコンテキストスタックをテストし、プロセッサコンテキストスタックの上部のコンテキストがctxnameである場合に条件が成立します.
%ifidnと%ifidniは、テキストが同じ場合にのみコードをアセンブリし、2セグメントのテキストのスペース数の違いは無視されます.後者は前者の大文字と小文字の不感度バージョンです.
%ifidパラメータが記号の場合条件成立%ifnumパラメータが数字の場合条件成立%ifstrパラメータが文字列の場合条件成立
%errorはエラーを生成しますnasmのtimes接頭辞は便利ですが、1つのマルチラインマクロに使用することはできません.nasmがマクロを展開した後にtimesが処理されるので、nasmは別のプリプロセッサレベルでのループを提供します.%rep%repはrepコードが繰り返される回数を表す数値式を持つことができます.
%assign i 0
%rep 100
inc word [table+2*i]
%assign i i+1
%endrep
%exitrepを使用して%repループをスキップできます
%includeを使用して他のソースファイルを含み、nasmが実行されているディレクトリ検索に含まれるファイルは、nasmコマンドラインで-iを使用して検索パスを追加できます.コマンドラインで-pを使用してファイルを含めることもできます.