4. Порядок выполнения работы
Практическая часть работы предполагает разработку программы на ассемблере с использованием макросов. Программа должна содержать 2 макроса: первый заполняет блок памяти массивом из чисел (см. задание 1 предыдущей лабораторной работы), а второй выполняет обработку этого массива в соответствии с вариантом задания для бригады. Номер варианта задания для второго макроса соответствует номеру бригады.
Для отладки программы воспользуемся специальным отладчиком emudbg.exe, поставляемым вместе с пакетом разработчика для процессора NM6403.
Задания
1. Вычислить контрольную сумму блока памяти (количество единичных бит) и записать её сразу за концом блока.
Рекомендации по выполнению: воспользуйтесь операцией взвешенного суммирования, разбив рабочую матрицу на 32 строки и 1 столбец. На первом этапе вычислите сумму четных единичных бит блока памяти (нумерация, как и для элементов блока памяти, начинается с нуля, а ноль – четное число). Полученные восемь 64-разрядных частичных сумм запишите в память для их временного хранения. На втором этапе вычислите сумму нечетных единичных бит. На третьем этапе просуммируйте частичные суммы четных и нечетных бит. Выгрузите полученные восемь 64-разрядных частичных сумм в память для их временного хранения. На четвертом этапе просуммируйте полученные частичные суммы на скалярном процессоре (см. разобранный пример для 11 варианта) и запишите результат в память. Для того чтобы получить доступ к четным/нечетным битам входа Х, необходимо воспользоваться блоком маскирования, задав соответствующие векторы масок:
EvenMask: long = 05555555555555555hl; // маска для четных бит (0101);
OddMask: long = 0aaaaaaaaaaaaaaaahl; // маска для нечетных бит (1010).
Вектор масок следует хранить в ram , причем столько 64-разрядных слов, сколько раз выполняется векторная команда (в нашем случае – 8). Кроме того, при суммировании нечетных бит необходимо подключить регистр сдвига, т.к. разрядность элементов входа Х – 2 бита. Во избежание путаницы следует четко представлять последовательность выполнения всех этих операций в процессоре (см. предыдущую работу).
2. Прибавить всем четным элементам разрядностью 16 бит сегодняшнее число. Затем вычислить сумму 0-го и 1-го 64-разрядных элементов и записать её сразу за концом блока.
3. Умножить каждый элемент блока памяти разрядностью 8 бит на количество человек в бригаде. Затем найти разность между 2-м и 0-м 32-разрядными элементами и записать её сразу за концом блока 64-разрядным словом с обнулением старших 32 разрядов этого слова.
4. Вычесть из каждого нечетного элемента разрядностью 32 бита предыдущий (четный) элемент. Затем найти результат логического «или» 0-го и 4-го элементов разрядностью 16 бит и записать его сразу за концом блока 64-разрядным словом с обнулением старших 48 разрядов этого слова.
5. Поменять местами соседние четные и нечетные 16-разрядные элементы. Затем найти результат логического «и» 0-го и 1-го 64-разрядных слов и записать его сразу за концом блока.
6. Найти сумму всех четных 32-разрядных элементов. Затем обнулить у всех 32-разрядных элементов блока биты, которые в полученной сумме равны нулю.
7. Проинвертировать побитно блок памяти, а затем найти результат логического «и» исходного и проинвертированного блока.
Рекомендации по выполнению: воспользуйтесь операцией or или and в АЛУ, подключив инверсию входа Х, а на вход Y подав соответствующее значение в зависимости от используемой операции. В данном примере можно обойтись без выгрузки промежуточных результатов в память, воспользовавшись возможностью работы afifo одновременно как на чтение (из головы), так и на запись (в хвост).
8. Замените все неотрицательные 4-разрядные элементы нулём, а отрицательные – минус единицей. Затем замените все -1 на 1, а нулевые элементы оставьте без изменений.
Рекомендации по выполнению: для выполнения первой части задания воспользуйтесь операцией логической активации (см. предыдущую работу), а для замены -1 на 1 – операцией взвешенного суммирования. Подумайте, какие для этого понадобятся весовые коэффициенты. В данном примере можно обойтись без выгрузки промежуточных результатов в память, воспользовавшись возможностью работы afifo одновременно как на чтение (из головы), так и на запись (в хвост).
9. Выполнить арифметическую активацию всех 4-разрядных элементов порогами [-4; 3] (см. предыдущую работу). Затем найти результат «исключающего или» 0-го и 7-го (последнего) 64-разрядных элементов и записать его сразу за концом блока.
10. Переставить в каждом 64-разрядном элементе 4-разрядные тетрады в обратном порядке, после чего проинвертировать побитно весь блок памяти.
11. Прибавить всем четным 16-разрядным элементам следующий за ними нечетный элемент, умноженный на 2 и уменьшенный на 1. После этого найти результат операции «исключающего или» над 0-м и 4-м 16-разрядными элементами блока памяти, и записать его в память 64-разрядным словом сразу за концом блока с обнулением оставшихся 48 старших бит слова. Затем найти сумму всех нечетных 8-разрядных элементов блока памяти в формате 32-разрядного слова.
Отладить по шагам полученную программу и убедиться в её правильности. Зафиксировать в отчете текст программы и результаты её работы.
- Лабораторная работа № 1 Архитектура нейромикропроцессоров семейства NeuroMatrix® nm640х и их функциональные возможности
- 1. Описание и порядок пользования программой nmcalculator
- 1.1. Формирование векторной команды
- 1.2. Разбиение рабочей матрицы и запись весовых коэффициентов
- 1.3. Установка входных значений
- 1.4. Генератор кода
- 2. Порядок выполнения работы
- Лабораторная работа № 2
- 1. Указания к выполнению работы
- 2. Элементы языка ассемблера процессора nm6403
- 2.1. Формат ассемблерных инструкций
- 2.2. Векторные инструкции процессора
- 2.3. Регистры процессора
- 2.3.1. Основные регистры
- 3. Порядок выполнения работы
- 4. Контрольные вопросы
- Лабораторная работа № 3
- 2.3. Использование меток в макросах
- 2.4. Импорт макросов из макробиблиотек
- 3. Пример простейшей программы
- 4. Порядок выполнения работы
- Лабораторная работа № 4
- 1.2. Реализация алгоритма шифрования на процессоре nm6403
- Практическая часть
- 2.1. Реализация алгоритма гост 28147-89 на нейропроцессоре nm6403/6404
- 2.2. Реализация алгоритма гост 28147-89 на эмуляторе вектора векторных команд
- 2.3. Варианты заданий
- 2.4. Удаленный доступ к плате NeuroMatrix
- Библиографический список