Комментарии
Поле комментария может использоваться программистом для текстового или символьного пояснения логической организации программы. Поле комментария полностью игнорируется ассемблером, поэтому в нем можно применять любые символы. Комментарии, которые используются в строке сами по себе, должны начинаться с символа комментария (* или ;). Комментарии в конце строки должны быть отделены от остатка строки одним или более пробелами или табуляцией.
Расширения файлов, используемые MPASM и утилитами
Существует ряд расширений файлов, применяемых по умолчанию MPASM и связанными утилитами. Назначения таких расширений приведены в табл. 6.4.
Табл. 6.4. Используемые по умолчанию назначения расширений файлов.
Расширение |
Назначение |
.ASM |
Входной файл ассемблера для MPASM <source_name>.ASM |
.OBJ |
Выходной файл перемещаемого объектного кода из MPASM <source_name>.OBJ |
.LST |
Выходной файл листинга, генерируемый ассемблером MPASM или MPLINK: <source_name>.LST |
.ERR |
Выходной файл ошибок из MPASM: <source_name>.ERR |
.MAP |
Выходной файл распределения памяти из MPASM: <source_name>.MAP |
.HEX |
Выходной файл объектного кода в шестнадцатиричном представлении из MPASM: <source_name).HEX |
.HXL/.HXH |
Выходной файл объектного кода в шестнадцатиричном представлении c раздельным представлением младших и старших байт:<source_name>.HXL, <source_name>.HXH |
.LIB |
Библиотечный файл, созданный MPLIB и привязанный компоновщиком MPLINK:<source_name>.LIB |
.LNK |
Выходной файл компоновщика: <source_name>.LNK |
.COD |
Выходной символьный файл или файл отладчика. Формируются MPASM или MPLINK: <source_name>.COD |
Листинг представляет собой текстовый файл в формате ASCII, который содержит машинные коды, сгенерированные в соответствии с каждой ассемблерной командой, директивой ассемблера или макрокомандой исходного файла. Файл листинга содержит: имя продукта и версии, дату и время, номер страницы вверху каждой страницы.
В состав листинга входят также таблица символов и карта использования памяти. В таблице символов перечисляются все символы, которые есть в программе, и где они определены. Карта использования памяти дает графическое представление о расходовании памяти МК.
Директивы языка
Директивы языка – это ассемблерные команды, которые встречаются в исходном коде, но не транслируются прямо в исполняемые коды. Они используются ассемблером при трактовке мнемоники входного файла, размещении данных и формировании файла листинга.
Существует четыре основных типа директив в MPASM:
- директивы данных;
- директивы листинга;
- управляющие директивы;
- макро-директивы.
Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.
Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом.
Директивы управления позволяют произвести секционирование обычного ассемблерного кода.
Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.
Ниже приводится описание некоторых директив ассемблера MPASM, используемых в данном учебном пособии.
CODE – начало секции объектного кода
Синтаксис:
[<label>] code [ROM address>]
Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа .code Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан.
Пример:
RESET code H'01FF'
goto START
#DEFINE – определить метку замены текста
Синтаксис:
#define <name> [<string>]
Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте.
Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU.
Пример:
#define length 20
#define control 0x19,7
#define position (X,Y,Z) (y-(2 * Z +X)).
test_label dw position(1, length, 512)
bsf control ; установить в 1 бит 7 в f19
END – конец программного блока
Синтаксис:
end
Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга.
Пример:
start
;исполняемый код
;
end ; конец программы
EQU – определить ассемблерную константу
Синтаксис:
<label> equ <expr>
Здесь <expr> – это правильное MPASM выражение. Значение выражения присваивается метке <label>.
Пример:
four equ 4 ; присваивает численное значение метке four
INCLUDE – включить дополнительный файл источника
Синтаксис:
include <<include_file>>
include "<include_file>"
Определяемый файл считывается как источник кода. По окончании включаемого файла будет продолжаться ассемблирование исходника. Допускается до шести уровней вложенности. <include_file> может быть заключен в кавычки или угловые скобки. Если указан полный путь к файлу, то поиск будет происходить только по этому пути. В противном случае порядок поиска следующий: текущий рабочий каталог, каталог, в котором находится исходник, каталог MPASM.
Пример:
include "c:\sys\sysdefs.inc" ; system defs
include <addmain.asm> ; register defs
LIST – установить параметры листинга
Синтаксис:
list [<list_option>, , <list_option>]
Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл. 6.5.
Табл. 6.5. Параметры, используемые директивой list.
Параметр |
Значение по умолчанию |
Описание |
C=nnn |
80 |
Количество символов в строке |
n=nnn |
59 |
Количество строк на странице |
t=ON|OFF |
OFF |
Укорачивать строки листинга |
p=<type> |
None |
Установить тип процессора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 и др. |
r=<radix> |
HEX |
Установить систему счисления по умолчанию: hex, dec, oct. |
w=<level> |
0 |
Установить уровень сообщений диагностики в файле листинга:
0 – выводить все сообщения;
1 – выводить предупреждения и ошибки;
2 – выводить только ошибки. |
x=ON|OFF |
OFF |
Включить или выключить макрорасширения. |
NOLIST – выключить выход листинга
Синтаксис:
NOLIST
ORG – установить начальный адрес программы
Синтаксис:
<label> org <expr>
Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, а MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <expr>. По умолчанию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль.
Пример:
int_1 org 0x20; Переход по вектору 20
int_2 org int_1+0x10; Переход по вектору 30
PROCESSOR – установить тип процессора
Синтаксис:
processor <processor_type>
Устанавливает тип используемого процессора <processor_type>:
[16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Общие процессорные семейства могут быть выбраны как:[16C5X | 16CXX | 17CXX]
Для поддержания совместимости с новыми изделиями выбирается максимум доступной памяти.
SET – определить ассемблерную переменную
Синтаксис:
<label> set <expr>
Директива SET функционально эквивалентна директиве EQU, за исключением того, что величина, определяемая SET, может быть изменена директивой SET.
Пример:
area set 0
widthset 0x12
length set 0x14
area set length * width
length set length + 1
TITLE – Определить программный заголовок
Синтаксис:
title "<title_text>"
Эта директива устанавливает текст, который используется в верхней линии страницы листинга.<title_text> - это печатная ASCII последовательность, заключенная в двойные скобки. Она может быть до 60 символов длиной.
Пример
title "operational code, rev 5.0"
|