Чтобы определить, все ли ошибки исправлены, имеет смысл снова запустить трансляцию программы. Если ошибки остались, следует их исправить. Если ошибок больше нет, в окне сообщений появится сообщение об успешном завершении трансляции.
Программа на ассемблере представляет собой текстовый файл, который состоит из мнемоник — символьных обозначений команд микроконтроллера, меток и директив.
Любая строка может начинаться с метки — строки из символов и (или) цифр, заканчивающейся двоеточием.
Метки используются для обозначения текущей строки некоторым именем (меткой) для использования в командах условного или безусловного перехода, а также для обозначения участка в памяти для обращения к данным.
Строка исходного текста может иметь один из следующих видов:
1. [метка: ] директива [аргументы директивы] [комментарий]
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 — резервирует место (или несколько мест) размером 1 байт для переменной.
Директива BYTE резервирует один байт в памяти SRAM для реализации переменной. Для того чтобы иметь возможность обращаться к этой переменной, перед директивой BYTE должна стоять метка. Директива имеет один параметр — количество байтов для резервирования. Директива может использоваться только для резервирования места в памяти данных (смотри директивы CSEG, DSEG и ESEG).