![](/user_photo/2706_HbeT2.jpg)
- •1. Цель работы
- •2. Структура проекта
- •3. Рекомендуемый путь и этапы создания проекта в vdsp
- •3.1 Пример и описание .Ldf файла
- •Search_dir() - определение путей к текущей рабочей директории и к директории lib.
- •3.2 Структура простейшего .Asm файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •3.3 Компоновка проекта и создание исполняемого .Dxe файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •Rti; nop; nop; nop; /* 0x0020: sport1 transmit*/
- •Rti; nop; nop; nop; /* 0x0028: Timer*/
- •4. Запуск и отладка проекта.
- •4.1 Запуск проекта Lab1
- •4.2 Отображение содержимого памяти
- •4.3 Отображение содержимого регистров
- •4.4 Построение графиков
- •5. Задание к лабораторной работе
- •1. Особенности и типы команд сигнального процессора
- •2. Используемые условия
- •2.1 Подробное описание регистров состояния и значения их битов
- •2.2 Логическое описание условий (cond), используемых с оператором if
- •2.3 Условия завершения цикла do until (term)
- •3. Многофункциональные инструкции
- •3.1 Операции alu/mac с одновременным чтением памяти данных и памяти программ
- •3.2 Чтение памяти данных и памяти программ
- •3.3 Вычисления с чтением из памяти
- •3.4 Вычисления с записью в память
- •3.5 Вычисления с пересылкой регистр-регистр
- •4. Инструкции alu, mac и shifter
- •4.1 Инструкции и стандартные функции
- •4.2 Инструкции и стандартные функции
- •4.3 Инструкции и основные функции
- •5. Команды пересылки данных
- •6. Инструкции управления исполнением программы
- •If eq jump my_label; call (i6);
- •7. Другие инструкции и команды не вошедшие в
- •8. Обобщённая таблица команд
3.2 Чтение памяти данных и памяти программ
Эта вариация многофункциональной инструкции представляет специальный случай выше описанной инструкции с опущенной вычислительной частью, например:
AX0=DM (I2, M0), AY0=PM (I4, M6);
Как и для предыдущей инструкции, Х-операнд должен загружаться из памяти данных, Y-операнд – из памяти программ.
3.3 Вычисления с чтением из памяти
Если производится одно чтение из памяти вместо двух, как в
предыдущих командах, можно выполнять более широкий класс вычислений. Возможны все операции ALU, кроме деления, все операции MAC и все операции SHIFTER, кроме немедленного сдвига. Вычисление должно быть безусловным. Пример данного типа многофункциональной инструкции:
AR=AX0+AY0, AX0=DM (I0, M3);
Здесь производится сложение в ALU и в то же время происходит загрузка операнда из памяти данных. Ограничения здесь такие же, как и для предыдущих инструкций. Значение регистра AX0, используемое в качестве операнда сложения, является его содержимым в начале цикла. Операция чтения данных загружает новое значение в этот регистр в конце цикла. По этой причине регистр результата (AR в данном примере) не может быть приемником для чтения из памяти.
3.4 Вычисления с записью в память
Вычисление с записью в память аналогично по структуре вычислению с чтением из памяти, однако порядок инструкций здесь меняется на противоположный. Сначала записывается операция записи в память, затем вычисления, как показано ниже:
DM (I0, M0)=AR, AR=AX0+AY0;
Опять значение исходного регистра для записи в память (AR в данном примере) соответствует его содержимому в начале цикла. Вычисление приводит к записи нового значения в этот регистр в конце цикла. Перестановка инструкций в данной записи недопустима. Инструкция поддерживает тот же класс вычислений, что и предыдущая.
3.5 Вычисления с пересылкой регистр-регистр
Последний тип многофункциональных инструкций производит вычисление с пересылкой регистр-регистр, например:
AR=AX0+AY0, AX0=MR2;
Здесь происходит сложение значений AX0 и AYO в начале цикла и загрузка нового операнда в AX0 из MR2 в конце цикла. Пересылка регистр-регистр может быть в/из любого регистра ALU, MAC и SHIFTER (кроме регистров обратной связи АF и МF и регистра SB). Возможен тот же класс вычислений, что и выше.
4. Инструкции alu, mac и shifter
Эта группа инструкций производит вычисления. Все инструкции этой группы могут исполняться условно за исключением деления (ALU) и непосредственного сдвига (SHIFTER).
4.1 Инструкции и стандартные функции
арифметико-логического устройства
ALU разрядностью 16 бит имеет два 16-битовых порта ввода – Х и Y, и один порт вывода R, блок-схема ALU представлена на рис. П1. Источниками/приемниками данных для портов ввода/вывода являются:
источники ввода данных в порт Х – АХ0, АХ1,АR,МR0, МR1, МR2,SR0, SR1;
источники ввода данных в порт Y – АY0, АY1,AF;
направление вывода данных через порт R – AR,AF.
ALU реализует следующие 19 стандартных функций:
R = Х + Y, сложить операнды Х и Y;
R = Х + Y + СI, сложить операнды Х и Y и бит переноса;
R = Х – Y, вычесть операнд Y из Х;
R= Х – Y + СI– 1, вычесть операнд Y из Х с "заемом";
R = Y – X, вычесть Х из операнда Y;
R = Y – Х + СI – 1, вычесть Х из операнда Y с "заемом";
R = – X, инвертирование операнда Х(в дополнительном коде);
R = – Y, инвертирование операнда Y (в дополнительном коде);
R = Y + 1, инкрементирование операнда Y;
R = Y – 1, декрементирование операнда Y;
R = РАSS Х, пропустить операнд Х для сохранения результата неизменным;
R = РАSS Y, пропустить операнд Y для сохранения результата неизменным;
R = 0 (PASS 0), обнуление результата;
R = АВS Х, найти абсолютное значение операнда Х;
R =Х АND Y, логическое И над операндами Х и Y;
R = Х ОR Y, логическое ИЛИ над операндами Х и Y;
R = Х ХОR Y, операция исключающее ИЛИ над операндами Х и Y;
R = NОТ Х, операция логического НЕ над операндом Х;
R = NОТ Y, операция логического НЕ над операндом Y.
Операции ALU реализуются программно с помощью легко читаемых ассемблерных инструкций, например:
AR = AX0 + AX1 + C;
AR = AX0 OR AY1; AR = PASS AX1;
Рис. П1. Блок-схема арифметико-логического устройства