LR3_
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ КАФЕДРА вычислительных систем и сетей
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
ассистент А.Н.Долидзе
должность, уч. степень, звание подпись, дата инициалы, фамилия
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3
Изучение алгоритма выполнения целочисленной машинной операции умножения или деления
по дисциплине: Организация ЭВМ и вычислительных систем.
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. №
подпись, дата инициалы, фамилия
Санкт-Петербург 2021
Задание:
Реализовать алгоритм лабораторной работы 2 в assamblerVAX, в среде разработки VAXsim.
Вариант: 1
Адрес начала расположения исходных данных:11
Адрес начала расположения команд программы: 151
Типы адресации операнд А – 7, B – 9.
Алгоритм программы
Рисунок 1 – алгоритм выполнения программы
Текст программы в мнемонических и машинных кодах
Оператор, №
Адрес, hex
Щестнадцатиричный код
Мнемокод
Комментарий
1
2
3
4
5
6
7
Программный код на ARM Assembler
mov r0,#0x00000007 @ множитель А
mov r1,#0xfffffff8 @ множитель B
mov r5,#0 @ переменная для коррекции
sub r5,r5,r0 @ вычитания из 0 множитель А, для отрицания A
mov r2,#0 @ сумма частных произведений / итог
mov r3,#0 @ счетчик цикла
mov r4,#1 @ маска
label1: tst r1, r4 @ флаг1 сравнение маски и множителя
beq label2 @ если 0 переход к флагу2
add r2,r2,r0 @добавляем в регистр р2 содержимое регистра р0
label2: mov r0,r0,lsl #1 @флаг2 сдвигаем множитель А на 1 бит влево
mov r4,r4,lsl #1 @сдвигаем маску 0001 – 0010 - 0100 - 1000
add r3,r3,#1 @ добавляем 1 к счетчику
CMP r3,#4 @ сравнение счетчика и количество циклов (4)
bne label1 @ если не 4 переход к флагу 1
cmp r1,#0 @ сравнени множитля с 0
bge finish @ если больше 0 переход к флагу финиш, если меньше 0(отрицание) добавляем корекцию
mov r5,r5,lsl #4 @ сдвиг коррекции на 4 бита влево
add r2,r2,r5 @ добавление к результату коррекуцию
finish: .end
Программный код на VEX Assembler
[Processor settings]
Memory size=2048
Max commands before interruption=1048576
Generate messages=1
[Registers]
PSL=00000009
R6=00000015
RF=00000151
[Memory]
0x00000000=04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x00000010=00 EC FF FF FF 00 00 10 00 00 00 00 00 00 00 00
0x00000150=00 7C 50 7C 51 7C 52 7C 53 7C 54 D0 76 50 D0 9F
0x00000160=00 00 00 00 51 D0 8F 00 00 00 00 55 C2 50 55 D0
0x00000170=8F 00 00 00 00 52 90 8F 00 53 D0 8F 01 00 00 00
0x00000180=54 D3 51 54 13 03 C0 50 52 78 01 50 50 78 01 54
0x00000190=54 96 53 91 53 04 12 E9 D1 00 51 19 08 78 04 55
0x000001A0=55 C0 55 52 00 00 00 00 00 00 00 00 00 00 00 00
Трассировка
1 шаг очистка данных регистров r0-r5
2 шаг запись переменных А и B в R0 и R1
3 шаг вычисление R3
Результат умножения -20(FFFFFFEC) * 4 = -80(FFFFFFBO)
Другие примеры вычислений 30(1E)*5= 150(96)