Справка по Ассемблеру для AVR

         

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




Мнемоника Операнды Описание Операция Флаги Циклы
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 , добавьте пять циклов плюс по три цикла на каждое ожидание.



Содержание раздела