Схема расположения на экране основных органов управления и окон. Основные приёмы работы с VisualDSP++, страница 3

 5.6. После завершения работы закрыть проект командой Project/Close и закрыть программу VisualDSP++. Папку VectAdd не удалять - она используется в лабораторной работе № 3.

6. Содержание отчёта

6.1. Цель работы.

6.2. Выполнявшаяся программа на языке ассемблера с указанием сделанных исправлений.

6.3. Результаты проверки работы программы в пошаговом режиме в виде таблицы 2.1.

7. Контрольные вопросы.

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