条件アセンブル

条件アセンブル文を使用すると、条件に応じてソースコードの一部をアセンブル対象から除外できます。C 言語の #if 文や #ifdef 文に相当する機能です。条件アセンブル文は、アセンブル時に条件判断を行います。実行時の条件判定については、「構造化ブロック」を参照してください。

マクロの内部で使用すれば、マクロパラメータに応じてアセンブル対象を選択することができます。また、デバッグ用のコードを条件ブロック内に置いておけば、条件を変更するだけでそのコードをアセンブルするかどうか左右することができます。

条件アセンブルディレクティブは、条件判定を行うコードを生成するのではなく、アセンブル時の条件判定の結果に応じて、生成するコード自体を変更します。このため、条件判定に使用できる情報は、アセンブル時に決定できるものでなければなりません。たとえば、「もしも AX レジスタが 0 ならば」というような情報は実行時でないとわからないので使用することはできません。

条件アセンブルの一般的な構文は次のとおりです。

   ...
[   ...                        ]...
[  ELSE
  <文 3> ...                        ]
  ENDIF

<文 1>には任意の文をいくつでも置くことができます。これらの文は<IF 文など>の条件判定が真の場合にのみアセンブルの対象になります。

<文 2>には任意の文をいくつでも置くことができます。これらの文は直前の<ELSEIF 文など>の条件判定が真の場合にのみアセンブルの対象になります。

<文 3>には任意の文をいくつでも置くことができます。これらの文はこれ以前の条件判定がすべて偽の場合にのみアセンブルの対象になります。

条件判定にはさまざまな種類があり、それぞれに別のディレクティブが割り当てられています。以下ではそれらを順に説明します。条件アセンブルディレクティブには次のものがあります。

0 でなければ真
  • IFE / ELSEIFE
0 ならば真
定義済みの名前ならば真
  • IFNDEF / ELSEIFNDEF
未定義の名前ならば真
  • IFB / ELSEIFB
ブランクであれば真
  • IFNB / ELSEIFNB
ブランクならば真
同じ綴りならば真
  • IFDIF / ELSEIFDIF
異なる綴りならば真
同じ綴りならば真(大小文字区別せず)
  • IFDIFI / ELSEIFDIFI
同じ綴りでなければ真(大小文字区別せず)
  • IF1 / ELSEIF1
パス1ならば真
  • IF2 / ELSEIF2
パス2以上ならば真
これ以前の条件判定がすべて偽ならば真
条件ブロックの終了

[目次]