- •Эрни Каспер Программирование на языке Ассемблера для микроконтроллеров семейства i8051
- •1.Что нужно знать программисту о микроконтроллерах семейства i8051
- •1.1.Общие сведения об архитектуре i8051
- •1.2.Правила записи команд микроконтроллера семейства i8051 на Ассемблере
- •1.3.Форматы и способы адресации данных
- •1.4.Форматы и способы адресации команд
- •1.5.Команды пересылки информации
- •1.6.Команды поразрядной обработки информации
- •1.7.Команды арифметических операций
- •1.8.Управляющие команды
- •2.Директивы ассемблера для микроконтроллеров семейства i8051
- •2.1.Общие понятия о процессах трансляции и компоновки
- •2.2.Обработка имен транслятором и компоновщиком
- •2.3.Директивы резервирования памяти и инициализации данных
- •2.4.Использование выражений в операндах
- •2.5.Директивы условной трансляции
- •2.6.Директивы подстановок
- •2.7.Директивы управления вводом и выводом
- •Глава 3.
- •3.Кросс-средства фирмы 2500 a.D. Software, Inc. Для семейства i8051
- •Глава 4
- •4.Программирование арифметических действий
- •4.1.Кодирование информации в микроконтроллере
- •4.2.Арифметические действия с большими числами
- •4.3.Арифметические действия с отрицательными числами
- •4.4.Контроль точности при программировании арифметических операций
- •Глава 5
- •5.Программирование вычисления функций
- •5.1.Возведение в квадрат и извлечение квадратного корня
- •5.2.Переход от десятичной системы счисления к двоичной и обратно
- •5.3.Вычисление функций при помощи таблиц
- •5.4.Вычисление обратной функции по таблице прямой функции
- •5.5.Компенсация систематических погрешностей при помощи таблиц
- •Глава 6
- •6.Программирование фильтрации сигналов
- •6.1.Особенности цифровой фильтрации сигналов
- •6.2.Программирование простейших фильтров нижних частот
- •6.3.Программирование фильтра для оценки параметров сигнала
- •6.4.Программирование медианного фильтра
- •Глава 7
- •7.Программирование взаимодействия с внешними устройствами
- •7.1.Общие вопросы взаимодействия
- •7.2.Порядок выполнения прерываний в микроконтроллерах семейства i8051.
- •7.3.Синхронизация работы программы внешним или внутренним сигналом
- •7.4.Программирование приема информации от датчиков
- •7.5.Программирование выдачи команд на исполнительные устройства
- •7.6.Программирование ввода и вывода информации для пользователя
- •8.Несколько рекомендаций о стиле программирования
- •8.1.Стиль программирования и использование ресурсов
- •8.2.Оформление исходного текста программы
- •8.3.Системы обозначений, выражения и простые подстановки
- •8.4.Применение подпрограмм и сложных текстовых подстановок
2.5.Директивы условной трансляции
Для управления трансляцией существуют директивы выбора транслируемого текста в зависимости от выполнения тех или иных условий. Эти директивы составные, то есть могут состоять из двух или трех строк. В первой строке оператора формулируется условие трансляции следующего за ним текста. Здесь он приведен в условном виде из-за большого количества разновидностей открывающего оператора директивы условной трансляции. Все эти разновидности будут описаны далее. Вторая строка оператора используется для обозначения начала текста, который транслируется при несоблюдении условия. Если альтернативного текста нет, то этот оператор не нужен. Последняя строка закрывает директиву условной трансляции.
•IF условие
/'транслируется при соблюдении условия
.ELSE
/'транслируется при несоблюдении условия
.ENDIF
Синонимом закрывающей строки условного оператора является ENDC. Допускается вложение директив условной трансляции (до 248 уровней). Транслятор проверяет соответствие пар открывающих и закрывающих строк. В случае отсутствия парности он выдает сообщение об ошибке. В составе открывающих строк директив условной трансляции имеется не только множество синонимов, но и большое количество антонимов (мнемокодов с противоположным условием).
Начнем с директив, проверяющих числовое значение выражения, записанного в поле операнда.
.IFNZ значение
Условием выполнения приведенного мнемокода является неравенство операнда 0. Синонимами этой директивы являются IF, IFN и COND. Антоним этой директивы проверяет равенство операнда 0.
.IFZ значение
синонимом которой является IFE.
Аналогичные директивы проверяют истинность логических выражений, сравнивающих числа.
.IFTRUE сравнение
Условием выполнения приведенного мнемокода является истинность логического выражения. Синонимом этой директивы является IFNFALSE. Данная директива фактически является эквивалентом IFNZ. Антонимом директивы IFTRUE является директива .IFFALSE сравнение
Условием выполнения ее мнемокода является ложность выражения. Синоним этой директивы IFNTRUE. Данная директива фактически является эквивалентом IFZ.
Есть директивы с поверкой совпадения строк, заданных первым и вторым операндами.
.IFSAME строка1,строка2
Условием выполнения приведенного мнемокода является идентичность строк. Синонимом этой директивы является IFNDIFF. Если строка содержит пробелы, то она должна быть заключена в кавычки. Антоним этой директивы проверяет отсутствие идентичности строк.
.IFNSAME строка1, строка2
Синонимом этой директивы является IFDIFF.
Имеются директивы, проверяющие операнд на совпадение с каким-либо именем в таблице программных объектов, которую составляет
транслятор. Условием выполнения приведенного мнемокода является наличие операнда этой директивы в таблице имен.
.IFDEF имя
Антонимом этой директивы является IFNDEF. Поскольку имена в таблице могут быть внешними и внутренними, существует директива проверки принадлежности операнда к внешним именам
.IFEXT имя
Антонимом этой директивы является IFNEXT. Если в директивах проверки внешних меток условие не выполнено, то транслятор выдает сообщение об ошибке.
При наличии имени в таблице программных объектов может потребоваться проверить, является ли адрес этого имени абсолютным или относительным: . ifrel имя-Условием выполнения приведенного мнемокода является наличие перемещаемого адреса для заданного имени. Синонимом этой директивы является IFNABS. Внешние метки являются перемещаемыми, поэтому при использовании в качестве операнда внешнего имени условие считается выполненным. Проверка наличия абсолютного адреса для заданного имени осуществляется директивой
.IFABS
ИМЯ-СИНОНИМОМ этой директивы является IFNREL. Если в этой директиве используется операнд, соответствующий внешнему имени, то условие считается невыполненным. По невыполнению условий двух этих директив транслятор также выдает сообщение об ошибке. Выдача ошибки при неправильном определении внешнего имени или связанного с ним адреса нужна потому, что компоновка объектного модуля в этом случае приведет к ошибкам в машинном коде.
Кроме перечисленных директив условной трансляции существуют директивы аналогичного типа, используемые в сложных текстовых подстановках.