Пример:
.DEVICE AT90S1200; Используется микроконтроллер AT90S1200
.CSEG
push r30; Эта запись вызовет сообщение о том, что выбранное устройство не поддерживает эту инструкцию
.DSEG — сегмент данных.
Директива DSEG определяет начало сегмента данных. В исходном тексте программы на ассемблере может быть несколько сегментов данных. В процессе трансляции все они будут объединены в один. Обычно сегмент данных содержит только директивы BYTE с метками. Сегмент данных имеет свой счетчик байтов. Директива ORG может быть использована для расположения переменных в конкретных местах SRAM. Директива DSEG не имеет параметров.
Синтаксис:
.DSEG
Пример:
.DSEG;Начало сегмента данных
var1:.BYTE 1; Резервируем 1 байт для переменной var1
table:.BYTE tab_size; Резервируем tab_size байт
.CSEG
ldi r30,low(var1);Загружаем младший байт Z-регистра
ldi r31.high(var1);Загружаем старший байт Z-регистра
Id r1,Z ;Загрузить содержимое переменной var1 в r1
.DW — определение слов-констант в памяти программ или EEPROM.
Директива DW резервирует место в памяти программ или EEPROM. Для того чтобы иметь возможность обращаться к зарезервированному пространству, перед этой директивой следует ставить метку. Директива DW должна быть расположена в сегменте кода или EEPROM. Параметрами директивы DW является список выражений.
Список выражений представляет собой одно или несколько выражений, разделенных запятыми. Каждое выражение может быть равно числу от -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.