Renesas Synergy™

FAQ 1008994 : マクロ命令(Macro Instruction)

マイコンのプログラミング・テクニックのひとつで、アセンブリ言語などで、使用頻度の高い処理プログラムなどに名前を定義して、この名前で記述を簡略化する手法です。マイコンが実行するマシン語(機械語)命令ではなく、それらをまとめた擬似的な命令を定義するので、マクロ(巨視的)命令と呼ばれます。
プログラムのアセンブル時にマクロ命令があると、アセンブラはこれを定義されたマシン語の命令コード列に展開します。まとまった処理を定義する点はサブルーチンに 似ていますが、サブルーチンがマシン語レベルの呼び出しをするのに対し、マクロ命令は個々に命令コードに展開される点が異なります。そのため、サブルーチ ンの使用よりはプログラム・サイズが大きくなりますが、特定の命令列の記述が簡素化でき、処理プログラムの変更が1ヶ所で済むという利点は同じです。



なお、マクロ命令の実行では、スタックのような退避領域が不要で、またその操作や分岐などがないので、サブルーチンの処理よりは実行時間を短縮できます。
また、マクロ命令ではパラメータが定義できるので、パラメータを変更するだけで、類似処理プログラムを容易に定義できます。たとえば、マクロ命令を用いた 78K0Sのシリアル入力のプログラムを次に説明します。ここで、P2.1でシリアル入力ポート(SI)を、P2.2でシリアル・クロック・ポート (SCK)を代用します。SCKを立ち上げてから読み込んだシリアル・データに応じて、Aレジスタの対応するビットをセット(クリア)します。ループさせ ないで処理する記述を簡単にするため、マクロsin1でビットをパラメータbitnoとして定義しておき、このマクロを8回展開し、実行させています。

;
;       シリアル入力処理(マクロ定義)
;
sin1    macro   bitno
        LOCAL   DATAis1
        MOV     P2,#11110011b   ; 6:SCKを立ち下げる
        SET1    P2.2            ; 6:SCKの立ち上げ
        BT      P2.1,$DATAis1   ;10:
        CLR1    A.bitno         ; 2:データが0ならデータを反転
DATAis1:
        endm

;
;       1文字受信
; <機能>
; シリアルからデータを受信する。
;
; <入力パラメータ(引数)> なし
; <戻り値>
; A : 受信データ
;

GETSPI:
        MOV     A,#11111111b    ; 初期値として1を設定
        sin1    7               ; MSBから順に受信処理
        sin1    6
        sin1    5
        sin1    4
        sin1    3
        sin1    2
        sin1    1
        sin1    0               ; 最後にLSBを受信処理
        RET
他にご質問がございましたら、リクエストを送信してください