Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

12. Условные псевдооператоры

Условные псевдооператоры заставляют Ассемблер либо транслировать, либо пропускать группу исходных операторов в зависимости от того, "истинно" или "ложно" в момент трансляции определенное условие.

Эта избирательная возможность "транслировать/не транслировать" позволяет:

– помещать в текст программы диагностические или специальные условия на случай тестовых прого­нов,

– создавать специфические версии многоцелевой программы.

Для обеспечения условной трансляции порции текста программы необходимо перед ней поставить псевдооператор IF, а после нее –псевдооператор ENDIF.

Если условие в псевдооператоре IF окажется "истинным", то операторы, расположен­ные между IF и ENDIF, будут транслироваться.

Если условие окажется "ложным", то эти операторы будут пропущены и трансляция продолжится с оператора, следующего после ENDIF.

Сгруппируем восемь видов псевдооператора IF в четыре пары.

1. IFE и IF. Формат

IFE выражение

IF выражение

IFE дает значение "истинно", если выражение равно 0;

IF дает значение "истин­но", если выражение не равно 0.

2. IF1 и IF2. Операндов у псевдооператоров нет.

IF1 дает значение "истинно", если Ассемблер выполняет первый проход.

IF2 дает значение "истинно", если Ассемблер выполняет второй проход.

3. IFDEF и IFNDEF. Формат

IFDEF идентификатор

IFNDEF идентификатор

IFDEF дает значение "истинно", если идентификатор определен или объявлен как внешний псевдооператором EXTRN;

IFNDEF дает значение "истинно" в противном случае.

4. IFIDN и IFIDF. Формат

IFIDN < строка1 > < строка2 >

IFIDF < строка1 > < строка2 >

Угловые скобки необходимы.

IFIDN дает значение "истинно", если строки строка1 и строка2 идентичны; IFIDF дает значение "истинно", если они различаются.

Пример.

Для включения диагностических процедур в тестовый прогон окаймите их псевдооператорами IFE и ENDIF и определите константу FOR_TEST_ONLY. Во время трансляции Ассемблер проверит ее значение. Если это значение окажется ненулевым, то диагностические процедуры будут пропущены.

Прог­рамма будет выглядеть следующим образом:

IFE FOR_TEST_ONLY

DIAG1: . . . (Диагностические команды)

ENDIF

Команды между меткой DIAG1 и оператором ENDIF будут оттранслированы только в том случае, если ранее в программу был помещен оператор

FOR_TEST_ONLY = 0

А оператор

FOR_TEST_ONLY = 1

предпишет Ассемблеру пропустить команды, находящиеся между меткой DIAG1 и оператором ENDIF.

Признак альтернативы

Предположим, что условие оказалось "ложным". Альтернативную группу команд можно включить в программу с помощью признака альтернативы ELSE (иначе). В общем случае он имеет следующий формат:

IFxx [аргумент]

. . . (Операторы для "истинного" значения условия)

ELSE

. . . (Операторы для "ложного" значения условия)

ENDIF

Пример.

Признак альтернативы ELSE позволяет создать две версии програм­мы, одна из которых будет выдавать приглашение к вводу и сообщения на анг­лийском языке, а другая – на русском.

Для этого можно определить константу LANGUAGE, которая позволит выбрать операторы, требуемые для соответствую­щего языка. Если ее значение равно 0, то Ассемблер создает английскую версию; если равно 1 – русскую.

Связанный с текстом сообщений раздел программы может иметь следующий вид:

IFE LANGUAGE

. . . (Операторы английской версии)

ELSE

. . . (Операторы русской версии)

ENDIF

Вложенные условные псевдооператоры

Можно определить для Ассемблера более двух вариантов транс­ляции с помощью вложения условных псевдооператоров.

Пример.

Предположим, что русская версия нашей программы действительно заработала. Теперь нужно сделать другие версии, которые выдают сообщения и приглашения к вводу на французском и немецком языках.

Для этого модифицируем программу так, чтобы Ассемблер выбирал язык по значениям 0, 1, 2 и 3 константы LANGUAGE (соответственно английский, русский, французский или немецкий). В этом случае раздел сообщений может иметь следующий вид:

IFE LANGUAGE

. . . (Операторы для выдачи сообщений на английском языке)

ELSE

IFE LANGUAGE–1

. . . (Операторы для выдачи сообщений на русском языке)

ELSE

IFE LANGUAGE–2

. . . (Операторы для выдачи сообщений на французском языке)

ELSE

. . . (Операторы для выдачи сообщений на немецком языке)

ENDIF

ENDIF

ENDIF

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]