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

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

коду).

3. Переведення результату додавання мантис у прямий код.

У результаті додавання мантис може виникнути один з трьох випадків:

а). Виникає переповнення розрядної сітки компютера (порушення нормалізації вправо). Ознакою переповнення є невизначенність знакових розрядів, коли результат неможливо віднести ні до додатних, ні до відємних чисел (код 01 або 10). У цьому випадку необхідно виконати корекцію результату додавання мантис шляхом його зсуву вправо на один розряд і одночасного збільшення порядку на 1.

Наприклад, після додавання мантис отримуємо число 01,00001. Нормалізуємо його зсувом вправо на один розряд і одночасно збільшуємо порядок на 1. В результаті отримуємо:

 

(А + В)доп = 00,100001 * 10к+1

Переводимо у прямий код: (А + В)пр = 00,100001 * 10к+1.

 

Внаслідок корекції результату шляхом зсуву вліво точність його погіршилася.

б). Результат відємний. Переведення результату додавання мантис у прямий код віконується шляхом виконання другого доповнення (тобто, виконується інверсія результату і до отриманого коду додається 1 у молодший розряд) або другого обертання (тобто, виконується інверсія результату);

в). Результат додатний. У прямому коді додатний результат залишається без змін;

4. Нормалізація результату.

Виконується тоді, коли після переведення у прямий код у отриманому результаті відбувається порушення нормалізації вправо, тобто з правого боку від коми є один або декілька нулів. Це порушення коректується зсувом мантиси результату вліво і одночасне зменшення порядку на кількість розрядів зсуву мантиси до повної нормалізації мантиси.

  1. Остаточний результат додавання двох чисел з рухомою комою: сума мантис це мантиса результату, порядок результату вирівняний порядок доданків, із врахуванням всіх проведених корекцій. .

Розглянемо приклади виконання операції додавання двійкових чисел з рухомою комою. Всі арифметичні дії будемо виконувати у модифікованому доповнювальному коді.

 

Приклад 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 розрядів

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

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