Набор команд Atmel AVR - Atmel AVR instruction set

В Набор команд Atmel AVR это машинный язык для Atmel AVR, а модифицированная архитектура Гарварда 8 бит RISC одиночный чип микроконтроллер который был разработан Атмель в 1996 году. AVR был одним из первых семейств микроконтроллеров, в которых использовались встроенные микросхемы. флэш-память для хранения программ.

Регистры процессора

Имеется 32 8-битных регистра общего назначения, R0 – R31. Все арифметические и логические операции работают с этими регистрами; только инструкции загрузки и хранения обращаются к ОЗУ.

Ограниченное количество инструкций работает с 16-битными парами регистров. Регистр с меньшим номером пары содержит младшие значащие биты и должен быть четным. Последние три пары регистров используются как регистры-указатели для адресации памяти. Они известны как X (R27: R26), Y (R29: R28) и Z (R31: R30). Режимы адресации постинкремент и прединкремент поддерживаются всеми тремя. Y и Z также поддерживают шестибитное положительное смещение.

Команды, которые разрешают немедленное значение, ограничены регистрами R16 – R31 (8-битные операции) или парами регистров R25: R24 – R31: R30 (16-битные операции ADIW и SBIW). Некоторые варианты операции MUL ограничены восемью регистрами, с R16 по R23.

Регистры специального назначения

В дополнение к этим 32 регистрам общего назначения, ЦП имеет несколько регистров специального назначения:

  • ПК: 16- или 22-битный счетчик программ
  • SP: 8- или 16-битный указатель стека
  • SREG: 8-битный регистр состояния
  • RAMPX, RAMPY, RAMPZ, RAMPD и EIND: 8-битные сегментные регистры, которые добавляются к 16-битным адресам для формирования 24-битных адресов; доступен только в частях с большими адресными пространствами.

Биты состояния

Биты регистра состояния:

  1. C Перенести флаг. Это флаг заимствования при вычитании. В INC и DEC инструкции делать нет изменить флаг переноса, чтобы их можно было использовать для циклических многобайтовых арифметических операций.[1]
  2. Z Нулевой флаг. Устанавливается в 1, когда арифметический результат равен нулю.
  3. N Отрицательный флаг. Устанавливается в копию самого старшего бита арифметического результата.
  4. V Флаг переполнения. Устанавливается в случае переполнения до двух.
  5. S Знак флага. Уникальный для AVR, это всегда N⊕V и показывает верный признак сравнения.
  6. ЧАС Флаг полуперти. Это внутренний перенос из дополнений и используется для поддержки BCD арифметика.
  7. T Битовая копия. Этот бит используется в специальных инструкциях по загрузке и хранению битов.
  8. я Флаг прерывания. Устанавливается, когда разрешены прерывания.

Обращение

Доступны следующие адресные пространства:

  • Регистры общего назначения адресуются по их номерам (0–31), хотя полное 5-битное число не сохраняется в командах, которые могут работать только с подмножеством этих регистров.
  • Регистры ввода-вывода имеют выделенное 6-битное адресное пространство, нижняя половина которого является адресуемой по битам; некоторые части имеют регистры ввода-вывода за пределами этого адресного пространства, которые называются «расширенным вводом-выводом» и доступны только как ввод-вывод с отображением памяти в адресном пространстве данных.
  • В адресном пространстве данных отображаются 32 регистра общего назначения, все регистры ввода-вывода (включая те, которые также доступны через адресное пространство ввода-вывода) и ОЗУ; к нему можно обращаться либо прямо, либо косвенно через регистры указателя X, Y и Z, при необходимости к ним добавляются RAMPX, RAMPY и RAMPZ соответственно.
  • Программная память (вспышка ) имеет отдельное адресное пространство, адресованное как 16-битные слова для получения инструкций
  • Для получения постоянных данных память программ адресуется побайтно через регистр указателя Z, при необходимости добавляемый RAMPZ.
  • В EEPROM отображается в памяти в некоторых устройствах; в других случаях он не является адресуемым напрямую, а вместо этого доступен через регистры адреса, данных и управления вводом-выводом.
  • Регистры общего назначения, регистр состояния и некоторые регистры ввода-вывода имеют битовую адресацию, причем бит 0 является наименее значимым, а бит 7 - наиболее значимым.

Первые 64 регистра ввода-вывода доступны как через ввод-вывод, так и через адресное пространство данных. Следовательно, у них два разных адреса. Обычно они записываются как от «0x00 (0x20)» до «0x3F (0x5F)», где первый элемент - это адрес ввода-вывода, а второй, в скобках, адрес данных.

К регистрам специального назначения ЦП, за исключением ПК, можно обращаться как к регистрам ввода-вывода. Некоторые регистры (RAMPX, RAMPY) могут отсутствовать на машинах с числом менее 64 KiB адресуемой памяти.

регистрАдрес ввода / выводаАдрес данных
SREG0x3F0x5F
SP0x3E: 0x3D0x5E: 0x5D
EIND0x3C0x5C
РАМПЗ0x3B0x5B
RAMPY0x3A0x5A
RAMPX0x390x59
RAMPD0x380x58

Типичная карта памяти ATmega может выглядеть так:

Адрес данныхАдрес ввода / выводаСодержание
0x0000 - 0x001FРегистры R0 - R31
0x0020 - 0x003F0x00 - 0x1FРегистры ввода / вывода (с битовой адресацией)
0x0040 - 0x005F0x20 - 0x3FРегистры ввода / вывода (без битовой адресации)
0x0060 - 0x00FFРасширенные регистры ввода-вывода (только ввод-вывод с отображением в память)
0x0100 - RAMENDВнутренняя SRAM

где RAMEND - последний адрес RAM. В частях, в которых отсутствует расширенный ввод-вывод, ОЗУ будет начинаться с 0x0060.

Время обучения

Арифметические операции работают с регистрами R0 – R31, но не непосредственно с ОЗУ, и занимают один тактовый цикл, за исключением умножения и сложения по всему слову (ADIW и SBIW), которые занимают два цикла.

Доступ к ОЗУ и пространству ввода-вывода можно получить только путем копирования в регистры или из них. Косвенный доступ (включая необязательный постинкремент, прединкремент или постоянное смещение) возможен через регистры X, Y и Z. Все обращения к ОЗУ занимают два тактовых цикла. Перемещение между регистрами и вводом / выводом - один цикл. Перемещение восьми или шестнадцати битовых данных между регистрами или константой в регистр также составляет один цикл. Чтение памяти программ (LPM) занимает три цикла.

Список инструкций

Инструкции состоят из одного 16-битного слова, за исключением тех, которые включают 16-битный или 22-битный адрес, которые занимают два слова.

Есть два типа условных переходов: переход к адресу и пропуск. Условные переходы (BRxx) могут проверять флаг ALU и переходить по указанному адресу. Пропуск (SBxx) проверки произвольного бита в регистре или вводе / выводе и пропуск следующей инструкции, если проверка верна.

В следующих:

  • Rd и Rr - регистры в диапазоне R0 – R31.
  • Rdh и Rrh являются регистрами в диапазоне R16 – R31 (высокая половина).
  • Rdq и Rrq - регистры в диапазоне R16 – R23 (одна четверть регистрового файла).
  • Rp - это регистровая пара R25: R24, R27: R26 (X), R29: R28 (Y) или R31: R30 (Z)
  • XYZ - это регистр указателя, либо X, либо Y, либо Z
  • YZ - это регистр указателя, Y или Z
  • s - номер бита в регистре состояния (0 = C, 1 = Z и т. д., см. список выше)
  • b - номер бита в регистре общего назначения или в регистре ввода-вывода (0 = наименее значимый, 7 = наиболее значимый)
  • K6 - это 6-битный немедленный беззнаковый константа (диапазон: 0–63)
  • K8 - 8-битная непосредственная константа; поскольку он используется только в 8-битных операциях, его подпись не имеет значения
  • IO5 - это 5-битный адрес ввода-вывода, охватывающий побитово-адресную часть адресного пространства ввода-вывода, то есть нижнюю половину (диапазон: 0–31)
  • IO6 - это 6-битный адрес ввода-вывода, охватывающий все адресное пространство ввода-вывода (диапазон: 0–63).
  • D16 - это 16-битный адрес данных, охватывающий 64KiB; в частях с пространством данных более 64 КБ, содержимое сегментного регистра RAMPD добавляется в начало
  • P22 - это 22-битный адрес программы, покрывающий 222 16-битные слова (т.е. 8МиБ )
  • S7 и S12 7-битные (соответственно 12-битные) подписанный смещения в единицах слов относительно адреса программы, хранящегося в программном счетчике
Набор инструкций AVR
АрифметикаБит и другиеПередачаПрыгатьОтветвлятьсяВызов
ADD Rd, Rr ADC Rd, Rr ADIW Rp + 1: Rp, K6 SUB Rd, Rr SUBI Rdh, K8 SBC Rd, Rr SBCI Rdh, K8 SBIW Rp + 1: Rp, K6 INC Rd DEC Rd AND Rd, Rr ANDI Rdh , K8 OR Rd, Rr ORI Rdh, K8 OR Rd, Rr COM Rd NEG Rd CP Rd, Rr CPC Rd, Rr CPI Rdh, K8 SWAP Rd LSR Rd ROR Rd ASR Rd MUL Rd, Rr MULS Rdh, Rrh MULSU Rdq, Rrq FMUL Rdq, Rrq FMULS Rdq, Rrq FMULSU Rdq, Rrq
BSET s BCLR s SBI IO5, b CBI IO5, b BST Rd, b BLD Rd, b NOP BREAK SLEEP WDR
MOV Rd, Rr MOVW Rd + 1: Rd, Rr + 1: Rr IN Rd, IO6 OUT IO6, Rr PUSH Rr POP Rr LDI Rdh, K8 LDS Rd, D16 LD Rd, X LDD Rd, YZ + K6 LD Rd, - XYZ LD Rd, XYZ + STS D16, Rr ST X, Rr STD YZ + K6, Rr ST -XYZ, Rr ST XYZ +, Rr LPM LPM Rd, Z LPM Rd, Z + ELPM ELPM Rd, Z ELPM Rd, Z + SPM
RJMP S12 IJMP EIJMP JMP P22
CPSE Rd, Rr SBRC Rr, b SBRS Rr, b SBIC IO5, b SBIS IO5, b BRBC s, S7 BRBS s, S7
RCALL S12ICALL EICALL CALL P22 RET RETI

Наследование набора инструкций

Не все инструкции выполняются во всех Atmel AVR контроллеры. Это случай инструкций, выполняющих умножение, расширенные нагрузки / переходы / вызовы, длинные переходы и управление мощностью.

Необязательные инструкции можно разделить на три категории:

  • функции ядра процессора (вычислений), добавленные на более мощные ядра ЦП
  • функции адресации памяти, добавленные на всех моделях с памятью, достаточной для их использования
  • дополнительные функции, несколько периферийных устройств, которые могут присутствовать или отсутствовать на конкретной модели.

Хотя процессоры более высокого уровня, как правило, имеют как более мощные ядра, так и больше памяти, наличие одного не гарантирует наличия другого.

Инструкции основного процессора

Начиная с оригинального «классического» ядра, улучшения разбиты на следующие уровни, каждый из которых включает в себя все предыдущие:

  1. "Классическое" ядро ​​имеет только форму с нулевым операндом LPM инструкция, которая эквивалентна LPM r0, Z.
  2. «Классический плюс» добавляет MOVW инструкция для перемещения пар регистров и более общая форма инструкции LPM (LPM Rd, Z и LPM Rd, Z +), которые разрешают произвольный регистр назначения и автоинкремент Z-указателя.
  3. "Расширенные" ядра добавляют инструкции умножения.
  4. Ядра XMEGA не добавляют новые инструкции как таковой, но внесите некоторые существенные изменения:
    • Карта памяти реорганизована, устраняется отображение памяти файла регистров процессора (поэтому порты ввода-вывода начинаются с адреса 0 ОЗУ) и расширяется диапазон портов ввода-вывода. Теперь первый 4K - это регистры специальной функции, второй 4K - это флэш-память данных, а нормальная RAM начинается с 8K.
    • Нет необходимости явно отключать прерывания перед настройкой регистров указателя стека (SPL и SPH); любая запись в SPL автоматически отключает прерывания на 4 тактовых цикла, чтобы дать время для обновления SPH.
    • Другие многобайтовые регистры снабжены теневыми регистрами для включения атомный прочти и напиши. Когда читается младший байт, старшие байты копируются в теневые регистры, поэтому их последующее чтение производит снимок реестра на момент первого чтения. Записи в младшие байты буферизуются до тех пор, пока не будет записан самый старший байт, после чего весь многобайтовый регистр обновляется атомарно.
  5. Более поздние ядра XMEGA (в частности, модели B, C и AU, такие как ATxmega16A4U, но нет более ранние модели A, D и E, такие как ATxmega16D4) добавляют четыре атомных читать-изменять-писать инструкция: обмен (XCH), загрузка и установка, загрузка и очистка и загрузка и переключение. Это помогает координировать свои действия с прямой доступ к памяти периферийные устройства, в частности USB контроллер.

Менее производительны, чем у «классических» ядер ЦП, два подмножества: ядро ​​«AVR1» и «крошечный AVR». Как ни странно, процессоры под брендом ATtiny имеют множество ядер, включая AVR1 (ATtiny11, ATtiny28), classic (ATtiny22, ATtiny26), classic + (ATtiny24) и AVRtiny (ATtiny20, ATtiny40).

Подмножество AVR1 не было популярным, и с 2000 года не было представлено никаких новых моделей. В нем отсутствует вся оперативная память, за исключением 32 регистров, отображаемых по адресам 0–31, и портов ввода / вывода по адресам 32–95. Стек заменяется трехуровневым аппаратным стеком, а ТОЛКАТЬ и Поп инструкции удаляются. Удаляются все 16-битные операции, как и IJMP, Я ЗВОНЮ, а также все режимы адресации загрузки и сохранения, кроме косвенной через Z.

Вторая, более успешная попытка подмножества набора команд AVR - это "крошечное" ядро ​​AVR.

Наиболее значительным изменением является то, что ядро ​​AVRtiny пропускает регистры R0 – R15. Регистры также не отображаются в памяти, с портами ввода-вывода от 0 до 63 и ОЗУ общего назначения, начинающимися с адреса 64. 16-разрядные арифметические операции (ADIW, SBIW) опускаются, как и загрузка / сохранение с режимами смещения адресации (Г + д, Z + d), но режимы адресации до и после приращения сохраняются. В LPM инструкция опущена; вместо этого ПЗУ программы отображается в адресное пространство данных и может быть доступно с помощью обычных инструкций загрузки.

Наконец, ядро ​​AVRtiny удаляет 2-слово СПД и СТС инструкции для прямой адресации ОЗУ, и вместо этого использует пространство кода операции, ранее назначенное для загрузки / сохранения с инструкциями смещения для нового 1-слова СПД и СТС инструкции, которые могут получить доступ к первым 128 ячейкам ОЗУ общего назначения, адресуются от 0x40 до 0xBF. (The В и ИЗ инструкции обеспечивают прямой доступ к пространству ввода-вывода от 0 до 0x3F.)

Инструкции по адресации памяти

Наименьшие ядра имеют ≤256 байтов адресного пространства данных (что означает ≤128 байтов ОЗУ после удаления портов ввода-вывода и других зарезервированных адресов) и ≤8192 байта (8 КиБ) программного ПЗУ. Они имеют только 8-битный указатель стека (в SPL) и поддерживают только 12-битные относительные инструкции перехода / вызова RJMP/RCALL. (Поскольку счетчик программы AVR считает 16-битные слова, а не байты, 12-битного смещения достаточно для адреса 213 байтов ПЗУ.)

Присутствуют дополнительные возможности адресации памяти, необходимые для доступа к доступным ресурсам:

  1. Модели с> 256 байтами адресного пространства данных (≥256 байтов ОЗУ) имеют 16-битный указатель стека, причем старшая половина находится в регистре SPH.
  2. В моделях с объемом ПЗУ> 8 КБ добавляется 2-слово (22 бита) ПРЫГАТЬ и ВЫЗОВ инструкции. (Некоторые ранние модели страдают ошибка если за инструкцией пропуска следует инструкция из 2 слов.)
  3. Модели с объемом ПЗУ> 64 КБ добавляют ELPM инструкция и соответствующий регистр RAMPZ. LPM инструкции расширения адреса ПЗУ в Z нулями; ELPM инструкции добавляют регистр RAMPZ к старшим битам. Это не то же самое, что и более общий LPM инструкция; существуют "классические" модели только с нулевым операндом ELPM (ATmega103 и at43usb320). Когда доступно автоматическое приращение (большинство моделей), он обновляет весь 24-битный адрес, включая RAMPZ.
  4. (Редкие) модели с объемом ПЗУ> 128 КБ имеют 3-байтовый счетчик программ. Вызовы и возврат подпрограмм используют дополнительный байт пространства стека, есть новый регистр EIND для предоставления дополнительных старших битов для косвенных переходов и вызовов, а также есть новые расширенные инструкции EIJMP и EICALL которые используют EIND: Z в качестве адреса назначения. (Предыдущий IJMP и Я ЗВОНЮ инструкции используют Z с расширенным нулем.)
  5. (Редкие) модели с адресным пространством ОЗУ> 64 Кбайт расширяют пределы адресации 16-разрядной ОЗУ с помощью регистров RAMPX, RAMPY, RAMPZ и RAMPD. Они предоставляют дополнительные старшие биты для режимов адресации, которые используют пары регистров X, Y или Z соответственно, или инструкции прямой адресации. СПД/СТС. В отличие от доступа к ПЗУ, здесь нет отдельных «расширенных» инструкций; вместо этого безоговорочно используются регистры RAMP.

Инструкции по дополнительным функциям

Три инструкции присутствуют только на моделях с соответствующим оборудованием.

  • SPM для хранения во флэш-ПЗУ, присутствует только на процессорах с флэш-ПЗУ (большинство из них)
  • ПЕРЕМЕНА для вызова встроенного отладчика, опущен на некоторых небольших моделях без поддержки встроенного отладчика
  • DES для выполнения Стандарт шифрования данных раундов, присутствует на моделях XMEGA с поддержкой ускорителя DES

Архитектуры, отличные от AVR1, именуются в соответствии с соглашениями avr-libc.[2]

СемьяЧленыАрифметикаветвиПереводыBit-Wise
Минимальное ядро ​​AVR1
  • AT90S1200
  • ATtiny11
  • ATtiny12
  • ATtiny15
  • ATtiny28
  • ДОБАВИТЬ
  • АЦП
  • SUB
  • SUBI
  • SBC
  • SBCI
  • И
  • И Я
  • ИЛИ ЖЕ
  • ORI
  • EOR
  • COM
  • NEG
  • SBR
  • CBR
  • INC
  • DEC
  • TST
  • CLR
  • SER
  • RJMP
  • RCALL
  • RET
  • РЕТИ
  • CPSE
  • CP
  • Цена за клик
  • ИПЦ
  • SBRC
  • SBRS
  • SBIC
  • SBIS
  • BRBS
  • BRBC
  • BREQ
  • BRNE
  • BRCS
  • BRCC
  • БРШ
  • BRLO
  • BRMI
  • BRPL
  • BRGE
  • BRLT
  • BRHS
  • BRHC
  • BRTS
  • BRTC
  • BRVS
  • BRVC
  • BRIE
  • BRID
  • LD
  • ST
  • MOV
  • LDI
  • В
  • ИЗ
  • LPM (не в AT90S1200)
  • SBI
  • CBI
  • LSL
  • ЛСР
  • ROL
  • ROR
  • ASR
  • ЗАМЕНА
  • BSET
  • BCLR
  • BST
  • BLD
  • SEC
  • CLC
  • SEN
  • CLN
  • ОЭЗ
  • CLZ
  • SEI
  • CLI
  • SES
  • CLS
  • SEV
  • CLV
  • НАБОР
  • CLT
  • SEH
  • CLH
  • NOP
  • СПАТЬ
  • WDR
Классическое ядро ​​до 8K Program Space («AVR2»)
  • AT90S2313
  • AT90S2323
  • ATtiny22
  • AT90S2333
  • AT90S2343
  • AT90S4414
  • AT90S4433
  • AT90S4434
  • AT90S8515
  • AT90C8534
  • AT90S8535
  • ATtiny26
новые инструкции:
  • ADIW
  • SBIW
новые инструкции:
  • IJMP
  • Я ЗВОНЮ
новые инструкции:
  • LD (сейчас 9 режимов)
  • LDD
  • СПД
  • ST (9 режимов)
  • ЗППП
  • СТС
  • ТОЛКАТЬ
  • Поп
(Ничего нового)
AVR2, с инструкциями MOVW и LPM («AVR2.5»)
  • ATa5272
  • ATtiny13 / а
  • ATtiny2313 / а
  • ATtiny24 / а
  • ATtiny25
  • ATtiny261 / а
  • ATtiny4313
  • ATtiny43u
  • ATtiny44 / а
  • ATtiny45
  • ATtiny461 / a
  • ATtiny48
  • ATtiny828
  • ATtiny84 / а
  • ATtiny85
  • ATtiny861 / а
  • ATtiny87
  • ATtiny88
(Ничего нового)новые инструкции:
  • MOVW
  • LPM (Rx, Z [+])
(Ничего нового)(Ничего нового)
Классическое ядро ​​до 128 КБ ("AVR3")
  • ATmega103
  • ATmega603
  • AT43USB320
  • AT76C711
(Ничего нового)новые инструкции:
  • JMP
  • ВЫЗОВ
новые инструкции:
  • ELPM (в "AVR3.1")
(Ничего нового)
Расширенное ядро ​​до 8 КБ ("AVR4")
  • ATmega8
  • ATmega83
  • ATmega85
  • ATmega8515
новые инструкции:
  • MUL
  • MULS
  • МУЛСУ
  • FMUL
  • FMULS
  • FMULSU[3]
(Ничего нового)новые инструкции:
  • MOVW
  • LPM (3 режима)
  • SPM
(Ничего нового)
Расширенное ядро ​​до 128 КБ ("AVR5", "AVR5.1")
  • ATmega16
  • ATmega161
  • ATmega163
  • ATmega32
  • ATmega323
  • ATmega64
  • ATmega128
  • AT43USB355
  • AT94 (FPSLIC)
  • AT90CAN серии
  • AT90PWM серии
  • ATmega48
  • ATmega88
  • ATmega168
  • ATmega162
  • ATmega164
  • ATmega324
  • ATmega328
  • ATmega644
  • ATmega165
  • ATmega169
  • ATmega325
  • ATmega3250
  • ATmega645
  • ATmega6450
  • ATmega406
(Ничего нового)новая инструкция:
  • ELPMX («AVR5.1»)
(Ничего нового)новые инструкции:
  • ПЕРЕМЕНА
Расширенное ядро ​​до 4 МБ («AVR5» и «AVR6»)
  • ATmega640
  • ATmega1280
  • ATmega1281
  • ATmega2560
  • ATmega2561
(Ничего нового)новые инструкции:
  • EIJMP
  • EICALL
(Ничего нового)(Ничего нового)
XMEGA Core ("avrxmega" 2-6)Серия ATxmegaновые инструкции:
  • DES
(Ничего нового)новые инструкции (из силикона второй ревизии - части AU, B, C)
  • XCH
  • LAS
  • LAC
  • LAT
(Ничего нового)
Уменьшенное ядро ​​AVRtiny ("avrtiny10")
  • ATtiny40
  • ATtiny20
  • ATtiny10
  • ATtiny9
  • ATtiny5
  • ATtiny4
(Идентично минимальному ядру, за исключением уменьшенного набора регистров ЦП)(Идентично классическому ядру до 8 КБ, за исключением уменьшенного набора регистров ЦП)Идентично классическому ядру до 8K, за следующими исключениями:
  • LPM (удалено)
  • LDD (удален)
  • STD (удален)
  • LD (также обращается к программной памяти)
  • LDS (другой битовый шаблон)
  • STS (другой битовый шаблон)
  • Уменьшенный набор регистров ЦП
(Идентично расширенному ядру до 128 КБ, за исключением уменьшенного набора регистров ЦП)

Кодировка инструкции

Назначения битов:

  • rrrrr = Исходный регистр
  • rrrr = Исходный регистр (R16 – R31)
  • rrr = регистр источника (R16 – R23)
  • RRRR = пара регистров источника (R1: R0 – R31: R30)
  • ddddd = Регистр назначения
  • dddd = Регистр назначения (R16 – R31)
  • ddd = Регистр назначения (R16 – R23)
  • DDDD = Пара регистров назначения (R1: R0 – R31: R30)
  • pp = пара регистров, W, X, Y или Z
  • y = бит пары регистров Y / Z (0 = Z, 1 = Y)
  • u = FMUL (S (U)) со знаком 0 = со знаком или 1 = без знака
  • s = бит сохранения / загрузки (0 = загрузка, 1 = сохранение)
  • c = вызов / прыжок (0 = прыжок, 1 = вызов)
  • cy = с переносом (0 = без переноса, 1 = с переносом)
  • e = Расширить адрес косвенного перехода / вызова с помощью EIND (0 = 0: Z, 1 = EIND: Z)
  • q = расширить адрес памяти программ с помощью RAMPZ (0 = 0: Z, 1 = RAMPZ: Z)
  • aaaaaa = адрес пространства ввода-вывода
  • aaaaa = адрес пространства ввода-вывода (только первые 32)
  • bbb = номер бита (0–7)
  • B = битовое значение (0 или 1)
  • kkkk = 4-битная константа без знака (код операции DES)
  • kkkkkk = 6-битная беззнаковая константа
  • KKKKKKKK = 8-битная константа

Atmel AVR использует много разделенных полей, где биты не являются смежными в командном слове. Инструкции загрузки / сохранения со смещением являются наиболее ярким примером, когда 6-битное смещение разбивается на три части.

Обзор набора команд Atmel AVR
1
5
1
4
1
3
1
2
1
1
1
0

9

8

7

6

5

4

3

2

1

0
Инструкция
0000000000000000NOP
00000001Д Д Д ДR R R RMOVW Rd, Rr Перемещение пары регистров
00000010д д д дr r r rMULS Rd, Rr
000000110д д д0r r rMULSU Rd, Rr
000000110д д д1r r rFMUL Rd, Rr
000000111д д дтыr r rFMULS (U) Rd, Rr
00код операциирд д д д дr r r r2-операндные инструкции
000c̅y̅01рд д д д дr r r rCPC / CP Rd, Rr
000c̅y̅10рд д д д дr r r rSBC / SUB Rd, Rr
000Сай11рд д д д дr r r rADD / ADC Rd, Rr (LSL / ROL Rd, когда Rd = Rr)
000100рд д д д дr r r rCPSE Rd, Rr
001000рд д д д дr r r rИ Rd, Rr
001001рд д д д дr r r rEOR Rd, Rr
001010рд д д д дr r r rИЛИ Rd, Rr
001011рд д д д дr r r rMOV Rd, Rr
0011К К К Кд д д дК К К КИПЦ Rd, тыс.
01opcК К К Кд д д дК К К КРегистр-немедленные операции
010c̅y̅К К К Кд д д дК К К КSBCI / SUBI Rd, K
0110К К К Кд д д дК К К КORI Rd, K
SBR Rd, K
0111К К К Кд д д дК К К КANDI Rd, K
CBR Rd, K
10k0k ksд д д д дук к кLDD / STD Rd через Z + k или Y + k
100100sд д д д дкод операцииЗагрузка / сохранение операций
100100sд д д д д0000LDS rd, i / STS i, rd
16-битный немедленный адрес SRAM i
100100sд д д д ду001LD / ST Rd через Z + / Y +
100100sд д д д ду010LD / ST Rd через −Z / −Y
1001000д д д д д01q0LPM / ELPM Rd, Z
1001000д д д д д01q1LPM / ELPM Rd, Z +
1001001д д д д д0100XCH Z, Rd
1001001д д д д д0101LAS Z, Rd
1001001д д д д д0110LAC Z, Rd
1001001д д д д д0111LAT Z, Rd
100100sд д д д д1100LD / ST Rd через X
100100sд д д д д1101LD / ST Rd через X +
100100sд д д д д1110LD / ST Rd через −X
100100sд д д д д1111POP / PUSH Rd
1001010д д д д д0код операцииИнструкции с одним операндом:
1001010д д д д д0000COM Rd
1001010д д д д д0001NEG Rd
1001010д д д д д0010SWAP Rd
1001010д д д д д0011INC Rd
1001010д д д д д0100(зарезервированный)
1001010д д д д д0101ASR Rd
1001010д д д д д0110ЛСР Роуд
1001010д д д д д0111ROR Rd
10010100б б б1000Бит сброса / установки регистра состояния SEx / CLx
10010101код операции1000Инструкции с нулевым операндом
1001010100001000RET
1001010100011000РЕТИ
10010101001Икс1000(зарезервированный)
1001010101ИксИкс1000(зарезервированный)
1001010110001000СПАТЬ
1001010110011000ПЕРЕМЕНА
1001010110101000WDR
1001010110111000(зарезервированный)
10010101110q1000LPM / ELPM
1001010111101000SPM
1001010111111000SPM Z +
1001010c000е1001Косвенный переход / вызов в Z или EIND: Z
1001010д д д д д1010DEC Rd
10010100к к к к1011DES раунд k
1001010к к к к к11ckJMP / CALL abs22
К К К К К К К К К К К К К К К К К К
10010110k kp pк к к кADIW Rp, uimm6
10010111k kp pк к к кSBIW Rp, uimm6
100110B0а а а аб б бCBI / SBI a, b (сброс / установка бита ввода / вывода)
100110B1а а а аб б бSBIC / SBIS a, b (битовый тест ввода / вывода)
100111рд д д д дr r r rMUL без знака: R1: R0 = Rr × Rd
1011sа ад д д д да а аВХОД / ВЫХОД в пространство ввода / вывода
110c12-битное смещение со знакомRJMP / RCALL к ПК + simm12
1110К К К Кд д д дК К К КLDI Rd, K
111107-битное смещение со знакомб б бУсловный переход по биту регистра состояния
111110sд д д д д0б б бБит регистра BLD / BST в STATUS.T
111111Bд д д д д0б б бSBRC / SBRS пропускает, если бит регистра равен B
11111ИксИксд д д д д1б б б(зарезервированный)

Рекомендации

  1. ^ "Руководство по набору инструкций AVR" (PDF). Атмель. Ноябрь 2016. Atmel-0856L.
  2. ^ «Использование инструментов GNU». Руководство по AVR Libc. Получено 6 мая 2018.
  3. ^ Атмель. Примечание по применению «AVR201: Использование аппаратного умножителя AVR». 2002. Цитата: «MegaAVR - это серия новых устройств в семействе микроконтроллеров AVR RISC, включающая, помимо других усовершенствований, аппаратный умножитель».

внешняя ссылка