- •Макродирективы
- •Директивы while и rept
- •Директива irp
- •Директива irpc
- •Директивы условной компиляции
- •Директивы компиляции по условию
- •Директивы if и ife
- •Директивы ifdef и ifndef
- •Директивы ifb и ifnb
- •Директивы ifidn, ifidni, ifdif и ifdifi
- •Вложенность директив условной трансляции
- •Директивы генерации ошибок
- •Безусловная генерация пользовательской ошибки
- •Условная генерация пользовательской ошибки
- •Директивы . Errb (errifb)и . Errnb (errifnb)
- •Директивы . Errdef (errifdef)и . Errndef (errifndef)
- •Директивы . Errdif (errifdif)и . Erridn (errifidn)
- •Директивы . Erre (errife)и . Errnz (errif)
- •Константные выражения в условных директивах
- •Дополнительные средства управления трансляцией
- •Директивы управления файлом листинга
Директивы . Erre (errife)и . Errnz (errif)
Синтаксис директив .ERRE (ERRIFE) и .ERRNZ (ERRIF):
.ERRE (ERRIFE)константное_выражение
.ERRNZ (ERRIF)константное_выражение
Директива . ERRE (ERRIFE)вызывает пользовательскую ошибку, если константное выражение ложно (равно нулю). Вычисление константного выражения должно приводить к абсолютному значению, и это выражение не может содержать ссылок вперед.
Директива . ERRNZ(ERRIF) вызывает пользовательскую ошибку, если константное выражение истинно (не равно нулю). Вычисление константного выражения должно приводить к абсолютному значению и не может содержать ссылок вперед.
Константные выражения в условных директивах
Во многих условных директивах в формировании условия участвуют выражения. Результат вычисления этого выражения обязательно должен быть константой. Хотя его компонентами могут быть и символические параметры, но их сочетание в выражении должно давать абсолютный результат.
Кроме того, константное выражение не должно содержать компоненты, которые транслятор еще не обработал к тому месту программы, где находится условная директива. Также мы отметили, что логические результаты «истина » и «ложь» являются условными в том смысле, что ноль соответствует логическому результату «ложь », а любое ненулевое значение — «истине ». Однако в языке ассемблера существуют операторы, которые позволяют сформировать и «чисто логический» результат. Это так называемые операторы отношений, выражающие отношение двух значений или константных выражений. В контексте условных директив вместе с операторами отношений можно рассматривать и логические операторы.
Результатом работы тех и других может быть одно из двух значений:
истина — число, которое содержит двоичные единицы во всех разрядах;
ложь — число, которое содержит двоичные нули во всех разрядах.
Операторы, которые можно применять в выражениях условных директив и ко-
торые формируют логические результаты, приведены в табл. 14. 1 и 14. 2.
Оператор отношения
EQ (equal)— равно
NE (not equal)— не равно
LT (less than)— меньше
LE (less or equal)— меньше или равно
GT (greater than)- больше
GE (greater or equal)— больше или равно
Синтаксис
выражение_1 EQ выражение_2
выражение_1 NE выражение_2
выражение_1 LT выражение_2
выражение_1 LE выражение 2
выражение_1 GT выражение_2
выражение_1 GE выражение_2
Результат
Истина, если выражение_1 равно выражение_2
Истина, если выражение_1 не равно выражение_2
Истина, если выражение_1 меньше выражение_2
Истина, если выражение_1 меньше или равно выражение 2
Истина, если выражение_1 больше выражение_2
Истина, если выражение_1 больше или равно выражение_2
Логический оператор
NOT — логическое отрицание
AND — логическое И
OR — логическое ИЛИ
XOR — исключающее ИЛИ
Синтаксис
NOT выражение
выражение_1 AND выражение_2
выражение_1 OR выражение 2
выражение_1 XOR выражение_2
Дополнительные средства управления трансляцией
ТASM предоставляет средства для вывода текстового сообщения во время трансляции программы — директивы DISPLAY и %OUT. С их помощью можно при необходимости следить за ходом трансляции. К примеру,
display “недопустимые аргументы макрокоманды”
%out “недопустимое имя регистра”
В результате обработки этих директив на экран (стандартный выход) будут выведены тексты сообщений. Если эти директивы использовать совместно с директивами условной компиляции, то, к примеру, можно отслеживать путь, по которому осуществляется трансляция исходного текста программы.