AVR АТMEGA 128
ПРИЛОЖЕНИЕ Б ИНСТРУКЦИИ ПРОЦЕССОРОВ AVR
Таблица Б.1 – Арифметические и логические команды
Мнемоника
| Операнды
| Описание
| Операция
| Флаги
| Циклы
| ADD
| Rd,Rr
| Суммирование без переноса
| Rd = Rd + Rr
| Z,C,N,V,H,S
|
| ADC
| Rd,Rr
| Суммирование с переносом
| Rd = Rd + Rr + C
| Z,C,N,V,H,S
|
| SUB
| Rd,Rr
| Вычитание без переноса
| Rd = Rd - Rr
| Z,C,N,V,H,S
|
| SUBI
| Rd,K8
| Вычитание константы
| Rd = Rd - K8
| Z,C,N,V,H,S
|
| SBC
| Rd,Rr
| Вычитание с переносом
| Rd = Rd - Rr - C
| Z,C,N,V,H,S
|
| SBCI
| Rd,K8
| Вычитание константы с переносом
| Rd = Rd - K8 - C
| Z,C,N,V,H,S
|
| AND
| Rd,Rr
| Логическое И
| Rd = Rd · Rr
| Z,N,V,S
|
| ANDI
| Rd,K8
| Логическое И с константой
| Rd = Rd · K8
| Z,N,V,S
|
| OR
| Rd,Rr
| Логическое ИЛИ
| Rd = Rd V Rr
| Z,N,V,S
|
| ORI
| Rd,K8
| Логическое ИЛИ с константой
| Rd = Rd V K8
| Z,N,V,S
|
| EOR
| Rd,Rr
| Логическое исключающее ИЛИ
| Rd = Rd EOR Rr
| Z,N,V,S
|
| COM
| Rd
| Побитная Инверсия
| Rd = $FF - Rd
| Z,C,N,V,S
|
| NEG
| Rd
| Изменение знака (Доп. код)
| Rd = $00 - Rd
| Z,C,N,V,H,S
|
| SBR
| Rd,K8
| Установить бит (биты) в регистре
| Rd = Rd V K8
| Z,C,N,V,S
|
| CBR
| Rd,K8
| Сбросить бит (биты) в регистре
| Rd = Rd · ($FF - K8)
| Z,C,N,V,S
|
| INC
| Rd
| Инкрементировать значение регистра
| Rd = Rd + 1
| Z,N,V,S
|
| DEC
| Rd
| Декрементировать значение регистра
| Rd = Rd -1
| Z,N,V,S
|
| TST
| Rd
| Проверка на ноль либо отрицательность
| Rd = Rd · Rd
| Z,C,N,V,S
|
| CLR
| Rd
| Очистить регистр
| Rd = 0
| Z,C,N,V,S
|
| SER
| Rd
| Установить регистр
| Rd = $FF
| None
|
| ADIW
| Rdl,K6
| Сложить константу и слово
| Rdh:Rdl = Rdh:Rdl + K6
| Z,C,N,V,S
|
| SBIW
| Rdl,K6
| Вычесть константу из слова
| Rdh:Rdl = Rdh:Rdl - K6
| Z,C,N,V,S
|
| MUL
| Rd,Rr
| Умножение чисел без знака
| R1:R0 = Rd * Rr
| Z,C
|
| MULS
| Rd,Rr
| Умножение чисел со знаком
| R1:R0 = Rd * Rr
| Z,C
|
| MULSU
| Rd,Rr
| Умножение числа со знаком с числом без знака
| R1:R0 = Rd * Rr
| Z,C
|
| FMUL
| Rd,Rr
| Умножение дробных чисел без знака
| R1:R0 = (Rd * Rr) << 1
| Z,C
|
| FMULS
| Rd,Rr
| Умножение дробных чисел со знаком
| R1:R0 = (Rd *Rr) << 1
| Z,C
|
| FMULSU
| Rd,Rr
| Умножение дробного числа со знаком с числом без знака
| R1:R0 = (Rd * Rr) << 1
| Z,C
|
| Таблица Б.2 – Команды ветвления
Мнемоника
| Операнды
| Описание
| Операция
| Флаги
| Циклы
|
|
|
|
|
|
| RJMP
| k
| Относительный переход
| PC = PC + k +1
| None
|
| IJMP
| Нет
| Косвенный переход на (Z)
| PC = Z
| None
|
| EIJMP
| Нет
| Расширенный косвенный переход на (Z)
| STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND
| None
|
| JMP
| k
| Переход
| PC = k
| None
|
| RCALL
| k
| Относительный вызов подпрограммы
| STACK = PC+1, PC = PC+k+1
| None
| 3/4*
| ICALL
| Нет
| Косвенный вызов (Z)
| STACK = PC+1, PC = Z
| None
| 3/4*
| EICALL
| Нет
| Расширенный косвенный вызов (Z)
| STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND
| None
| 4*
| CALL
| k
| Вызов подпрограммы
| STACK = PC+2, PC = k
| None
| 4/5*
| RET
| Нет
| Возврат из подпрограммы
| PC = STACK
| None
| 4/5*
| RETI
| Нет
| Возврат из прерывания
| PC = STACK
| I
| 4/5*
| CPSE
| Rd,Rr
| Сравнить, пропустить если равны
| if (Rd ==Rr) PC = PC 2 or 3
| None
| 1/2/3
| CP
| Rd,Rr
| Сравнить
| Rd -Rr
| Z,C,N,V,H,S
|
| CPC
| Rd,Rr
| Сравнить с переносом
| Rd - Rr - C
| Z,C,N,V,H,S
|
| CPI
| Rd,K8
| Сравнить с константой
| Rd - K
| Z,C,N,V,H,S
|
| SBRC
| Rr,b
| Пропустить, если бит в регистре очищен
| if(Rr(b)==0) PC = PC+2 or 3
| None
| 1/2/3
| SBRS
| Rr,b
| Пропустить, если бит в регистре установлен
| if(Rr(b)==1) PC = PC+2 or 3
| None
| 1/2/3
| SBIC
| P,b
| Пропустить, если бит в порту очищен
| if(I/O(P,b)==0) PC = PC+ or 3
| None
| 1/2/3
| SBIS
| P,b
| Пропустить, если бит в порту установлен
| if(I/O(P,b)==1) PC = PC+2 or 3
| None
| 1/2/3
| BRBC
| s,k
| Перейти, если флаг в SREG очищен
| if(SREG(s)==0) PC = PC+k+1
| None
| 1/2
| BRBS
| s,k
| Перейти, если флаг в SREG установлен
| if(SREG(s)==1) PC = PC+k+1
| None
| 1/2
| BREQ
| k
| Перейти, если равно
| if(Z==1) PC = PC + k + 1
| None
| 1/2
| BRNE
| k
| Перейти, если не равно
| if(Z==0) PC = PC + k + 1
| None
| 1/2
| BRCS
| k
| Перейти, если перенос установлен
| if(C==1) PC = PC + k + 1
| None
| 1/2
| BRCC
| k
| Перейти, если перенос очищен
| if(C==0) PC = PC + k + 1
| None
| 1/2
| BRSH
| k
| Перейти, если равно или больше
| if(C==0) PC = PC + k + 1
| None
| 1/2
| BRLO
| k
| Перейти, если меньше
| if(C==1) PC = PC + k + 1
| None
| 1/2
| BRMI
| k
| Перейти, если минус
| if(N==1) PC = PC + k + 1
| None
| 1/2
| BRPL
| k
| Перейти, если плюс
| if(N==0) PC = PC + k + 1
| None
| 1/2
| BRGE
| k
| Перейти, если больше или равно (со знаком)
| if(S==0) PC = PC + k + 1
| None
| 1/2
| BRLT
| k
| Перейти, если меньше (со знаком)
| if(S==1) PC = PC + k + 1
| None
| 1/2
|
Продолжение таблицы Б.2
|
|
|
|
|
| BRHS
| k
| Перейти, если флаг внутреннего переноса установлен
| if(H==1) PC = PC + k + 1
| None
| 1/2
| BRHC
| k
| Перейти, если флаг внутреннего переноса очищен
| if(H==0) PC = PC + k + 1
| None
| 1/2
| BRTS
| k
| Перейти, если флаг T установлен
| if(T==1) PC = PC + k + 1
| None
| 1/2
| BRTC
| k
| Перейти, если флаг T очищен
| if(T==0) PC = PC + k + 1
| None
| 1/2
| BRVS
| k
| Перейти, если флаг переполнения установлен
| if(V==1) PC = PC + k + 1
| None
| 1/2
| BRVC
| k
| Перейти, если флаг переполнения очищен
| if(V==0) PC = PC + k + 1
| None
| 1/2
| BRIE
| k
| Перейти, если прерывания разрешены
| if(I==1) PC = PC + k + 1
| None
| 1/2
| BRID
| k
| Перейти, если прерывания запрещены
| if(I==0) PC = PC + k + 1
| None
| 1/2
| * Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC, меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ, свыше 128KB, добавьте пять циклов плюс по три цикла на каждое ожидание.
Таблица Б.3 – Команды пересылки данных
Мнемоника
| Операнды
| Описание
| Операция
| Флаги
| Циклы
| MOV
| Rd,Rr
| Скопировать регистр
| Rd = Rr
| –
|
| MOVW
| Rd,Rr
| Скопировать пару регистров
| Rd+1:Rd = Rr+1:Rr, r,d even
| –
|
| LDI
| Rd,K8
| Загрузить константу
| Rd = K
| –
|
| LDS
| Rd,k
| Прямая загрузка
| Rd = (k)
| –
| 2*
| LD
| Rd,X
| Косвенная загрузка
| Rd = (X)
| –
| 2*
| LD
| Rd,X+
| Косвенная загрузка с пост-инкрементом
| Rd = (X), X=X+1
| –
| 2*
| LD
| Rd,-X
| Косвенная загрузка с пре-декрементом
| X=X-1, Rd = (X)
| –
| 2*
| LD
| Rd,Y
| Косвенная загрузка
| Rd = (Y)
| –
| 2*
| LD
| Rd,Y+
| Косвенная загрузка с пост-инкрементом
| Rd = (Y), Y=Y+1
| –
| 2*
| LD
| Rd,-Y
| Косвенная загрузка с пре-декрементом
| Y=Y-1, Rd = (Y)
| –
| 2*
| LDD
| Rd,Y+q
| Косвенная загрузка с замещением
| Rd = (Y+q)
| –
| 2*
| LD
| Rd,Z
| Косвенная загрузка
| Rd = (Z)
| –
| 2*
| LD
| Rd,Z+
| Косвенная загрузка с пост-инкрементом
| Rd = (Z), Z=Z+1
| –
| 2*
| LD
| Rd,-Z
| Косвенная загрузка с пре-декрементом
| Z=Z-1, Rd = (Z)
| –
| 2*
| LDD
| Rd,Z+q
| Косвенная загрузка с замещением
| Rd = (Z+q)
| –
| 2*
| STS
| k,Rr
| Прямое сохранение
| (k) = Rr
| –
| 2*
| ST
| X,Rr
| Косвенное сохранение
| (X) = Rr
| –
| 2*
| ST
| X+,Rr
| Косвенное сохранение с пост-инкрементом
| (X) = Rr, X=X+1
| –
| 2*
| ST
| -X,Rr
| Косвенное сохранение с пре-декрементом
| X=X-1, (X)=Rr
| –
| 2*
| ST
| Y,Rr
| Косвенное сохранение
| (Y) = Rr
| –
| 2*
| ST
| Y+,Rr
| Косвенное сохранение с пост-инкрементом
| (Y) = Rr, Y=Y+1
| –
|
| ST
| -Y,Rr
| Косвенное сохранение с пре-декрементом
| Y=Y-1, (Y) = Rr
| –
|
| ST
| Y+q,Rr
| Косвенное сохранение с замещением
| (Y+q) = Rr
| –
|
| ST
| Z,Rr
| Косвенное сохранение
| (Z) = Rr
| –
|
| ST
| Z+,Rr
| Косвенное сохранение с пост-инкрементом
| (Z) = Rr, Z=Z+1
| –
|
| ST
| -Z,Rr
| Косвенное сохранение с пре-декрементом
| Z=Z-1, (Z) = Rr
| –
|
| ST
| Z+q,Rr
| Косвенное сохранение с замещением
| (Z+q) = Rr
| –
|
| LPM
| Нет
| Загрузка из программной памяти
| R0 = (Z)
| –
|
| LPM
| Rd,Z
| Загрузка из программной памяти
| Rd = (Z)
| –
|
| LPM
| Rd,Z+
| Загрузка из программной памяти с пост-инкрементом
| Rd = (Z), Z=Z+1
| –
|
| ELPM
| Нет
| Расширенная загрузка из памяти программ
| R0 = (RAMPZ:Z)
| –
|
| ELPM
| Rd,Z
| Расширенная загрузка из памяти программ
| Rd = (RAMPZ:Z)
| –
|
| ELPM
| Rd,Z+
| Расширенная загрузка из программной памяти с пост-инкрементом
| Rd = (RAMPZ:Z),
Z = Z+1
| –
|
| SPM
| Нет
| Сохранение в программной памяти
| (Z) = R1:R0
| –
| -
| ESPM
| Нет
| Расширенное сохранение в памяти программ
| (RAMPZ:Z) = R1:R0
| –
| -
| IN
| Rd,P
| Чтение порта
| Rd = P
| –
|
| OUT
| P,Rr
| Запись в порт
| P = Rr
| –
|
| PUSH
| Rr
| Занесение регистра в стек
| STACK = Rr
| –
|
| POP
| Rd
| Извлечение регистра из стека
| Rd = STACK
| –
|
| * Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP необходимо добавить один цикл.
Таблица Б.4 – Команды для работы с битами
Мнемоника
| Опе ранды
| Описание
| Операция
| Флаги
| Циклы
| LSL
| Rd
| Логический сдвиг влево
| Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7)
| Z,C,N,V,H,S
|
| LSR
| Rd
| Логический сдвиг вправо
| Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0)
| Z,C,N,V,S
|
| ROL
| Rd
| Циклический сдвиг влево через C
| Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7)
| Z,C,N,V,H,S
|
| ROR
| Rd
| Циклический сдвиг вправо через C
| Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0)
| Z,C,N,V,S
|
| ASR
| Rd
| Арифметический сдвиг вправо
| Rd(n)=Rd(n+1), n=0,...,6
| Z,C,N,V,S
|
| SWAP
| Rd
| Перестановка тетрад
| Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0)
| None
|
| BSET
| s
| Установка флага
| SREG(s) = 1
| SREG(s)
|
| BCLR
| s
| Очистка флага
| SREG(s) = 0
| SREG(s)
|
| SBI
| P,b
| Установить бит в порту
| I/O(P,b) = 1
| None
|
| CBI
| P,b
| Очистить бит в порту
| I/O(P,b) = 0
| None
|
| BST
| Rr,b
| Сохранить бит из регистра в T
| T = Rr(b)
| T
|
| BLD
| Rd,b
| Загрузить бит из T в регистр
| Rd(b) = T
| None
|
| SEC
| Нет
| Установить флаг переноса
| C =1
| C
|
| CLC
| Нет
| Очистить флаг переноса
| C = 0
| C
|
| SEN
| Нет
| Установить флаг отрицательного числа
| N = 1
| N
|
| CLN
| Нет
| Очистить флаг отрицательного числа
| N = 0
| N
|
| SEZ
| Нет
| Установить флаг нуля
| Z = 1
| Z
|
| CLZ
| Нет
| Очистить флаг нуля
| Z = 0
| Z
|
| SEI
| Нет
| Установить флаг прерываний
| I = 1
| I
|
| CLI
| Нет
| Очистить флаг прерываний
| I = 0
| I
|
| SES
| Нет
| Установить флаг числа со знаком
| S = 1
| S
|
| CLN
| Нет
| Очистить флаг числа со знаком
| S = 0
| S
|
| SEV
| Нет
| Установить флаг переполнения
| V = 1
| V
|
| CLV
| Нет
| Очистить флаг переполнения
| V = 0
| V
|
| SET
| Нет
| Установить флаг T
| T = 1
| T
|
| CLT
| Нет
| Очистить флаг T
| T = 0
| T
|
| SEH
| Нет
| Установить флаг внутреннего переноса
| H = 1
| H
|
| CLH
| Нет
| Очистить флаг внутреннего переноса
| H = 0
| H
|
| NOP
| Нет
| Нет операции
| Нет
| None
|
| SLEEP
| Нет
| Спать (уменьшить энергопотребление)
| Смотрите описание инструкции
| None
|
| WDR
| Нет
| Сброс сторожевого таймера
| Смотрите описание инструкции
| None
|
|
В языке Assembler нет различия в регистре символов.
Операнды могут быть следующих видов:
§ Rd: Результирующий (и исходный) регистр в регистровом файле;
§ Rr: Исходный регистр в регистровом файле;
§ b: Константа (3 бита) или константное выражение;
§ s: Константа (3 бита) или константное выражение;
§ P: Константа (5-6 бит) или константное выражение;
§ K6; Константа (6 бит) или константное выражение;
§ K8: Константа (8 бит) или константное выражение;
§ k: Константа (размер зависит от инструкции), или константное выражение;
§ q: Константа (6 бит) или константное выражение;
§ Rdl: R24, R26, R28, R30. Для инструкций ADIW и SBIW;
§ X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30).
Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...
|
Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...
|
Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...
|
ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при которых тело находится под действием заданной системы сил...
|
ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на современном уровне требований общества нельзя без постоянного обновления и обогащения своего профессионального педагогического потенциала...
Эффективность управления. Общие понятия о сущности и критериях эффективности. Эффективность управления – это экономическая категория, отражающая вклад управленческой деятельности в конечный результат работы организации...
Мотивационная сфера личности, ее структура. Потребности и мотивы. Потребности и мотивы, их роль в организации деятельности...
|
Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод исследования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом растворе...
Гальванического элемента При контакте двух любых фаз на границе их раздела возникает двойной электрический слой (ДЭС), состоящий из равных по величине, но противоположных по знаку электрических зарядов...
Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...
|
|