
ЛР2
.docМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Кафедра многоканальных телекоммуникационных систем
Лабораторная работа № 2
по дисциплине
Цифровые системы передачи и методы их защиты
Исследование эффектов ограничения разрядной сетки при цифровой криптографической обработке сигналов
Бригада № 5
Выполнил:
студент гр. БЗС2002
Ломакин А. А.
Проверила:
ст. пр. Зуйкова Т. Н.
Москва 2023
1 Постановка задачи
Изучить архитектуру и систему команд сигнального процессора ADSP-2181 в среде VisualDSP++ и исследовать работу подпрограммы деления целых чисел в простых полях Галуа с учетом эффекта ограничения разрядной сетки со стороны старших разрядов.
2 Краткая теория
Порядок разработки алгоритма подпрограммы вычисления остатка от деления:
- Записать значение 32-разрядного делимого (16+16 разрядов) в пару регистров AF AY0. Значение 16-разрядного делителя записать в регистр АХ0.
- Содержимое регистра состояния ASTAT установить в 0 (при делении положительных чисел бит AQ = 0). 8-разрядный регистр состояния ASTAT содержит признаки, формируемые АЛУ, умножителем-накопителем и сдвигателем: SS, MV, AQ, AS, AC, AV, AN, AZ.
- Убедиться, что значение делителя не равно нулю, в противном случае завершить выполнение подпрограммы и выставить флаг невозможности деления AV = 1 (соответственно ASTAT=4).
- Проанализировать значение старшего разряда делителя. Если значение старшего разряда делителя равно нулю, то для вычисления частного следует 17 раз выполнить команду divq AX0. В противном случае следует сдвинуть значение делителя на один разряд вправо, например, с использованием сдвигателя, и для вычисления частного 16 раз выполнить команду divq dreg, где dreg – имя регистра, содержащего результат сдвига.
- Частное сформируется в регистре AY0.
- Для случая, когда старший разряд делителя равен единице, проанализировать значение младшего разряда делителя, и, если оно равно единице, вычесть единицу из частного.
- Вычислить остаток от деления по формуле: MR = MR - AX0* AY0,
где MR – делимое; AX0 – делитель; AY0 – частное. Значение остатка будет представлено в регистре MR0.
3 Блок-схема подпрограммы деления
Рисунок 1 – блок-схема подпрограммы деления
4 Разработанная блок-схема алгоритма
Рисунок 2 – блок-схема алгоритма
5 Текст подпрограммы деления
-
delen: mr1 = dm(aa1);
mr0 = dm(aa2);
ax1 = dm(aa1);
af = pass ax1; // старший разряд
ay0 = dm(aa2); // младший разряд
ax0 = dm(aa3); // делитель
ASTAT = 0; // обнуление признаков
ar = pass ax0;
if ne jump deli; // если результат в АЛУ (т.е. ar) не равен нулю, то прыгнем дальше
astat = 4;
rts;
deli: if gt jump deli_0; // результат в АЛУ больше 0 (старший разряд делителя 0)
if lt jump deli_1; // результат в АЛУ меньше 0 (старший разряд делителя 1)
deli_1: sr1 = ax0;
sr = lshift sr1 by -1(hi);
16 раз divq sr1;
ar = ay0;
af = tstbit 0 of ax0;
if ne ar = ar - 1;
mr2 = 0;
my0 = ax0;
ar = pass ay0;
mr = mr - ar * my0 (uu);
rts;
deli_0: 17 раз divq AX0;
mr2 = 0;
my0 = ax0;
ar = pass ay0;
mr = mr - ar * my0 (uu);
rts;
6 Выводы
В ходе лабораторной работы был проанализирован процесс деления целых чисел в полях Галуа на микропроцессоре. Я познакомился с уже разработанной программой деления, разобрался, как она работает и разработал к ней блок-схему. После мною была составлена своя блок-схема алгоритма деления, по которой был написан код в VisualDSP++. Важно отметить, что в ходе лабораторной были задействованы условия, по которым проверялся делитель, например, на то, не равен ли он нулю. Также были задействованы регистры АЛУ и умножителя и использована команда divq.