Программирование процессора NeuroMatrix NM 6403
Министерство
образования и науки РФ
Федеральное
государственное бюджетное образовательное учреждение высшего профессионального
образования
Рязанский
государственный радиотехнический университет
Кафедра ЭВМ
Отчет о
лабораторной работе №2
Программирование
процессора NeuroMatrix ® NM 6403
Выполнили:
ст. гр. 841, бр. №3
Антипова
А.А., Бекаури Я.Г.
Проверили:
Проф. каф.
ЭВМ Ручкин В.Н.
Асс. каф.
ЭВМ Муратов Е.Р.
Рязань, 2012
г.
Цель работы:
ознакомление с языком ассемблера процессора NeuroMatrix ® NM 6403 (Л18789 ВМ1)
и возможностями, которые он предоставляет программисту.
Теоретическая часть:
Процессор NM6403 работает с машинными командами
32-х и 64-х разрядного формата, причем в одной машинной команде содержится две
операции процессора. В этом смысле NM6403 представляет собой скалярный
микропроцессор со статической Very Long Instruction Word (V LIW) -
архитектурой. При этом используются короткие и длинные инструкции. Причем
короткие инструкции не содержат константы и имеют разрядность 32 бита. А
длинные инструкции содержат в коде команды 32-х разрядную константу. Поэтому их
разрядность составляет 64 бита. Процессор адресуется к 32-х разрядным словам.
На хранение коротких инструкций отводится одна ячейка памяти, для длинных - две.
Процессор NM6403 за одно обращение к памяти
считывает либо две коротких инструкции, либо одну длинную, поэтому регистр pc,
определяющий адрес следующей считываемой инструкции, всегда имеет четное
значение.
Все инструкции процессора NM6403 делятся на два
типа:
скалярные инструкции, которые управляют работой
скалярного RISC-ядра, таймеров, осуществляют загрузку/чтение всех регистров
(доступных по чтению/записи) за исключением векторных регистров, образующих
очереди FIFO;
векторные инструкции, которые управляют работой
векторного процессора.
Каждая инструкция процессора NM6403 состоит из
двух частей, называемых условно «левой» и «правой». Обе части инструкции
выполняются процессором одновременно за один такт. В левой части инструкции
записываются только адресные операции, в правой все арифметическо-логические,
не связанные с вычислением адресов и обращением к памяти. Левая и правая части
инструкции соединяются воедино при помощи ключевого слова with.
адресные регистры;
регистры общего назначения;
специальные регистры;
векторные регистры.
К основным регистрам процессора относятся 8
адресных регистров: ar0 - ar7(sp) и 8 регистров общего назначения: gr0 - gr0,
которые используются в большинстве вычислительных операций процессора. Все они
32-х разрядные, доступны как по чтению, так и по записи.
Адресные регистры делятся на две равноправные
группы. В первую входят ar0-ar3 , а во вторую ar4.ar7. Это связано с наличием
двух адресных устройств в процессоре. Существуют ограничения на возможность
использовать адресные регистры из разных групп в одной процессорной инструкции.
При этом адресные регистры могут использоваться только в левой части
ассемблерной инструкции.
Регистры общего назначения в отличие от адресных
не имеют разделения на группы, могут использоваться как в левой, так и в правой
частях ассемблерной инструкции. С их помощью можно выполнять арифметические и
логические преобразования, адресоваться по памяти.
Каждому адресному регистру поставлен в соответствие
регистр общего назначения с тем же номером. Таким образом, образуются
регистровые пары.
процессор neuromatrix программа
память
Практическая часть:
1. Заполнить блок памяти размером в 8
64-разрядных слов (или, что то же самое, - 16 32-разрядных слов) элементами
длинной 32 бита возрастающими с INC на INC, где INC = текущий год * (номер
бригады + количество человек в бригаде + сумма цифр номера группы)
Написать программу для выполнения этого задания,
скомпилировать её в выполняемый файл (*.abs) и отладить её на отладчике
emudbg.exe . Зафиксировать в отчете полученный блок памяти с указанием его
начального и конечного адреса.
Рисунок 1 - Исходное состояние блока
памяти
. Выполнить обработку полученного блока памяти
(массива) в соответствии с вариантом для вашей бригады:
а) Умножить каждый элемент блока памяти
разрядностью 8 бит на количество человек в бригаде.
: long[8] = (
hl,
hl,
hl,
hl,
hl,
hl,
hl );
Рисунок 2 - Матрица весовых
коэффициентов
Рисунок 3 - Умножение элементов на 2
б) Найти разность между 2-ым и 0-ым
32-разрядными элементами и записать её сразу за концом блока 64-разрядным
словом с обнулением старших 32 разрядов этого слова.
Рисунок 4 - Исходные операнды и
результат
Рисунок 5 - Содержимое блока
регистров
Текст программы:
global __main: label;
".dataSeg"
: word[16] = (0 dup 16);: long =
0hl;: word = 36216;
: long[8] = (
hl,
hl,
hl,
hl,
hl,
hl,
hl);
".dataSeg";
". textAAA "
<__main>
= Block;= 16;= [INC];= gr2;--;
<Loop>> delayed goto Loop
with gr1--;
[ar0++] = gr0 with gr0+=gr2 noflags;
;
= 80808080h;= 02020202h;= Matr;
32 wfifo = [ar0++];
ftw; // весовые
коэффициенты пересылаются в теневую матрицу
wtw; // весовые
коэф.копируются из теневой матрицы в рабочую
ar0 = Block;8 data = [ar0++] with
vsum , data, 0;= Block;8 [ar0++] = afifo;= Block-1;= Result;= [ar0++];=
[ar0++];= [ar0++];= [ar0++];
= gr3 - gr1;
[ar1++] = gr4;= 0;
[ar1++] = gr4;
;
".textAAA";