Одновременно с установкой транслятора ассемблера для Windows, устанавливается версия для работы из командной строки MS-DOS. Эта версия транслятора не имеет никаких ограничений по объему транслируемой программы (т. е., в отличие от версии для Windows, размер файла может быть больше 28 кбайтов).
Вызывается программа следующим образом:
avrasm [-m|-i|-g] input.asm output.lst output.hex
В результате выполнения программы будет прочитан файл input.asm, сгенерирован файл листинга listfile.lst, файл скомпилированного кода для загрузки в память программ микроконтроллера output.hex и объектный файл *.obj, используемый отладчиком.
m — генерировать файл кода в формате Motorola S-Record;
i — генерировать файл кода в формате Intel HEX;
g — генерировать файл кода в формате Generic.
По умолчанию генерируется файл кода в формате Generic.
Для выбора типа файла следует уточнить, с каким типом файлов может работать программатор, которым программа будет заноситься в микроконтроллер.
Рассматриваемый транслятор ассемблера может генерировать три различных типа файлов: Generic, Motorola S-Records и Intel HEX.
Рассмотрим один из этих форматов — Generic. Файлы этого формата — текстовые.
Структура файла очень проста. Каждая строка файла имеет вид: Адрес: код операции.
Здесь «Адрес» — 6 цифр (24 бита) шестнадцатеричного числа, и «код операции» — 4 цифры (16 битов) шестнадцатеричного числа. «Адрес» определяет адрес в памяти программ, а «код операции» — содержимое памяти по указанному адресу.
В качестве примера рассмотрим программу на ассемблере:
; Демонстрация формата Generic
mov r0,r1
inc r1
call oursub
.org 0x50; Установить адрес в памяти программ на 0x50
oursub: add r1,r2
ret
В результате трансляции этой программы будет получен файл gen_demo.rom следующего содержания:
000000:2с01
000001:9413
000002:940е
000003:0050
000050:0с12
000051:9508
Обратите внимание на то, что команды, состоящие из двух слов, размещаются в двух строках файла.
Если в программе был определен сегмент EEPROM, то генерируется файл для прошивки в EEPROM. Расширение этого файла еер. Этот файл всегда генерируется в формате Generic.
Объектный файл содержит отладочную информацию и может быть использован отладчиком для проверки правильности работы программы.
Объектный файл имеет две части:
Заголовочная часть имеет следующий формат:
• смещение к исходным именам файлов (4 байга);
• смещение к объектным записям (4 байга);
• число байтов в каждой записи (1 байт);
• число имен файлов во второй части файла (1 байт);
• строку A VR Object File\0 (\0 означает, что строка завершена 0).
Длительность записей составляет 9 байтов каждая. Формат записи:
• адрес памяти программ (3 байта);
• код операции (2 байта);
• номер инструкции в исходном файле (1 байт, счет начинается с 0);
• номер строки в исходном файле (2 байга, счет начинается с 1);
• индикатор макроса (1 байт, 1 — если макрос, иначе — 0).
И наконец, trailer часть имеет следующий формат:
• имена файлов (заканчивающиеся на 0, число файлов в заголовке);
• ASCII 0.
Для примера рассмотрим программу (файл obj demo.asm):
; Демонстрация объектного формата
.equ const1=0x15
.equ const2=0x40
macro SWIN
swap @0
inc @0
.endmacro
start: ldi r16.const1
SWIN r16
ldi r16.const2
SWIN r16
rjmp start
.include "delay.asm"; Включение другого файла на ассемблере
Включаемый файл (delay.asm):
delay: dec r16
breq delay
ret
После трансляции будет получен объектный файл. Файл — бинарный. Для удобства рассмотрения он был переведен в 16-ричный формат, а столбцы были раздвинуты.