Смекни!
smekni.com

Дослідження виконання арифметичних операцій у форматі з рухомою комою (стр. 2 из 2)

(МА + МВ) пр(м) = 00,01001

Як видно, виникло порушення нормалізації вправо, тому що вправо від коми розряд дорівнює 0.

д) Виконуємо нормалізацію результату, тобто зсув мантиси ліворуч на 1 розряд з одночасним відповідним зменшенням порядку:

(А + В)пр = 0,1001 * 10100 – остаточний результат.


2.Хід роботи:

· Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі:

Знак порядку Знак мантиси Порядок Мантиса
2 розряди 2 розряди 4 розряди 8 розрядів

У алгоритмі передбачити аналіз отриманого результату на:

· переповнення розрядної сітки (порушення нормалізації вліво);

· наявність порушення нормалізації вправо;

· від'ємний результат

Передбачити відповідні заходи з корекції результату.

Блок-схема написаної програми

Попередньо в такі комірки заношу такі дані:

350 хххх хххх хххх хххх Число а
351 хххх хххх хххх хххх Число b
352 1100 0000 0000 0000 Маска для знаку порядку
353 0000 1111 0000 0000 Маска для порядку
354 0000 0000 0000 0000 Порядок числа а
355 0000 0000 0000 0000 Знак порадка числа а
356 0000 0000 0000 0000 Порядок числа b
357 0000 0000 0000 0000 Знак порядку числа b
358 0000 0000 0000 0000 Порядок зі знаком числа a
359 0000 0000 0000 0000 Порядок зі знаком числа b
360 0000 0000 0000 0001 Одиниця для додавання
361 0000 0000 0000 0010 Нормалізація порядку
362 0011 1100 0000 0000 Маска для нормалізації інвертації порядка
363 0000 0000 0000 0000 Мантиса числа a
364 0000 0000 0000 0000 Мантиса числа b
365 0000 0000 0000 0000 Знак мантиси числа a
366 0000 0000 0000 0000 Знак мантиси числа b
367 0011 0000 0000 0000 маска для відокремлення знаку мантиси
368 0000 0000 1111 1111 Маска для відокремлення мантиси
369 0000 0000 0000 0000 Мантиса зі знаком числа a
370 0000 0000 0000 0000 Мантиса зі знаком числа a
371 0000 0000 0000 0000 Різниця порядків
372 0011 1110 0000 0000 Маска для взяття різниці порядків
373 1011 1111 1111 1111 Обернена маска для взяття модуля різниці
374 0000 0000 0000 1001 Нормалізація різниці порядків
375 0000 0000 0000 0101 Підготовка мантиси
376 0000 0000 0000 0101 Підготовка мантиси
377 0000 0000 0000 0010 Нормалізація порядку
378 0000 0000 1111 1111 Маска для виділення мантиси
379 1000 0000 0000 0000 Відновлення знаку мантиси
380 0000 0000 0000 0000 Сума двох чисел
381 0000 0000 0000 0000 Мантиса результату
382 0000 0000 0000 0000 Знак мантиси результату
383 0000 0000 0000 0000 Порядок результату
384 0000 0000 0000 0000 Знак порядоку результату
385 0011 1111 1110 0000 Маска для вибору мантиси результату
386 0000 0000 0000 0110 Зсув мантиси до молодших розрядів
387 0000 0000 0000 0000 Результат (Зн. П, Зн.М, Порядок, Мантиса)
388 0000 0100 0000 0000 Додавання одиниці для переведення порядку
389 0000 0010 0000 0000 Одиниця для переведення різниці порядків
390 0000 0000 0010 0000 Додавання одиниці для переведення мантиси

Код програми:

0 0000 0001 0101 1110 LOAD 350 Виділення порядка 1-го числа
1 0100 0001 0110 0001 AND 353
2 0001 0001 0110 0010 STORE 354 Переміщення порядку до старших розрядів
3 0000 0001 0110 0010 LOAD 354
4 1111 0010 0000 0000 LSL
5 0001 0001 0110 0010 STORE 354
6 0000 0001 0110 1001 LOAD 361
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 Виділення знаку порядку 1-го числа
11 0100 0001 0110 0000 AND 352
12 0001 0001 0110 0011 STORE 355
13 1111 1100 0000 0000 LSL Перевірка на відємність порядка 1-го числа
14 1100 0000 0001 0100 JNC 20
15 0000 0001 0110 0010 LOAD 354 Якщо порядок 1-го числа відємний інвертуєм порядок перевести в доповняльний код
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
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 Виділення порядка 2-го числа
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 Виділення знаку порядку 2-го числа
34 0100 0001 0110 0000 AND 352
35 0001 0001 0110 0101 STORE 357
36 1111 1100 0000 0000 LSL Перевірка на відємність порядка 2-го числа
37 1100 0000 0010 1011 JNC 43
38 0000 0001 0110 0100 LOAD 356 Якщо порядок 2-го числа відємний інвертуєм порядок
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
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 1111 0010 0000 0000 LSR
71 0001 0001 0111 0011 STORE 371
72 0000 0001 0111 0110 LOAD 374
73 0011 0001 0110 1000 SUB 360
74 0001 0001 0111 0110 STORE 374
75 1000 0000 0100 0101 JNZ 69
76 0000 0001 0111 0011 LOAD 371
77 0010 0001 0110 1000 ADD 360
78 0001 0001 0111 0011 STORE 371
79 0000 0001 0110 0111 LOAD 359 Збільшення меншого порядку на величину різниці
80 0010 0001 0111 0011 ADD 371
81 0001 0001 0110 0111 STORE 359
82 0000 0001 0111 0011 LOAD 371 Зсув мантиси на величину різниці порядків
83 0011 0001 0110 1000 SUB 360
84 1001 0000 0101 1010 JZ 90
85 0001 0001 0111 0011 STORE 371
86 0000 0001 0110 1100 LOAD 364
87 1111 0010 0000 0000 LSR
88 0001 0000 0110 1100 STORE 364
89 1110 0000 0101 0010 JMP 82
90 1111 0010 0000 0000 LSR Корекція результату
91 0100 0001 0111 0101 AND 373
92 0001 0001 0111 0011 STORE 371
93 0100 0001 0111 0100 AND 372 Переведення числа в прямий код
94 0111 0000 0000 0000 NOT
95 0010 0001 1000 0101 ADD 389
96 0000 0001 0110 0110 LOAD 358 Збільшення меншого порядку на величину різниці
97 0010 0001 0111 0011 ADD 371
98 0001 0001 0110 0110 STORE 358
99 0001 0001 0111 0011 STORE 371 Нормалізація різниці порядків
100 0000 0001 0111 0011 LOAD 371
101 1111 0010 0000 0000 LSR
102 0001 0001 0111 0011 STORE 371
103 0000 0001 0111 0110 LOAD 374
104 0011 0001 0110 1000 SUB 360
105 0001 0001 0111 0110 STORE 374
106 1000 0000 0110 0011 JNZ 99
107 0000 0001 0111 0011 LOAD 371 Зсув мантиси на величину різниці порядків
108 0011 0001 0110 1000 SUB 360
109 1001 0000 0111 0011 JZ 115
110 0001 0001 0111 0011 STORE 371
111 0001 0001 0110 1011 LOAD 363
112 1111 0010 0000 0000 LSR
113 0000 0001 0110 1011 STORE 363
114 1110 0000 0110 1011 JMP 107
115 0000 0001 0110 1101 LOAD 365 Переведення числа в доповняльний код
116 1111 1100 0000 0000 LSL
117 1100 0000 0110 1110 JNC 110
118 0001 0000 0110 1011 LOAD 363
119 0111 0000 0000 0000 NOT
120 0010 0001 0110 1000 ADD 360
121 0100 0001 0111 1010 AND 378
122 0000 0000 0110 1011 STORE 363
123 0000 0001 0110 1110 LOAD 366 Переведення числа в доповняльний код
124 1111 1100 0000 0000 LSL
125 1100 0000 0111 0110 JNC 118
126 0000 0000 0110 1100 LOAD 364
127 0111 0000 0000 0000 NOT
128 0010 0001 0110 1000 ADD 360
129 0100 0001 0111 1010 AND 378
130 0001 0001 0110 1100 STORE 364
131 0001 0001 0110 1011 LOAD 363 Зсув мантиси до старших розрядів
132 1111 1100 0000 0000 LSL
133 0001 0001 0110 1011 STORE 363
134 0000 0001 0111 1101 LOAD 375
135 0011 0001 0110 1000 SUB 360
136 0001 0001 0111 1101 STORE 375
137 1000 0000 1000 0011 JNZ 131
138 0000 0001 0110 1100 LOAD 364 Зсув мантиси до старших розрядів
139 1111 1100 0000 0000 LSL
140 0001 0001 0110 1100 STORE 364
141 0000 0001 0111 1110 LOAD 376
142 0011 0001 0110 1000 SUB 360
143 0001 0001 0111 1110 STORE 376
144 1000 0000 1000 1010 JNZ 138
145 0001 0001 0110 1011 LOAD 363 Обєднання знаку і мантиси в одне число 1-го числа
146 0010 0001 0110 1101 ADD 365
147 0001 0001 0111 0001 STORE 369
148 0000 0001 0110 1100 LOAD 364 Обєднання знаку і мантиси в одне число 2-го числа
149 0010 0001 0110 1110 ADD 366
150 0001 0001 0111 0010 STORE 370
151 0000 0001 0111 0001 LOAD 369 Додавання мантис двох чисел
152 0000 0001 0111 0001 ADD 370
153 1011 0000 1001 1100 JM 156 Збереження результату при додатньому результаті
154 1111 1100 0000 0000 LSL
155 0001 0001 0111 1100 STORE 380
156 1111 1100 0000 0000 LSL Збереження результату при відємному результаті
157 0010 0001 0111 1011 ADD 379
158 0111 0000 0000 0000 NOT Переведення відємного результату в прямий код
159 0100 0001 1000 0001 AND 385
160 0010 0001 1000 0110 ADD 390
161 0010 0001 0110 0000 ADD 352
162 0001 0001 0111 1100 STORE 380
163 0000 0001 0110 0010 LOAD 354 Збереження порядку результату
164 1111 0010 0000 0000 LSR
165 1111 0010 0000 0000 LSR
166 0001 0001 0111 1111 STORE 383
167 0000 0001 0110 0011 LOAD 355 Збереження знаку порядку результату
168 0001 0001 1000 0000 STORE 384
169 0000 0001 0111 1100 LOAD 380 Перевірка денормалізації в право і корекція результату
170 0100 0001 1000 0001 AND 385
171 1111 1100 0000 0000 LSL
172 1111 1100 0000 0000 LSL
173 1111 1100 0000 0000 RCL
174 1101 0000 1011 0110 JC 182
175 1111 1100 0000 0000 RCL
176 1101 0000 1011 0110 JC 182
177 0000 0001 0111 1111 LOAD 383
178 0010 0001 0110 1000 ADD 360
179 0001 0001 0111 1111 STORE 383
180 0000 0001 0111 1101 LOAD 381
181 1110 0000 1010 1001 JMP 169
182 1111 1110 0000 0000 RCR
183 0001 0001 0111 1101 STORE 381
184 0000 0001 0111 1101 LOAD 381 Збереження мантиси результату
185 1111 0010 0000 0000 LSR
186 0001 0001 0111 1101 STORE 381
187 0000 0001 1000 0010 LOAD 386
188 0011 0001 0110 1000 SUB 360
189 0001 0001 1000 0010 STORE 386
190 1000 0000 1011 1000 JNZ 184
191 0000 0001 0111 1100 LOAD 380 Збереження знаку мантиси результату
192 0100 0001 0110 0000 AND 352
193 1111 0010 0000 0000 LSR
194 1111 0010 0000 0000 LSR
195 0001 0001 0111 1110 STORE 382
196 0000 0001 0111 1101 LOAD 381 Формування результату
197 0010 0001 0111 1110 ADD 382
198 0010 0001 0111 1111 ADD 383
199 0010 0001 1000 0000 ADD 384
200 0001 0001 1000 0011 STORE 387
201 0111 1100 0000 0000 HALT Завершення програми

Висновки

На даній лабораторній роботі - ознайомився з поданням чисел у нормальній формі. Засвоїв порядок нормалізації чисел з рухомою комою. Ознайомився з поняттям “характеристика” для чисел з рухомою комою.

-вивчив правила додавання (віднімання) двійкових чисел з рухомою комою.

-розробив алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.