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

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

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

Здесь могут использоваться все условные псевдооператоры, которые мы уже рассмотрели, а также два дополнительных псевдооператора – IFВ и IFNB.

Псевдооператор IFВ

Псевдооператор IFВ (если пустой). Формат:

IFB < аргумент >

. . .

ENDIF

Действия выполняются, если < аргумент > пуст. Угловые скобки обязательны.

Если Вы указали меньше параметров, чем это сделано при задании макроопределения, то Ассемблер присвоит опущенным (или пустым) параметрам нулевые значения.

Оператор IFB позволяет указать альтернативные спо­собы обработки пустых параметров. Обычно он используется, чтобы заставить макроопределения завершиться раньше в том случае, если какие-либо необходи­мые ему параметры отсутствуют.

Псевдооператор IFNB

Псевдооператор IFNB (если не пустой). Формат:

IFNB < аргумент >

. . .

ENDIF

Действия выполняются, если < аргумент > не пуст. Угловые скобки обязательны.

Когда Ассемблер обнаруживает псевдооператор IFNB, то он транслирует связанные с ним команды только в том случае, если пользователь дал значение параметру; в противном случае он пропускает их.

Пример.

Макроопределение, считывающее имя, отчество и фамилию может быть рассчитано на то, что Вы будете вызывать его следующим образом:

GET_NAME NAME1, NAME2, NAME3

Макроопределение GET_NAME должно включать команды, которые получают соответственно имя, отчество, а затем фамилию. Однако отчество не всегда известно, и поэтому надо предусмотреть возможность его отсутствия.

Это можно сделать с помощью псевдооператора IFNB. Он даст возможность включить команды получения отчества только в том случае, если пользователь задал соответствующий параметр. Следо­вательно, макроопределение GET_NAME должно иметь следующий общий вид:

GET_NAME MACRO NAME1, NAME2, NAME3

. . . (Эти команды считывают имя)

IFNB < NAME2 >

. . . (Эти команды считывают отчество)

ENDIF

. . . (Эти команды считывают фамилию)

ENDM

После этого можно воспользоваться формой операто­ра вида

GET_NAME Джон,, Браун

Псевдооператор IFNB может также помочь избежать ошибок трансляции, которые возникают из-за отсутствия операндов.

Пример.

Пусть макроопределе­ние включает оператор

PUSH register

и при его вызове опускается в списке па­раметров параметр register.

Тогда Ассемблер попытается оттранслировать этот оператор как

PUSH 0

Это, конечно, недопустимо. Чтобы избежать подобных ситуа­ций, используйте операторы

IFNB < register >

PUSH register

ENDIF

Для последующего оператора POP понадобится принять аналогичные предосторожнос­ти.

13.3.4. Псевдооператор eхiтм

Псевдооператор EXITM (выйти из макроопределения) за­ставляет Ассемблер завершить расширение макроопределения до его окончания в зависимости от результата условного псевдооператора.

Пример.

IFB <name>

EXITM

ENDIF

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