Относительная адресация памяти программ
После операций RJMP или RCALL выполнение программы продолжается с адреса PC+k+l. Относительный адрес к может составлять от-2048 до 2047.
PC +k
PC+k+1 ->PC
Система команд AVR
Арифметические и логические команды
Мнемоника
| Описание
| Действие
| Флаги
| Циклы
| ADD Rd.Rr
| Сложить два регистра
| Rd<Rd+Rr
| Z,C,N,V,H
|
| ADC Rd.Rr
| Сложить с переносом
| Rd<Rd+Rr+C
| Z,C,N,V,H
|
| ADIW Rdl.K
| Сложить слово с константой
| Rdh,KRdh,l+K
| Z,C,N,V,S
|
| SUB Rd.Rr
| Вычесть два регистра
| Rd<Rd-Rr
| Z,C,N,V,H
|
| SUBI Rd,K
| Вычесть константу
| Rd<Rd-K
| Z,C,N,V,H
|
| SBIW Rdl.K
| Вычесть слово с константой
| Rdh.KRdh.l-K
| Z,C,N,V,S
|
| SBC Rd.Rr
| Вычесть с переносом
| Rd<Rd-Rr-C
| Z,C,N,V,H
|
| SBCI Rd,K
| Вычесть с переносом
| Rd<Rd-K-C
| Z,CSN,V,H
|
| AND Rd,Rr
| Логическое И
| Rd<RdANDRr
| Z,N,V
|
| ANDI Rd.K
| Логическое И
| Rd<RdANDK
| Z.N.V
|
| OR Rd,Rr
| Логическое ИЛИ
| Rd<Rd OR Rr
| Z.N.V
|
| ORI Rd.K
| Логическое ИЛИ
| Rd<RdORK
| Z.N.V
|
| EOR Rd.Rr
| Исключающее ИЛИ
| Rd<RdXORRr
| Z,N,V
|
| COMRd
| Дополнение до 1
| Rd<$FF-Rd
| Z,C,N,V
|
| NEGRd
| Дополнение до 2
| Rd<$00 - Rd
| Z,C,N,V,H
|
| SBR Rd,K
| Установить бит(ы) в регистре
| Rd<Rd OR К
| Z,N,V
|
| CBR Rd.K
| Сбросить бит(ы) в регистре
| Rd<RdAND(FFh-K)
| Z,N,V
|
| INCRd
| Увеличить на 1
| Rd<Rd+1
| Z,N,V
|
| DECRd
| Уменьшить на 1
| Rd<Rd-1
| Z,N,V
|
| TSTRd
| Проверить на 0 или
| Rd<RdANDRd
| Z,N,V
|
| CLRRd
| Очистить регистр
| Rd<RdXORRd
| Z,N,V
|
| SERRd
| Установить регистр
| Rd<$FF
| None
|
|
Команды ветвления
Мнемоник
| Описание
| Действие
| Флаги
| Циклы
| RJMPk
| Относительный переход
| РС<РС+к+1
| None
|
| LJMP
| Переход по адресу (Z)
| PC<Z
| None
|
| RCALLk
| Относительный вызов подпрограммы
| РС<РС+к+1
| None
|
| ICALL
| Вызов подпрограммы по адресу (Z)
| PC<Z
| None
|
| RET
| Выход из подпрограммы
| PC<STACK
| None
|
| REfl
| Выход из прерывания
| PC<STACK
| S
|
| CPSERd.Rr
| Сравнить, пропуск, если равно
| if(Rd=Rr) PC<PC+2 или З
| None
| 1/2
| CP Rd,Rr
| Сравнить
| Rd-Rr
| Z.N.V.C.H
|
| CPC Rd.Rr
| Сравнить с переносом
| Rd-Rr-C
| Z,N,V,C,H
|
| CPI Rd,K
| Сравнить с константой
| Rd-K
| Z,N,V,C,H
|
| BREQk
| Переход, если равно
| if(Z=1)PC<PC+k+1
| None
| 1/2
| BRNEk
| Переход, если неравно
| if(Z=0)PC<PC+k+1
| None
| 1/2
| BRCSk
| Переход, если установлен перенос
| if(C=1)PC<PC+k+1
| None
| 1/2
| BRCCk
| Переход, если сброшен перенос
| if(C=O) PC<PC+k+1
| None
| 1/2
| BRSHk
| Переход, если равно или больше
| if(C=O) PC<PC+k+1
| None
| 1/2
| BRLO к
| Переход, если меньше
| if(C=1)PC<PC+k+1
| None
| 1/2
| BRMIk
| Переход, если минус
| if(N=1)PC<PC+k+1
| None
| 1/2
| BRPLk
| Переход, если плюс
| if(N=O) PC<PC+k+1
| None
| 1/2
| BRGEk
| Переход, если больше или равно со знаком
| if(NXORV=0)PC<PC+k+1
| None
| 1/2
| BRLTk
| Переход, если меньше нуля со знаком
| if(NXORV=1)PC<PC+k+1
| None
| 1/2
|
Команды пересылки
Мнемони
| Описание
| Действие
| Флаги
| Циклы
| MOVRd.Rr
| Пересылка между регистрами
| Rd<Rr
| None
|
| LDI Rd,K
| Загрузить константу
| Rd<K
| None
|
| LDRd,X
| Загрузить регистр непосредственно
| Rd<(X)
| None
|
| LD Rd,X+
| Загрузить регистр непосредственно с постинкрементом
| Rd<(X),X<X+1
| None
|
| ID Rd,-X
| Загрузить регистр непосредственно с предварительным декрементом
| X<X-1,Rd<(X)
| None
|
| LDRd.Y
| Загрузить регистр непосредственно
| Rd<(Y)
| None
|
| LD Rd,Y+
| Загрузить регистр непосредственно с постинкремент.
| Rd<(Y),Y<Y+1
| None
|
| LD Rd,-Y
| Загрузить регистр непосредственно с предварительным декрементом
| Y<Y-1,Rd<(Y)
| None
|
| LDD Rd,Y+q
| Загрузить регистр непосредственно со смещением
| Rd<(Y+q)
| None
|
| U)Rd,Z
| Загрузить регистр непосредственно
| Rd<(Z)
| None
|
| LD Rd,Z+
| Загрузить регистр непосредственно с постинкрементом
| Rd<(Z),Z<Z+1
| None
|
| LD Rd,-Z
| Загрузить регистр непосредственно с предварительным декрементом
| Z<Z-1,Rd<(Z)
| None
|
| LDD Rd,Z+q
| Загрузить регистр непосредственно со смещением
| Rd<(Z+q)
| None
|
| LDS Rd,k
| Загрузить из ОЗУ
| Rd<(k)
| None
|
| STX,Rr
| Записать регистр непосредственно
| (X)<Rr
| None
|
| STX+,Rr
| Записать регистр непосредственно с постинкрементом
| (X)<Rr,X<X+1
| None
|
| ST -X,Rr
| Записать регистр непосредственно с предварительным декрементом
| X<X-1,(X)<Rr
| None
|
| STY,Rr
| Записать регистр непосредственно
| (Y)<Rr
| None
|
| STY+.Rr
| Записать регистр непосредственно с постинкрементом
| (Y)<Rr,Y<Y+1
| None
|
| ST -Y.Rr
| Записать регистр непосредственно с пред.декрементом
| Y<Y-1,(Y)<Rr
| None
|
| STDY+q.Rr
| Записать регистр непосредственно со смещением
| (Y+q)<Rr
| None
|
| STZ,Rr
| Записать регистр непосредственно
| (Z)<Rr
| None
|
| STZ+.Rr
| Записать регистр непосредственно с постинкрементом
| (Z)<Rr,Z<Z+1
| None
|
| ST-Z,Rr
| Записать регистр непосредственно с предварительным декрементом
| Z<Z-1,(Z)<Rr
| None
|
| STDY+q.Rr
| Запись регистра непосредственно со смещением
| (Y+q)<Rr
| None
|
| STSk.Rr
| Записать в ОЗУ
| (k)<Rr
| None
|
| LPM
| Загрузка из памяти программ
| R0<(Z)
| None
|
| IN Rd, P
| Ввод из порта
| Rd<P
| None
|
| OUTP.Rr
| Вывод в порт
| P<Rr
| None
|
| PUSH Rr
| Записать в стек
| STACK<Rr
| None
|
| POPRr
| Прочитать из стека
| Rr<STACK
| None
|
|
Читайте также: Воспользуйтесь поиском по сайту:
|