Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция 8 / Лекция 8.doc
Скачиваний:
24
Добавлен:
10.06.2015
Размер:
223.74 Кб
Скачать

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

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

IFxxx

;…

ELSE

IFxxx

;…

ENDIF

ENDIF

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

IFxxx

;…

ELSEIFxxx

;…

ENDIF

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

<1> showmacro rg

<2> ifdifi <al>,<rg>

<3> goto M_al

<4> else ifdifi <ah>,<rg>

<S> goto M_ah

<6> else

<7> exitm

<8> endif

<9> :M_al

<10>…

<11>:M_ah

<12>…

<13> endm

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

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

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

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

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

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

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

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

show macro rg

ifdifi <al>,<rg>

goto M_al

else

ifdifi <ah>,<rg>

goto M_ah

else

.Err

endif

endif

endm

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

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

Соседние файлы в папке Лекция 8