АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
AVR АТMEGA 128
ПРИЛОЖЕНИЕ 2 ИНСТРУКЦИИ ПРОЦЕССОРОВ AVR
Таблица П.2.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.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
| 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, добавьте пять циклов плюс по три цикла на каждое ожидание.
Таблица П.2.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, необходимо добавить один цикл.
Таблица П.2.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).
Навчальне видання
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторних робіт з дисципліни «Методи математичної фізики в біології і медицині»
для студентів всіх форм навчання для всіх спеціальностей
Упорядники: АВРУНІН Олег Григорович
КРУК Олег Ярославович
СЕМЕНЕЦЬ Валерій Васильович
Відповідальний випусковий А.І.Бих
Редактор
План 2005 поз.
Підп.до друку 00.00.00. Формат 60х84 1/16. Спосіб друку – ризографія
Умов. друк. арк. Облік вид. арк. Тираж прим.
Зам. № Ціна договірна
ХНУРЕ Україна. 61166, Харків, просп. Леніна, 14
Надруковано в учбово-виробничому
видавничо-поліграфічному центрі ХНУРЕ
61166, Харків, просп. Леніна, 14
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Поиск по сайту:
|