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

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Організація та функціонування комп’ютерів

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра CКС Звіт з лабораторної роботи № 6 з дисципліни: “Організація та функціонування комп’ютерів” на тему: “ Дослідження виконання арифметичних операцій у форматі з рухомою комою.” Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою. Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою. Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора 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 розрядів   У алгоритмі передбачити аналіз отриманого результату на: переповнення розрядної сітки (порушення нормалізації вліво); наявність порушення нормалізації вправо; від'ємний результат Передбачити відповідні заходи з корекції результату. Алгоритм програми подано на наступній сторінці № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар   0. 0000 0000 1100 1000 LOAD 200 Визначаємо знак числа А. Якщо А – від’ємне, то переводимо його у доповняльний код. Додавання буде проводитися з перетворенням результату у прямий код. Якщо А – додатне, то доповняльний код числа А і результату додавання будуть співпадати.   1111 0010 0000 0000 LSR    0001 0000 1100 1001 STORE 202    0000 0000 1100 1000 LOAD 200    0100 0000 1100 1001 AND 202    0001 0000 1100 1100 STORE 204    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    1100 0000 0100 0101 JNC 69    0000 0000 1100 1000 LOAD 200    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    0111 0000 0000 0000 NOT    1111 0010 0000 0000 LSR    1111 0010 0000 0000 LSR    0001 0000 1100 1000 STORE 200    0010 0000 1100 1101 ADD 205    0010 0000 1100 1110 ADD 206    0001 0000 1100 1000 STORE 200    0000 0000 1100 1001 LOAD 201 Визначаємо знак числа В при умові, коли А < 0 Якщо В – від’ємне, то переводимо його у доповняльний код. Додавання буде проводитися з перетворенням результату у прямий код. Якщо В – додатне,то його прямий код співпаде з доповняльним.   1111 0010 0000 0000 LSR    0001 0000 1100 1011 STORE 203    0000 0000 1100 1001 LOAD 201    0100 0000 1100 1011 AND 203    0001 0000 1100 1100 STORE 204    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    1100 0000 0010 0110 JNC 38    0000 0000 1100 1001 LOAD 201    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    0111 0000 0000 0000 NOT    1111 0010 0000 0000 LSR    1111 0010 0000 0000 LSR    0001 0000 1100 1001 STORE 201    0010 0000 1100 1101 ADD 205    0010 0000 1100 1110 ADD 206    0001 0000 1100 1001 STORE 201    0000 0000 1100 1000 LOAD 200 Додавання чисел А і В   0100 0000 1100 1001 ADD 201    0001 0000 1100 1111 STORE 207    1111 0010 0000 0000 LSR Перевірка на переповнення розрядної сітки. Якщо переповнення відбулось,у комірку з результатом буде записане спеціальне повідомлення   0001 0000 1101 0000 STORE 208    0000 0000 1100 1111 LOAD 207    0110 0000 1101 0000 XOR 208    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    1101 0000 0011 0011 JC 51    0000 0000 1101 0001 LOAD 209    0001 0000 1100 1111 STORE 207    0111 1100 0000 0000 HALT    0000 0000 1100 1111 LOAD 207 Переведення результату з доповняльного у прямий код. Віднімаємо 1 від молодшого розряду і інвертуємо число. Окремо обробляємо знак   0001 0000 1101 0010 STORE 210    0011 0000 1100 1101 SUB 205    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    0111 0000 0000 0000 NOT    1111 0010 0000 0000 LSR    1111 0010 0000 0000 LSR    0001 0000 1100 1111 STORE 207    0000 0000 1101 0000 LOAD 208    0100 0000 1101 0010 AND 210    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    1101 0000 0100 0100 JC 68    0000 0000 1100 1111 LOAD 207    0101 0000 1100 1110 OR 206    0001 0000 1100 1111 STORE 207    0111 1100 0000 0000 HALT    0000 0000 1100 1001 LOAD 201 Визначаємо знак числа В при умові, коли А > 0 Якщо В – від’ємне, то переводимо його у доповняльний код. Додавання буде проводитися без перетворення результату у прямий код.   1111 0010 0000 0000 LSR    0001 0000 1100 1011 STORE 203    0000 0000 1100 1001 LOAD 201    0100 0000 1100 1011 AND 203    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    0000 0000 1100 1100 STORE 204    1100 0000 0100 1111 JNC 79    1110 0000 0001 1100 JMP 28    0000 0000 1100 1000 LOAD 200 Додавання чисел А і В   0010 0000 1100 1001 ADD 201    0001 0000 1100 1111 STORE 207    1111 0010 0000 0000 LSR Обробка результату. Перевірка на переповнення розрядної сітки. Кінцевий запис результату.   0001 0000 1101 0000 STORE 208    0000 0000 1100 1111 LOAD 207    0110 0000 1101 0000 XOR 208    1111 0000 0000 0000 LSL    1111 0000 0000 0000 LSL    1100 0000 0101 1011 JNC 91    0000 0000 1101 0010 LOAD 209    0001 0000 1100 1111 STORE 207    0111 1100 0000 0000 HALT    Висновок: на лабораторній роботі я ознайомився з поданням чисел у нормальній формі. Засвоїв порядок нормалізації чисел з рухомою комою, ознайомитився з поняттям “характеристика” для чисел з рухомою комою. Вивчив правила додавання (віднімання) двійкових чисел з рухомою комою. Розробив алгоритм і програму додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.
Антиботан аватар за замовчуванням

28.01.2013 17:01-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!