Операции перехода |
Мнемоника |
Описание |
Операция |
Изменяемые флаги |
Время исполнения (циклов) |
JMP K
|
Абсолютный переход |
PC <- K |
- |
3 |
CALL K
|
Абсолютный вызов |
PC <- K |
- |
4 (5) |
RJMP K
|
Относительный переход |
PC <- PC + K + 1 |
- |
2 |
RCALL K |
Относительный вызов |
PC <- PC + K + 1 |
- |
2 |
IJMP |
Косвенный переход |
PC(15:0) <- Z, PC(21:16) <- 0 |
- |
2 |
ICALL |
Косвенный вызов |
PC(15:0) <- Z, PC(21:16) <- 0 |
- |
2 |
EIJMP |
Косвенный переход |
PC(15:0) <- Z, PC(21:16) <- EIND |
- |
2 |
EICALL |
Косвенный вызов |
PC(15:0) <- Z, PC(21:16) <- EIND |
- |
2 |
RET |
Выход из процедуры |
PC <- STACK |
- |
4 (5) |
RETI |
Выход из процедуры прерывания |
PC <- STACK |
I |
4 (5) |
CPSE Rn,Rk |
Сравнить и пропустить, если равно |
if (Rn = Rk) PC <- PC + 2 or 3 |
- |
1 / 2 / 3 |
SBRC Rn,K |
Пропустить, если Rn(K) = 0 |
if (Rn(K) = 0) PC <- PC + 2 or 3 |
- |
1 / 2 / 3 |
SBRS Rn,K |
Пропустить, если Rn(K) = 1 |
if (Rn(K) = 1) PC <- PC + 2 or 3 |
- |
1 / 2 / 3 |
SBIC IR,K |
Пропустить, если IR(K) = 0 |
if (IR(K) = 0) PC <- PC + 2 or 3 |
- |
1 / 2 / 3 |
SBIS IR,K |
Пропустить, если IR(K) = 1 |
if (IR(K) = 1) PC <- PC + 2 or 3 |
- |
1 / 2 / 3 |
BRBS b,K |
Перейти, если SREG(b) = 1 |
if (SREG(b) = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRBC b,K |
Перейти, если SREG(b) = 0 |
if (SREG(b) = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BREQ K |
Перейти, если Z = 1 |
if (Z = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRNE K
|
Перейти, если Z = 0 |
if (Z = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRCC K |
Перейти, если C = 0 |
if (C = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRCS K |
Перейти, если C = 1 |
if (C = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRHC K |
Перейти, если H = 0 |
if (H = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRHS K |
Перейти, если H = 1 |
if (H = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRSH K |
Перейти, если больше или равно |
if (C = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRLO K |
Перейти, если меньше |
if (C = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRPL K |
Перейти, если больше или равно 0 |
if (N = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRMI K |
Перейти, если меньше 0 |
if (N = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRGE K |
Перейти, если больше или равно (со знаком) |
if (N + V = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRLT K |
Перейти, если меньше (со знаком) |
if (N + V = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRTC K |
Перейти, если T = 0 |
if (T = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRTS K |
Перейти, если T = 1 |
if (T = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRVC K |
Перейти, если V = 0 |
if (V = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRVS K |
Перейти, если V = 1 |
if (V = 1) PC <- PC + K + 1 |
- |
1 / 2 |
BRIE K |
Перейти, если I = 0 |
if (I = 0) PC <- PC + K + 1 |
- |
1 / 2 |
BRID K |
Перейти, если I = 1 |
if (I = 1) PC <- PC + K + 1 |
- |
1 / 2 |
Операции перемещения данных
|
Мнемоника |
Описание |
Операция |
Изменяемые флаги |
Время исполнения (циклов) |
MOV Rn,Rk |
Копировать Rk в Rn |
Rn <- Rk |
- |
1 |
MOVW Rn,Rk |
Копировать регистровую пару |
Rn+1:Rn <- Rk+1:Rk |
- |
1 |
LD Rn, Ri |
Загрузить из памяти данных, используя индексный регистр |
Rn <- (Ri) |
- |
2 |
LD Rn, Ri+ |
Rn <- (Ri), Ri <- Ri + 1 |
- |
2 |
LD Rn, -Ri |
Ri <- Ri - 1, Rn <- (Ri) |
- |
2 |
LDD Rn, Ri + q |
Rn <- (Ri + q) |
- |
2 |
LDI Rn,K |
Загрузить константу в регистр |
Rn <- K |
- |
1 |
LDS Rn,K |
Загрузить в регистр из памяти данных |
Rn <- (K) |
- |
2 |
LPM |
Загрузить из памяти программ |
R0 <- (Z) |
- |
3 |
LPM Rn, Z |
Rn <- (Z) |
- |
3 |
LPM Rn, Z+ |
Rn <- (Z), Z <- Z + 1 |
- |
3 |
ELPM |
R0 <- (RAMPZ:Z) |
- |
3 |
ELPM Rn, Z |
Rn <- (RAMPZ:Z) |
- |
3 |
ELPM Rn, Z+ |
Rn <- (RAMPZ:Z), Z <- Z + 1 |
- |
3 |
SPM |
Загрузить в память программ |
(Z) <- R1:R0 |
- |
3 |
STS K,Rn |
Загрузить в память данных |
(K) <- Rn |
- |
2 |
ST Ri, Rn |
Загрузить в память данных, используя индексный регистр |
(Ri) <- Rn |
- |
2 |
ST Ri+, Rn |
(Ri) <- Rn, Ri <- Ri + 1 |
- |
2 |
ST -Ri, Rn |
Ri <- Ri - 1, (Ri) <- Rn |
- |
2 |
STD Ri + q, Rn |
(Ri + q) <- Rn |
- |
2 |
IN Rn,I |
Прочитать I/O-регистр I в Rn |
Rn <- I |
- |
1 |
OUT I,Rn |
Записать Rn в I/O-регистр I |
I <- Rk |
- |
1 |
PUSH Rn |
Сохранить Rn в стеке |
STACK <- Rn |
- |
2 |
POP Rn |
Восстановить Rn из стека |
Rn <- STACK |
- |
2 |
SWAP Rn |
Обмен тетрад в регистре |
Rn(0...3) <- Rn(4...7), Rn(4...7) <- Rn(0...3) |
- |
1 |
Битовые операции |
Мнемоника |
Описание |
Операция |
Изменяемые флаги |
Время исполнения (циклов) |
LSL Rn |
Логический сдвиг влево |
R(n+1) <- R(n), R(0) <- 0, C <- R(7) |
S, Z, C, N, V, H |
1 |
LSR Rn |
Логический сдвиг вправо |
R(n) <- R(n+1), R(7) <- 0, C <- R(0) |
S, Z, C, N, V |
1 |
ROL Rn |
Сдвиг влево через перенос |
R(n+1) <- R(n), R(0) <- C, C <- R(7) |
S, Z, C, N, V, H |
1 |
ROR Rn |
Сдвиг вправо через перенос |
R(n) <- R(n+1), R(7) <- C, C <- R(0) |
S, Z, C, N, V |
1 |
ASR Rn |
Арифметический сдвиг вправо |
R(n) <- R(n+1), R(7) <- R(7) |
Z, C, N, V |
1 |
BSET b |
Установить бит в SREG |
SREG(b) <- 1 |
SREG(b) |
1 |
BCLR b |
Сбросить бит в SREG |
SREG(b) <- 0 |
SREG(b) |
1 |
CLC |
Сбросить флаг переноса |
C <- 0 |
C |
1 |
SEC |
Установить флаг переноса |
C <- 1 |
C |
1 |
CLN |
Сбросить флаг знака |
N <- 0 |
N |
1 |
SEN |
Установить флаг знака |
N <- 1 |
N |
1 |
CLZ |
Сбросить флаг нуля |
Z <- 0 |
Z |
1 |
SEZ |
Установить флаг нуля |
Z <- 1 |
Z |
1 |
CLI |
Сбросить флаг разрешения прерываний |
I <- 0 |
I |
1 |
SEI |
Установить флаг разрешения прерываний |
I <- 1 |
I |
1 |
CLS |
Сбросить флаг знака |
S <- 0 |
S |
1 |
SES |
Установить флаг знака |
S <- 1 |
S |
1 |
CLV |
Сбросить флаг переполнения |
V <- 0 |
V |
1 |
SEV |
Установить флаг переполнения |
V <- 1 |
V |
1 |
CLT |
Сбросить флаг T |
T <- 0 |
T |
1 |
SET |
Установить флаг T |
T <- 1 |
T |
1 |
CLH |
Сбросить флаг половинного переноса |
H <- 0 |
H |
1 |
SEH |
Установить флаг половинного переноса |
H <- 1 |
H |
1 |
CBI I,b |
Сбросить бит в I/O-регистре |
I(b) <- 0 |
- |
1 |
SBI I,b |
Установить бит в I/O-регистре |
I(b) <- 1 |
- |
1 |
BST Rn,b |
Загрузить флаг T битом из регистра |
I(b) <- 0 |
- |
1 |
BLD Rn,b |
Загрузить бит в регистре из флага T |
I(b) <- 1 |
- |
1 |