Содержание и формат команд AVR-ассемблера
Команда AVR-ассемблера состоит из мнемоники операции и, при необходимости, операндов. Мнемоника показывает, что должен выполнить микроконтроллер, а операнды указывают, с какими данными выполняется операция.
Общий формат команды
Обычно строка программы имеет вид:
метка: мнемоника операнды ; комментарийНапример:
loop: INC R16 ; увеличить R16 на 1 CPI R16, 10 ; сравнить R16 с 10 BRNE loop ; перейти, если не равноЭлементы строки:
loop: — метка;
INC, CPI, BRNE — мнемоники команд;
R16, 10, loop — операнды;
текст после ; — комментарий.
Содержание команды
Машинная команда AVR содержит информацию о:
коде выполняемой операции;
регистрах, участвующих в операции;
непосредственном числовом значении, если оно используется;
адресе памяти;
адресе или смещении перехода;
отдельных битах регистров.
После трансляции ассемблер превращает мнемоническую запись в машинный двоичный код, понятный процессору.
Например:
LDI R16, 25означает: загрузить число 25 в регистр R16.
Основные форматы команд
1. Команды без операндов
Некоторые команды не требуют явно записанных операндов:
NOP RET RETINOP — нет операции;
RET — возврат из подпрограммы;
RETI — возврат из прерывания.
2. Команды с одним операндом
INC R16 DEC R17 COM R18Например:
INC R16увеличивает содержимое регистра R16 на единицу.
3. Команды с двумя операндами
Наиболее распространённый формат:
ADD R16, R17 MOV R18, R19 CPI R20, 100Например:
ADD R16, R17выполняет:
Первый операнд обычно является приёмником результата.
4. Команды с непосредственным операндом
В качестве одного из операндов используется число:
LDI R16, 0xFF CPI R16, 10 ANDI R16, 0x0FНапример:
LDI R16, 0xFFзагружает шестнадцатеричное значение FF в регистр R16.
5. Команды переходов
Операндом является метка или адрес:
RJMP loop BREQ equal CALL subroutineНапример:
RJMP startосуществляет безусловный переход к метке start.
Форматы чисел
В AVR-ассемблере могут применяться разные системы счисления:
LDI R16, 25 ; десятичное число LDI R16, 0x19 ; шестнадцатеричное LDI R16, 0b00011001 ; двоичноеВо всех трёх случаях в R16 будет записано одно и то же число — 25.
Регистры в командах
AVR имеет 32 регистра общего назначения:
R0 ... R31Например:
MOV R16, R17копирует содержимое R17 в R16.
Некоторые команды имеют ограничения на используемые регистры. Например, команда LDI применяется к регистрам R16–R31:
LDI R16, 100Пример фрагмента программы
LDI R16, 0 LDI R17, 10 loop: INC R16 CP R16, R17 BRNE loopЗдесь:
в R16 записывается 0;
в R17 записывается 10;
R16 увеличивается на 1;
регистры сравниваются;
цикл выполняется, пока значения не станут равными.
Кратко для ответа по билету
Команда AVR-ассемблера состоит из мнемоники и операндов. Строка программы может содержать метку, команду, операнды и комментарий. Команды бывают без операндов, с одним или двумя операндами, с непосредственным числом, адресом памяти или меткой перехода. Ассемблер преобразует такую запись в машинный двоичный код микроконтроллера.