Константные выражения в условных директивах
Как вы успели заметить, во многих условных директивах в формировании условия участвуют выражения. Результат вычисления этого выражения обязательно должен быть константой. Хотя его компонентами могут быть и символические параметры, но их сочетание в выражении должно давать абсолютный результат.
К примеру:
| .datamas db ...len dd .......code....erre (len-mas) lt 10 ;генерация ошибки, если длина ;области mas меньше 10 байт... |
Кроме того, выражение не должно содержать компоненты, которые транслятор еще не обработал к тому месту программы, где находится условная директива.
Также мы отметили, что логические результаты “истина” и “ложь” являются условными в том смысле, что ноль соответствует логическому результату “ложь”, а любое ненулевое значение — “истине”.
Но в языке ассемблера существуют операторы, которые позволяют сформировать и “чисто логический” результат. Это так называемые операторы отношений, выражающие отношение двух значений или константных выражений.
В контексте условных директив вместе с операторами отношений можно рассматривать и логические операторы. Результатом работы и тех, и других может быть одно из двух значений:
- истина — число, которое содержит двоичные единицы во всех разрядах;
- ложь — число, которое содержит двоичные нули во всех разрядах.
Операторы, которые можно применять в выражениях условных директив и которые формируют логические результаты, приведены в табл. 1 и 2.
Таблица 1. Операторы отношений
| Оператор/ | Синтаксис | Результат отношения |
| EQ (equal) — равно | выражение_1 EQ выражение_2 | истина — если выражение_1 равно выражение_2 |
| NE (not equal) — не равно | Выражение_1 NE выражение_2 | Истина — если выражение_1 не равно выражение_2 |
| LT (less than) — меньше | Выражение_1 LT выражение_2 | Истина — если выражение_1 меньше выражение_2 |
| LE (less or equal) — меньше или равно | Выражение_1 LE выражение_2 | Истина — если выражение_1 меньше или равно выражение_2 |
| GT (greater than) — больше | Выражение_1 GT выражение_2 | Истина — если выражение_1 больше выражение_2 |
| GE (greater or equal) — больше или равно | Выражение_1 GE выражение_2 | Истина — если выражение_1 больше или равно выражение_2 |
Таблица 2. Логические операторы
| Оператор | Синтаксис | Результат |
| NOT — логическое отрицание | NOT выражение | Истина — если выражение ложно; ложь — если выражение истинно |
| AND — логическое И | выражение_1 AND выражение_2 | Истина — если выражение_1 и выражение_2 истинны |
| OR — логическое ИЛИ | выражение_1 OR выражение_2 | Истина — если выражение_1 или выражение_2 истинны |
| XOR — исключающее ИЛИ | выражение_1 XOR выражение_2 | Истина — если выражение_1 = (NOT выражение_2) |
Дополнительное управление трансляцией
TASM предоставляет средства для вывода текстового сообщения во время трансляции программы — директивы DISPLAY и %OUT. С их помощью можно, при необходимости, следить за ходом трансляции.
К примеру:
| display недопустимые аргументы макрокоманды...%out недопустимое имя регистра |
В результате обработки этих директив на экран будут выведены тексты сообщений. Если эти директивы использовать совместно с директивами условной компиляции, то, к примеру, можно отслеживать путь, по которому осуществляется трансляция исходного текста программы.
Самостоятельная работа. Опции транслятора TASM и редактора связей TLINK
В данном документе приведены опции командной строки:
- для транслятора Turbo Assembler фирмы Borland (TASM) (версия 3.0 и выше);
- редактора связей TLINK.
Во избежание несовместимости используйте программы TLINK и TASM одной версии.
Опции транслятора TASM
| /a, /s | /a — сегменты в объектном файле должны быть размещены в алфавитном порядке; /s — сегменты в объектном файле следуют в порядке их описания в программе |
| /c | Указание на включение в файл листинга с информацией о перекрестных ссылках |
| /dимя_иденти- фикатора[=значение] | Определяет идентификатор. Это эквивалент директивы ассемблера =, как если бы она была записана в начале исходного текста программы |
| /e, /r | /e — генерация инструкций эмуляции операций с плавающей точкой; /r — разрешение трансляции действительных инструкций с плавающей точкой, которые должны выполняться реальным арифметическим сопроцессором |
| /h, /? | Вывод на экран справочной информации. Это эквивалентно запуску TASM без параметров |
| /iпуть | Задает путь к включаемому по директиве INCLUDE файлу. Синтаксис аргумента “путь” такой же, как для команды PATH файла autoexec.bat |
| /jдиректива_TASM | Определяет директивы, которые будут транслироваться перед началом трансляции исходного файла программы на ассемблере. В директиве не должно быть аргументов |
| /khn | Задает максимальное количество идентификаторов, которое может содержать исходная программа, то есть фактически задается размер таблицы символов транслятора. По умолчанию программа может содержать до 16384 идентификаторов. Это значение можно увеличить (но не более чем до 32 768) или уменьшить до n. Сигналом к тому, что необходимо использовать данный параметр, служит появление сообщения “Out of hash space” (“Буферное пространство исчерпано”) |
| /l, /la | /l — указывает на необходимость создания файла листинга, даже если он не “заказывается” в командной строке; /la — показать в листинге код, вставляемый транслятором для организации интерфейса с языком высокого уровня по директиве MODEL |
| /ml, /mx, /mu | /ml — различать во всех идентификаторах прописные и строчные буквы; /mx — различать строчные и прописные символы во внешних и общих идентификаторах. Это важно при компоновке с программами на тех языках высокого уровня, в которых строчные и прописные символы в идентификаторах различаются; /mu — воспринимать все символы идентификаторов как прописные |
| /mvn | Определение максимальной длины идентификаторов. Минимальное значение n равно 12 |
| /mn | Установка количества (n) проходов транслятора TASM. По умолчанию транслятор выполняет один проход. Максимально при необходимости можно задать выполнение до 5 проходов |
| /n | Не выдавать в файле листинга таблицы идентификаторов (в таких таблицах содержатся все имена идентификаторов и их значения) |
| /os, /o, /op, /oi | Генерация оверлейного кода |
| /p | Проверять наличие кода с побочными эффектами при работе в защищенном режиме |
| /q | Удаление из объектной программы лишней информации, ненужной на этапе компоновки |
| /t | Подавление вывода всех сообщений при условном ассемблировании, кроме сообщений об ошибках (то есть тестирование программы на предмет выявления синтаксических ошибок) |
| /w0, /w1, /w2 | Генерация предупреждающих сообщений разного уровня полноты: w0 — сообщения не генерируются; w1, w2 — сообщения генерируются |
| /w-xxx, /w+xxx | Генерация предупреждающих сообщений класса xxx (эти же функции выполняют директивы WARN и NOWARN). Знак “-” означает “запретить генерацию сообщений класса xxx”. Знак “+” означает “разрешить генерацию сообщений класса xxx”. Классы предупреждающех сообщений обозначаются идентификатором из трех символов: ALN — выравнивание сегмента в памяти; ASS — подразумевается использование 16-разрядного сегмента; BRK — требуются квадратные скобки; ICG — неэффективная генерация кода; LCO — переполнение счетчика адреса; OPI — открытый блок условия IF; OPP — открытая процедура; OPS — открытый сегмент; OVF — арифметическое переполнение; PDC — конструкция, зависящая от прохода; PRO — запись в память в защищенном режиме требует переопределения регистра CS. Использование этого класса предупреждений имеет смысл при написании программ, работающих в защищенном режиме (под Windows). На уроке 16 обсуждался момент, связанный с тем, что в защищенном режиме запрещено производить запись в сегмент кода. Класс предупреждений PRO призван уже на стадии трансляции программы предупредить такого рода ошибки; RES — предупреждение о резервируемом слове; TPI — предупреждение о недопустимости в Turbo Pascal; /W+ — разрешить все сообщения; /W– — запретить все сообщения |
| /x | Включить в листинг все блоки условного ассемблирования для директив IF, IFNDEF, IFDEF и т. п., в том числе и невыполняющиеся |
| /z | При возникновении ошибок наряду с сообщением о них выводить соответствующие строки текста |
| /zi, /zd, /zn | /zi — включить в объектный файл информацию для отладки; /zd — поместить в объектный файл информацию о номерах строк, что необходимо для работы отладчика на уровне исходного текста программы; /zn — запретить помещение в объектный файл отладочной информации. |
Дата добавления: 2019-09-13; просмотров: 192; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
