Читайте также:
|
|
Таблица 5. Команды передачи управления (переходов, вызовов и возвратов подпрограмм)
Мнемоника | Операнды | Описание | Операция | Кол-во циклов |
RJMP | Adr12 | Переход короткий | PCPC+Adr12+1 | |
LJMP | Переход косвенный | PCZ | ||
JMP | Adr22 | Переход длинный | PCAdr22 | |
RCALL | Adr12 | Вызов подпрограммы короткий | (SP) PCL, SP-1, (SP-1) PCH, SP-1, PCPC+Adr12+1 | |
ICALL | Вызов подпрограммы косвенный | (SP) PCL, SP-1, (SP-1) PCH, PCZ | ||
CALL | Adr16 | Длинный вызов подпрограммы | (SP) PCL, (SP-1) PCH, SP-1, PCAdr16 | |
RET | Возврат из подпрограммы | SP+1, PCH (SP), SP+1, PCL (SP) | ||
RETI | Возврат из прерывания | SP+1, PCH (SP), SP+1, PCL (SP) | ||
CPSE | Rd,Rr | Если равны, то пропуск следующей команды | если Rd=Rr, то PCPC+2 (или3),иначе PC+1 | 1/2/3 |
SBRC | Rr,b | Если бит b в регистре РОН очищен, то пропуск следующей команды | if Rr(b)=0 then PCPC+2 (or 3) else PC+1 | 1/2/3 |
SBRS | Rr,b | Пропуск следующей команды, если бит в регистре установлен | if Rr(b)=1 then PCPC+2 (or 3) else PC+1 | 1/2/3 |
SBIS | I/O,b | Пропуск следующей команды, если бит в регистре I/O равен 1 | if I/OP(b)=1 then PCPC+2 (or 3) else PC+1 | 1/2/3 |
SBIC | I/O,b | Пропуск следующей команды, если бит в регистре I/O очищен | if I/OP(b)=0 then PCPC+2 (or 3) else PC+1 | 1/2/3 |
BRBS | s,rel | Переход, если в регистре SREG установлен бит s | if SREG(s)=1 then PCPC+rel+1 | 1/2 |
BRBC | s,rel | Переход, если в регистре SREG очищен бит s | if SREG(s)=0 then PCPC+rel+1 | 1/2 |
BREQ | rel | Переход, если результат равен нулю | if Z=1 then PCPC+rel+1 | 1/2 |
BRNE | rel | Переход, если резуль- тат не равен нулю | if Z=0 then PCPC+rel+1 | 1/2 |
BRCS | rel | Переход, если флаг переноса установлен | if С=1 then PCPC+rel+1 | 1/2 |
BRCC | rel | Переход, если флаг переноса очищен | if С=0 then PCPC+rel+1 | 1/2 |
BRMI | rel | Переход, если минус | if N=1 then PCPC+rel+1 | 1/2 |
BRPL | rel | Переход, если плюс | if N=0 then PCPC+rel+1 | 1/2 |
BRGE | rel | Переход, если больше или равно (с учетом знака) | if NÅV=0 then PCPC+rel+1 | 1/2 |
BRLT | rel | Переход, если меньше (со знаком) | if NÅV=1 then PCPC+rel+1 | 1/2 |
BRHS | rel | Переход, если флаг полупереноса установлен | if H=1 then PCPC+rel+1 | 1/2 |
BRHC | rel | Переход, если флаг полупереноса очищен | if H=0 then PCPC+rel+1 | 1/2 |
BRTS | rel | Переход, если флаг Т установлен | if Т=1 then PCPC+rel+1 | 1/2 |
BRTC | rel | Переход, если флаг Т очищен | if Т=0 then PCPC+rel+1 | 1/2 |
BRVS | rel | Переход, если флаг переполнения установлен | if V=1 then PCPC+rel+1 | 1/2 |
BRVC | rel | Переход, если флаг переполнения очищен | if V=0 then PCPC+rel+1 | 1/2 |
BRIE | rel | Переход, если гло- бальное прерывание разрешено | if I=1 then PCPC+rel+1 | 1/2 |
BRID | rel | Переход, если гло- бальное прерывание запрещено | if I=0 then PCPC+rel+1 | 1/2 |
К этой группе команд относятся команды вызовов и возвратов из подпрограмм и переходов. Команды безусловных переходов и вызовов подпрограмм имеют прямой, относительный и косвенный способы адресации. Командами JMP и CALL обеспечиваются безусловный переход и вызов подпрограммы в пределах всего адресного пространства программной памяти 4М байт микроконтроллеров старших моделей семейства AVR. Длина этих команд составляет два слова (команда занимает две ячейки памяти).
Команды RJMP и RCALL обеспечивают переход и вызов подпрограммы в пределах 2К байт адресного пространства программной памяти. При выполнении этих команд 12-разрядное смещение адреса (Adr12) добавляется к содержимому программного счетчика РС. Формат команд составляет 1 слово.
Команды IJMP и ICALL обеспечивают косвенный переход и вызов подпрограммы по адресу, размещенному в регистре Z (содержимое регистра Z помещается в счетчик команд). Формат команд составляет 1 слово.
В составе команд условных переходов имеется 5 команд, по которым выполняется операция пропуска следующей команды при выполнении условия в команде. В зависимости от выполнения или невыполнения условия, а также от длины пропускаемой следующей команды эти команды могут иметь от одного до трех циклов. Второй цикл необходим для считывания двухбайтной команды, размещенной по адресу перехода. Если длина пропускаемой команды составляет два слова, то при выполнении условия команда выполняется за три цикла. Условия пропуска следующей команды: равенство содержимого двух регистров общего назначения и состояние бита в любом регистре. Обычно в качестве следующей команды используется команда безусловного перехода.
“Классические” условные переходы представлены командами коротких переходов в соответствии с состояниями любого из разрядов регистра состояния SREG. Например: по команде BRNE rel осуществляется переход, если результат операции не равен нулю, т.е. если флаг Z имеет нулевое значение. Если результат операции равен нулю(флаг Z=1), то будет выполняться следующая команда. Условные переходы осуществляются в пределах смещения rel =– 64 ÷ +63 от текущего состояния счетчика команд.
Для обеспечения более длинных переходов по адресу перехода помещают команду безусловного перехода.
2.6.3 Команды арифметики и логики (вычислительные)
Таблица 6. Арифметические и логические команды
Мнемоника | Операнды | Описание | Операция | Флаги | Циклов |
ADD | Rd,Rr | Сложить регистры без переноса | Rd Rd + Rr | Z,C,N,V,H | |
ADC | Rd,Rr | Сложить регистры с переносом | RdRd + Rr + C | Z,C,N,V,H | |
ADIW | Rd,D6 | Сложить операнд D6 со словом | Rdh:Rdl Rdh:Rdl+D6 | Z,C,N,V | |
SUB | Rd,Rr | Вычесть регистры без заема | RdRd – Rr | Z,C,N,V,H | |
SUBI * | Rd,D8 | Вычесть байт D8 R16 Rd R31 | RdRd - D8 | Z,C,N,V,H | |
SBC | Rd,Rr | Вычесть с заемом | RdRd – Rr - С | Z,C,N,V,H | |
SBСI * | Rd,D8 | Вычесть байт D8 R16 Rd R31 | RdRd - D8 - С | Z,C,N,V,H | |
SBIW | Rd,D6 | Вычесть операнд D6 из слова | Rdh:Rdl Rdh:Rdl - D6 | Z,C,N,V | |
MUL | Rd,Rr | Умножение беззнаковых целых | R1:R0Rd x Rr | Z,C | |
MULS* | Rd,Rr | Умножение целых со знаком | R1:R0Rd x Rr | Z,C | |
MULSU* | Rd,Rr | Умножение беззнакового на знаковое | R1:R0Rd x Rr | Z,C | |
FMUL* | Rd,Rr | Умножение дробных беззнаковых | R1:R0Rd x Rr | Z,C | |
FMULS* | Rd,Rr | Умножение дробных знаковых | R1:R0Rd x Rr | Z,C | |
FMULSU* | Rd,Rr | Умножение беззнакового на знаковое дробных | R1:R0Rd x Rr | Z,C | |
AND | Rd,Rr | Логическое И | RdRd & Rr | Z,N,V | |
ANDI* | Rd,D8 | Операция И с байтом D8 | RdRd & D8 | Z,N,V | |
OR | Rd,Rr | Логическое ИЛИ | RdRd v Rr | Z,N,V | |
ORI* | Rd,D8 | Логическое ИЛИ с байтом D8 | RdRd v D8 | Z,N,V | |
EOR | Rd,Rr | Исключающее ИЛИ | RdRd Å Rr | Z,N,V | |
COM | Rd | Инверсия | Rd$FF - Rd | Z,C,N,V | |
NEG | Rd | Дополнительный код | Rd$00 - Rd | Z,C,N,V | |
SBR * | Rd,D8 | Установить биты в Rd по байту D8 | RdRd v D8 | Z,N,V | |
CBR* | Rd,D8 | Очистить биты в регистре по байту D8 | RdRd & ($FF-D8) | Z,N,V | |
INC | Rd | Инкрементировать | RdRd +1 | Z,N,V | |
DEC | Rd | Декрементировать | RdRd -1 | Z,N,V | |
TST | Rd | Проверить на ноль | RdRd & Rd | Z,N,V | |
CLR | Rd | Очистить регистр | RdRd Å Rd | Z,N,V | |
SER* | Rd | Установить все биты регистра | Rd$FF | ||
CP | Rd,Rr | Сравнить регистры | Rd - Rr | Z,C,N,V,H | |
CPC | Rd,Rr | Сравнить с учетом переноса | Rd – Rr - С | Z,C,N,V,H | |
CPI | Rd,D8 | Сравнить с байтом D8 | Rd - D8 | Z,C,N,V,H |
Команды, выполняющие операции с непосредственным операндом (в аббревиатуре команд присутствует буква I, а также команды SBR,CBR и SER используют только верхние регистры R16-R31. Эти команды помечены в таблице знаком *. В командах умножения (кроме команды MUL) в качестве операндов могут использоваться только регистры R16 – R23. Эти команды отмечены знаком **.
В основном, операции выполняются над 8-разрядными операндами. Однако командами ADIW и SBIW выполняются операции над словами (два байта), причем эти команды являются командами с непосредственным операндом, предельное значение которого равно 63. Первый операнд в этих командах может размещаться в одной из 4-х пар самых верхних регистров общего назначения R25-R24, R27-R26, R29-R28, R31-R30. В аббревиатуре команды записывают только младший регистр пары. Например: ADIW R24,50 – сложить содержимое регистров R25 и R24 со значением 50.
При выполнении арифметических и логических команд устанавливаются признаки результатов операций (флаги) регистра состояний SREG.
Некоторые команды выполняют одинаковые операции (имеют одинаковый код), но имеют разную мнемонику. Например, команды ORI и SBR. Это улучшает читаемость команд, например, SBR R17,$55 – установить биты в регистре R17 по байту $55.
Команды сравнения CP,CPC и CPI выполняются вычитанием операндов, однако результат операции не сохраняется, а устанавливаются признаки ее.
Дата добавления: 2015-07-20; просмотров: 124 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Команды передачи данных (пересылки) | | | Команды сдвигов и операций с битами |