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

Вложенность директив условной трансляции

Как мы неоднократно видели в приведенных ранее примерах, транслятор ТASM допускает вложенность условных директив компиляции. Более того, так как вложенность требуется довольно часто, TASM предоставляет набор дополнительных директив формата ELSEIFxxx, которые заменяют последовательность идущих подряд директив ELSE и IFxxx в структуре

IFxxx

ELSE

IFxxx

ENDIF

ENDIF

Эту последовательность условных директив можно заменить эквивалентной последовательностью дополнительных директив

IFxxx

ELSEIFxxx

ENDIF

Символы ххх в ELSExxx говорят о том, что каждая из директив — IF, IFB, IFIDN и т. д. — имеет соответствующую директиву ELSEIF, ELSEIFB, ELSEIFIDN и т. д. В конечном итоге это улучшает читабельность кода. В последнем примере фрагмента макроса, проверяющем, имя какого регистра было передано в макрос, наблюдается подобная ситуация. Последовательности ELSE и IFDIFI можно записать так, как в строке 4:

Show macro rg

ifdifi <al>, <rg>

goto M_al

elseifdifi <ah>, <rg>

goto M_ah

else

exitm

endif

:M_al

:M_ah

endm

Директивы генерации ошибок

В языке TASM есть ряд директив, называемыхдирективами генерации пользовательской ошибки. Их можно рассматривать и как самостоятельное средство, и как метод, расширяющий возможности директив условной компиляции. Они предназначены для обнаружения различных ошибок в программе, таких как неопределенные метки или пропуск параметров макроса. Директивы генерации пользовательской ошибки по принципу работы можно разделить на два типа:

1. безусловные директивы генерируют ошибку трансляции без проверки каких-либо условий;

2. условные директивы генерируют ошибку трансляции после проверки определенных условий.

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

Безусловная генерация пользовательской ошибки

К директивам безусловной генерации пользовательской ошибки относится только одна директива ERR (. ERR).

Данная директива, будучи вставлена в текст программы, безусловно приводит к генерации ошибки на этапе трансляции и удалению объектного модуля. Она очень полезна при использовании с директивами условной компиляции и при включении в тело макрокоманды с целью отладки. К примеру, эту директиву можно было бы вставить в ту ветвь программы (в последнем рассмотренном нами макроопре делении), которая выполняется, если указанный в качестве аргумента регистр отличен от al и ah:

show

ifdifi

goto

else

ifdifi

goto

else

. Err

endif

endif

macro rg

M_al'

<ah>, <rg>

M_ah

endm

Если после определенного таким образом макроопределения в сегменте кода вызвать макрокоманду show с фактическим параметром, отличным от имен регистров ah или al, будет сгенерирована ошибка компиляции (с текстом «User error »), сам процесс компиляции прекращен и, естественно, объектный модуль создан не будет.

Остальные директивы являютсяусловными, так как их поведение определяют некоторые условия.