Программирование процессора NeuroMatrix NM 6403
К основным регистрам процессора относятся 8 адресных регистров: ar0 — ar7(sp) и 8 регистров общего назначения: gr0 — gr0, которые используются в большинстве вычислительных операций процессора. Все они 32-х разрядные, доступны как по чтению, так и по записи. Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования… Читать ещё >
Программирование процессора NeuroMatrix NM 6403 (реферат, курсовая, диплом, контрольная)
Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Рязанский государственный радиотехнический университет Кафедра ЭВМ Отчет о лабораторной работе № 2
Программирование процессора NeuroMatrix ® NM 6403
Выполнили: ст. гр. 841, бр. № 3
Антипова А.А., Бекаури Я.Г.
Проверили:
Проф. каф. ЭВМ Ручкин В.Н.
Асс. каф. ЭВМ Муратов Е.Р.
Рязань, 2012 г.
Цель работы: ознакомление с языком ассемблера процессора NeuroMatrix ® NM 6403 (Л18 789 ВМ1) и возможностями, которые он предоставляет программисту.
Теоретическая часть:
Процессор NM6403 работает с машинными командами 32-х и 64-х разрядного формата, причем в одной машинной команде содержится две операции процессора. В этом смысле NM6403 представляет собой скалярный микропроцессор со статической Very Long Instruction Word (V LIW) — архитектурой. При этом используются короткие и длинные инструкции. Причем короткие инструкции не содержат константы и имеют разрядность 32 бита. А длинные инструкции содержат в коде команды 32-х разрядную константу. Поэтому их разрядность составляет 64 бита. Процессор адресуется к 32-х разрядным словам. На хранение коротких инструкций отводится одна ячейка памяти, для длинных — две.
Процессор NM6403 за одно обращение к памяти считывает либо две коротких инструкции, либо одну длинную, поэтому регистр pc, определяющий адрес следующей считываемой инструкции, всегда имеет четное значение.
Все инструкции процессора NM6403 делятся на два типа:
— скалярные инструкции, которые управляют работой скалярного RISC-ядра, таймеров, осуществляют загрузку/чтение всех регистров (доступных по чтению/записи) за исключением векторных регистров, образующих очереди FIFO;
— векторные инструкции, которые управляют работой векторного процессора.
Каждая инструкция процессора NM6403 состоит из двух частей, называемых условно «левой» и «правой». Обе части инструкции выполняются процессором одновременно за один такт. В левой части инструкции записываются только адресные операции, в правой все арифметическо-логические, не связанные с вычислением адресов и обращением к памяти. Левая и правая части инструкции соединяются воедино при помощи ключевого слова with.
Все регистры процессора NM6403 можно разделить на следующие группы:
— адресные регистры;
— регистры общего назначения;
— специальные регистры;
— векторные регистры.
К основным регистрам процессора относятся 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 — Исходное состояние блока памяти
2. Выполнить обработку полученного блока памяти (массива) в соответствии с вариантом для вашей бригады:
а) Умножить каждый элемент блока памяти разрядностью 8 бит на количество человек в бригаде.
Matr: long[8] = (
02hl,
200hl,
2 0000hl,
200 0000hl,
20 000 0000hl,
2 000 000 0000hl,
200 000 000 0000hl,
20 000 000 000 0000hl);
Рисунок 2 — Матрица весовых коэффициентов
Рисунок 3 — Умножение элементов на 2
б) Найти разность между 2-ым и 0-ым 32-разрядными элементами и записать её сразу за концом блока 64-разрядным словом с обнулением старших 32 разрядов этого слова.
Рисунок 4 — Исходные операнды и результат
Рисунок 5 — Содержимое блока регистров
Текст программы:
global __main: label;
data «.dataSeg»
Block: word[16] = (0 dup 16);
Result: long = 0hl;
INC: word = 36 216;
Matr: long[8] = (
02hl,
200hl,
2 0000hl,
200 0000hl,
20 000 0000hl,
2 000 000 0000hl,
200 000 000 0000hl,
20 000 000 000 0000hl);
end «.dataSeg» ;
begin «. textAAA «
<__main>
ar0 = Block;
gr1 = 16;
gr2 = [INC];
gr0 = gr2;
gr1—;
if > delayed goto Loop with gr1—;
[ar0++] = gr0 with gr0+=gr2 noflags;
nul;
nb1 = 8 080 8080h;
sb = 202 0202h;
ar0 = Matr;
rep 32 wfifo = [ar0++];
ftw; // весовые коэффициенты пересылаются в теневую матрицу
wtw; // весовые коэф. копируются из теневой матрицы в рабочую
ar0 = Block;
rep 8 data = [ar0++] with vsum, data, 0;
ar0 = Block;
rep 8 [ar0++] = afifo;
ar0 = Block-1;
ar1 = Result;
gr0 = [ar0++];
gr1 = [ar0++];
gr2 = [ar0++];
gr3 = [ar0++];
gr4 = gr3 — gr1;
[ar1++] = gr4;
gr4 = 0;
[ar1++] = gr4;
return;
end «.textAAA» ;