Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
246
Добавлен:
04.01.2020
Размер:
5.37 Mб
Скачать

Таблица 3.9 – Система команд микроконтроллеров dsPIC33F

251

Продолжение таблицы 3.9

252

Продолжение таблицы 3.9

253

Продолжение таблицы 3.9

254

Продолжение таблицы 3.9

255

Окончание таблицы 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