Мнемоники 8-bit AVR ассемблер

Инструкции ветвления

Мнемоника Операнды Описание Операция Флаги ПЦ
RJMP k Относительный переход PC = PC + k + 1 Нет 2
IJMP Нет Косвенный переход на Z PC = Z Нет 2
EIJMP Нет Расширенный косвенный переход на Z STACK = PC + 1, PC(15:0) = Z, PC(21:16) = EIND Нет 2
JMP k Переход PC = k Нет 3
RCALL k Относительный вызов подпрограммы STACK = PC + 1, PC = PC + k + 1 Нет 3/4*
ICALL Нет Косвенный вызов подпрограммы по Z STACK = PC + 1, PC = Z Нет 3/4*
EICALL Нет Расширенный косвенный вызов подпрограммы по Z STACK = PC + 1, PC(15:0) = Z, PC(21:16) = EIND Нет 4*
CALL k Вызов подпрограммы STACK = PC + 2, PC = k Нет 4/5*
RET Нет Возврат из подпрограммы PC = STACK Нет 4/5*
RETI Нет Возврат из прерывания PC = STACK I 4/5*
CPSE Rd, Rr Сравнить, пропустить если равны if (Rd == Rr) PC = PC 2 or 3 Нет 1/2/3
CP Rd, Rr Сравнить R = Rd - Rr Z,C,N,V,H,S 1
CPC Rd, Rr Сравнить с учетом переноса R = Rd - Rr - C Z,C,N,V,H,S 1
CPI Rd, K8 Сравнить с константой R = Rd - K Z,C,N,V,H,S 1
SBRC Rr, b Пропустить если бит в регистре очищен if (Rr(b) == 0) PC = PC + 2 or 3 Нет 1/2/3
SBRS Rr, b Пропустить если бит в регистре установлен if (Rr(b) == 1) PC = PC + 2 or 3 Нет 1/2/3
SBIC P, b Пропустить если бит в регистре ввода/вывода очищен if (I/O(P,b) == 0) PC = PC + 2 or 3 Нет 1/2/3
SBIS P, b Пропустить если бит в регистре ввода/вывода установлен if (I/O(P,b) == 1) PC = PC + 2 or 3 Нет 1/2/3
BRBC s, k Относительный переход если статус-флаг s-ый очищен if (SREG(s) == 0) PC = PC + k + 1 Нет 1/2
BRBS s, k Относительный переход если статус-флаг s-ый установлен if (SREG(s) == 1) PC = PC + k + 1 Нет 1/2
BREQ k Относительный переход если равно if (Z == 1) PC = PC + k + 1 Нет 1/2
BRNE k Относительный переход если не равно if (Z == 0) PC = PC + k + 1 Нет 1/2
BRCS k Относительный переход если флаг переноса установлен if (C == 1) PC = PC + k + 1 Нет 1/2
BRCC k Относительный переход если флаг переноса очищен if(C==0) 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
BRMI k Относительный переход если минус if (N == 1) PC = PC + k + 1 Нет 1/2
BRPL k Относительный переход если плюс if (N == 0) PC = PC + k + 1 Нет 1/2
BRGE k Относительный переход если больше или равно со знаком if (S == 0) PC = PC + k + 1 Нет 1/2
BRLT k Относительный переход если меньше со знаком if (S == 1) PC = PC + k + 1 Нет 1/2
BRHS k Относительный переход если флаг полупереноса установлен if (H == 1) PC = PC + k + 1 Нет 1/2
BRHC k Относительный переход если флаг полупереноса очищен if (H == 0) PC = PC + k + 1 Нет 1/2
BRTS k Относительный переход если флаг T установлен if (T == 1) PC = PC + k + 1 Нет 1/2
BRTC k Относительный переход если флаг T очищен if (T == 0) PC = PC + k + 1 Нет 1/2
BRVS k Относительный переход если флаг переполнения установлен if (V == 1) PC = PC + k + 1 Нет 1/2
BRVC k Относительный переход если флаг переполнения очищен if (V == 0) PC = PC + k + 1 Нет 1/2
BRIE k Относительный переход если прерывания разрешены if (I == 1) PC = PC + k + 1 Нет 1/2
BRID k Относительный переход если прерывания запрещены if (I == 0) PC = PC + k + 1 Нет 1/2
Обозначения:
*Инструкция поддерживается не на всех устройствах

Rd : Регистр назначения

Rr : Регистр источник

R : Результат выполнения инструкции

k : Константа, размер зависит от инструкции

PC : Программный счетчик

EIND : Расширенный косвенный регистр (Extended Indirect Register)

STACK : Стек, оперативная память

C : Флаг переноса

Z : Флаг нуля

N : Флаг знака

V : Флаг переполнения

S : N EOR V, для знаковых проверок

H : Флаг внутреннего переноса

T : Пользовательский флаг

I : Флаг глобального разрешения/запрета прерываний