%assign
%assign は、数値のみを持つ単一行マクロを定義します。
引数は指定できません。
定義部分は式の形で指定でき、%assign が処理された時に一度だけ評価され、結果の数値が値となります。
引数は指定できません。
定義部分は式の形で指定でき、%assign が処理された時に一度だけ評価され、結果の数値が値となります。
%assign test1 (1+2) %define test2 (1+2) test1 ; 3 test2 ; (1+2)
文字列のマクロ
以下は、文字列に関する処理を行った上で、生成された値を、単一行マクロとして定義します。
文字列が生成される場合、囲む引用符 (" ' `) は、内容に応じて変更される場合があります。
これらは、複数行マクロを呼び出す時と同じで、引数は () で囲まず、カンマで区切って渡します。
文字列が生成される場合、囲む引用符 (" ' `) は、内容に応じて変更される場合があります。
これらは、複数行マクロを呼び出す時と同じで、引数は () で囲まず、カンマで区切って渡します。
%strcat
引用符で囲まれた複数の文字列を連結して、単一行マクロとして定義します。
%strcat test1 "abcd", "1234", '"' test1 ; 'abcd1234"'
%strlen
文字列の長さを、数値としてマクロに定義します。
%strlen test1 "123456" test1 ; 6
%substr
文字列内から部分文字列を取り出し、マクロに定義します。
引数は、「文字列」「開始位置」「長さ」の順です。
開始位置は 1〜です。範囲外の部分は空の文字列になります。
長さは、正か負の値です。負の場合、-1 で文字列の終端までになります。省略した場合、1 になります。
引数は、「文字列」「開始位置」「長さ」の順です。
開始位置は 1〜です。範囲外の部分は空の文字列になります。
長さは、正か負の値です。負の場合、-1 で文字列の終端までになります。省略した場合、1 になります。
%substr test1 "123456", 3 %substr test2 "123456", 4,2 %substr test3 "123456", 2,-2 %substr test4 "123456", 6,2 test1 ; '3' test2 ; '45' test3 ; '2345' test4 ; '6' (終端まで)
標準マクロ
NASM によって、標準で定義されているマクロがいくつかあります。
ver 2.15 より前は __FOO__ という形式でしたが、現在は __?FOO?__ という形式になっています。
以前のバージョンとの互換性を保つため、以前の形式でのエイリアスも定義されています。
標準マクロのうち、よく使用しそうなものだけ紹介します。
ver 2.15 より前は __FOO__ という形式でしたが、現在は __?FOO?__ という形式になっています。
以前のバージョンとの互換性を保つため、以前の形式でのエイリアスも定義されています。
標準マクロのうち、よく使用しそうなものだけ紹介します。
__?NASM_MAJOR?__ | NASM のメジャーバージョン |
---|---|
__?NASM_MINOR?__ | マイナーバージョン |
__?NASM_SUBMINOR?__ | サブマイナーバージョン |
__?NASM_PATCHLEVEL?__ | パッチレベル |
__?NASM_VER?__ | NASM バージョンを示す文字列 |
__?NASM_VERSION_ID?__ | NASM のバージョンを示す 32bit 整数。 __?NASM_MAJOR?__ __?NASM_MINOR?__ __?NASM_SUBMINOR?__ __?NASM_PATCHLEVEL?__ 上記の4つのバイト値を、上位バイトから順に連結する。 |
__?FILE?__ | 現在の入力ファイル名の文字列 |
__?LINE?__ | 現在位置の行番号 |
__?OUTPUT_FORMAT?__ | 出力フォーマット (文字列ではない) |
__?NASM_MAJOR?__ ; 2 __?NASM_MINOR?__ ; 16 __?NASM_SUBMINOR?__ ; 1 __?NASM_PATCHLEVEL?__ ; 0 __?NASM_VER?__ ; "2.16.01" __?NASM_VERSION_ID?__ ; 002100100h __?FILE?__ ; 'test.asm' __?LINE?__ ; 8 __?OUTPUT_FORMAT?__ ; elf64