![](/user_photo/_userpic.png)
Среднее Заочное отделение / 4 семестр / Цифровые и микропроцессорные устройства / Электронный конспект лекций (ЦиМПУ)
.pdf![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM251x1.jpg)
Таблица 3.9 – Система команд микроконтроллеров dsPIC33F
251
![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM252x1.jpg)
![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM253x1.jpg)
![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM254x1.jpg)
![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM255x1.jpg)
Продолжение таблицы 3.9
255
![](/html/48381/975/html_9qJX_z7P2m.xzuc/htmlconvd-nDPLwM256x1.jpg)
Окончание таблицы 3.9
Систему команд микроконтроллеров dsPIC33F можно разделить на несколько групп:
-команды перемещения;
-команды математических операций;
-команды логических операций;
-команды сдвига и циклического сдвига;
-команды работы с битами;
-команды сравнения/выбора;
-команды условных переходов;
-команды работы со стеком;
-команды управления.
Команды перемещения
В командах перемещения, большинство из которых имеет мнемоническое обозначение MOV, используется хотя бы один регистр. Регистровые инструк-
256
ции могут использовать W регистр как регистр данных или регистр, в который помещается смещение адреса.
Пример 3.12:
MOV #0x19C7, W0
MOV W0, W1
В первой инструкции константа 0x19C7 командой MOV помещается в регистр W0. Затем содержимое регистра W0 пересылается в регистр W1. Таким образом, после выполнения второй инструкции в регистре W1 будет содержаться значение 0x19C7.
Пример 3.13:
MOV #0x1234, W0
MOV W0, [W1]
В данном примере первая команда MOV помещает в регистр W0 константу 0x1234. Вторая команда помещает содержимое регистра W0 по адресу, находящемуся в регистре W1.
Команды математических операций
Микроконтроллеры семейства dsPIC33F обладают обширным набором инструкций для выполнения математических действий над операндами. В АЛУ МК предусмотрено выполнение четырех основных математических действий над целыми знаковыми и беззнаковыми числами: сложения, вычитания, умножения и деления. Для каждого из этих действий предусмотрен ряд инструкций, в которых используются различные типы адресации, делающие выполнение таких операций весьма эффективным.
Кматематическим инструкциям относятся следующие:
-ADD – сложение;
-SUB – вычитание;
-INC – увеличение на 1;
-INC2 – увеличение на 2;
-DEC – уменьшение на 1;
-DEC2 – уменьшение на 2;
-MUL – умножение;
-DIV.xx – деление, где xx – указывает тип и длину операндов. Рассмотрим несколько примеров использования этих инструкций.
257
Пример 3.14:
MOV #34, W0
ADD W0, #7, W1
В этой программе команда ADD имеет три операнда. К содержимому регистра W0 прибавляется 7, и результат записывается в регистр W1. После выполнения операции там будет находиться значение 41 (0x29).
Пример 3.15:
MOV #7, W1
ADD W1, #5, [W0]
В данном случае команда ADD складывает содержимое регистра W1 (0х7) с константой 5 и помещает результат по адресу, находящемуся в регистре W0. После выполнения операции в этой ячейке будет находиться значение 12 (0xC).
Группа математических команд содержит инструкции, позволяющие работать с многобайтовыми данными. Эти команды при выполнении операций учитывают флаг переноса, который мог быть установлен как следствие переноса или заема в результате операции с предыдущими словами. К таким инструкциям относятся ADDC и SUBB.
Команды логических операций
Эти команды позволяют выполнять булевые одноместные и двуместные операции. К таким операциям относятся хорошо известные двуместные операции логическое «И», логическое «ИЛИ», исключающее «ИЛИ» и одноместная операция отрицания «НЕ». В эту группу команд включены инструкции очистки (обнуления) операнда и установки, когда все биты операнда устанавливаются в
1.
Инструкции, выполняющие операцию логического «И», имеют мнемоническое обозначение AND, логического «ИЛИ» – IOR, исключающего «ИЛИ» – XOR. Операция логического отрицания «НЕ» реализована посредством инструкции COM. Кроме того, в эту группу команд включена команда NEG, позволяющая инвертировать знак числа. Инструкции логических операций весьма полезны при выделении и анализе отдельных битов операндов.
Применение этих команд показано в следующих примерах.
258
Пример 3.16:
MOV #0xFC, W0
MOV #0x13, W1
AND W0, W1, W2
Здесь выполняется операция логического «И» над операндами, помещенными в регистры W0 и W1. Команда AND помещает результат операции в регистр W2. При указанных значениях операндов W0 и W1 итоговое значение в регистре W2 будет равно 0x10. Если инструкцию «AND W0, W1, W2» заменить инструкцией «IOR W0, W1, W2» (логическое «ИЛИ»), то итоговое значение в регистре W2 станет равным 0xFF. При использовании в программе команды XOR (исключающее «ИЛИ») в регистре W2 после выполнения операции будет содержаться значе-
ние 0xEF.
Пример 3.17:
MOV #0xC, W0
COM W0, W1
В этом примере показано применение инструкции COM. Эта инструкция инвертирует все биты исходного операнда. В данном случае инвертируется содержимое регистра W0 (0x000C), а результат, который будет равен 0xFFF3, помещается в W1.
Пример 3.18:
MOV #0xFFF4, W0
NEG W0, W1
Программа инвертирует знак числа при помощи команды NEG. Команда NEG использует стандартный алгоритм получения инверсии числа: сначала все биты операнда инвертируются, затем к младшему биту прибавляется 1. В данном примере при исходном значении операнда в регистре W0, равном 0xFFF4 (дополнительный код отрицательного числа –12), результат выполнения команды NEG, помещенный в регистр W1, будет равен 0x000C, что соответствует положительному числу 12.
259
Команды сдвига и циклического сдвига
Эта группа команд часто используется для преобразования последовательного потока битов в параллельный двоичный код и обратно, а также для операций быстрого целочисленного умножения и деления на степень двойки.
Ккомандам сдвига и циклического сдвига относятся следующие:
-ASR – арифметический сдвиг вправо;
-LSR – логический сдвиг вправо;
-RLC – сдвиг влево через флаг переноса;
-RLNC – сдвиг влево без использования флага переноса;
-RRC – сдвиг вправо через флаг переноса;
-RRNC – сдвиг вправо без использования флага переноса;
-SL – сдвиг влево.
Пример 3.19:
MOV #34, W0
LSR W0, #2, W1
В данном примере выполняется сдвиг содержимого регистра W0, которое равно 34 (0x22), на 2 позиции вправо, а результат сохраняется в регистре W1. Таким образом, после выполнения команды LSR W0, #2, W1 в регистре W1 будет содержаться значение 8 (0x8).
Команды работы с битами
Команды работы с битами, как следует из названия, предназначены для манипуляций с отдельными битами операндов. Такая возможность является весьма востребованной, поскольку в большинстве случаев системы на базе микроконтроллеров должны работать с отдельными сигнальными битами внешних устройств. Битовые команды позволяют анализировать состояние отдельных битов, что дает возможность организовать ветвления и переходы в программе, а также устанавливать или сбрасывать отдельные биты операнда.
Ккомандам работы с битами относятся следующие:
-BCLR – сброс бита;
-BSET – установка бита;
-BTG – инвертирование бита;
-BTST – проверка бита.
260