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