Інструкція до лабораторної роботи № 6
з курсу "Організація та функціонування комп"ютерів"
Тема: Виконання арифметичних операцій у арифметиці з рухомою комою. Розробка програм додавання і множення двійкових чисел у інструкціях симулятора DeComp.
Мета роботи:
1. Вивчити представлення додатних та від”ємних чисел у арифметиці з рухомою комою в системах d2, d8, d16.
2. Навчитись розробляти алгоритми і cтворювати програми додавання чисел в арифметиці з рухомою комою в інструкціях симулятора DeComp.
3. Навчитись розробляти алгоритми і створювати програми виконання операції множення двійкових чисел у арифметиці з рухомою комою
в інструкціях симулятора DeComp.
Теретична частина.
І. Представлення чисел з рухомою комою.
Представлення чисел з рухомою комою базується на зображені чисел у напівлогарифмічній формі А ( p,( М, що відповідає запису чисел у нормалізованій формі:
A = d(p * (( М),
де p – ціле число, яке називається порядком числа А;
d – основа числення;
М – мантиса числа А (звичайно |M|<1).
Фактично місце коми у мантисі М визначається величиною порядку р. Із зміною порядку р у більшу або меншу сторону кома відповідно переміщується ліворуч або праворуч, тобто рухається (“плаває”) в зображені числа. Наприклад:
23410 = 0,234 * 103 = 0,0234 * 104 = 2,34 * 102 ;
1011012 = 0,101101 * (10)110 = 0,00101101 * (10)1000 ;
Числа, які задовільняють умові 1/d ( M ( 1, називаються нормалізованими. У розрядній сітці комп”ютерів фіксуються знак числа, знак порядку, порядок числа і числовий вираз мантиси.
0
1
2
...
...
...
...
...
...
m+n+1
(0
(0
(1
(2
...
(m
(1
(2
...
(n
_____ ______ _________________________ __________________________
( ( ( (
Знак Знак Порядок Мантиса
числа порядку
Нормалізоване представлення чисел дозволяє зберігати у розрядній
сітці більшу кількість цифр, що мають значення, тому точність обчислень підвищується. Звичайно у комп”ютері нормалізація як при вводі чисел, так і у процесі обчислень (після виконання чергової операції) здійснюється автоматично. При цьому мантиса зсувається ліворуч на необхідну кількість розрядів і виконується відповідне зменшення порядку, тобто виконується “нормалізація вліво”. При виконанні операції додавання або віднімання нормалізованих чисел з різними порядками одно з них “денормалізується” до вирівнювання порядків, а сума (або різниця) знову нормалізується.
У комп”ютерах із рухомою комою можливе переповнення розрядної сітки, так само, як і у комп”ютерах із фіксованою комою. Наприклад, переповнення може виникнути при додаванні нормалізованих чисел з однаковими порядками. У цьому випадку з”являється “1” ліворуч від коми. Такого роду переповнення нейтралізується зсувом мантиси вправо на один розряд і збільшенням порядку на одиницю, тобто виконується “нормалізація вправо”.
У сучасних комп”ютерах розповсюджене представлення чисел з рухомою комою із недвійковою основою системи числення (d=8 і d=16). Використання недвійкової основи трохи зменшує точність обчислень при заданому числі розрядів мантиси, але дозволяє збільшити диапазон чисел, які можна представити у комп”ютері і прискорити виконання деяких операцій, в тому числі – нормалізації, за рахунок того, що зсув виконується відразу на декілька двійкових розрядів (при d-8 на три розряди, при d=16 на чотири розряди). Вирогідність отримання ненормалізованих чисел у ході обчислень значно зменшується.
При застосуванні недвійкової основи d=16 зручно порядок числа зображати через характеристику px – зміщені порядки, що представляють собою суму дійсного порядку Р числа із врахуванням знаку і числа 64, тобто:
Px = p + 64.
Знак
Характеристика
М а н т и с а
1
100 0001
1010
0000
0100
0111
1000 . . .
0 1 7 8 . . .
Від”ємні і додатні дійсні порядки р, збільшившись на 64, виявляються зміщеними на числовій осі в додатньому напрямку і представляються 7-ми розрядними двійковими числами без знаку від
0 до 127.
Дійсні порядки:
-64 0 +63 р - в десятковій формі
----+---------+-----------+--------
1000000 0000000 0111111 - у двіковій формі.
Характеристики:
-64+64=0 0+64=64 63+64=127 Рх - в десятковій формі;
--------------+-----------+-----------+---
0000000 1000000 1111111 - у двійковій формі.
Через те, що всі характеристики рх стають додатними, спрощується виконання деяких дій над ними, наприклад, виключення операцій над знаками порядків.
ІІ. Додавання двійкових чисел з рухомою комою.
Додавання і віднімання чисел з рухомою комою виконується у декілька етапів.
Вирівнювання порядків;
Як відомо, реальна величина (вага) Ni одиниці і-го розряду мантиси визначається не тільки позицією даного розряду, але й порядком р числа, тобто Ni = dp-I, де і – номер позиції, рахуючи вправо від коми.
При додаванні (відніманні) мантис необхідно, щоб ваги одиниць однойменних розрядів мантиси чисел були однаковими. Для цього мантиси зсувають відносно одна одної так, щоб їх порядки стали рівними. Для того, щоб при вирівнюванні порядків не отримати мантиси більше одиниці, їх потрібно вирівнювати в сторону більшого порядку. Мантиса з меншим порядком зсувається вправо на кількість розрядів, яка дорівнює різниці порядків.
Додавання мантис;
Додавання (віднімання) мантис з вирівненими порядками виконується аналогічно додаванню чисел з фіксованою комою. Для представлення від”ємних мантис використовується доповнювальний або обернений модифікований код. Сума мантис є сумою чисел. Порядок суми чисел дорівнює загальному порядку доданків, тобто порядку більшого числа.
Нормалізація результату.
Виконується тоді, коли у отриманому результаті відбувається порушення нормалізації або переповнення розрядної сітки.
При додаванні мантис можуть виникати три випадки.
Випадок І. Додавання не викликає переповнення розрядної сітки і порушення нормалізації. Признаком цього є відсутність нулів праворуч від коми і однойменність значень в обох розрядах знаку у отриманому результаті. Наприклад, результат дорівнює 00,101101...Алгоритм виконання операції додавання має чотири етапи:
а) вирівнювання порядків;
б) переведення мантис у модифікований доповнювальний (або обернений) код;
в) додавання модифікованих доповнювальних (обернених) кодів і отримання результату із дописом до нього вирівненого порядку.
г) переведення результату у прямий код, тобто виконується друге доповнення (обернення) мантиси.
Приклад 1:
Додати A=-0,1101*10101 i B=+0,1100*10011.
а) Вирівнюємо порядки віднімаючи від значення порядку числа А значення порядку числа В. При цьому операцію віднімання замінюємо операцією додавання у доповнювальних модифікованих кодах.
(pA доп(м)=00,101) + (pB доп(м)=11,101)=00,010 – різниця порядків
Через те, що рА > pB на дві одиниці, зсуваємо мантису числа В вправо на два розряди, тобто МВ пр=00,0011 і Впр=00,0011*10101.
б) Переводимо мантиси обох чисел у модифікований доповнювальний код:
МА доп(М) = 11,0011; МВ доп(М) = 00,0011
в) Додаємо модифіковані доповнювальні коди мантис чисел А і В і отримуємо результат в модифікованому доповнювальному коді:
11,0011 + 00,0011 = 11,0110
г) Знакові розряди показують, що переповнення у нас не виникло. Переводимо мантису результату у прямий код і дописуємо порядок:
(А + В)пр (М) = 11,1010 * 10101 - остаточний результат.
Випадок ІІ. Додавання двох нормалізованих чисел дає ненормалізований результат. Таке явище називають порушенням нормалізації вправо. Його признаки – поява в мантисі суми одного або більше, таких що йдуть підряд, нулів праворуч від коми (0,01;...,; 0,0001). Відповідно, для корекції такого результату, виконується нормалізація його мантиси вліво на таку кількість розрядів, щоб старша цифра мантиси не дорівнювала нулю. Порядок суми зменшується на кількість, яка дорівнює числу зсувів мантиси при нормалізації. У алгоритмі виконання операції додається п”ятий етап – нормалізація.
Приклад 2:
Додати два числа: А = +0,10100*10101 та В = -0,10110*10100 .
а) Для вирівнювання порядків доданків необхідно із порядку числа А відняти порядок числа В. Віднімання замінимо додаванням у модифікованому доповнювальному коді.
(рА доп(М)= 00,101) + (рВ доп(М) = 11,100) = 00,001
[Хід виконання: 00,101–00,100=00,101+(-00,100)=00,101+(11,011+1) =
= 00,101+11,100=00,001] – всі числа двійкові.
Через те, що рА > pB на +1, виконуємо зсув мантиси числа В вправо на 1 розряд. МВ пр = -0,01011.
б) Переведемо мантиси доданків у модифікований доповнювальний код.
МА пр = +0,10100 ( МА доп(М) = 00,10100.
МВ пр = -0,01011 ( МВ доп(М) = 11,10101.
в) Додаємо мантиси чисел А і В у модифікованих доповнювальних кодах:
(МА доп(М) = 00,10100) + (МВ доп(М) = 11,10101) = 00,01001
Як видно, виникло порушення нормалізіції вправо.
г) Переводимо результат у прямий код (виконуємо друге доповнення). У нашому випадку прямий код суми мантис збігається з доповнювальним кодом суми мантис, тому що результат є число додатне.
МА пр + МВ пр = 00,01001
д) Виконуємо нормалізацію результату, тобто зсув мантиси ліворуч з одночасним відповідним зменшенням порядку:
(А + В)пр = 0,1001*10100 – остаточний результат.
Випадок ІІІ. Додавання веде до переповнення розрядної сітки. Признаком цього слугує поява різних цифр у знакових розрядах (01 або 10). Таке явище називається порушенням нормалізації вліво.
У алгоритмі виконання отриманий результат додавання мантис у модифікованому доповнювальному коді спочатку нормалізується праворуч, а потім переводиться у прямий код.
Наприклад, після додавання мантис отримуємо число 01,00001. Нормалізуємо його зсувом вправо на один розряд і одночасно збільшуємо порядок на 1. В результаті отримуємо:
(А + В)доп = 00,100001*10к+1
Переводимо у прямий код: (А + В)пр = +0,100001*10к+1.
Внаслідок корекції результату шляхом зсуву ліворуч точність його погіршилася.
ІІІ. Додавання чисел у процесорах з рухомою комою і недвійковою основою системи числення.
При виконанні операції додавання чисел з рухомою комою з основою d=16 при вирівнюванні порядків і нормалізації робиться зсув мантиси на кількість розрядів, що дорівнює 4 або кратне 4, тому що порядок у сучасних комп”ютерах обчислюється і для шістнадцяткових чисел.
Розглянемо приклад. Домовимся, що числа з рухомою комою мають формат довжиною у 4 байти: 1 байт використовується для запису знаку числа і характеристики в 3 байти – для запису мантиси числа.
Приклад 3:
Додати два числа А=(324)16 і В=(-14А6)16.
а) Визначимо характеристики чисел А і В, представлених у нормалізованій формі:
А = +0,324*16+3 ; В = -0,14А6*16+4 .
Порядки чисел А і В у двійковій формі відповідно дорівнюють:
РА = +11; рВ = +100,
і відповідно, характеристики будуть дорівнювати:
рхА = 11+1000000 = 1000011; рхВ =100+1000000 = 1000100.
Запишемо числа А і В у нормалізованій формі, використовуючи умовний формат чисел:
А →0, 100 0011 0011 0010 0100 0000 0000 0000
В →1, 100 0100 0001 0100 1010 0110 0000 0000
Знак Характеристика Мантиса
б) Вирівняємо характеристики. Для цього віднімання характеристик замінюємо додаванням у модифікованому доповнювальному коді:
(рхВ доп = 00,1000100) + (рхА доп = 11,0111101) = 100,0000001
↓
Відкидається
Різниця характеристик дорівнює +1, відповідно, зсувати мантису числа А потрібно праворуч на один шістнадцятковий розряд. Виконуємо зсув:
А →0, 100 0100 0000 0011 0010 0100 0000 0000
Знак Характеристика Мантиса
числа
в) Додаємо мантиси чисел А і В у модифікованому доповнювальному коді:
Знак Мантиса
МА доп = 00, 0000 0011 0010 0100 0000 0000
+ МВ доп = 11, 1110 1011 0101 1010 0000 0000
(МА + МВ)доп= 11, 1110 1110 0111 1110 0000 0000
Переповнення немає. Мантиса результату створилася від’ємною, відповідно, необхідно перейти до прямого коду:
(МА + МВ)пр = 11, 0001 0001 1000 0010 0000 0000
Сума мантис у прямому коді нормалізована. Записуємо нормалізований результат додавання чисел А і В:
А + В = 1, 100 0100 0001 0001 1000 0010 0000 0000
Знак Характеристика Мантиса
або (А + В)16 = -0,1182*16+4.
IV. Хід роботи:
Розробити алгоритм і написати програму додавання додатних і від’ємних чисел із рухомою комою з основою d=2 в інструкціях симулятора DeComp.
У алгоритмі передбачити аналіз отриманого результату на наявність переповнення або порушення нормалізації і відповідні заходи з його корекції.
2. Розробити алгоритм і написати програму додавання чисел із рухомою комою з основою d=16. Для мантиси чисел використовувати 2 байти, для характеристики і знаку використати 1 наступний байт.