Everything

.macro


.macro疑似命令と.endm疑似命令の間に記述された一連の文に対し,シンボル欄で指定したマクロ名を付け,マクロを定義します。

[指定形式]

シンボル欄
ニモニック欄
オペランド欄
コメント欄
マクロ名
.macro
   :
マクロ・ボディ
   :
.endm 
[(][仮パラメータ[, ... ]][)]
[; コメント]
 
 
 
[; コメント]

[機能]

-

.macro疑似命令と.endm疑似命令の間に記述された一連の文(マクロ・ボディと呼びます)に対し,シンボル欄で指定したマクロ名を付け,マクロの定義を行います。

[用途]

-

ソース中で,使用頻度の高い一連の文をマクロ定義しておきます。その定義以降では,定義されたマクロ名を記述するだけで,そのマクロ名に対応するマクロ・ボディが展開されます。

[詳細説明]

-

.macro疑似命令には,対応する.endm疑似命令がなければ,エラーとなります。

-

シンボル欄に記述するマクロ名の規則については,「(2) シンボル」を参照してください。

-

マクロを呼び出す場合は,ニモニック欄に定義済みのマクロ名を記述します。マクロ定義より先に参照を行った場合,エラーが出力されます。

-

オペランド欄に記述する仮パラメータの規則については,シンボル記述上の規則と同じです。

-

仮パラメータは,マクロ・ボディ内でのみ有効です。

-

仮パラメータと実パラメータの個数が一致しない場合はエラーが出力されます。

-

仮パラメータの最大数は利用可能なメモリ量に依存します。

-

1つのモジュール内でのマクロ定義の最大数には,特に制限はありません。メモリが使えるかぎり定義することができます。

-

マクロ定義内で現在定義中のマクロの呼び出しを行った場合,エラーが出力されます。

-

マクロ呼び出しにおいて実パラメータに指定可能なものは,ラベル名,シンボル名,数値,レジスタ,および命令ニモニックのみです。
ラベル式(LABEL-1),参照方法指定ラベル(#LABEL),またはベース・レジスタ指定([gp])などを指定した場合,指定された実パラメータに依存したメッセージが出力され,アセンブルが中止されます。

-

マクロ・ボディ内には,文の並びが指定可能です。オペランドなど,文の一部を指定することはできません。

-

マクロ定義中のマクロ・ボディ内で,マクロ定義を記述した場合は,エラーを出力し,処理が継続されます(対応する.endm疑似命令までに記述された内容は無視されます)。そのマクロ名を参照した場合は定義エラーとなります。

-

マクロ定義とマクロ呼び出しのパラメータ記述全体を"()"で囲んだ場合,括弧内で改行が可能になります。
'('と')' はパラメータ全体の先頭,末尾にそれぞれ1回記述可能であり,多重に"()"を使用した場合やパラメータ記述中に'('や')'を使用した場合はエラーになります。
括弧内で改行した行にはそれぞれコメントを記述することができます。それ以外は仮パラメータ,実パラメータの規則に従います。

[使用例]

ADMAC   .macro  PARA1, PARA2    ; (1)
        mov     PARA1, r12
        add     PARA2, r12
        .endm                   ; (2)
 
        ADMAC   0x10, 0x20      ; (3)

(1)

マクロ名“ADMAC”,2つの仮引数“PARA1”,“PARA2”を指定したマクロ定義をしています。

(2)

マクロ定義の終わりを示します。

(3)

マクロADMACを参照しています。

 

パラメータ記述中に改行する場合は次のようになります。

ADMAC .MACRO (PARA1,  ;.MACRO 疑似命令と仮パラメータ1
PARA2)                ;仮パラメータ2とパラメータ記述の終了部分
MOV A, #PARA1
ADD A, #PARA2
.ENDM
 
ADMAC (               ;マクロ呼び出し
0x10,                 ;実パラメータ1
0x20                  ;実パラメータ2
)                     ;パラメータ記述の終了部分