Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Арифметические команды. Арифметические команды рассматривают коды операндов как коды двоичных чисел



Арифметические команды рассматривают коды операндов как коды двоичных чисел. Эти команды могут быть разделены на несколько групп.

Команды, приведенные в таблице 4.5, позволяют выполнять операции сложения и вычитания с операндами различных типов при различных ограничениях.

Таблица 4.5. Команды операций (сложение, вычитание)

 

Мнемо-ника Операнды Описание Операция Флаги
ADD Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Сложить без переноса Rd Rd + Rr Z, C, N, V, H
ADC Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Сложить с переносом Rd Rd + Rr + С Z, C, N, V, H
ADIW Rd, K dE{24, 26, 28, 30} 0 ≤ k ≤ 63 Сложить непосредственное значение со словом Rdh : Rdl Rdh : Rdl + К Z, C, N, V
SUB Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Вычесть без заема Rd Rd – Rr Z, C, N, V, H
SUBI Rd, К 16 ≤ d ≤ 31 0 ≤ k ≤ 255 Вычесть непосредственное значение Rd Rd – К Z, C, N, V, H
SBC Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Вычесть с заемом Rd ß Rd – Rr – C Z, C, N, V, H
SBCI Rd, К 16 ≤ d ≤ 32 0 ≤ k ≤ 255 Вычесть непосредственное значение с заемом RdßRd–K–C Z, C, N, V, H
SBIW Rd, К dE{24, 26, 28, 30} 0 ≤ К ≤ б3 Вычесть непосредственное значение из слова Rdh : Rdl ß ß Rdh : Rdl – K Z, C, N, V

 

 

Команды инкремента (увеличения на единицу, INC) и декремента (уменьшения на единицу, DEC) также бывают очень удобны. Их можно
в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммиро-вание и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом (таблица 4.6).

 

 

Таблица 4.6. Команды инкремента и декремента

 

Мнемо-ника Операнды Описание Операция Флаги
INC Rd 0 ≤ d ≤ 31 Инкрементировать Rd ß Rd + 1 Z, N, V
DEC Rd 0 ≤ d ≤ 31 Декрементировать Rd ß Rd – 1 Z, N, V

 

Команды сравнения, приведенные в таблице 4.7, предназначены для сравнения двух входных операндов. По сути, они вычисляет разность этих двух операндов, но выходного операнда не формируют, а всего лишь изменяет биты в регистре состояния SREG по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений.

 

Таблица 4.7. Команды сравнения

 

Мнемо-ника Операнды Описание Операция Флаги
CP Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Сравнить Rd – Rr Z, C, N, V, H
CPC Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Сравнить с учетом переноса Rd – Rr – C Z, C, N, V, H
CPI Rd, К 16 ≤ d ≤ 31 0 ≤ k ≤ 255 Сравнить с константой Rd – K Z, C, N, V, H

Логические команды

Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Команды требуют двух входных операндов и формируют один выходной операнд.

Команды логических операций, сведенные в таблицу 4.8, позволяют побитно вычислять основные логические функции от двух входных операндов.

Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль).

Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице).

Операция «Исключающее ИЛИ» (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу).

 

Таблица 4.8. Команды логических операций

 

Мнемо-ника Операнды Описание Операция Флаги
AND Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Выполнить логическое AND Rd ß Rd × Rr Z, N, V
ANDI Rd, К 16≤ d ≤ 31 0 < k ≤ 255 Выполнить логическое AND Rd ß Rd × К Z, N, V
OR Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Выполнить логическое OR Rd ßRd Ú Rr Z, N, V
ORI Rd, К 16 ≤ d ≤ 31 0 ≤ k ≤ 255 Выполнить логическое OR с непосредственным значением Rd ß Rd Ú К Z, N, V
EOR Rd, Rr 0 ≤ d ≤ 31 0 ≤ r ≤ 31 Выполнить исключающее OR Rd ß Rd Å Rr Z, N, V

 

Команды сдвигов, приведенные в таблице 4.9, позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, каково будет новое значение старшего бита
(при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет ли где-то сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо).

Для примера на рис. 4.1 показаны действия, выполняемые командами сдвигов вправо.



Рис. 4.1. Команды сдвигов вправо.

 

Таблица 4.9. Команды сдвигов

 

Мнемо-ника Операнды Описание Операция Флаги
LSL Rd 0 ≤ d ≤ 31 Логически сдвинуть влево Rd(n + 1) ß Rd(n), Rd(0) ß 0, C ß Rd(7) Z, C, N, V, H
LSR Rd 0 ≤ d ≤ 31 Логически сдвинуть вправо Rd(n) ß Rd(n + 1), Rd(7) ß 0, C ß Rd(0) Z, C, N, V
ROL Rd 0 ≤ d ≤ 31 Сдвинуть влево через перенос Rd(0) ß C, Rd(n + 1) ß Rd(n), C ß Rd(7) Z, C, N, V, H
ROR Rd 0 ≤ d ≤ 31 Сдвинуть вправо через перенос Rd(7) ß C, Rd(n) ß Rd(n + 1), C ß Rd(0) Z, C, N, V
ASR Rd 0 ≤ d ≤ 31 Арифметически сдвинуть вправо Rd(n) ß Rd(n + 1), n = 0...6, C ß Rd(0), Rd(7) = const Z, C, N, V
SWAP Rd 0 ≤ d ≤ 31 Поменять нибблы местами Rd(3...0) <–> Rd(7...4) Нет

Команды проверки битов и операндов (таблица 4.10) предназначены для установки или очистки битов регистров в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют.

 

Таблица 4.10. Команды проверки битов и операндов

 

Мнемо-ника Операнды Описание Операция Флаги
TST Rd 0 ≤ r ≤ 31 Проверить на ноль и минус Rd ß Rd and Rd Z, N, V
СОМ Rd 0 ≤ d ≤ 31 Выполнить дополнение до единицы (инверсия) Rd ß $FF – Rd Z, C, N, V
NEG Rd 0 ≤ d ≤ 31 Выполнить дополнение до двух Rd ß $00 – Rd Z, C, N, V, H
BST Rd,b 0 ≤ d ≤ 31 0 ≤ b ≤ 7 Переписать бит из регистра во флаг Т Т ß Rd(b) Т
BLD Rd,b 0 ≤ d ≤ 31 0 ≤ b ≤ 7 Загрузить Т флаг в бит регистра Rd(b) ß Т Нет
SBI P,b 0 ≤ P ≤ 31 0 ≤ b ≤ 7 Установить бит в регистр I/O I/O (P,b) ß 1 Нет
CBI P, b 0 ≤ P ≤ 31 0 ≤ b ≤ 7 Очистить бит в регистре I/O I/O (P,b) ß 0 Нет
SBR Rd, К 16 ≤ d ≤ 31 0 ≤ k ≤ 255 Установить биты в регистре Rd ß Rd Ú К Z, N, V
CBR Rd, К 16 ≤ d ≤ 31 0 ≤ k ≤ 255 Очистить биты в регистре Rd ß Rd × ($FF – К) Z, N, V
SER Rd 16 ≤ d ≤ 31 Установить все биты регистра Rd ß $FF нет
CLR Rd 0 ≤ d ≤ 31 Очистить регистр Rd ß Rd Å Rd Z, N, V
NOP Нет Выполнить холостую команду   Нет
SLEEP Нет Установить режим SLEEP   Нет
WDR Нет Сбросить сторожевой таймер   Нет

 

Команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно (таблица 4.11). Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль.

 

Таблица 4.11. Команды установки и очистки битов (флагов) регистра состояния процессора (SREG).

Мнемоника Операнды Описание Операция Флаги
BSET s, 0 ≤ s ≤ 7 Установить флаг SREG(s) ß 1 SREG(s)
BCLR s, 0 ≤ s ≤ 7 Очистить флаг SREG(s) ß 0 SREG(s)
SEI Нет Установить флаг глобального прерывания I ß 1 I
CLI Нет Очистить флаг глобального прерывания I ß 0 I
SET Нет Установить флаг Т T ß 1 T
CLT Нет Очистить флаг Т Т ß 0 T
SEH Нет Установить флаг полупереноса Н ß 1 Н
CLH Нет Очистить флаг полупереноса Н ß 0 Н
SES Нет Установить флаг знака S ß 1 S
CLS Нет Очистить флаг знака S ß 0 S
SEV Нет Установить флаг переполнения V ß 1 V
CLV Нет Очистить флаг переполнения V ß 0 V
SEN Нет Установить флаг отрицательного значения М ß 1 N
CLN Нет Очистить флаг отрицательного значения N ß 0 N
SEZ Нет Установить флаг нулевого значения Z ß 1 Z
CLZ Нет Очистить флаг нулевого значения Z ß 0 Z
SEC Нет Установить флаг переноса С ß 1 С
CLC Нет Очистить флаг переноса С ß 0 С

Команды перехода

 

Команды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., то есть, они нарушают последовательный ход выполнения программы.

Команды безусловных переходов, приведенные в таблице 4.12, вызывают переход в новый адрес, независимо ни от чего. Они могут вызывать переход на указанную величину смещения (вперед или назад) или же на указанный адрес памяти. Величина смещения или новое значение адреса указываются в качестве входного операнда.

 

Таблица 4.12. Команды безусловных переходов

 

Мнемо-ника Операнды Описание Операция Флаги
RJMP k –2K < k < 2K Перейти относительно PC ß PC + k + 1 Нет
JMP k 0 < k < 4M Перейти PC ß k Нет
LJMP Нет Перейти косвенно PC ß Z Нет

 

Некоторые команды переходов предусматривают в дальнейшем возврат назад, в точку, из которой был сделан переход (таблица 4.13). Если возврат предусмотрен, то текущие параметры процессора сохраняются в стеке.

 

Таблица 4.13. Команды безусловных переходов с возвратом

 

Мнемоника Операнды Описание Операция Флаги
RCALL k –2K ≤ k ≤ 2K Вызвать подпрограмму относительно PC ß PC + k + 1 Нет
CALL k 0 ≤ k ≤ 64K Выполнить длинный вызов подпрограммы PC ß k Нет
ICALL Нет Вызвать подпрограмму косвенно PC ß Z Нет
RET Нет Вернуться из подпрограммы PC ß STACK Нет
RETI Нет Вернуться из прерывания PC ß STACK I

Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий (таблица 4.14).

 

Таблица 4.14. Команды условных переходов

 

Мнемо-ника Операнды Описание Операция Флаги
CPSE Rd, Rr 0≤ d ≤31, 0 ≤ r ≤ 31 Сравнить и пропустить, если равно if Rd = Rr then PC ß PC + 2 (or 3) Нет
SBRC Rr, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 Пропустить, если бит в регистре очищен if Rr(b) = 0 then PC ß PC + 2 (or 3) Нет
SBRS Rr, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 Пропустить, если бит в регистре установлен if Rr(b) = 1 then PC ß PC + 2 (or 3) Нет
SBIC P, b 0 ≤ P ≤ 31 0 ≤ b ≤ 7 Пропустить, если бит в регистре I/O очищен if I/O P(b) = 0 then PC ß PC + 2 (or 3) Нет
SBIS P, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 Пропустить, если бит в регистре I/O установлен if l/O P(b) = 1 then PC ß PC + 2 (or 3) Нет

 

Часто в качестве условий выступают значения флагов в регистре состояния процессора (SREG). То есть условием перехода является результат предыдущей операции, меняющей значения флагов (таблица 4.15).

 

Таблица 4.15. Команды условных переходов по состоянию флагов

в регистре SREG

 

Мнемоника Операнды Описание Операция Флаги
BRBS s, k 0 ≤ s ≤ 7 –64 ≤ k ≤ +63 Перейти, если бит в регистре статуса установлен if SREG(s) = 1 then PC ß PC + k + 1 Нет
BRBC s, k 0 ≤ s ≤ 7 –64 ≤ k ≤ +63 Перейти, если бит в регистре статуса очищен if SREG(s) = 0 then PC ß PC + k + 1 Нет
BREQ k –64 ≤ k ≤ +63 Перейти, если равно if Rd = Rr (Z = 1) then PC ß PC + k + 1 Нет
BRNE k –64 ≤ k ≤ +63 Перейти, если не равно if Rd ¹ Rr (Z = 0) then PC ß PC + k + 1 Нет

Окончание табл. 4.15

 

Мнемо-ника Операнды Описание Операция Флаги
BRSH k –64 ≤ k ≤ +63 Перейти, если равно или больше (без знака) if Rd < Rr (C = 0) then PC ß PC + k+ 1 Нет
BRLO k –64 ≤ k ≤ +63 Перейти, если меньше (без знака) if Rd < Rr (C = 1) then PC ß PC + k + 1 Нет
BRGE k –64 ≤ k ≤ +63 Перейти, если больше или равно (с учетом знака) if Rd > Rr (N Å V = 0) then PC ß PC + k + 1 Нет
BRLT k –64 ≤ k ≤ +63 Перейти, если меньше чем (со знаком) if Rd < Rr (N Å V = 1) then PC ß PC + k+ 1 Нет
BRMI k –64 ≤ k ≤ +63 Перейти, если минус if N = 1 then PC ß PC + k + 1 Нет
BRPL k –64 ≤ k ≤ +63 Перейти, если плюс if N = 0 then PC ß PC + k + 1 Нет
BRHS k –64 ≤ k ≤ +63 Перейти, если флаг полупереноса установлен if H = 1 then PC ß PC + k + 1 Нет
BRHC k –64 ≤ k ≤ +63 Перейти, если флаг полупереноса очищен if H = 0 then PC ß PC + k + 1 Нет
BRTS k –64 ≤ k ≤ +63 Перейти, если флаг Т установлен if T = 1 then PC ß PC + k + 1 Нет
BRTC k –64 ≤ k ≤ +63 Перейти, если флаг Т очищен if T = 0 then PC ß pc + k + 1 Нет
BRVS k –64 ≤ k ≤ +63 Перейти, если флаг переполнения установлен if V = 1 then PC ß PC + k + 1 Нет
BRVC k –64 ≤ k ≤ +63 Перейти, если флаг переполнения очищен if V = 0 then PC ß PC + k + 1 Нет
BRIE k –64 ≤ k ≤ +63 Перейти, если глобальное прерывание разрешено if I = 1 then PC ß PC + k + 1 Нет
BRID k –64k £ k £ +63 Перейти, если глобальное прерывание запрещено if I = 0 then PC ß PC + k + 1 Нет

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.