Микроконтроллеры AVR: от простого к сложному - страница 26
Список выражений представляет собой одно или несколько выражений, разделенных запятыми. Каждое выражение может быть равно числу от -32768 до 65535. Если выражение представляет собой отрицательное число, оно будет помещено в память программ или EEPROM в дополнительном коде.
Синтаксис:
Метка:.DW список выражений
Пример:
.CSEG
varlist:.DW 0,56255, 0b0101110011101011, -12128, 0xaaff
.ESEG
eevar:.DW 0xff17
.ENDMACRO — конец описания макрокоманды.
Директива ENDMACRO определяет конец описания макрокоманды. Директива не имеет параметров. Для получения информации о макрокомандах смотри директиву MACRO.
Синтаксис:
.ENDMACRD
Пример:
MACRO SUBI16; Начало определения макрокоманды
subi r16,low(@0); Вычитаем младший байт
sbci r17, high(@0); Вычитаем старший байт
.ENDMACRO; Конец определения макрокоманды
.SET — присвоить символьному обозначению выражение.
Директива SET присваивает символьному обозначению значение выражения. В дальнейшем это символьное обозначение может быть использовано в выражениях. Присвоенное значение — константа. В дальнейшем тексте программы это символьное выражение не может быть переопределено или изменено.
Синтаксис:
.EQU <символьное обозначение> = <выражение>
Пример:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2
.CSEG; Начало сегмента кода
clr r2; Очистить регистр r2
out porta,r2; Записать в порт А
.ESEG — EEPROM сегмент.
Директива ESEG определяет начало EEPROM сегмента. В исходном тексте программы может быть несколько EEPROM сегментов. Транслятор ассемблера в процессе компиляции программы объединяет все EEPROM сегменты в один. Директива BYTE не может быть использована в EEPROM сегменте. Директива ESEG не имеет никаких параметров. Сегмент EEPROM имеет свой счетчик байтов. Директива. ORG может быть использована для размещения кода или констант в определенном программистом месте памяти EEPROM.
Синтаксис:
.ESEG
Пример:
.DSEG; Начало сегмента данных
vartab:.BYTE 4; Резервируем 4 байта в SRAM
.ESEG
eevar:.DW 0xff67; Инициализируем одно слово в EEPROM
.CSEG;Начало сегмента кода
const:.DW 2;Запишем число 0x0002 в память программ
mov r1,r0;Что-нибудь сделаем
.EXIT — конец текста программы.
Директива EXIT указывает транслятору ассемблера, что следует завершить трансляцию программы. При отсутствии этой директивы транслятор ассемблера работает до тех пор, пока исходный файл не закончится (EOF). Если директив EXIT встречается в файле, включаемом в текст директивой INCLUDE, транслятор ассемблера продолжит работу со строки, следующей после соответствующей директивы INCLUDE.
Синтаксис:
.EXIT
Пример:
.EXIT; Завершить обработку этого файла
.INCLUDE — вставить файл.
Директива INCLUDE указывает транслятору ассемблера на необходимость вставить в исходный текст программы другой файл. Реально при обработке этой директивы транслируется файл, указанный в директиве INCLUDE, после завершения его обработки (при достижении конца файла или директивы. EXIT) продолжается обработка основного файла. Вложенные файлы, в свою очередь, могут иметь директиву INCLUDE. Для облегчения понимания можно представить себе, что в текст программы вместо директивы INCLUDE вставляется соответствующий файл.
Синтаксис:
.INCLUDE "имя файла"
Пример:
; Файл iodefs.asm
.E0U sreg=0x3f; Регистр статуса
.EQU sphigh=0x3e; Старший байт стека
.EOU splow=0x3d; Младший байт стека
;Файл incdemo.asm
.INCLUDE "iodefs.asm"; Включить в текст программы файл incdemo.asm
in r0.sreg; Прочитать содержимое регистра статуса
.LIST — включить генерацию листинга.
Директива LIST включает генерацию листинга. Ассемблер генерирует листинг, содержащий исходный текст на ассемблере, адреса и коды операций. По умолчанию генерация листинга включена. В комбинации с директивой NOLIST можно организовать печать только нужных фрагментов программы.
Синтаксис:
.LIST
Пример:
.N0LIST; Отключить генерацию листинга
.INCLUDE "macro.inc"; Включаемые файлы не будут
.INCLUDE “const.def"; показаны в листинге
.LIST; Включить генерацию листинга
.LISTMAC — включить раскрытие макрокоманд.
Директива LISTMAC указывает транслятору ассемблера на необходимость показа в листинге содержимого макрокоманд. По умолчанию в листинге показывается только название макрокоманды.