Дослідження виконання арифметичних операцій у форматі з рухомою комою
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №6
з дисципліни: організація та функціонування комп’ютерів на тему:
Дослідження виконання арифметичних операцій у форматі з рухомою комою»
Виконав:
ст.гр. КІ-11
Cаноцький М.Т.
Прийняв:
ст..викл.
Кудрявцев О.Т.
Львів 2010
Мета роботи:
Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою.
Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою.
Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'ютера - симулятора DeComp.
1. Теоретична частина
1.1 Подання чисел з рухомою комою
число рухомий кома алгоритм
У форматі з рухомою комою, який звичайно називають нормальною формою запису, числа записуються наступним чином:
A = М * d Р ,
де p – ціле число, яке називається порядком числа А;
d – основа системи числення;
М – мантиса числа А (звичайно |M| < 1).
При нормальній формі запис одного числа може приймати різний вигляд у залежності від обмежень, що накладаються на його форму. Фактично місце коми у мантисі М визначається величиною порядку р. Із зміною порядку р у більшу або меншу сторону кома відповідно переміщується ліворуч або праворуч, тобто рухається (“плаває”) у зображені мантиси. Наприклад:
23410 = 234 * 100 = 0,234 * 103 = 0,0234 * 104 = 2,34 * 102 ;
1011012 = 101101 * 100 = 0,101101 * 10110 = 0,00101101 * 101000 .
Можна зауважити, що хоча числа у наведених прикладах однакові за абсолютною величиною, проте мантиса потребує різної кількості розрядів. Для цього, щоб запобігти цьому, звичайно уводять деякі обмеження. Найбільш розповсюдженим і зручним для подання у комп’ютерах обмеженням є наступне:
d-1 M 1.
Числа, що записані у такій формі називаються нормалізованими. Іншими словами, у нормалізованих числах у мантисі першою цифрою перед комою стоїть 0, а перша цифра після коми – це цифра відмінна від нуля. Для двійкової системи числення вона дорівнює 1.
Таким чином, мантису розглядають як число менше одиниці, а порядок – як ціле число.
Операція нормалізації виконується шляхом зсуву мантиси вліво із зменшенням порядку, або вправо із збільшення порядку на величину, яка дорівнює кількості розрядів, на яку була зсунута мантиса.
Приклад: нормалізувати наступні числа:
0,00237 * 105 = 0,237 * 103 – мантиса зсувається на два розряди вліво, тобто – збільшується, а порядок зменшується на дві одиниці.
10101,0112 * 1010 = 0,10101011 * 10 111 - мантиса зсувається вправо на 5 розрядів, тобто – зменшується, а порядок збільшується на 5 одиниць.
Нормалізоване подання чисел дозволяє зберігати у розрядній сітці комп’ютера більшу кількість цифр, що мають значення, тому точність обчислень підвищується. Зазвичай у комп’ютерах нормалізація здійснюється автоматично як при вводі чисел, так і у процесі обчислень (після виконання чергової операції). При цьому мантиса зсувається ліворуч на необхідну кількість розрядів і виконується відповідне зменшення порядку, тобто виконується “нормалізація вліво”.
При виконанні операції додавання або віднімання нормалізованих чисел з різними порядками одно з них “денормалізується” до вирівнювання порядків, а сума (або різниця) знову нормалізується.
У розрядній сітці комп’ютерів фіксуються знак числа, знак порядку, порядок числа і числовий вираз мантиси.
0 |
1 |
2 |
... |
... |
... |
... |
... |
... |
m+n+1 |
0 |
0 |
1 |
2 |
... |
m |
1 |
2 |
... |
n |
Знак мантиси |
Знак порядку |
Порядок |
Мантиса |
У комп’ютерах із рухомою комою можливе переповнення розрядної сітки, так само, як і у комп’ютерах із фіксованою комою. Наприклад, переповнення може виникнути при додаванні нормалізованих чисел одного знаку з однаковими порядками. У цьому випадку з’являється “1” ліворуч від коми. Такого роду переповнення коригується зсувом мантиси вправо на один розряд і збільшенням порядку на одиницю, тобто виконується “нормалізація вправо”.
1.2 Правила додавання (віднімання) двійкових чисел з рухомою комою
Додавання і віднімання чисел з рухомою комою виконується у декілька етапів.
Вирівнювання порядків;
Як відомо, реальна величина (вага) Ni одиниці і-го розряду мантиси визначається не тільки позицією даного розряду, але й порядком р числа, тобто
Ni = d p-і,
де і – номер позиції, рахуючи вправо від коми.
При додаванні (відніманні) необхідно, щоб ваги однойменних розрядів мантис чисел були однаковими. Для цього мантиси зсувають одна щодо одної так, щоб їх порядки вирівнялися. Щоб при вирівнюванні порядків не отримати мантиси більшої за одиницю, їх потрібно вирівнювати від меншого до більшого порядку. Мантиса з меншим порядком зсувається вправо (у бік молодших розрядів) на кількість розрядів, що дорівнює різниці порядків і одночасно коректується порядок (збільшується до значення спільного порядку).
Додавання мантис;
Додавання мантис із вирівненими порядками виконується згідно правил додавання чисел з фіксованою комою. Зазвичай використовується модифікований доповнювальний код. (Пригадайте правила подання від’ємних чисел з використанням доповнювального або оберненого модифікованого коду).
3. Переведення результату додавання мантис у прямий код.
У результаті додавання мантис може виникнути один з трьох випадків:
а). Виникає переповнення розрядної сітки комп’ютера (порушення нормалізації вправо). Ознакою переповнення є невизначенність знакових розрядів, коли результат неможливо віднести ні до додатних, ні до від’ємних чисел (код 01 або 10). У цьому випадку необхідно виконати корекцію результату додавання мантис шляхом його зсуву вправо на один розряд і одночасного збільшення порядку на 1.
Наприклад, після додавання мантис отримуємо число 01,00001. Нормалізуємо його зсувом вправо на один розряд і одночасно збільшуємо порядок на 1. В результаті отримуємо:
(А + В)доп = 00,100001 * 10к+1
Переводимо у прямий код: (А + В)пр = 00,100001 * 10к+1.
Внаслідок корекції результату шляхом зсуву вліво точність його погіршилася.
б). Результат від’ємний. Переведення результату додавання мантис у прямий код віконується шляхом виконання другого доповнення (тобто, виконується інверсія результату і до отриманого коду додається 1 у молодший розряд) або другого обертання (тобто, виконується інверсія результату);
в). Результат додатний. У прямому коді додатний результат залишається без змін;
4. Нормалізація результату.
Виконується тоді, коли після переведення у прямий код у отриманому результаті відбувається порушення нормалізації вправо, тобто з правого боку від коми є один або декілька нулів. Це порушення коректується зсувом мантиси результату вліво і одночасне зменшення порядку на кількість розрядів зсуву мантиси до повної нормалізації мантиси.
Остаточний результат додавання двох чисел з рухомою комою: сума мантис – це мантиса результату, порядок результату – вирівняний порядок доданків, із врахуванням всіх проведених корекцій. .
Розглянемо приклади виконання операції додавання двійкових чисел з рухомою комою. Всі арифметичні дії будемо виконувати у модифікованому доповнювальному коді.
Приклад 1: Додати A = - 0,1101 * 10101 i B = + 0,1100 * 10011.
а) Вирівнюємо порядки.. Спочатку, визначаємо арифметичну різницю між порядками, віднімаючи від значення порядку числа А значення порядку числа В. При цьому операцію віднімання замінюємо операцією додавання у доповнювальному модифікованому коді.
рА – рВ = рА + (– рВ) = (pA доп(м) = 00,101) + (pB доп(м) = 11,101) = 00,010 – різниця порядків
Аналіз отриманої різниці:
знак різниці показує, що порядок числа А більше порядку числа В;
порядки відрізняються на дві одиниці.
Через те, що рА > pB, зсуваємо мантису числа В вправо на два розряди, тобто
МВ пр= 00,001100 і Впр= 00,001100 * 10101.
Розряди мантиси числа В, які вийшли за межі розрядної сітки процесора, будуть втрачені, що погіршить точність обчислень.
б) Переводимо мантиси обох чисел у модифікований доповнювальний код (в межах 4-х розрядів):
МА пр = 11,1101 МА доп(М) =.11,0011
МВ пр = 00,0011 МВ доп(М) =.00,0011
в) Додаємо модифіковані доповнювальні коди мантис чисел А та В і отримуємо результат у модифікованому доповнювальному коді:
(А + В)доп (М) = 11,0011 + 00,0011 = 11,0110
г) Аналіз результату додавання мантис починається із знакових розрядів. Знакові розряди показують, що переповнення розрядної сітки у нас не виникло. Результат – від'ємний, тому переводимо мантису результату у прямий код шляхом виконання другого доповнення і дописуємо спільний порядок:
(А + В)пр (М) = (11,1001 + 00,0001) * 10 101 = 11,1010 * 10101 - остаточний результат.
При переведенні у прямий код знак результату не міняється.
Подальший аналіз показує, що порушення нормалізації результату вправо немає.
Приклад 2. : Додати двійкові числа: А = + 0,10100 * 10101 та В = - 0,10110 * 10100 .
а) Для вирівнювання порядків доданків необхідно із порядку числа А відняти порядок числа В. Віднімання замінимо додаванням у модифікованому доповняльному коді.
(рА доп(м)= 00,101) + (рВ доп(м) = 11,100) = ,101 – 00,100 = 00,101 + (- 00,100) = 00,101 + (11,011 + 00,001) = 00,101 + 1,100 = 00,001
Через те, що рА > pB на +1, виконуємо зсув мантиси числа В вправо на 1 розряд.
МВ пр = 11,010110 і В = 11,010110 * 10101.
б) Переведемо мантиси доданків у модифікований доповняльний код.
МА пр = 00,10100 МА доп(М) = 00,10100.
МВ пр = 11,010110 МВ доп(М) = 11,101010.
в) Додаємо мантиси чисел А і В у модифікованих доповняльних кодах:
(МА доп(М) = 00,10100) + (МВ доп(М) = 11,10101) = 00,01001
г) Переводимо результат у прямий код (виконуємо друге доповнення). У нашому випадку прямий код суми мантис збігається з доповнювальним кодом суми мантис, тому що результат є число додатне.
(МА + МВ) пр(м) = 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.