Skip to main content

IAR Embedded Workbench for Arm 9.70.x

条件付きアセンブリディレクティブ

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

ELSE

ELSEIF condition

ENDIF

IF condition

パラメータ

condition

以下のいずれかです。

絶対式

式に、前方参照または外部参照を含めることはできず、ゼロ以外の値はすべて真と見なされます。

string1=string2

string1string2の長さと内容が同じである場合に、この条件は真となります。

string1<>string2

string1string2の長さまたは内容が異なる場合に、この条件は真となります。

説明

アセンブリ時にアセンブリ処理を制御するためにはIFELSE、およびENDIFディレクティブを使用します。IFディレクティブの後の条件が真ではない場合、ELSEまたはENDIFディレクティブが検出されるまで、後続の命令はコードを一切生成しません(つまり、アセンブルも構文チェックも行われません)。

IFディレクティブの後に新しい条件を追加するには、ELSEIFを使用します。条件付きアセンブリディレクティブはアセンブリ内の任意の場所で使用できますが、マクロ処理と一緒に使用すると最も有用です。

(ENDを除く)すべてのアセンブラディレクティブおよびファイルのインクルードは、条件付きディレクティブで無効にできます。各IFディレクティブはENDIFディレクティブで終了する必要があります。ELSE ディレクティブおよびENDIFディレクティブは任意指定であり、使用する場合は、IF...ENDIFブロック内に指定する必要があります。IF...ENDIFブロックとIF...ELSE...ENDIFブロックは、任意のレベルまでネストできます。

この例ではマクロを使用して、レジスタに定数を追加します。

?add        macro   a,b,c
            if      _args == 2
            adds    a,a,#b
            elseif  _args == 3
            adds    a,b,#c
            endif
            endm

            name    addWithMacro
            section MYCODE:CODE(2)
            arm

main        ?add    r1,0xFF         ; This,
            ?add    r1,r1,0xFF      ; and this,
            adds    r1,r1,#0xFF     ; are the same as this.

            end