Turbo Assembler 3.0. Руководство пользователя

Директива условного ассемблирования IFxxx


Вы можете использовать директиву условного ассемблирования IFxxx для определения блока кода, который включается в объектный файл при удовлетворении определенных условий (таких как определе- ние идентификатора или установка какого-то значения). Приведем синтаксис оператора условного ассемблирования:

IFxxx тело_условия_true EMDIF

или IFxxx тело_условия_true ELSE тело_условия_false ENDIF

где IFxxx представляет следующие директивы:

IF IF1 IF2 IFDEF IFNDEF IFB IFNB IFIDN IFIDNI IFDIF IFDIFI

Каждая директива условного ассемблирования IFxxx задает конкретное условие, при вычислении которого получается истинное (true) или ложное (false) значение. Если условие имеет значение true, то выполняется ассемблирование и помещение в объектный файл блока ассемблируемого кода "тело_условия_true". Если при вычисле- нии условия получается значение false, то Турбо Ассемблер пропус- кает "тело_условия_true" и не включает его в объектный файл. При наличие директивы ELSE, если условие имеет значение false, то ас- семблируется и выводится в объектный файл блок "тело_усло- вия_false". Если условие имеет значение true, то этот блок игно- рируется. Условный блок завершается директивой ENDIF.

Кроме особых случаев директив IF1 и IF2 (которые мы обсудим позднее) два описанных блока кода являются взаимноисключающими: в объектный файл включается либо "тело_условия_true", либо "тело_ условия_false", но не оба блока одновременно. Кроме того, если вы используете форму IFxxx.ELSE.ENDIF, один из блоков будет обя- зательно включаться в объектный файл. Если используется форма IFxxx.ENDIF, то "тело_условия_true" может включаться или не включаться в объектный файл, в зависимости от условия.

При использовании вложенных директив IF и ELSE директива ELSE всегда соответствует ближайшей директиве IF.

В следующем примере test является идентификатором, который управляет включением кода (если идентификатор не определен, то генерируется соответствующий блок кода) Идентификатор color уста- навливается в ненулевое значение, если дисплей цветной, и равен 0, если дисплей монохромный.


От этих значений зависит фактическая генерация кода:

. . . IFDEF test ; true, если test определен ; первая часть блока кода ; если test определен IF color ; true, если color <> 0 ; блок кода color ; если color <> 0 ELSE ; ; код для монохромного ; дисплея если color = 0 ENDIF ; ; вторая часть блока кода ; если test определен ELSE ; ; другой код ; если test не определен ENDIF . . .

-------------T----------T-----------T--------------T------------¬ ¦ test ¦определен ¦ определен ¦ не определен ¦не определен¦ ¦ color ¦ 0 ¦ не 0 ¦ 0 ¦ не 0 ¦ +------------+----------+-----------+--------------+------------+ ¦ код ¦ блок кода¦ блок кода ¦ другой код ¦другой код ¦ ¦ ¦ 1 ¦ 1 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦цветной/моно¦ блок кода¦ блок кода ¦ блок кода ¦ ¦ ¦ ¦ color ¦ 2 ¦ 2 ¦ ¦ L------------+----------+-----------+--------------+-------------

Если идентификатор test не определен,то не ассемблируется ни код для цветного дисплея (color), ни для монохромного, поскольку все это включено в блок условного ассемблирования, который ас- семблируется только при определенном идентификаторе test.


Содержание раздела