Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
120
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

2.5.Директивы условной трансляции

Для управления трансляцией существуют директивы выбора транс­лируемого текста в зависимости от выполнения тех или иных условий. Эти директивы составные, то есть могут состоять из двух или трех строк. В первой строке оператора формулируется условие трансляции следую­щего за ним текста. Здесь он приведен в условном виде из-за большого количества разновидностей открывающего оператора директивы условной трансляции. Все эти разновидности будут описаны далее. Вторая строка оператора используется для обозначения начала текста, который трансли­руется при несоблюдении условия. Если альтернативного текста нет, то этот оператор не нужен. Последняя строка закрывает директиву условной трансляции.

•IF условие

/'транслируется при соблюдении условия

.ELSE

/'транслируется при несоблюдении условия

.ENDIF

Синонимом закрывающей строки условного оператора является ENDC. Допускается вложение директив условной трансляции (до 248 уровней). Транслятор проверяет соответствие пар открывающих и закрывающих строк. В случае отсутствия парности он выдает сообщение об ошибке. В составе открывающих строк директив условной трансляции имеется не только множество синонимов, но и большое количество антонимов (мнемокодов с противоположным условием).

Начнем с директив, проверяющих числовое значение выражения, записанного в поле операнда.

.IFNZ значение

Условием выполнения приведенного мнемокода является неравенство операнда 0. Синонимами этой директивы являются IF, IFN и COND. Антоним этой директивы проверяет равенство операнда 0.

.IFZ значение

синонимом которой является IFE.

Аналогичные директивы проверяют истинность логических выражений, сравнивающих числа.

.IFTRUE сравнение

Условием выполнения приведенного мнемокода является истинность логического выражения. Синонимом этой директивы является IFNFALSE. Данная директива фактически является эквивалентом IFNZ. Антонимом директивы IFTRUE является директива .IFFALSE сравнение

Условием выполнения ее мнемокода является ложность выражения. Синоним этой директивы IFNTRUE. Данная директива фактически является эквивалентом IFZ.

Есть директивы с поверкой совпадения строк, заданных первым и вторым операндами.

.IFSAME строка1,строка2

Условием выполнения приведенного мнемокода является идентичность строк. Синонимом этой директивы является IFNDIFF. Если строка содержит пробелы, то она должна быть заключена в кавычки. Антоним этой директивы проверяет отсутствие идентичности строк.

.IFNSAME строка1, строка2

Синонимом этой директивы является IFDIFF.

Имеются директивы, проверяющие операнд на совпадение с каким-либо именем в таблице программных объектов, которую составляет

транслятор. Условием выполнения приведенного мнемокода является наличие операнда этой директивы в таблице имен.

.IFDEF имя

Антонимом этой директивы является IFNDEF. Поскольку имена в таблице могут быть внешними и внутренними, существует директива проверки принадлежности операнда к внешним именам

.IFEXT имя

Антонимом этой директивы является IFNEXT. Если в директивах проверки внешних меток условие не выполнено, то транслятор выдает сообщение об ошибке.

При наличии имени в таблице программных объектов может потре­боваться проверить, является ли адрес этого имени абсолютным или относительным: . ifrel имя-Условием выполнения приведенного мнемокода является наличие пере­мещаемого адреса для заданного имени. Синонимом этой директивы является IFNABS. Внешние метки являются перемещаемыми, поэтому при использовании в качестве операнда внешнего имени условие считается выполненным. Проверка наличия абсолютного адреса для заданного имени осуществляется директивой

.IFABS

ИМЯ-СИНОНИМОМ этой директивы является IFNREL. Если в этой директиве используется операнд, соответствующий внешнему имени, то условие считается невыполненным. По невыполнению условий двух этих директив транслятор также выдает сообщение об ошибке. Выдача ошибки при неправильном определении внешнего имени или связанного с ним адреса нужна потому, что компоновка объектного модуля в этом случае приве­дет к ошибкам в машинном коде.

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