Jump to content

Набор инструкций Atmel AVR

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

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

[ редактировать ]
Регистры Atmel AVR
2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (битовая позиция)
Регистры общего назначения
  Р1 Р0
  Р3 Р2
  Р5 Р4
  Р7 Р6
  Р9 Р8
  Р11 10 рэндов
  Р13 Р12
  15 рэндов Р14
  Р17 Р16
  Р19 Р18
  Р21 20 рэндов
  Р23 Р22
  25 рэндов Р24
  Р27 Р26 Х (указатель)
  Р29 Р28 Y (указатель)
  Р31 30 рандов Z (указатель)
Указатель стека
  СПХ СПЛ Указатель стека
Счетчик программ
ПК Программный счетчик
Расширенная память
  РАМПД Расширенный прямой
  RAMPX Расширенный X
  РАМПЫ Расширенный Y
  РАМПЗ Расширенный Z
  КОНЕЦ Расширенный косвенный
Регистр состояния
  я Т ЧАС С V Н С С КОМФОРТНЫЙ

Имеется 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. H Флаг полупереноса . Это внутренний перенос из сложений, который используется для поддержки арифметики BCD .
  7. T Битовая копия. Этот бит используется в специальных инструкциях по загрузке и сохранению битов.
  8. I Флаг прерывания . Устанавливается, когда прерывания разрешены.

Адресация

[ редактировать ]

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

  • Регистры общего назначения адресуются по их номерам (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 КиБ адресной памятью .

Зарегистрироваться Адрес ввода/вывода Адрес данных
КОМФОРТНЫЙ 0x3F 0x5F
СП 0x3E : 0x3D 0x5E : 0x5D
КОНЕЦ 0x3C 0x5C
РАМПЗ 0x3B 0x5B
РАМПЫ 0x3A 0x5A
RAMPX 0x39 0x59
РАМПД 0x38 0x58

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

Адрес данных Адрес ввода/вывода Содержание
0x0000 0x001F Регистры R0 – R31
0x0020 0x003F 0x00 0x1F Регистры ввода-вывода (с побитовой адресацией)
0x0040 0x005F 0x20 0x3F Регистры ввода-вывода (без побитовой адресации)
0x0060 0x00FF Расширенные регистры ввода-вывода (только ввод-вывод, отображаемый в памяти)
0x0100 РАМЕНД Внутреннее статическое ОЗУ

где RAMEND — последний адрес ОЗУ. В частях, где отсутствует расширенный ввод-вывод, ОЗУ будет начинаться с 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-битный адрес данных, охватывающий 64 КиБ ; в частях с объемом данных более 64 КиБ к началу добавляется содержимое регистра сегмента RAMPD.
  • P22 — 22-битный программный адрес, охватывающий 2 22 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
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   S12
ICALL
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) и расширяя диапазон портов ввода-вывода. Теперь первые 4 КБ — это регистры специальных функций, вторые 4 КБ — это флэш-память, а обычная оперативная память начинается с 8 КБ.
    • Нет необходимости явно отключать прерывания перед настройкой регистров указателя стека (SPL и SPH); любая запись в SPL автоматически отключает прерывания на 4 такта, чтобы дать время для обновления SPH.
    • Другие многобайтовые регистры снабжены теневыми регистрами для обеспечения атомарного чтения и записи. Когда считывается младший байт, байты более высокого порядка копируются в теневые регистры, поэтому при их позднем чтении создается снимок регистра на момент первого чтения. Запись в младшие байты буферизуется до тех пор, пока не будет записан старший байт, после чего весь многобайтовый регистр обновляется атомарно.
  5. Более поздние ядра XMEGA (в частности, модели B, C и AU, такие как ATxmega16A4U, но не более ранние модели A, D и E, такие как ATxmega16D4) добавляют четыре атомарные инструкции чтения-изменения-записи : обмен ( XCH), «загрузка и установка», «загрузка и очистка» и «загрузка и переключение». Они помогают координировать работу с периферийными устройствами прямого доступа к памяти , в частности с USB- контроллером.

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

Подмножество AVR1 не пользовалось популярностью, и с 2000 года не было представлено никаких новых моделей. В нем отсутствует вся оперативная память, за исключением 32 регистров, сопоставленных по адресам 0–31, и портов ввода-вывода по адресам 32–95. Стек заменяется трехуровневым аппаратным стеком, и PUSH и POP инструкции удалены. Все 16-битные операции удаляются, как и IJMP, ICALLи все режимы адресации загрузки и сохранения, кроме косвенной через Z.

Вторая, более успешная попытка подмножества набора команд AVR — это ядро ​​«AVR tiny».

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

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

  • SPM для сохранения во флэш-ПЗУ, имеется только на процессорах с флэш-ПЗУ (большинство из них)
  • BREAK для вызова встроенного отладчика не используется в некоторых небольших моделях без поддержки встроенного отладчика.
  • DES для выполнения раундов Data Encryption Standard , присутствует на моделях XMEGA с поддержкой ускорителя DES.

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

Семья Члены Арифметика Филиалы Трансферы Побитовый
Минимальное ядро ​​AVR1
  • АТ90С1200
  • ATtiny11
  • ATtiny12
  • ATtiny15
  • ATtiny28
  • ДОБАВИТЬ (LSL)
  • АЦП (РОЛ)
  • СУБ
  • СУБИ
  • СБК
  • SBCI
  • И (ТСТ)
  • ЭНДИ (ЦБ РФ)
  • ИЛИ
  • ОРИ (SBR)
  • МУН (CLR)
  • С
  • НЕГ
  • ИНК
  • Декабрь
  • РЖМП
  • RCALL
  • ВЕРНО
  • РЕДКО
  • КПСЕ
  • КП
  • КТК
  • ИПЦ
  • SBRC
  • СБРС
  • SBIC
  • СБИС
  • BRBS (BRCS, BRLO, BREQ, BRMI, BRVS, BRLT, BRHS, BRTS, BRIE)
  • BRBC (BRCC, BRSH, BRNE, BRPL, BRVC, BRGE, BRHC, BRTC, BRID)
  • ЛД
  • СТ
  • МОВ
  • ЛДИ (SER)
  • В
  • ВНЕ
  • Л/мин (нет в AT90S1200)
  • ВОО
  • CBI
  • ЛСР
  • РОР
  • АСР
  • МЕНЯТЬ
  • BSET (SEC, SEZ, SEN, SEV, SES, SEH, SET, SEI)
  • BCLR (CLC, CLZ, CLN, CLV, CLS, CLH, CLT, CLI)
  • летнее время
  • БЛД
  • НЕТ
  • СПАТЬ
  • WDR
Программное пространство Classic Core до 8K («AVR2»)
  • АТ90С2313
  • АТ90С2323
  • ATtiny22
  • АТ90С2333
  • АТ90С2343
  • АТ90С4414
  • АТ90С4433
  • АТ90С4434
  • АТ90С8515
  • AT90C8534
  • АТ90С8535
  • ATtiny26
новые инструкции:
  • АДИВ
  • СБИВ
новые инструкции:
  • IJMP
  • ВЫЗОВ
новые инструкции:
  • LD (теперь 9 режимов)
  • ЛДД
  • СПД
  • СТ (9 режимов)
  • СТД
  • СТС
  • ТОЛКАТЬ
  • ПОП
(ничего нового)
AVR2 с инструкциями MOVW и LPM («AVR2.5»)
  • Ата5272
  • ATtiny13/а
  • ATtiny2313/а
  • ATtiny24/а
  • ATtiny25
  • ATtiny261/а
  • ATtiny4313
  • ATtiny43u
  • ATtiny44/а
  • ATtiny45
  • ATtiny461/а
  • ATtiny48
  • ATtiny828
  • ATtiny84/а
  • ATtiny85
  • ATtiny861/а
  • ATtiny87
  • ATtiny88
(ничего нового) (ничего нового) новые инструкции:
  • МОВВ
  • ЛПМ (Rx, Z[+])
  • СЗМ
(ничего нового)
Классическое ядро ​​с разрешением до 128 КБ («AVR3»)
  • АТмега103
  • АТмега603
  • АТ43USB320
  • AT76C711
(ничего нового) новые инструкции:
  • СПМ
  • ВЫЗОВ
новые инструкции:
  • ELPM (в «AVR3.1»)
(ничего нового)
Enhanced Core с разрешением до 8K («AVR4»)
  • АТмега8
  • АТмега83
  • АТмега85
  • ATmega8515
новые инструкции:
  • У меня есть
  • ДОЕНИЕ
  • СМУЩЕННЫЙ
  • ФМУЛ
  • ФМУЛС
  • ФМУЛСУ [3]
(ничего нового) новые инструкции:
  • МОВВ
  • Л/мин (3 режима)
  • СЗМ
(ничего нового)
Расширенное ядро ​​до 128 КБ («AVR5», «AVR5.1»)
  • АТмега16
  • АТмега161
  • АТмега163
  • АТмега32
  • АТмега323
  • АТмега64
  • АТмега128
  • АТ43USB355
  • АТ94 (ФПСЛИК)
  • Серия AT90CAN
  • Серия AT90PWM
  • АТмега48
  • АТмега88
  • АТмега168
  • АТмега162
  • АТмега164
  • АТмега324
  • АТмега328
  • АТмега644
  • АТмега165
  • АТмега169
  • АТмега325
  • АТмега3250
  • АТмега645
  • ATmega6450
  • АТмега406
(ничего нового) новая инструкция:
  • ELPMX («AVR5.1»)
(ничего нового) новые инструкции:
  • ПЕРЕРЫВ
Расширенное ядро ​​до 4 МБ («AVR5» и «AVR6»)
  • АТмега640
  • АТмега1280
  • ATmega1281
  • АТмега2560
  • ATmega2561
(ничего нового) новые инструкции:
  • EIJMP
  • ЭИКЛЛ
(ничего нового) (ничего нового)
XMEGA Core («avrxmega» 2-6) серия ATxmega новые инструкции:
  • ПРИНАДЛЕЖАЩИЙ
(ничего нового) новые инструкции (из кремния второй ревизии - детали AU,B,C)
  • ХЧ
  • ТО
  • ЛАК
  • ГОДЫ
(ничего нового)
Уменьшенное ядро ​​AVRtiny («avrtiny10»)
  • ATtiny40
  • ATtiny20
  • ATtiny10
  • ATtiny9
  • ATtiny5
  • ATtiny4
(Идентичен минимальному ядру, за исключением уменьшенного набора регистров ЦП. а ) (Идентичен классическому ядру с разрешением до 8 КБ, за исключением уменьшенного набора регистров ЦП. а ) Идентичен классическому ядру с разрешением до 8K, за следующими исключениями:
л/мин (удаленный)
ЛДД (удаленный)
СТД (удаленный)
ЛД (также обращается к памяти программ)
СПД СТС (доступ ограничен первыми 128 байтами SRAM)
Уменьшенный набор регистров ЦП. а
(Идентичен расширенному ядру до 128 КБ, за исключением уменьшенного набора регистров ЦП. а )

а Сокращенный набор регистров ограничен R16–R31. [1]

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

[ редактировать ]

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

  • ррррр = Исходный регистр
  • 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)
  • аааааа = адрес пространства ввода-вывода
  • aaaaa = адрес пространства ввода-вывода (только первые 32)
  • bbb = номер бита (0–7)
  • B = значение бита (0 или 1)
  • kkkk = 4-битная константа без знака (код операции DES)
  • kkkkkkk = 6-битная беззнаковая константа
  • 𝑌𝐶𝐶𝐶𝐸𝐶𝐸 = 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
Инструкция
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 НЕТ
0 0 0 0 0 0 0 1 ДДДД р-р-р-р MOVW Rd,Rr Переместить пару регистров
0 0 0 0 0 0 1 0 дддд рррр МУЛС Роуд, Рр
0 0 0 0 0 0 1 1 0 ддд 0 ррр МУЛСУ Роуд, Рр
0 0 0 0 0 0 1 1 0 ддд 1 ррр FMUL Rd, Rr
0 0 0 0 0 0 1 1 1 ддд в ррр FMULS(U) Rd,Rr
0 0 код операции р ддддд рррр инструкции с двумя операндами
0 0 0 окей 0 1 р ддддд рррр КТК/КП Рд,Рр
0 0 0 окей 1 0 р ддддд рррр SBC/SUB Rd, Rr
0 0 0 сай 1 1 р ддддд рррр ADD/ADC Rd,Rr (LSL/ROL Rd, когда Rd=Rr)
0 0 0 1 0 0 р ддддд рррр CPSE Rd, Rr
0 0 1 0 0 0 р ддддд рррр И Рд, Рр
0 0 1 0 0 1 р ддддд рррр EOR Rd,Rr
0 0 1 0 1 0 р ддддд рррр ИЛИ Рд, Рр
0 0 1 0 1 1 р ддддд рррр МОВ Р-д, Р-р
0 0 1 1 КККК дддд КККК ИПЦ Рд,К
0 1 опк КККК дддд КККК Операции с немедленной регистрацией
0 1 0 окей КККК дддд КККК SBCI/SUBI Rd, K
0 1 1 0 КККК дддд КККК ОРИ Роуд, К
СБР Роуд,К
0 1 1 1 КККК дддд КККК ЭНДИ Роуд, К.
ЦБР Роуд,К
1 0 к 0 ок с ддддд и ккк LDD/STD Rd через Z+k или Y+k
1 0 0 1 0 0 с ддддд код операции Операции загрузки/сохранения
1 0 0 1 0 0 с ддддд 0 0 0 0 LDS rd,i/STS i,rd
16-битный непосредственный адрес SRAM i
1 0 0 1 0 0 с ддддд и 0 0 1 LD/ST Rd через Z+/Y+
1 0 0 1 0 0 с ддддд и 0 1 0 LD/ST Rd через −Z/−Y
1 0 0 1 0 0 0 ддддд 0 1 д 0 LPM/ELPM Rd,Z
1 0 0 1 0 0 0 ддддд 0 1 д 1 LPM/ELPM Rd,Z+
1 0 0 1 0 0 1 ддддд 0 1 0 0 XCH Z,Rd
1 0 0 1 0 0 1 ддддд 0 1 0 1 ЛАС З, Рд
1 0 0 1 0 0 1 ддддд 0 1 1 0 LAC Z, Rd
1 0 0 1 0 0 1 ддддд 0 1 1 1 LAT Z,Rd
1 0 0 1 0 0 с ддддд 1 1 0 0 LD/ST от Rd до X
1 0 0 1 0 0 с ддддд 1 1 0 1 LD/ST от Rd до X+
1 0 0 1 0 0 с ддддд 1 1 1 0 LD/ST от Rd до −X
1 0 0 1 0 0 с ддддд 1 1 1 1 POP/PUSH Rd
1 0 0 1 0 1 0 ддддд 0 код операции Инструкции с одним операндом:
1 0 0 1 0 1 0 ддддд 0 0 0 0 Ком Роуд
1 0 0 1 0 1 0 ддддд 0 0 0 1 НЕГ Роуд
1 0 0 1 0 1 0 ддддд 0 0 1 0 СВАП Роуд
1 0 0 1 0 1 0 ддддд 0 0 1 1 ИНК Роуд
1 0 0 1 0 1 0 ддддд 0 1 0 0 (сдержанный)
1 0 0 1 0 1 0 ддддд 0 1 0 1 АСР Роуд
1 0 0 1 0 1 0 ддддд 0 1 1 0 ЛСР Роуд
1 0 0 1 0 1 0 ддддд 0 1 1 1 РОР Роуд
1 0 0 1 0 1 0 0 Б̅ ббб 1 0 0 0 SEx/CLx Очистить/установить бит регистра состояния
1 0 0 1 0 1 0 1 код операции 1 0 0 0 Инструкции с нулевым операндом
1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0 ВЕРНО
1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0 РЕДКО
1 0 0 1 0 1 0 1 0 0 1 х 1 0 0 0 (сдержанный)
1 0 0 1 0 1 0 1 0 1 х х 1 0 0 0 (сдержанный)
1 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0 СПАТЬ
1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 0 ПЕРЕРЫВ
1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 WDR
1 0 0 1 0 1 0 1 1 0 1 1 1 0 0 0 (сдержанный)
1 0 0 1 0 1 0 1 1 1 0 д 1 0 0 0 ЛПМ/ЭЛПМ
1 0 0 1 0 1 0 1 1 1 1 0 1 0 0 0 СЗМ
1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 СЗМ Z+
1 0 0 1 0 1 0 с 0 0 0 и 1 0 0 1 Косвенный переход/вызов Z или EIND:Z
1 0 0 1 0 1 0 ддддд 1 0 1 0 Дек Роуд
1 0 0 1 0 1 0 0 хкккк 1 0 1 1 DES раунд k
1 0 0 1 0 1 0 ккккк 1 1 с к JMP/CALL abs22
Ккккккккккккккк
1 0 0 1 0 1 1 0 ок пп хкккк ADIW Rp,uimm6
1 0 0 1 0 1 1 1 ок пп хкккк SBIW Rp,uimm6
1 0 0 1 1 0 Б 0 ааааа ббб CBI/SBI a,b (очистить/установить бит ввода/вывода)
1 0 0 1 1 0 Б 1 ааааа ббб SBIC/SBIS a,b (проверка битов ввода-вывода)
1 0 0 1 1 1 р ддддд рррр MUL, без знака: R1:R0 = Rr × Rd
1 0 1 1 с аа ддддд аааа IN/OUT в пространство ввода/вывода
1 1 0 с 12-битное знаковое смещение RJMP/RCALL на ПК + simm12
1 1 1 0 КККК дддд КККК ЛДИ Роуд, К.
1 1 1 1 0 Б̅ 7-битное знаковое смещение ббб Условный переход по биту регистра состояния
1 1 1 1 1 0 с ддддд 0 ббб Бит регистра BLD/BST в STATUS.T
1 1 1 1 1 1 Б ддддд 0 ббб SBRC/SBRS пропускают, если бит регистра равен B
1 1 1 1 1 х х ддддд 1 ббб (сдержанный)
  1. ^ Перейти обратно: а б «Руководство по набору инструкций AVR» (PDF) . Атмел. Ноябрь 2016. Atmel-0856L.
  2. ^ «Использование инструментов GNU» . Руководство по AVR Libc . Проверено 6 мая 2018 г.
  3. ^ Атмел. Рекомендации по применению «AVR201: Использование аппаратного множителя AVR» . 2002. цитата: «MegaAVR — это серия новых устройств в семействе микроконтроллеров AVR RISC, которые включают, среди других новых усовершенствований, аппаратный умножитель».
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d7ca16b4b0408e8176d2d4e14e671516__1712936880
URL1:https://arc.ask3.ru/arc/aa/d7/16/d7ca16b4b0408e8176d2d4e14e671516.html
Заголовок, (Title) документа по адресу, URL1:
Atmel AVR instruction set - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)