Микроконтроллеры AVR: от простого к сложному - страница 27
Синтаксис:
.LISTMAC
Пример:
MACRO МАСХ; Определить макрокоманду
add r0,@0
еог г1,@1
.ENDMACRO; Конец определения макрокоманды
.LISTMAC
МАСХ r2,r1; Вызов макрокоманды. В листинге будет показан ее текст
.MACRO — начало определения макрокоманды.
Директива MACRO указывает транслятору ассемблера на начало определения макрокоманды. Параметром директивы MACRO является имя определяемой макрокоманды. В дальнейшем при обнаружении в тексте программы имени макрокоманды транслятор ассемблера будет фактически заменять это имя на содержание макрокоманды. Макрокоманда может иметь до 10 параметров. Эти параметры имеют фиксированные имена: @0…@9. При вызове макрокоманды параметры должны быть представлены в виде списка, разделенного запятыми. Определение макрокоманды завершается директивой ENDMACRO.
При определении новой макрокоманды нельзя использовать другие макрокоманды (т. е. нельзя использовать вложенные макрокоманды).
Макрокоманда должна быть определена в тексте программы до того, как ее используют.
По умолчанию в листинге генерируется только вызов макрокоманды. Чтобы получить в листинге содержимое макрокоманд, следует использовать директиву LISTMAC. Текст макрокоманды в листинге помечен символом «+».
Синтаксис:
.MACRO
Пример:
MACRO SUBI16; Начало определения макрокоманды
subi r16,low(@0); Вычитаем младший байт
sbci r17,hlgh(@0); Вычитаем старший байт
ENDMACRO; Конец определения макрокоманды
CSEG; начало сегмента кода
SUBI16 9x1234,r16,r17; Вычесть 0x1234 из r17:r16
Примечание:r17:r16 в данном случае — пара регистров, содержащая 16-разрядное число.
.NOLIST — включить генерацию листинга.
Директива NOLIST выключает генерацию листинга. Ассемблер генерирует листинг, содержащий исходный текст на ассемблере, адреса и коды операций. По умолчанию генерация листинга включена. В комбинации с директивой LIST можно организовать печать только нужных фрагментов программы.
Синтаксис:
.NOLIST
Пример:
.NOLIST; Отключить генерацию листинга
.INCLUDE "macro.inc" ; Включаемые файлы не будут
.INCLUDE "const.def"; показаны в листинге
.LIST; Включить генерацию листинга
.ORG — установка значения счетчика расположения.
Директива ORG присваивает абсолютное значение счетчику. Параметром директивы является значение, которое должно быть присвоено счетчику. При использовании директивы ORG в сегменте данных будет определено значение, указывающее расположение и оперативной памяти SRAM. При использовании директивы ORG в сегменте кода будет определено значение, указывающее расположение в памяти программ. При использовании директивы ORG в сегменте EEPROM будет определено значение, указывающее расположение в памяти EEPROM.
Если перед директивой расположена метка (на этой же строке), метка получит значение параметра директивы. Значение по умолчанию для сегмента кода и EEPROM равно 0, а для SRAM — 32 (так как регистры занимают пространство с 0 до 31). Обратите внимание, что для EEPROM и SRAM отсчитываются байты, в то время как в памяти программ — слова.
Синтаксис:
.ORG выражение
Пример:
.DSEG; Начало сегмента данных (SRAM)
.ORG 0x37; Установить адрес SRAM 37Н
variable:.BYTE 1; Зарезервировать 1 байт по адресу 37Н SRAM
.ESEG;Начало сегмента EEPROM
.ORG 0x20; Установить значение счетчика расположения
eevar:.DW 0xf77a;Инициализировать слово в памяти EEPROM
.CSEG
.ORG 0x10; Установить счетчик на значение 0x10
mov r0,r1; Эта команда будет расположена в памяти; программ по адресу 0x10
.SET — присвоить символьному обозначению выражение.
Директива SET присваивает символьному обозначению значение выражения. В дальнейшем это символьное обозначение может быть использовано в выражениях. В дальнейшем тексте программы это символьное выражение может быть изменено.
Синтаксис:
.SET символьное обозначение = выражение
Пример:
SET io_offset = 0x23
.SET porta = io_offset + 2
CSEG; Начало сегмента кода
clr r2; Очистить регистр г2
out porta,r2; Записать в порт А
Ассемблер позволяет использовать в тексте программы выражения. Они могут содержать операнды, операции и функции. Все выражения имеют разрядность 32 бита.