(МА + МВ) пр(м) = 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.