Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

asm / Макродирективы

.pdf
Скачиваний:
31
Добавлен:
25.03.2015
Размер:
299.32 Кб
Скачать

11

логический» результат. Это так называемые операторы отношений, выражающие отношение двух значений или константных выражений. В контексте условных директив вместе с операторами отношений можно рассматривать и логические операторы.

Результатом работы тех и других может быть одно из двух значений: истина — число, которое содержит двоичные единицы во всех разрядах; ложь — число, которое содержит двоичные нули во всех разрядах.

Операторы, которые можно применять в выражениях условных директив и которые формируют логические результаты, приведены в табл. 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 “недопустимое имя регистра”

В результате обработки этих директив на экран (стандартный выход) будут выведены тексты сообщений. Если эти директивы использовать совместно с директивами условной компиляции, то, к примеру, можно отслеживать путь, по которому осуществляется трансляция исходного текста программы.

Директивы управления файлом листинга

Ассемблер предоставляет ряд директив для управления содержимым файла листинга.

12

Общие директивы управления листингом призваны управлять видом файла листинга. Все директивы являются парными, это означает, что если одна директива что-то разрешает, то другая, наоборот, запрещает.

Директивы %LIST и %NOLIST (.LIST и .XLIST) определяют необходимость вывода в файл листинга всех строк исходного кода (по умолчанию).

Для запрета вывода в файл листинга всех строк исходного кода необходимо использовать директивы .XLIST или %NOLIST. В тексте программы их можно применять произвольное количество раз, при этом очередная директива отменяет действие предыдущей.

Директивы %CTLS и %NOCTLS управляют выводом в файл листинга самих директив управления листингом, в то время как директивы %LIST и %NOLIST (. LIST и . XLIST) влияют на полноту представления исходного кода в целом.

Директивы %SYMS и %NOSYMS определяют включение (%SYMS) или не включение (%NOSYMS)таблицы идентификаторов в файл листинга.

Директивы вывода текста включаемых файлов %INCL и %NOINCL регулируют включе-

ние в файл листинга текста включаемых файлов (по директиве INCLUDE). По умолчанию включаемые файлы записываются в файл листинга. Директива %NOINCL запрещает вывод в файл листинга всех последующих включаемых файлов, пока вывод снова не будет разрешен директивой

%INCL.

Директивы вывода блоков условного ассемблирования регулируют включение блоков ус-

ловной компиляции в листинг программы.

Директива %CONDS (. LFCOND)заставляет ассемблер выводить в файл листинга все операторы условных блоков (в том числе с условием false). Директива %NOCONDS (.SFCONDS)запрещает вывод в файл листинга блоков условного ассемблирования с условием false.

Директива . TFCOND переключает режимы вывода %CONDS (. LFCOND) и %NOCONDS (.SFCONDS). Эту директиву можно использовать как отдельно, так и совместно с директивами . LFCOND и . SFCONDS. Первая директива . TFCOND, которую обнаруживает TASM, разрешает вывод в файл листинга всех блоков условного ассемблирования. Следующая директива . TFCOND запретит вывод этих блоков. С директивой . TFCOND можно использовать ключ /х командной строки транслятора TASM — в этом случае блоки условного ассемблирования будут сначала выводиться в файл листинга, но первая же директива . TFCOND запретит их вывод.

Директивы вывода макрорасширений, как явствует из названия, управляют выводом макрорасширений:

Директива %MACS (. LALL)разрешает вывод в файл листинга всех макрорасширений. Директива %NOMACS (. SAIL)запрещает вывод всех операторов макрорасширения в файл

листинга.

В трансляторе MASM можно использовать директиву . XALL, позволяющую выводить в листинг только те макрорасширения, которые генерируют код или данные.

Итоги

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

Макросредства — это основные инструменты модификации текста программы на этапе ее трансляции. Принцип работы макросредств основан на препроцессорной обработке, которая заключается в том, что текст, поступающий на вход транслятора, перед собственно компиляцией подвергается преобразованию и может значительно отличаться от синтаксически правильного текста, воспринимаемого компилятором. Роль препроцессора в трансляторе TASM выполняет макрогенератор.

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

Псевдооператоры EQU и =предназначены для присвоения некоторому выражению символического имени или идентификатора. Эти действия выполняет макрогенератор, заменяя в после-

13

дующем тексте программы символические имена из правой части этих операторов строками из левой.

Макрокоманда — строка в исходной программе, которой соответствует специальный блок

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

Условные директивы компиляции позволяют не просто модифицировать отдельные строки программы, но и, исходя из определенных условий, управлять включением в загрузочный модуль отдельных фрагментов программы. Эти директивы наиболее эффективны для работы с аргументами, передаваемыми при макрогенерации в макроопределения из макрокоманд, хотя отдельные директивы есть смысл применять и вне макроопределений в любом месте программы.

Директивы генерации ошибок, подобно условным директивам, позволяют анализировать определенные условия в процессе трансляции программы и генерировать ошибку по результатам анализа.

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