5.6. После завершения работы закрыть проект командой Project/Close и закрыть программу VisualDSP++. Папку VectAdd не удалять - она используется в лабораторной работе № 3.
6. Содержание отчёта
6.1. Цель работы.
6.2. Выполнявшаяся программа на языке ассемблера с указанием сделанных исправлений.
6.3. Результаты проверки работы программы в пошаговом режиме в виде таблицы 2.1.
7.1. Назовите физическое содержание или назначение отлаживаемой программы.
7.2. Каковы преимущества и недостатки разработки прикладных программ на машинном языке, языке ассемблера и языке высокого уровня.
7.3. Какие два значения имеет термин «ассемблер»?
7.4. Каковы назначение, правила записи и использования программы на языке ассемблера?
7.5. Назовите основные этапы разработки прикладной программы.
7.6. Укажите, в чем различия, преимущества и недостатки резидентных и кросс-средств разработки и отладки программного обеспечения.
7.7. Перечислите программы, входящие в автоматизированную систему проектирования прикладных программ для ЦСП.
7.8. Опишите использованные приемы обнаружения ошибок в программе.
7.9. Опишите приемы разработки прикладной программы с использованием VisualDSP++.
7.10. Опишите приемы пошаговой проверки работы программы. Как заполнить графу «наблюдаемый регистр» в таблице 2.1?
7.11. Укажите основные свойства, преимущества и недостатки программных и аппаратно-программных средств отладки микропроцессорных систем.
7.12. Какие этапы разработки прикладной программы интегрированы и автоматизированы в VisualDSP++.
Программа к ЛР № 2, 3
/* ADSP-2181 VectorAddProgram файл VectAdd.asm
Эта учебная программа складывает два числа X и Y, читаемых из буферов в памяти, и выводит результат сложения R на периферийное устройство.
Программа написана для имитатора. Используется файл описания архитектуры ЦСП ADSP-2181.ldf.
*/
#define n 10 // размерность исходных векторов
#define k 10 // размерность вектора результата
#define z_out 0x100 // адрес периферийного устройства
.section/data data1;
.VAR x_input[n] = "xin.dat"; // буфер данных в DM с именем x_input
.section/pm pm_da;
.VAR y_input[n] = "yin.dat"; // буфер данных в PM с именем y_input
.section/pm interrupts; // Таблица векторов прерываний
_reset: JUMP start; NOP; NOP; NOP; // 0x0000: вектор сброса
RTI; NOP; NOP; NOP; // 0x0004: IRQ2
RTI; NOP; NOP; NOP; // 0x0008: IRQL1
RTI; NOP; NOP; NOP; // 0x000C: IRQL0
RTI; NOP; NOP; NOP; // 0x0010: SPORT0 передача
RTI; NOP; NOP; NOP; // 0x0014: SPORT0 приём
RTI; NOP; NOP; NOP; // 0x0018: IRQE
RTI; NOP; NOP; NOP; // 0x001C: BDMA
RTI; NOP; NOP; NOP; // 0x0020: SPORT1 передача
RTI; NOP; NOP; NOP; // 0x0024: SPORT1 приём
RTI; NOP; NOP; NOP; // 0x0028: таймер
RTI; NOP; NOP; NOP; // 0x002C: Power down
.section/pm program;
start: I2=x_input; // указатель на буфер x_input
L2=0; // буфер линейный (некольцевой)
I6=y_input; // указатель на буфер y_input
L6=0; // буфер линейный (некольцевой)
M0=1; L0=0; // шаг изменения адреса в DM =1
M5=1; L5=0; // шаг изменения адреса в PM =1
CNTR=k-1; // число проходов цикла уменьшено на 1
AX0=DM(I2,M0), AY0=PM(I6,M5); // ввод первых двух операндов X и Y
DO add_loop UNTIL CE; // цикл до метки пока не обнулится счётчик
AR=AX0+AY0, AX0=DM(I2,M0), AY0=PM(I6,M5);
// вычисление R=X+Y, ввод следующих операндов X и Y
add_loop: DM(z_out) = AR; // запиcь результата R
AR = AX0+AY0; // последнее вычисление R=X+Y
DM(z_out) = AR; // запиcь последнего результата R
IDLE; // останов
// конец программыVectAdd.asm
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.