2. [метка: ] мнемоника команды [аргументы команды] [комментарий]
3. Комментарий
4. Пустая строка
Комментарии всегда начинаются с символа «;
».Элементы, заключенные в квадратные скобки, могут отсутствовать. Текст, расположенный после символа «точка с запятой» до конца строки, полностью игнорируется ассемблером. Использование меток, мнемоник команд микроконтроллера и директив ассемблера подробнее будет рассмотрено чуть позднее.
Примеры записи строк:
label1:.EQU var1=100
; Директива определения символьного; имени var1, эквивалентного записи ”100"
.EQU var2=200
; Определение имени var2, соответствующего "200"test: rjmp test
; Бесконечный цикл (мнемоника команды микроконтроллера); Пустая строка
Обратите внимание, что не играет никакой роли, в каких местах расположены метки, команды ассемблера и директивы, важен только их порядок.
Транслятор ассемблера позволяет использовать в тексте программы мнемоники (обозначения команд микроконтроллера), полностью совпадающие с их названием в системе команд микроконтроллера.
Команды микроконтроллеров семейства AVR делятся на несколько групп:
• арифметические и логические;
• команды условных и безусловных переходов;
• команды передачи данных;
• команды для работы с битами.
Краткое описание команд микроконтроллера можно найти в главе 2.
Для транслятора ассемблера нет разницы, какими буквами написаны слова, т. е. rjmp
и RJMP совершенно равнозначны. Однако для удобства понимания программы рекомендуется все мнемоники и метки записывать строчными (маленькими) буквами, а директивы прописными (большими).Транслятор ассемблера поддерживает достаточно много директив. Директивы не транслируются в программу для микроконтроллера. Они используются для указания транслятору ассемблера данных о расположении программы в памяти микроконтроллера, определения макросов и т. д.
Ниже приведен перечень директив транслятора ассемблера:
.BYTE
— резервирует 1 байт для использования в качестве переменной;.CSEG
— сегмент программ;.DB
— определяет байт-константу;.DEF
— определяет символическое имя для регистра;.DEVICE
— задает тип целевого микроконтроллера;.DSEG
— сегмент данных;.DW
— определяет слово-константу;.ENDMACRO
— конец определения макроса;.EQU
— сопоставляет символьному имени арифметическое выражение;.ESEG
— сегмент EEPROM;.EXIT
— выйти из файла (конец текста программы);.INCLUDE
— загрузить исходный текст из другого файла;.LIST
— включить генерацию листинга;.LISTMAC
— включить печать содержимого макросов в листинге;.MACRO
— начать определение макроса;.NOLIST
— выключить генерацию листинга;.ORG
— установить расположение;.SET
— сопоставить символу выражение.Обратите внимание, что все директивы должны начинаться с точки.
Директива BYTE резервирует один байт в памяти SRAM для реализации переменной. Для того чтобы иметь возможность обращаться к этой переменной, перед директивой BYTE должна стоять метка. Директива имеет один параметр — количество байтов для резервирования. Директива может использоваться только для резервирования места в памяти данных (смотри директивы CSEG, DSEG и ESEG).
Синтаксис:
Метка:.BYTE числовое выражение
Примеры:
.DSEG
var1:.BYTE 1
; Резервируем 1 байт для переменной var1able:.BYTE tab_size
; Резервируем tab_size байт.CSEG
ldi r30,low(var1)
; Загружаем младший байт Z-регистраldi r31,high(var1)
; Загружаем старший байт Z-регистраId r1,Z;
Загрузить содержимое переменной var1 в r1Директива CSEG определяет начало сегмента кода (программ). В исходном тексте программы может быть несколько сегментов кода. Транслятор ассемблера в процессе компиляции программы объединяет все сегменты кода в один. Директива BYTE не может быть использована в сегменте кода. Если в программе нет явного указания названия сегмента, по умолчанию считается, что это сегмент кода. Директива CSEG не имеет никаких параметров. Сегмент кода имеет свой счетчик слов. Директива-ORG может быть использована для размещения кода или констант в определенном программистом месте памяти программ.
Синтаксис:
.CSEG