- •Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
- •«Вычислительные машины, системы и сети»
- •Оглавление
- •Требования к оформлению отчетов по лабораторным работам
- •Лабораторная работа №1. Изучение программной среды mpladide. Введение в язык ассемблер.
- •Цель работы
- •Содержание работы
- •1.1 Создание нового проекта
- •1.2 Подключение библиотек и упаковочных файлов процессора
- •1.3 Создание файла с исполняемым кодом
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •2.3 Битовые операции
- •2.4 Логические операции
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •3.3 Инструкция вычитания
- •Синтаксис:
- •3.4 Инструкция деления
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •4.2 Инструкции сравнения
- •4.3 Инструкции переходов
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •Лабораторная работа №5. Работа со стеком.
- •Цель работы
- •Содержание работы
- •5.1 Помещение в стек
- •Примеры помещения в стек
- •5.2 Извлечение из стека
- •Примеры извлечения из стека
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •6.2 Расчет зависимости.
- •Данную программу можно записать более компактно:
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •7.2 Инструкции сдвига
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •8.2 Сортировка обменом (метод пузырька)
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •9.2 Поиск с предварительным анализом
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •Контрольные вопросы
- •11.2 Rot13.
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •12.2 Вычисление crc
- •Прямой табличный алгоритм crc16
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •Лабораторная работа №13. Синтез сигналов специальной формы
- •Цель работы
- •Содержание работы
- •Программа работы и последовательность выполнения
- •Контрольные вопросы
- •Список литературы
- •Приложение 1. Ассемблерные инструкции микропроцессора
Программа работы и последовательность выполнения
Создайте новый проект. Процессор – dsPIC33FJ256GP710.
Подключите необходимые библиотеки.
Подключите отладчик (симулятор), встроенный в среду MPLABIDE.
Разработать программу, выполняющую синтез сигнала специальной формы
№ Варианта
Форма
Частота, Гц
1
Синусоида
50
2
Синусоида
70
3
Синусоида
90
4
Синусоида
110
5
Синусоида
40
6
Синусоида
60
7
Пила
50
8
Пила
70
9
Пила
90
10
Пила
110
11
Пила
40
12
Пила
60
Открыть окно Watchи внести в него все регистры, которые используются в коде. В пошаговом режиме отладить код, контролируя изменение регистров в окнеWatch. После отладки программы, показать код и результаты работы программы преподавателю.
Создать блок схему программы.
Подготовить отчет.
Контрольные вопросы
Назвать регистры, которыми управляется модуль Output Compare.
Как считается максимальное разрешение ЦАП. Какое максимальное разрешение можно добиться от ЦАП?
Как можно изменить разрешение аналогового сигнала?
Список литературы
DS70157B. dsPIC30F/33F Programmer’s Reference Manual. High-Performance Digital Signal Controllers. Microchip Technology Inc. 2007.
DS70165E. dsPIC33F Family Data Sheet. High-Performance, 16-Bit Digital Signal Controllers. Microchip Technology Inc. 2007.
DS39747D. PIC24FJ128GA010 Family DataSheet. 64/80/100-Pin General Purpose,16-Bit Flash Microcontrollers. Microchip Technology Inc. 2007.
DS70157B. dsPIC30F/33F Programmer's Reference Manual. High-Performance Digital Signal Controllers. Microchip Technology Inc. 2007.
DS51456D. 16-Bit Language Tools Libraries. Microchip Technology Inc. 2007.
Приложение 1. Ассемблерные инструкции микропроцессора
Таблица 1
Символы, используемые в описании кодов инструкций
Символ |
Описание |
#text |
Означает литерал определённый как “текст“ |
(text) |
Означает “содержимое текста“ |
[text] |
Означает “позицию адресованную текстом” |
{ } |
Необязательное поле или операция |
<n:m> |
Битовая область регистра |
.b |
Выбор байтного режима |
.d |
Выбор режима двойного слова |
.S |
Выбор теневого регистра |
.w |
Выбор словного режима (по умолчанию) |
Acc |
Один из двух аккумуляторов {A, B} |
AWB |
Аккумулятор обратной записи назначения адреса регистра ∈ {W13, [W13] + = 2} |
bit4 |
4-разрядное поле выбора бита (используется в инструкциях адресации слова) ∈ {0...15} |
C, DC, N, OV, Z |
Биты состояния MCU: (C)перенос, (DC)цифровой перенос, (N)отрицательный, (O)переполнение, (Z)ноль. |
Expr |
Абсолютный адрес, метка или выражение (решенный компоновщиком) |
f |
Адрес файлового регистра ∈ {0x0000...0x1FFF} |
lit1 |
1-битный беззнаковый литерал ∈ {0,1} |
lit4 |
4- битный беззнаковый литерал ∈ {0...15} |
lit5 |
5- битный без знаковый литерал ∈ {0...31} |
lit8 |
8- битный без знаковый литерал ∈ {0...255} |
lit10 |
10- битный без знаковый литерал ∈ {0...255} для байтного режима, {0:1023} для словного режима |
lit14 |
14- битный без знаковый литерал ∈ {0...16384} |
lit16 |
16- битный без знаковый литерал ∈ {0...65535} |
lit23 |
23- битный без знаковый литерал ∈ {0...8388608} |
None |
Поле не требует ввода, может быть пустым |
OA, OB, SA, SB |
Биты состояния DSP: ACCA переполнение, ACCB переполнение, ACCA насыщение, ACCB насыщение |
PC |
Программный счётчик |
Slit10 |
10-битный знаковый литерал ∈ {-512...511} |
Slit16 |
16- битный знаковый литерал ∈ {-32768...32767} |
Slit6 |
6- битный знаковый литерал ∈ {-16...16} |
Wb |
Основной W регистр ∈ {W0..W15} |
Wd |
Регистр приемник ∈ { Wd, [Wd], [Wd++], [Wd--], [++Wd], [--Wd] } |
Wdo |
Регистр приемник ∈{ Wnd, [Wnd], [Wnd++], [Wnd--], [++Wnd], [--Wnd], [Wnd+Wb] } |
Wm,Wn |
Рабочая регистровая пара делимого и делителя (прямая адресация) |
Wm*Wm |
Рабочая регистровая пара множимого и множителя для квадратных инструкций ∈{W4 * W4,W5 * W5,W6 * W6,W7 * W7} |
Wm*Wn |
Рабочая регистровая пара множимого и множителя для DSP инструкций ∈{W4 * W5,W4 * W6,W4 * W7,W5 * W6,W5 * W7,W6 * W7} |
Wn |
Один из 16 рабочих регистров ∈ {W0..W15} |
Wnd |
Один из 16 рабочих регистров приемника ∈ {W0..W15} |
Wns |
Один из 16 рабочих регистров источника ∈ {W0..W15} |
WREG |
W0 (рабочий регистр используемый в инструкциях файловых регистров) |
Ws |
Регистр источник W ∈ { Ws, [Ws], [Ws++], [Ws--], [++Ws], [--Ws] } |
Wso |
Регистр источник W ∈{ Wns, [Wns], [Wns++], [Wns--], [++Wns], [--Wns], [Wns+Wb] } |
Wx |
Пространство данных X инструкций упреждающей выборки адрес регистра для DSP∈{[W8] + = 6, [W8] + = 4, [W8] + = 2, [W8], [W8] - = 6, [W8] – = 4, [W8] - = 2, [W9] + = 6, [W9] + = 4, [W9] + = 2, [W9], [W9] - = 6, [W9] - = 4, [W9] - = 2, [W9 + W12],none} |
Wxd |
Пространство данных X инструкций упреждающей выборки назначения для DSP ∈ {W4..W7} |
Wy |
Пространство данных Y инструкций упреждающей выборки адрес регистра для DSP∈{[W10] + = 6, [W10] + = 4, [W10] + = 2, [W10], [W10] - = 6, [W10] - = 4, [W10] - = 2, [W11] + = 6, [W11] + = 4, [W11] + = 2, [W11], [W11] - = 6, [W11] - = 4, [W11] - = 2,[W11 + W12], none} |
Wyd |
Пространство данных Y инструкций упреждающей выборки назначения для DSP ∈ {W4..W7} |
Таблица 2
Инструкции перемещения
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
EXCH Wns,Wnd |
Обменять Wns и Wnd |
1 |
1 |
MOV f {, WREG} |
Переместить f в заданный приемник. Если регистр не определен, то результат сохраняется в файловый регистр. |
1 |
1 |
MOV WREG, f |
Переместить WREG в f |
1 |
1 |
MOV f, Wnd |
Переместить f в Wnd |
1 |
1 |
MOV Wns, f |
Переместить Wns в f |
1 |
1 |
MOV.B #lit8, Wnd |
Переместить 8-битный литерал в Wnd |
1 |
1 |
MOV #lit16,Wnd |
Переместить 16- битный литерал в Wnd |
1 |
1 |
MOV [Ws+Slit10],Wnd |
Переместить [Ws+знаковое 10-битное смещение] в Wnd |
1 |
1 |
MOV Wns,[Wd+Slit10] |
Переместить Wns в [Wd+ знаковое 10-битное смещение] |
1 |
1 |
MOV Ws,Wd |
Переместить Ws в Wd |
1 |
1 |
MOV.D Ws,Wnd |
Переместить 32-битное значение из регистровой пары Ws:Ws+1 в регистровую пару Wnd:Wnd+1 |
1 |
2 |
MOV.D Wns,Wd |
Переместить 32-битное значение из регистровой пары Wns:Ws+1 в регистровую пару Wd:Wd+1 |
1 |
2 |
SWAP Wn |
Обмен полубайтами в Wn |
1 |
1 |
TBLRDH Ws,Wd |
Чтение старшего слова в Wd |
1 |
2 |
TBLRDL Ws,Wd |
Чтение младшего слова в Wd |
1 |
2 |
TBLWTH Ws,Wd |
Запись Ws в младшее слово |
1 |
2 |
TBLWTL Ws,Wd |
Запись Ws в старшее слово |
1 |
2 |
Таблица 3
Арифметические инструкции
Синтаксис на языке Ассемблер |
Описание инструкции |
Кол-во слов |
Кол-во цик-лов |
ADD f{,WREG}(1) |
f=f+WREG. Необязательный операнд WREG определяет регистр приемник. |
1 |
1 |
ADD #lit10,Wn |
Wn=lit10+Wn |
1 |
1 |
ADD Wb,#lit5,Wd |
Wd=Wb+lit5 |
1 |
1 |
ADD Wb,Ws,Wd |
Wd=Wb+Ws |
1 |
1 |
ADDC f{,WREG}(1) |
Приемник=f+WREG+(C), С - бит переноса регистра состояния. |
1 |
1 |
ADDC #lit10,Wn |
Wn=lit10+Wn+(C) |
1 |
1 |
ADDC Wb,#lit5,Wd |
Wd=Wb+lit5+(C) |
1 |
1 |
ADDC Wb,Ws,Wd |
Wd=Wb+Ws+(C) |
1 |
1 |
DAV.B Wn |
Wn=десятичная настройка Wn |
1 |
1 |
DEC f{,WREG}(1) |
Приемник=f-1 |
1 |
1 |
DEC Ws,Wd |
Wd=Ws-1 |
1 |
1 |
DEC2 f{,WREG}(1) |
Приемник=f-2 |
1 |
1 |
DEC 2 Ws,Wd |
Wd=Ws-2 |
1 |
1 |
DIV.S Wm,Wn |
Целочисленное знаковое деление 16/16-бит |
1 |
18 |
DIV.SD Wm,Wn |
Целочисленное знаковое деление 32/16-бит |
1 |
18 |
DIV.U Wm,Wn |
Целочисленное беззнаковое деление 16/16-бит |
1 |
18 |
DIV.UD Wm,Wn |
Целочисленное беззнаковое деление 32/16-бит |
1 |
18 |
DIVF Wm,Wn |
Знаковое деление чисел с плавающей точкой 16/16-бит |
1 |
18 |
INC f{,WREG}(1) |
Приемник=f+1 |
1 |
1 |
INC Ws,Wd |
Wd=Ws+1 |
1 |
1 |
INC2 f{,WREG}(1) |
Приемник=f+2 |
1 |
1 |
INC2 Ws,Wd |
Wd=Ws+2 |
1 |
1 |
MUL f |
W3:W2=f*WREG |
1 |
1 |
MUL.SS Wb,Ws,Wnd |
{Wnd+1,Wnd}=sign(Wb)*sign(Ws) |
1 |
1 |
MUL.SU Wb,#lit5,Wnd |
{Wnd+1,Wnd}=sign(Wb)*unsign(lit5) |
1 |
1 |
MUL.SU Wb,Ws,Wnd |
{Wnd+1,Wnd}=sign(Wb)*unsign(Ws) |
1 |
1 |
MUL.US Wb,Ws,Wnd |
{Wnd+1,Wnd}= unsign(Wb)*sign(Ws) |
1 |
1 |
MUL.UU Wb,#lit5,Wnd |
{Wnd+1,Wnd}= unsign(Wb)*unsign(lit5) |
1 |
1 |
MUL.UU Wb,Ws,Wnd |
{Wnd+1,Wnd}= unsign(Wb)*unsign(Ws) |
1 |
1 |
SE Ws,wnd |
Wnd=дополненный знаком Ws |
1 |
1 |
SUB f{,WREG}(1) |
Приемник=f – WREG |
1 |
1 |
SUB #lit10,Wn |
Wn=Wn - lit10 |
1 |
1 |
SUB Wb,#lit5,Wd |
Wd=Wb-lit5 |
1 |
1 |
SUB Wb,Ws,Wnd |
Wd=Wb-Ws |
1 |
1 |
SUBB f{,WREG}(1) |
Приемник=f – WREG – () |
1 |
1 |
SUBB #lit10,Wn |
Wn=Wn - lit10 - () |
1 |
1 |
SUBB Wb,#lit5,Wd |
Wd=Wb-lit5 - () |
1 |
1 |
SUBB Wb,Ws,Wnd |
Wd=Wb-Ws - () |
1 |
1 |
SUBBR f{,WREG}(1) |
Приемник= WREG – f – () |
1 |
1 |
SUBBR Wb,#lit5,Wd |
Wd= lit5 - Wb- () |
1 |
1 |
SUBBR Wb,Ws,Wnd |
Wd= Ws - Wb- () |
1 |
1 |
SUBR f{,WREG}(1) |
Приемник= WREG – f |
1 |
1 |
SUBR Wb,#lit5,Wd |
Wd= lit5 - Wb |
1 |
1 |
SUBR Wb,Ws,Wnd |
Wd= Ws - Wb |
1 |
1 |
ZE Ws,Wnd |
Wnd=дополненный нулем Ws |
1 |
1 |
Таблица 4
Логические инструкции
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
AND f{,WREG} |
Приемник=f AND WREG |
1 |
1 |
AND #lit10,Wn |
Wn=lit10 AND Wn |
1 |
1 |
AND Wb,#lit5,Wd |
Wb=Wb AND lit5 |
1 |
1 |
AND Wb,Ws,Wd |
Wd=Wb AND Ws |
1 |
1 |
CLR f |
f=0x0000 (очистить f) |
1 |
1 |
CLR WREG |
WREG=0x0000 (очистить WREG) |
1 |
1 |
CLR Wd |
Wd=0x0000 (очистить Wd) |
1 |
|
COM f{,WREG}) |
Приемник= |
1 |
1 |
COM Ws,Wd |
Wd= |
1 |
1 |
IOR f{,WREG} |
Приемник=f OR WREG |
1 |
1 |
IOR #lit10,Wn |
Wn=lit10 OR Wn |
1 |
1 |
IOR Wb,#lit5,Wd |
Wb=Wb OR lit5 |
1 |
1 |
IOR Wb,Ws,Wd |
Wd=Wb OR Ws |
1 |
1 |
NEG f{,WREG}(see Note) |
Приемник=+1 |
1 |
1 |
NEG Ws,Wd |
Wd=+1 |
1 |
1 |
SETM f |
f=0xFFFF (установка f) |
1 |
1 |
SETM WREG |
WREG=0xFFFF (установка WREG) |
1 |
1 |
SETM Wd |
Wd=0xFFFF (установка Wd) |
1 |
1 |
XOR f{,WREG}(see Note) |
Приемник=f XOR WREG |
1 |
1 |
XOR #lit10,Wn |
Wn=lit10 XOR Wn |
1 |
1 |
XOR Wb,#lit5,Wd |
Wb=Wb XOR lit5 |
1 |
1 |
XOR Wb,Ws,Wd |
Wd=Wb XOR Ws |
1 |
1 |
Таблица 5
Инструкции сдвига
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
ASR f{,WREG} |
Приемник= арифметический сдвиг содержимого f на один бит вправо |
1 |
1 |
ASR Ws,Wd |
Wd= арифметический сдвиг содержимого Ws на один бит вправо |
1 |
1 |
ASR Wb,#lit4,Wnd |
Wnd= арифметический сдвиг содержимого Wb на lit4 бит вправо |
1 |
1 |
ASR Wb,Wns,Wnd |
Wnd= арифметический сдвиг содержимого Wb на Wns |
1 |
1 |
LSR f{,WREG}(see Note) |
Приемник= логический сдвиг содержимого f вправо на один бит |
1 |
1 |
LSR Ws,Wd |
Wd= логический сдвиг содержимого Ws вправо на один бит |
1 |
1 |
LSR Wb,#lit4,Wnd |
Wnd= логический сдвиг содержимого Wb вправо на lit4 бит. |
1 |
1 |
LSR Wb,Wns,Wnd |
Wnd= логический сдвиг содержимого Wb вправо на Wns |
1 |
1 |
RLC f{,WREG}(see Note) |
Источник = циклический сдвиг влево через регистр переноса f |
1 |
1 |
RLC Ws,Wd |
Wd= циклический сдвиг влево через регистр переноса Ws |
1 |
1 |
RLNC f{,WREG}(see Note) |
Приемник = циклический сдвиг влево (без регистра переноса) f |
1 |
1 |
RLNC Ws,Wd |
Wd= циклический сдвиг влево (без регистра переноса)Ws |
1 |
1 |
RRC f{,WREG}(see Note) |
Приемник = циклический сдвиг вправо через регистр переноса f |
1 |
1 |
RRC Ws,Wd |
Wd= циклический сдвиг вправо через регистр переноса Ws |
1 |
1 |
RRNC f{,WREG}(see Note) |
Приемник = циклический сдвиг вправо (без регистра переноса) f |
1 |
1 |
RRNC Ws,Wd |
Wd= циклический сдвиг вправо (без регистра переноса)Ws |
1 |
1 |
SL f{,WREG}(see Note) |
Приемник = смещение влево f |
1 |
1 |
SL Ws,Wd |
Wd= смещение влево Ws |
1 |
1 |
SL Wb,#lit4,Wnd |
Wnd= смещение влево Wb на lit4 |
1 |
1 |
SL Wb,Wns,Wnd |
Wnd= смещение влево Wb на Wns |
1 |
1 |
Таблица 6
Битовые инструкции
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
BCLR f,#bit4 |
Очистить бит #bit4 в f |
1 |
1 |
BCLR Ws,#bit4 |
Очистить бит #bit4 в Ws |
1 |
1 |
BSET f,#bit4 |
Установить бит #bit4 в f |
1 |
1 |
BSET Ws,#bit4 |
Установить бит #bit4 Ws |
1 |
1 |
BSW.C Ws,Wb |
Записать бит C в Ws<Wb> |
1 |
1 |
BSW.Z Ws,Wb |
Записать бит Z в Ws<Wb> |
1 |
1 |
BTG f,#bit4 |
Инвертировать бит #bit4 в f |
1 |
1 |
BTG Ws,#bit4 |
Инвертировать бит #bit4 в Ws |
1 |
1 |
BTST f,#bit4 |
Проверить бит #bit4 в f |
1 |
1 |
BTST.C Ws,#bit4 |
Проверить бит #bit4 в Ws, результат проверки в C |
1 |
1 |
BTST.Z Ws,#bit4 |
Проверить бит #bit4 в Ws, результат проверки в Z |
1 |
1 |
BTST.C Ws,Wb |
Проверить бит Wb в Ws, результат проверки в C |
1 |
1 |
BTST.Z Ws,Wb |
Проверить бит Wb в Ws, результат проверки в Z |
1 |
1 |
BTSTS f,#bit4 |
Проверить бит #bit4 в f, затем его установить |
1 |
1 |
BTST.C Ws,#bit4 |
Проверить бит #bit4 в Ws, затем его установить, результат проверки в C. |
1 |
1 |
BTST.Z Ws,#bit4 |
Проверить бит #bit4 в Ws, затем его установить, результат проверки в Z. |
1 |
1 |
FBCL Ws,Wnd |
Find bit change form left (MSb) side |
1 |
1 |
FF1L Ws,Wnd |
Find bit one form left (MSb) side |
1 |
1 |
FF1R Ws,Wnd |
Find bit one form left (LSb) side |
1 |
1 |
Таблица 7
Инструкции сравнения
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
BTSC f,#bit4 |
Проверить бит #bit4 в f ,если false, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
BTSC Ws,#bit4 |
Проверить бит #bit4 в Ws ,если false, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
BTSS f,#bit4 |
Проверить бит #bit4 в f ,если true, пропустить следующую операцию. |
1 |
1 (2 or 3 ) |
BTSS Ws,#bit4 |
Проверить бит #bit4 в Ws ,если true, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
CP f |
Compare (f – WREG) |
1 |
1 |
CP Wb,#bit5 |
Compare (Wb – lit5) |
1 |
1 |
CP Wb,Ws |
Compare (Wb – Ws) |
1 |
1 |
CPO f |
Compare (f – 0x0000) |
1 |
1 |
CPO Ws |
Compare (Ws – 0x0000) |
1 |
1 |
CPB f |
Compare with Borrow (f – WREG - ) |
1 |
1 |
CPB Wb,#bit5 |
Compare with Borrow (f – lit5 - ) |
1 |
1 |
CPB Wb,Ws |
Compare with Borrow (f – Ws - ) |
1 |
1 |
CPSEQ Wb,Wn |
Сравнить Wb и Wn, если равны, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
CPSGT Wb,Wn |
Сравнить Wb и Wn, если Wb>Wn, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
CPSLT Wb,Wn |
Сравнить Wb и Wn, если Wb<Wn, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
CPSNE Wb,Wn |
Сравнить Wb и Wn, если не равны, пропустить следующую операцию |
1 |
1 (2 or 3 ) |
Таблица 8
Инструкции переходов
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
BRA Expr |
Branch unconditionally |
1 |
2 |
BRA Wn |
Computed branch |
1 |
2 |
BRA C,Expr |
Branch if Carry (no Borrow) |
1 |
1 (2)(1) |
BRA GE,Expr |
Branch if greater than or equal |
1 |
1 (2)(1) |
BRA GEU,Expr |
Branch if unsigned greater than or equal |
1 |
1 (2)(1) |
BRA GT,Expr |
Branch if greater than |
1 |
1 (2)(1) |
BRA GTU,Expr |
Branch if unsigned greater than |
1 |
1 (2)(1) |
BRA LE,Expr |
Branch if less than or equal |
1 |
1 (2)(1) |
BRA LEU,Expr |
Branch if unsigned less than or equal |
1 |
1 (2)(1) |
BRA LT, Expr |
Branch if less than |
1 |
1 (2)(1) |
BRA LTU,Expr |
Branch if unsigned less than |
1 |
1 (2)(1) |
BRA N,Expr |
Branch if Negative |
1 |
1 (2)(1) |
BRA NC,Wxpr |
Branch if not Carry (Borrow) |
1 |
1 (2)(1) |
BRA NN,Expr |
Branch if not Negative |
1 |
1 (2)(1) |
BRA NOV,Expr |
Branch if not Overflow |
1 |
1 (2)(1) |
BRA NZ,Expr |
Branch if not Zero |
1 |
1 (2)(1) |
BRA OA,Expr |
Branch if Accumulator A Overflow |
1 |
1 (2)(1) |
BRA OB,Expr |
Branch if Accumulator B Overflow |
1 |
1 (2)(1) |
BRA OV,Expr |
Branch if Overflow |
1 |
1 (2)(1) |
BRA SA,Expr |
Branch if Accumulator A Saturate |
1 |
1 (2)(1) |
BRA SB,Expr |
Branch if Accumulator B Saturate |
1 |
1 (2)(1) |
BRA Z,Expr |
Branch if Zero |
1 |
1 (2)(1) |
CALL Expr |
Call subroutine |
2 |
2 |
CALL Wn |
Call indirect subroutine |
1 |
2 |
DO #lit14,Expr |
Выполнить код между данной инструкцией и меткой (lit14+1) раз |
2 |
2 |
DO Wn,Expr |
Выполнить код между данной инструкцией и меткой (Wn+1) раз |
2 |
2 |
GOTO Expr |
Go to address |
2 |
2 |
GOTO Wn |
Go to address indirectly |
1 |
2 |
RCALL Expr |
Relative call |
1 |
2 |
RCALL Wn |
Computed call |
1 |
2 |
REPEAT #lit14 |
Повторить следующую инструкцию (lit14+1) раз |
1 |
1 |
REPEAT Wn |
Повторить следующую инструкцию (Wn+1) раз |
1 |
1 |
RETFIE |
Retum form interrupt enable |
1 |
3 (2)(2) |
RETLW #lit10,Wn |
Retum with lit10 in Wn |
1 |
3 (2)(2) |
RETURN |
Retum form subroutine |
1 |
3 (2)(2) |
Таблица 9
Инструкции для работы со стеком
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
LNK #lit14 |
Link Frame Pointer |
1 |
1 |
POP f |
Извлечь значение из стека в f |
1 |
1 |
POP Wd |
Извлечь значение из стека в Wn |
1 |
1 |
POP.D Wnd |
Извлечь двойное значение из стека в Wnd:Wnd+1 |
1 |
2 |
POP.S |
Извлечь из теневого регистра |
1 |
1 |
PUSH f |
Поместить значение f в стек |
1 |
1 |
PUSH Ws |
Поместить значение Ws в стек |
1 |
1 |
PUSH.D Wns |
Поместить двойное значение Wns:Wns+1 в стек |
1 |
2 |
PUSH.S |
Поместить в теневой регистр |
1 |
1 |
ULNK |
Unlink Frame Pointer |
1 |
1 |
Таблица 10
Инструкции управления
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
CLRWDT |
Clear Watchdog Timer |
1 |
1 |
DISI #lit14 |
Disadle interrupts (lit14+1) instruction cycles |
1 |
1 |
NOP |
No operation |
1 |
1 |
NOPR |
No operation |
1 |
1 |
PWRSAV #lit1 |
Enter Power-saving mode lit1 |
1 |
1 |
Reset |
Software device Reset |
1 |
1 |
Таблица 11
Инструкции ЦСП
Синтаксис на языке Ассемблер |
Описание инструкции |
Количество слов |
Количество циклов |
ADD Acc |
Add accumulators |
1 |
1 |
ADD Ws,#Slit4,Acc |
16-bit signed add to Acc |
1 |
1 |
CLR Acc,Wx,Wxd,Wy,Wyd,AWB |
Clear Acc |
1 |
1 |
ED Wm*Wm,Acc,Wx,Wy,Wxd |
Euclidean distance (no accumulate) |
1 |
1 |
EDAC Wm*Wm,Acc,Wx,Wy,Wxd |
Euclidean distance |
1 |
1 |
LAC Ws,#Slit4,Acc |
Load Acc |
1 |
1 |
MAC Wm*Wn,Acc,Wx,Wy,Wyd,AWB |
Multiply and accumulate |
1 |
1 |
MAC Wm*Wm,Acc,Wx,Wxd, Wy,Wyd |
Square and accumulate |
1 |
1 |
MOVSAC Acc,Wx,Wxd,Wy,Wyd,AWB |
Move Wx to Wxd and Wy to Wyd |
1 |
1 |
MPY Wm*Wn,Acc,Wx,Wxd,Wy,Wyd |
Multiply Wn by Wm to Acc |
1 |
1 |
MPY Wm*Wm,Acc,Wx,Wxd,Wy,Wyd |
Square toAcc |
1 |
1 |
MPY.N Wm*Wn,Acc,Wx,Wxd,Wy,Wyd |
-( Multiply Wn by Wm) to Acc |
1 |
1 |
MSC Wm*Wn,Acc,Wx,Wxd,Wy,Wyd, AWB |
Multiply and subtract from Acc |
1 |
1 |
NEG Acc |
Negate Acc |
1 |
1 |
SAC Acc,#Slit4,Wd |
Store Acc |
1 |
1 |
SAC.R Acc,#Slit4,Wd |
Store rounded Acc |
1 |
1 |
SFTAC Acc,#Slit6 |
Arithmetic shift Acc by Slit6 |
1 |
1 |
SFTAC Acc,Wn |
Arithmetic shift Acc by (Wn) |
1 |
1 |
SUB Acc |
Subtract accumulators |
1 |
1 |