Skip to main content

IAR Embedded Workbench for Arm 9.70.x

マクロ処理ディレクティブ

このセクションの内容:
構文

_args

ENDM

ENDR

EXITM

LOCAL symbol [,symbol] …

name MACRO [argument] [,argument] …

REPT expr

REPTC formal,actual

REPTI formal,actual [,actual] …

パラメータ

actual

置換される文字列。

argument

シンボル引数名。

expr

formal

actual (REPTC)または各actual (REPTI)文字列で置換される引数。

name

マクロの名前

symbol

マクロに対してローカルにするシンボル

説明

これらのディレクティブを使用してマクロを定義できます。式でディレクティブを使用する際に適用される制限については、式の制限を参照してください。

ディレクティブ

説明

式の制限

_args

マクロに受け渡される引数の数に設定されます。

ENDM

マクロ定義を終了します。

ENDR

繰返し構造を終了します。

EXITM

マクロが終了する前に抜け出します。

LOCAL

マクロに対してローカルなシンボルを作成します。

MACRO

マクロを定義します。

REPT

指定回数だけ命令を繰り返します。

前方参照禁止

外部参照禁止

絶対

固定

REPTC

文字を繰り返し、置換します。

REPTI

テキストを繰り返し、置換します。

表151 マクロ処理ディレクティブ  


マクロとは、1行以上のアセンブラソース行のブロックを表現するユーザ定義シンボルです。マクロを定義すると、アセンブラディレクティブやアセンブラニーモニックのようにプログラム内でこのマクロを使用できるようになります。

アセンブラがマクロを検出すると、マクロの定義が検索され、ソースファイルの当該位置にそのマクロが含まれているかのように、マクロに記述されている行が挿入されます。

マクロは単純なテキスト置換を効率的に行います。マクロにパラメータを指定することで、置換対象を制御することができます。

マクロプロセスは、以下の3つのフェーズで構成されます。

  1. アセンブラはマクロ定義をスキャンし、保存します。MACROENDMの間のテキストは保存されますが、構文はチェックされません。インクルードファイルのリファレンス$fileが記録され、マクロの展開時にインクルードされます。

  2. マクロ呼び出しによりアセンブラはマクロプロセッサ(エクスパンダ)を起動します。マクロエクスパンダは、(マクロ内に存在しない場合)ソースファイルからのアセンブラ入力ストリームをマクロエクスパンダからの出力に切り替えます。マクロエクスパンダは、要求されたマクロ定義からの入力を取得します。

    マクロエクスパンダは、ソースレベルでのテキスト置換のみを処理するため、アセンブラシンボルを認識できません。呼び出されたマクロ定義からの行がアセンブラに受け渡される前に、エクスパンダはシンボルマクロ引数のすべてのオカレンスの行をスキャンし、展開引数に置換します。

  3. その後、展開された行は、その他すべてのアセンブラソース行と同様に処理されます。アセンブラへの入力ストリームは、現在のマクロ定義のすべての行が読み込まれるまで、マクロプロセッサからの出力となります。