Сущность и функции ассемблера
Макроассемблер в общей схеме трансляции программы на TASM. Предназначение псевдооператоров equ и =. Условная генерация пользовательской ошибки. Константные выражения в директивах IFIDN, IFDIF, IFDIFI. Разработка и описание алгоритма на языке ассемблера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | книга |
Язык | русский |
Дата добавления | 18.01.2011 |
Размер файла | 84,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
.ERRB (ERRIFB) и .ERRNB (ERRIFNB)
.ERRDEF (ERRIFDEF) и .ERRNDEF (ERRIFNDEF)
.ERRDIF (ERRIFDIF) и .ERRIDN (ERRIFIDN)
.ERRE (ERRIFE) и .ERRNZ (ERRIF)
Принцип их работы ясен, поэтому рассматривать их мы будем очень кратко. Заметим только, что как и директивы условной компиляции, использовать большинство директив условной генерации пользовательской ошибки можно как в макроопределениях, так и в любом месте программы.
5.3 Директивы ERRB (ERRIFB) и ERRNB (ERRIFNB)
Синтаксис директив:
ERRB (ERRIFB) <имя_формального_аргумента> -- генерация пользовательской ошибки, если <имя_формального_аргумента> пропущено;
ERRNB (ERRIFNB) <имя_формального_аргумента> -- генерация пользовательской ошибки, если <имя_формального_аргумента> присутствует.
Данные директивы применяются для генерации ошибки трансляции в зависимости от того, задан или нет при вызове макрокоманды фактический аргумент, соответствующий формальному аргументу в заголовке макроопределения с именем <имя_формального_аргумента>. По принципу действия эти директивы полностью аналогичны соответствующим директивам условной компиляции IFB и IFNB. Их обычно используют для проверки задания параметров при вызове макроса.
Строка имя_формального_аргумента должна быть заключена в угловые скобки. К примеру, определим обязательность задания фактического аргумента, соответствующего формальному аргументу rg, в макросе show:
<1 show macro rg
<2;если rg в макрокоманде не будет задан,
<3;то завершить компиляцию
<4.errb <rg>
<5;текст макроопределения
<6;...
<7endm
5.4 Директивы ERRDEF (ERRIFDEF) и ERRNDEF (ERRIFNDEF)
Синтаксис директив:
ERRDEF (ERRIFDEF) символическое_имя -- если указанное имя определено до выдачи этой директивы в программе, то генерируется пользовательская ошибка.
ERRNDEF(ERRIFNDEF) символическое_имя -- если указанное символическое_имя не определено до момента обработки транслятором данной директивы, то генерируется пользовательская ошибка.
Данные директивы генерируют ошибку трансляции в зависимости от того, определено или нет некоторое символическое_имя в программе. Не забывайте о том, что компилятор TASM по умолчанию формирует объектный модуль за один проход исходного текста программы. Следовательно, директивы .ERRDEF (ERRIFDEF) и .ERRNDEF (ERRIFNDEF) отслеживают факт определения символического_имени только в той части исходного текста, которая находится до этих директив.
5.5 Директивы ERRDIF (ERRIFDIF) и ERRIDN (ERRIFIDN)
ассемблер директив программа псевдооператор
Синтаксис директив:
ERRDIF (ERRIFDIF) <строка_1>,<строка_2> -- директива, генерирующая пользовательскую ошибку, если две строки посимвольно не совпадают. Строки могут быть символическими именами, числами или выражениями и должны быть заключены в угловые скобки. Аналогично директиве условной компиляции IFDIF, при сравнении учитывается различие прописных и строчных букв.
ERRIDN (ERRIFIDN) <строка_1>,<строка_2> -- директива, генерирующая пользовательскую ошибку, если строки посимвольно идентичны. Строчное и прописное написание одной и той же буквы воспринимается как разные символы.
Для того чтобы игнорировать различия строчных и прописных букв, существуют аналогичные директивы:
ERRIFDIFI <строка_1>,<строка_2> -- то же, что и ERRIFDIF, но игнорируется различие строчных и прописных букв при сравнении <строка_1> и <строка_2>.
ERRIFIDNI <строка_1>,<строка_2> -- то же, что и ERRIFIDN, но игнорируется различие строчных и прописных букв при сравнении <строка_1> и <строка_2>.
Данные директивы, как и соответствующие им директивы условной компиляции, удобно применять для проверки передаваемых в макрос фактических параметров.
5.6 Директивы ERRE (ERRIFE) и ERRNZ (ERRIF)
Синтаксис директив:
ERRE (ERRIFE) константное_выражение -- директива вызывает пользовательскую ошибку, если константное_выражение ложно (равно нулю). Вычисление константного_выражения должно приводить к абсолютному значению, и это выражение не может содержать компонентов, являющихся ссылками вперед.
ERRNZ(ERRIF) константное_выражение -- директива вызывает пользовательскую ошибку, если константное_выражение истинно (не равно нулю). Вычисление константного_выражения должно приводить к абсолютному значению и не может содержать компонентов, являющихся ссылками вперед.
6. Константные выражения в условных директивах
Как вы успели заметить, во многих условных директивах в формировании условия участвуют выражения. Результат вычисления этого выражения обязательно должен быть константой. Хотя его компонентами могут быть и символические параметры, но их сочетание в выражении должно давать абсолютный результат. К примеру:
data
mas 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) |
ассемблер директива программа псевдооператор
6.1 Дополнительное управление трансляцией
TASM предоставляет средства для вывода текстового сообщения во время трансляции программы -- директивы DISPLAY и %OUT. С их помощью можно, при необходимости, следить за ходом трансляции. К примеру:
display недопустимые аргументы макрокоманды
%out недопустимое имя регистра
В результате обработки этих директив на экран будут выведены тексты сообщений. Если эти директивы использовать совместно с директивами условной компиляции, то, к примеру, можно отслеживать путь, по которому осуществляется трансляция исходного текста программы.
Литература
486-й микропроцессор. -- М.: ИВК "Софт", 1993. -- кн.1, с.1-366, кн.2, с.367-512.
Данкан Р. Профессиональная работа в MS-DOS. -- М.: Мир, 1993. -- 509 с.
Пильщиков В.Н. Программирование на языке Ассемблера IBM PC. -- М.: ДИАЛОГ-МИФИ,1994. -- 288 с.
Сван Т. Освоение Turbo Assembler. -- К.: Диалектика, 1996. -- 544 с.
Размещено на Allbest.ru
Подобные документы
Процесс трансляции программы на языке ассемблера в объектный код. Разработка интерфейса для взаимодействия и связи программ. Понятие компиляции. Структура модели микропроцессора. Пример структуры двухбайтной команды. Арифметическо-логичесткие операции.
дипломная работа [3,3 M], добавлен 26.11.2012Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.
курсовая работа [90,0 K], добавлен 01.12.2009Структурное программирование, схема алгоритма. Программа на языке Си для int, float. Подпрограмма ввода и вывода целых чисел на Ассемблере IBM. Тестирование и отладка, инструкция пользователя. Язык программирования Си (для int и float), этапы трансляции.
курсовая работа [1,5 M], добавлен 21.10.2014Разработка на языке ассемблера алгоритма контроля, на циклический CRC-код, массива данных хранящегося в некоторой области памяти. Сохранение кода для последующей периодической проверки массива данных. Сообщение об искажении данных. Описание алгоритма.
курсовая работа [453,0 K], добавлен 27.02.2009Разработка гипотетической машины при помощи макросредств ассемблера. Разработка алгоритма для реализации обязательных команд: сравнения двух символьных строк; их обмена; определения длины слова. Основные функции обработки строки, листинг программы.
курсовая работа [59,6 K], добавлен 14.07.2012Исследование арифметических, логических и вспомогательных операций, выполняемых микропроцессором. Построение блок-схемы инициализации резидентной программы и тела резидента. Характеристика основных особенностей написания программы на языке ассемблера.
лабораторная работа [67,8 K], добавлен 20.11.2012Выбор режимов адресации, посредством которых будет осуществлен доступ к данным. Этапы создания программы. Характеристика таблицы символов и полученного файла листинга. Анализ изменения состояния регистра IP при выполнении команд JMP, Jcc, LOOPx.
курсовая работа [4,9 M], добавлен 25.03.2012Изучение основных этапов программирования на ассемблере, который является символическим представлением машинного языка, то есть каждой машинной команде соответствует команда ассемблера. Реализация алгоритма выполнения программы для просмотра bmp файлов.
курсовая работа [248,0 K], добавлен 25.12.2012Особенности ассемблера - машинно-ориентированного языка низкого уровня, применяемого для создания простых приложений. Связывание программ на разных языках. Типичный формат записи команд, инструкции и директивы языка ассемблера. Разработка игры "Змейка".
курсовая работа [215,0 K], добавлен 20.07.2014Программная модель МП с регистр-аккумуляторной архитектурой. Особенности программирования в машинных кодах, мнемокодах и на языке ассемблера. Правила составления схем алгоритмов. Порядок ввода, редактирования, трансляции и отладки прикладных программ.
контрольная работа [266,1 K], добавлен 21.08.2010