Professional Documents
Culture Documents
Lab 6
Lab 6
Звіт
з лабораторної роботи №6
з дисципліни:
«Організація та функціонування комп'ютерів”
на тему:
“ Дослідження виконання арифметичних операцій у форматі з рухомою комою. “
Львів
2014
Лабораторна робота № 6
Тема: «Дослідження виконання арифметичних операцій у форматі з рухомою комою.»
Мета:
1. Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з
рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою.
2. Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою.
3. Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в
інструкціях навчального комп'.ютера - симулятора DeComp.
1. Теоретична частина
У форматі з рухомою комою, який звичайно називають нормальною формою запису, числа
записуються наступним чином:
A = М * d Р ,
При нормальній формі запис одного числа може приймати різний вигляд у залежності від
обмежень, що накладаються на його форму. Фактично місце коми у мантисі М визначається
величиною порядку р. Із зміною порядку р у більшу або меншу сторону кома відповідно
переміщується ліворуч або праворуч, тобто рухається (“плаває”) у зображені мантиси.
Наприклад:
23410 = 234 * 100 = 0,234 * 103 = 0,0234 * 104 = 2,34 * 102 ;
Розряди мантиси числа В, які вийшли за межі розрядної сітки процесора, будуть втрачені,
що погіршить точність обчислень.
б) Переводимо мантиси обох чисел у модифікований доповнювальний код (в межах 4-х
розрядів):
МА пр = 11,1101 МА доп(М) =.11,0011
МВ пр = 00,0011 МВ доп(М) =.00,0011
(рА доп(м)= 00,101) + (рВ доп(м) = 11,100) = ,101 – 00,100 = 00,101 + (- 00,100) =
Через те, що рА > pB на +1, виконуємо зсув мантиси числа В вправо на 1 розряд.
Як видно, виникло порушення нормалізації вправо, тому що вправо від коми розряд
дорівнює 0.
д) Виконуємо нормалізацію результату, тобто зсув мантиси ліворуч на 1 розряд з
одночасним відповідним зменшенням порядку:
2. Порядок роботи:
Зсув ma вправо на
Зсув mb вправо на кількість різниці
Ввід чисел кількість різниці
аіb порядків
порядків
Анал ні
із ні
знаку Анал
Pa+? Перетворення Pa із
у доповняльний знаку Перетворення Pa
код ma+? у доповняльний
так
код
так
Перетворення Pa
у модифікований
доповняльний Перетворення ma
код у модифікований
доповняльний
код
Анал ні
із ні
знаку Анал
Перетворення Pb
Pb+? із
у доповняльний
знаку
код
так mb+? Перетворення Pb
у доповняльний
так код
Перетворення Pb
у модифікований Перетворення mb
доповняльний у модифікований
код доповняльний так
код
Віднімання Рa І Рb
Додавання ma і
mb
Переведення результату
віднімання в прямий код
так Переповнен
так
ня розрядної
Рa< сітки
Рb 01?
10? Корекція мантиси
ні
шляхом зсуву всього
Збільшення Pb на результату вправо на
Збільшення Pb на олин розряд
величину різниці величину різниці ні
1 4
2 3
3 4
Збільшення
порядку на 1
Перевірка так
на
від’ємніст
ь
(ma+mb)<0
?
Виконання
другого
доповнення
Результат
додатний
Переведення
результату в
прямий код
Нормалізац
ія
порушена?
Нормалізація
прямого коду
Виведення
результату
Кінець
Виконання:
Інформація про вхідні дані:
Код програми:
2 0000 0001 0101 1110 LOAD 350
3 0100 0001 0110 0001 AND 353 Виділення порядку першого числа (А)
4 0001 0001 0110 0010 STORE 354
5 0000 0001 0110 0010 LOAD 354
6 1111 0010 0000 0000 LSL
7 0011 0001 0110 1000 SUB 360
8 0001 0001 0110 1001 STORE 361
9 1000 0000 0000 0011 JNZ 3 Переміщення порядку до старших розрядів,
10 0000 0001 0101 1110 LOAD 350 шляхом зсуву вліво та віднімання одиниці з
11 0100 0001 0110 0000 AND 352 заготовленої маски
12 0001 0001 0110 0011 STORE 355
13 1111 1100 0000 0000 LSL Виділення знаку першого порядку числа
14 1100 0000 0001 0100 JNC 20 (А) логічним «І»
15 0000 0001 0110 0010 LOAD 354 Перевірка на від’ємність першого порядку
16 0111 0000 0000 0000 NOT числа (А)
17 0100 0001 0110 1010 AND 362
18 0010 0001 1000 0100 ADD 388
19 0001 0001 0110 0010 STORE 354 Якщо А<0, то переводимо порядок в
20 0000 0001 0110 0010 LOAD 354 доповняльний код логічним «І» та додавши
21 0010 0001 0110 0011 ADD 355 одиницю до молодшого розряду
22 0001 0001 0110 0110 STORE 358 Об’єднання знаку і порядку в одне число
23 0000 0001 0101 1111 LOAD 351
24 0100 0001 0110 0001 AND 353
25 0001 0001 0110 0100 STORE 356
26 0000 0001 0110 0100 LOAD 356
27 1111 0010 0000 0000 LSL Виділення порядку другого числа (В)
28 0001 0001 0110 0100 STORE 356
29 0000 0001 0110 1001 LOAD 377
30 0011 0001 0110 1000 SUB 360
31 0001 0001 0110 1001 STORE 377
32 1000 0000 0001 1010 JNZ 26 Переміщення порядку до старших розрядів,
33 0000 0001 0101 1111 LOAD 351 шляхом зсуву вліво та віднімання одиниці з
34 0100 0001 0110 0000 AND 352 заготовленої маски
35 0001 0001 0110 0101 STORE 357
36 1111 1100 0000 0000 LSL Виділення знаку другого числа (В)
37 1100 0000 0010 1011 JNC 43 логічним «І»
38 0000 0001 0110 0100 LOAD 356
39 0111 0000 0000 0000 NOT Перевірка на від’ємність (В)
40 0100 0001 0110 1010 AND 362
41 0010 0001 1000 0100 ADD 388
42 0001 0001 0110 0100 STORE 356 Якщо порядок другого числа <0, то
43 0000 0001 0110 0100 LOAD 356 переводимо порядок в доповняльний код
44 0010 0001 0110 0101 ADD 357 шляхом додавання одиниці з маски
45 0001 0001 0110 0111 STORE 359
46 0000 0001 0101 1110 LOAD 350
47 0100 0001 0111 0000 AND 368 Об’єднання знаку і порядку в одне число
48 0001 0001 0110 1011 STORE 363
49 0000 0001 0101 1110 LOAD 350
50 0100 0001 0110 1111 AND 367 Виділення мантиси числа А
51 1111 1100 0000 0000 LSL
52 1111 1100 0000 0000 LSL
53 0001 0001 0110 1101 STORE 365
54 0000 0001 0101 1111 LOAD 351 Виділення і нормалізація знаку матиси (А)
55 0100 0001 0111 0000 AND 368 подвійним зсувом вліво
56 0001 0001 0110 1100 STORE 364
57 0000 0001 0101 1111 LOAD 351
58 0100 0001 0110 1111 AND 367 Виділення мантиси числа В
59 1111 1100 0000 0000 LSL Виділення і нормалізація знаку матиси (В)
60 1111 1100 0000 0000 LSL
61 0001 0001 0110 1110 STORE 366
62 0000 0001 0110 0110 LOAD 358
63 0010 0001 0110 0111 ADD 359
64 0001 0001 0111 0011 STORE 371
65 1011 0000 0100 1100 JM 76
66 1111 0010 0000 0000 LSR Визначення різниці порядків
67 0100 0001 0111 0100 AND 372 Визначення знаку різниці
68 0001 0001 0111 0011 STORE 371
69 0000 0001 0111 0011 LOAD 371
70 0011 0001 0110 1000 SUB 360 Корекція результату віднімання порядків
71 1001 0000 0101 1010 JZ 90
72 0001 0001 0111 0011 STORE 371
73 0000 0001 0110 1100 LOAD 364
74 1111 0010 0000 0000 LSR
75 0001 0000 0110 1100 STORE 364
76 1110 0000 0101 0010 JMP 82 Зсув мантиси на величину різниці порядків
77 1111 0010 0000 0000 LSR шляхом зсуву вправо двійкогового коду
78 0100 0001 0111 0101 AND 373 мантиси
79 0001 0001 0111 0011 STORE 371
80 0100 0001 0111 0100 AND 372
81 0111 0000 0000 0000 NOT Корекція результату
82 0010 0001 1000 0101 ADD 389
83 0000 0001 0110 0110 LOAD 358 Переведення числа в прямий код додаючи
84 0010 0001 0111 0011 ADD 371 одиницю
85 0001 0001 0110 0110 STORE 358
86 0001 0001 0111 0011 STORE 371 Збільшення меншого порядку на величину
87 0000 0001 0111 0011 LOAD 371 різниці
88 1111 0010 0000 0000 LSR
89 0001 0001 0111 0011 STORE 371
90 0000 0001 0111 0110 LOAD 374
91 0011 0001 0110 1000 SUB 360
92 0001 0001 0111 0110 STORE 374
93 1000 0000 0110 0011 JNZ 99 Нормалізація різниці порядків шляхом
94 0000 0001 0111 0011 LOAD 371 зсуву вправо, та додаванням одиниці з
95 0011 0001 0110 1000 SUB 360 маски до молодшого розряду
96 1001 0000 0111 0011 JZ 115 Зсув мантиси на величину різниці порядків,
97 0001 0001 0111 0011 STORE 371
98 0001 0001 0110 1011 LOAD 363
99 1111 0010 0000 0000 LSR
100 0000 0001 0110 1011 STORE 363
101 1110 0000 0110 1011 JMP 107
102 0000 0001 0110 1101 LOAD 365 шляхом зсуву двійкового коду мантиси та
103 1111 1100 0000 0000 LSL відніманням одиниці в молодшому розряді
104 1100 0000 0110 1110 JNC 110
105 0001 0000 0110 1011 LOAD 363
106 0111 0000 0000 0000 NOT
107 0010 0001 0110 1000 ADD 360
108 0100 0001 0111 1010 AND 378
109 0000 0000 0110 1011 STORE 363 Переведення числа a в доповняльний код
110 0000 0001 0110 1110 LOAD 366 шляхом інвертування , та додаванням
111 1111 1100 0000 0000 LSL одиниці до молодшого розряду
112 1100 0000 0111 0110 JNC 118
113 0000 0000 0110 1100 LOAD 364
114 0111 0000 0000 0000 NOT
115 0010 0001 0110 1000 ADD 360
116 0100 0001 0111 1010 AND 378
117 0001 0001 0110 1100 STORE 364 Переведення числа b в доповняльний код
118 0001 0001 0110 1011 LOAD 363 шляхом інвертування , та додаванням
119 1111 1100 0000 0000 LSL одиниці до молодшого розряду
120 0001 0001 0110 1011 STORE 363
121 0000 0001 0111 1101 LOAD 375
122 0011 0001 0110 1000 SUB 360
123 0001 0001 0111 1101 STORE 375
124 1000 0000 1000 0011 JNZ 131 Зсув мантиси числа а до старших розрядів,
125 0000 0001 0110 1100 LOAD 364 зсувум вліво та відніманням одиниці від
126 1111 1100 0000 0000 LSL молодших розрядів
127 0001 0001 0110 1100 STORE 364 Зсув мантиси числа b до старших розрядів
128 0000 0001 0111 1110 LOAD 376 шляхом зсуву вліво та відніманням одиниці
129 0011 0001 0110 1000 SUB 360 від двійкового коду власне мантиси
130 0001 0001 0111 1110 STORE 376
131 1000 0000 1000 1010 JNZ 138
132 0001 0001 0110 1011 LOAD 363
133 0010 0001 0110 1101 ADD 365
134 0001 0001 0111 0001 STORE 369
135 0000 0001 0110 1100 LOAD 364 Об’єднання знаку і мантиси в одне число
136 0010 0001 0110 1110 ADD 366 числа а шляхом додаання
137 0001 0001 0111 0010 STORE 370
138 0000 0001 0111 0001 LOAD 369 Об’єднання знаку і мантиси в одне число
139 0000 0001 0111 0001 ADD 370 числа b шляхом додавання
140 1011 0000 1001 1100 JM 156 Додавання мантис двох чисел (Власне
141 1111 1100 0000 0000 LSL додавання)
142 0001 0001 0111 1100 STORE 380 Збереження результату при додатньому
143 1111 1100 0000 0000 LSL результаті, зсунувши при цьому вліво для
нормалізації результату, тобто прибравши
144 0010 0001 0111 1011 ADD 379 одиницю з старших розрядів(якщо вона є)
145 0111 0000 0000 0000 NOT Збереження результату при від’ємному
146 0100 0001 1000 0001 AND 385 результаті
147 0010 0001 1000 0110 ADD 390
148 0010 0001 0110 0000 ADD 352
149 0001 0001 0111 1100 STORE 380 Переведення від’ємного результату в
150 0000 0001 0110 0010 LOAD 354 прямий код шляхом логічного «І», тобто
151 1111 0010 0000 0000 LSR власне інвертуванням
152 1111 0010 0000 0000 LSR
153 0001 0001 0111 1111 STORE 383
Збереження порядку результату
154 0000 0001 0110 0011 LOAD 355
155 0001 0001 1000 0000 STORE 384
156 0000 0001 0111 1100 LOAD 380
Збереження знаку порядку результату
157 0100 0001 1000 0001 AND 385
158 1111 1100 0000 0000 LSL Перевірка денормалізації вправо і корекція
159 1111 1100 0000 0000 LSL результату
Завершення програми