Система команд ассемблера для Atmel AVR

👁 145 просмотров

Предисловие

Подобных страниц, описывающих систему команд данной замечательной архитектуры микропроцессора очень много в сети Интернет. Поэтому не хотелось бы создать очередной обычный «велосипед», но наш «велосипед» будет особенным. Особенностью данной страницы будет то, чтобы вы не утруждались нажимать на ссылки на сторонние ресурсы и не утруждались по крупинкам собирать недостающие части информации по теме. Это очень удобно, если читаете через экран мобильного устройства или планшета.

Регистр статуса (SREG)

SREG: Регистр статуса
C: Флаг переноса
Z: Флаг нулевого значения
N: Флаг отрицательного значения
V: Флаг-указатель переполнения дополнения до двух
S: NЕV, Для проверок со знаком
H: Флаг полупереноса
T: Флаг пересылки, используемый командами BLD и BST
I: Флаг разрешения/запрещения глобального прерывания
Регистры и операнды
Rd: Регистр назначения (и источник) в регистровом файле
Rr: Регистр источник в регистровом файле
R: Результат выполнения команды
K: Литерал или байт данных (8 бит)
k: Данные адреса константы для счетчика программ
b: Бит в регистровом файле или I/O регистр (3 бита)
s: Бит в регистре статуса (3 бита)
X, Y, Z: Регистр косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
P: Адрес I/O порта
q: Смещение при прямой адресации (6 бит)

I/O регистры

RAMPX, RAMPY, RAMPZ: Регистры связанные с X, Y и Z регистрами, обеспечивающие косвенную адресацию всей области СОЗУ микроконтроллера с объемом СОЗУ более 64 Кбайт

Стек

STACK: Стек для адреса возврата и опущенных в стек регистров
SP: Указатель стека

Флаги

Флаг, на который воздействует команда
0 Очищенный командой Флаг
1 Установленный командой флаг
Флаг, на который не воздействует команда

Описание команд

ADC - Add with Carry, Сложить с переносом

Описание:
Сложение двух регистров и содержимого флага переноса (С), размещение результата в регистре назначения Rd.

Операнды:

Rd, Rr
Операция:

(i) Rd ← Rd + Rr + C
Синтаксис Операнды Счетчик программы
(i) ADC Rd, Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

16-разрядный код операции:

0001 11rd dddd rrrr

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
H Rd3•Rr3 + Rr3 + R3 + R3•Rd3
Устанавливается если есть перенос из бита 3, в ином случае очищается
S N⊕V, Для проверок со знаком
V Rd7•Rr7•R7 + Rd7•Rr7•R7
N R7
Устанавливается если в результате установлен MSB, в ином случае очищается
Z Rd7•Rr7•R7•R7•R7•Rd7
Устанавливается если результат $00, в ином случае очищается
C Rd7•Rr7 + Rr7 + R7 + R7•Rd7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rd после выполнения команды

Пример:

           ;СложитьR1 : R0 с R3 : R2
add r2, r0 ;Сложить младший байт
adc r3, r1 ;Сложить старший байт с переносом

w Слов:
1 (2 байта)
Циклов:
1

ADD - Add without Carry, Сложить без переноса

Описание:
Сложение двух регистров без добавления содержимого флага переноса (С), размещение результата в регистре назначения Rd.

Операнды:

Rd, Rr
Операция:

(i) Rd ← Rd + Rr + C
Синтаксис Операнды Счетчик программы
(i) ADC Rd, Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

16-разрядный код операции:

0001 11rd dddd rrrr

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
H Rd7•Rr7•R7 + Rd7•Rr7•R7
Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается
S N⊕V, Для проверок со знаком
V Rd7•Rr7•R7 + Rd7•Rr7•R7
N R7
Устанавливается если в результате установлен MSB, в ином случае очищается
Z R7•R6•R5•R4•R3•R2•R1•R0
Устанавливается если результат $00, в ином случае очищается
C Rd7•Rr7+Rr7•R7+R7•Rd7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rd после выполнения команды

Пример:

add r1,r2   ; Сложить r2 с r1 (r1=r1+r2)
adc r28,r28 ; Сложить r28 с самим собой
              (r28=r28+r28)

w Слов:
1 (2 байта)
Циклов:
1

ADIW - Add Immediate to Word, Сложить непосредственное значение со словом

Описание:
Сложение непосредственного значения (0-63) с парой регистров и размещение результата в паре регистров. Команда работает с четырьмя верхними парами регистров, удобна для работы с регистрами указателями.

Операнды:

Rd, K
Операция:

(i) Rdh:Rdl ← Rdh:Rdl + K
Синтаксис Операнды Счетчик программы
(i) ADIW Rdl, K dl ∈ {24,26,28,30}, 0 ≤ K ≤ 63 PC ← PC + 1

16-разрядный код операции:

1001 0110 KKdd KKKK

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
S N⊕V, Для проверок со знаком
V Rdh7 R15
N R15
Устанавливается если в результате установлен MSB, в ином случае очищается
Z R15•R14•R13•R12•R11•R10•R9•R8•R7•R6•R5•R4•R3•R2
Устанавливается если результат $0000, в ином случае очищается
C R15•Rdh7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rdh:Rdl после выполнения команды (Rdh7 — Rdh0 = R15 — R8, Rdl7 — Rdl0 = R7 — R0)

Пример:

adiw r24, 1  ; Сложить 1 с r25:r24
adiw r30, 63 ; Сложить 63 с Z указателем (r31 : r30)

w Слов:
1 (2 байта)
Циклов:
2

 

Продолжение следует…