Лекция: Директивы языка
Директивы языка – это ассемблерные команды, которые встречаются в исходном коде, но не транслируются прямо в исполняемые коды. Они используются ассемблером при трактовке мнемоники входного файла, размещении данных и формировании файла листинга.
Существует четыре основных типа директив в MPASM:
- директивы данных;
- директивы листинга;
- управляющие директивы;
- макро-директивы.
Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.
Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом.
Директивы управления позволяют произвести секционирование обычного ассемблерного кода.
Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.
Ниже приводится описание некоторых директив ассемблера MPASM, используемых в данном учебном пособии.
CODE – начало секции объектного кода
Синтаксис:
Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа code. Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан.
Пример:
#DEFINE – определить метку замены текста
Синтаксис:
Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте.
Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU.
Пример
END – конец программного блока
Синтаксис:
Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга.
Пример:
EQU – определить ассемблерную константу
Синтаксис:
Здесь <expr> – это правильное MPASM выражение. Значение выражения присваивается метке <label>.
Пример:
INCLUDE – включить дополнительный файл источника
Синтаксис:
Определяемый файл считывается как источник кода. По окончании включаемого файла будет продолжаться ассемблирование исходника. Допускается до шести уровней вложенности. <include_file> может быть заключен в кавычки или угловые скобки. Если указан полный путь к файлу, то поиск будет происходить только по этому пути. В противном случае порядок поиска следующий: текущий рабочий каталог, каталог, в котором находится исходник, каталог MPASM.
Пример:
LIST – установить параметры листинга
Синтаксис:
Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл. 6.5.
| Таблица 6.5. Параметры, используемые директивой list. | ||
| Параметр | Значение по умолчанию | Описание |
| C=nnn | Количество символов в строке | |
| n=nnn | Количество строк на странице | |
| t=ON|OFF | OFF | Укорачивать строки листинга |
| p=<type> | None | Установить тип процессора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 и др. |
| r=<radix> | HEX | Установить систему счисления по умолчанию: hex, dec, oct. |
| w=<level> | Установить уровень сообщений диагностики в файле листинга: 0 – выводить все сообщения; 1 – выводить предупреждения и ошибки; 2 – выводить только ошибки. | |
| x=ON|OFF | OFF | Включить или выключить макрорасширения. |
NOLIST – выключить выход листинга
Синтаксис:
ORG – установить начальный адрес программы
Синтаксис:
Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, а MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <expr>. По умолчанию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль.
Пример:
PROCESSOR – установить тип процессора
Синтаксис:
Устанавливает тип используемого процессора <processor_type>: [16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Общие процессорные семейства могут быть выбраны как:[16C5X | 16CXX | 17CXX]
Для поддержания совместимости с новыми изделиями выбирается максимум доступной памяти.
SET – определить ассемблерную переменную
Синтаксис:
Директива SET функционально эквивалентна директиве EQU, за исключением того, что величина, определяемая SET, может быть изменена директивой SET.
Пример:
TITLE – Определить программный заголовок
Синтаксис:
Эта директива устанавливает текст, который используется в верхней линии страницы листинга. <title_text> — это печатная ASCII последовательность, заключенная в двойные скобки. Она может быть до 60 символов длиной.
Пример