Лабораторна робота 6

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Інститут комп’ютерних технологій, автоматики та метрології
Кафедра:
СКС

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

Рік:
2016
Тип роботи:
Звіт до лабораторної роботи
Предмет:
ООФК
Група:
КІ 13
Варіант:
2 6 РКФ

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

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» Кафедра СКС Звіт з лабораторної роботи №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” ліворуч від коми. Такого роду переповнення коригується зсувом мантиси вправо на один розряд і збільшенням порядку на одиницю, тобто виконується “нормалізація вправо”. 2. Порядок роботи: Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі: Знак порядку Знак мантиси Порядок Мантиса  2 розряди 2 розряди 4 розряди 8 розрядів   У алгоритмі передбачити аналіз отриманого результату на: переповнення розрядної сітки (порушення нормалізації вліво); наявність порушення нормалізації вправо; від'ємний результат Передбачити відповідні заходи з корекції результату / ні ні так Виконання: Інформація про вхідні дані: 350 aaaa aaaa aaaa aaaa Число а  351 aaaa aaaa aaaa aaaa Число b  352 1100 0000 0000 0000 Маска для знаку порядку  353 0000 1111 0000 0000 Маска для порядку  354 0000 0000 0000 0000 Pa (порядок числа а)  355 0000 0000 0000 0000 Знак порядка числа а  356 0000 0000 0000 0000 Pb (порядок числа 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 ma (мантиса числа a)  364 0000 0000 0000 0000 mb (мантиса числа 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 Мантиса зі знаком числа b  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 Підготовка мантиси числа b  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 Додавання одиниці для переведення мантиси   Код програми: 2 0000 0001 0101 1110 LOAD 350 Виділення порядку першого числа (А)  3 0100 0001 0110 0001 AND 353   4 0001 0001 0110 0010 STORE 354 Переміщення порядку до старших розрядів, шляхом зсуву вліво та віднімання одиниці з заготовленої маски  5 0000 0001 0110 0010 LOAD 354   6 1111 0010 0000 0000 LSL   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   11 0100 0001 0110 0000 AND 352   12 0001 0001 0110 0011 STORE 355 Виділення знаку першого порядку числа (А) логічним «І»  13 1111 1100 0000 0000 LSL   14 1100 0000 0001 0100 JNC 20   15 0000 0001 0110 0010 LOAD 354 Перевірка на від’ємність першого порядку числа (А)  16 0111 0000 0000 0000 NOT   17 0100 0001 0110 1010 AND 362 Якщо А<0, то переводимо порядок в доповняльний код логічним «І» та додавши одиницю до молодшого розряду  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   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   34 0100 0001 0110 0000 AND 352   35 0001 0001 0110 0101 STORE 357 Виділення знаку другого числа (В) логічним «І»  36 1111 1100 0000 0000 LSL   37 1100 0000 0010 1011 JNC 43   38 0000 0001 0110 0100 LOAD 356 Перевірка на від’ємність (В)  39 0111 0000 0000 0000 NOT   40 0100 0001 0110 1010 AND 362 Якщо порядок другого числа <0, то переводимо порядок в доповняльний код шляхом додавання одиниці з маски  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 0011 0001 0110 1000 SUB 360   71 1001 0000 0101 1010 JZ 90 Зсув мантиси на величину різниці порядків шляхом зсуву вправо двійкогового коду мантиси  72 0001 0001 0111 0011 STORE 371   73 0000 0001 0110 1100 LOAD 364   74 1111 0010 0000 0000 LSR   75 0001 0000 0110 1100 STORE 364   76 1110 0000 0101 0010 JMP 82   77 1111 0010 0000 0000 LSR   78 0100 0001 0111 0101 AND 373   79 0001 0001 0111 0011 STORE 371 Корекція результату  80 0100 0001 0111 0100 AND 372   81 0111 0000 0000 0000 NOT   82 0010 0001 1000 0101 ADD 389 Переведення числа в прямий код додаючи одиницю  83 0000 0001 0110 0110 LOAD 358   84 0010 0001 0111 0011 ADD 371   85 0001 0001 0110 0110 STORE 358 Збільшення меншого порядку на величину різниці  86 0001 0001 0111 0011 STORE 371   87 0000 0001 0111 0011 LOAD 371   88 1111 0010 0000 0000 LSR Нормалізація різниці порядків шляхом зсуву вправо, та додаванням одиниці з маски до молодшого розряду  89 0001 0001 0111 0011 STORE 371   90 0000 0001 0111 0110 LOAD 374   91 0011 0001 0110 1000 SUB 360   92 0001 0001 0111 0110 STORE 374   93 1000 0000 0110 0011 JNZ 99   94 0000 0001 0111 0011 LOAD 371   95 0011 0001 0110 1000 SUB 360   96 1001 0000 0111 0011 JZ 115 Зсув мантиси на величину різниці порядків, шляхом зсуву двійкового коду мантиси та відніманням одиниці в молодшому розряді  97 0001 0001 0111 0011 STORE 371   98 0001 0001 0110 1011 LOAD 363   99 1111 0010 0000 0000 LSR   100 0000 0001 0110 1011 STORE 363   101 1110 0000 0110 1011 JMP 107   102 0000 0001 0110 1101 LOAD 365   103 1111 1100 0000 0000 LSL   104 1100 0000 0110 1110 JNC 110 Переведення числа a в доповняльний код шляхом інвертування , та додаванням одиниці до молодшого розряду  105 0001 0000 0110 1011 LOAD 363   106 0111 0000 0000 0000 NOT   107 0010 0001 0110 1000 ADD 360   108 0100 0001 0111 1010 AND 378   109 0000 0000 0110 1011 STORE 363   110 0000 0001 0110 1110 LOAD 366   111 1111 1100 0000 0000 LSL   112 1100 0000 0111 0110 JNC 118 Переведення числа b в доповняльний код шляхом інвертування , та додаванням одиниці до молодшого розряду  113 0000 0000 0110 1100 LOAD 364   114 0111 0000 0000 0000 NOT   115 0010 0001 0110 1000 ADD 360   116 0100 0001 0111 1010 AND 378   117 0001 0001 0110 1100 STORE 364   118 0001 0001 0110 1011 LOAD 363   119 1111 1100 0000 0000 LSL   120 0001 0001 0110 1011 STORE 363 Зсув мантиси числа а до старших розрядів, зсувум вліво та відніманням одиниці від молодших розрядів  121 0000 0001 0111 1101 LOAD 375   122 0011 0001 0110 1000 SUB 360   123 0001 0001 0111 1101 STORE 375   124 1000 0000 1000 0011 JNZ 131   125 0000 0001 0110 1100 LOAD 364   126 1111 1100 0000 0000 LSL   127 0001 0001 0110 1100 STORE 364 Зсув мантиси числа b до старших розрядів шляхом зсуву вліво та відніманням одиниці від двійкового коду власне мантиси  128 0000 0001 0111 1110 LOAD 376   129 0011 0001 0110 1000 SUB 360   130 0001 0001 0111 1110 STORE 376   131 1000 0000 1000 1010 JNZ 138   132 0001 0001 0110 1011 LOAD 363   133 0010 0001 0110 1101 ADD 365   134 0001 0001 0111 0001 STORE 369 Об’єднання знаку і мантиси в одне число числа а шляхом додаання  135 0000 0001 0110 1100 LOAD 364   136 0010 0001 0110 1110 ADD 366   137 0001 0001 0111 0010 STORE 370 Об’єднання знаку і мантиси в одне число числа b шляхом додавання  138 0000 0001 0111 0001 LOAD 369   139 0000 0001 0111 0001 ADD 370   140 1011 0000 1001 1100 JM 156 Додавання мантис двох чисел (Власне додавання)  141 1111 1100 0000 0000 LSL   142 0001 0001 0111 1100 STORE 380 Збереження результату при додатньому результаті, зсунувши при цьому вліво для нормалізації результату, тобто прибравши одиницю з старших розрядів(якщо вона є)  143 1111 1100 0000 0000 LSL   144 0010 0001 0111 1011 ADD 379   145 0111 0000 0000 0000 NOT Збереження результату при від’ємному результаті  146 0100 0001 1000 0001 AND 385   147 0010 0001 1000 0110 ADD 390 Переведення від’ємного результату в прямий код шляхом логічного «І», тобто власне інвертуванням  148 0010 0001 0110 0000 ADD 352   149 0001 0001 0111 1100 STORE 380   150 0000 0001 0110 0010 LOAD 354   151 1111 0010 0000 0000 LSR   152 1111 0010 0000 0000 LSR Збереження порядку результату  153 0001 0001 0111 1111 STORE 383   154 0000 0001 0110 0011 LOAD 355   155 0001 0001 1000 0000 STORE 384   156 0000 0001 0111 1100 LOAD 380 Збереження знаку порядку результату  157 0100 0001 1000 0001 AND 385   158 1111 1100 0000 0000 LSL Перевірка денормалізації вправо і корекція результату  159 1111 1100 0000 0000 LSL   160 1111 1100 0000 0000 RCL   161 1101 0000 1011 0110 JC 182   162 1111 1100 0000 0000 RCL   163 1101 0000 1011 0110 JC 182   164 0000 0001 0111 1111 LOAD 383   165 0010 0001 0110 1000 ADD 360   166 0001 0001 0111 1111 STORE 383   167 0000 0001 0111 1101 LOAD 381   168 1110 0000 1010 1001 JMP 169   169 1111 1110 0000 0000 RCR   170 0001 0001 0111 1101 STORE 381   171 0000 0001 0111 1101 LOAD 381   172 1111 0010 0000 0000 LSR   173 0001 0001 0111 1101 STORE 381 Збереження мантиси результату зсувом вправо та відніманням одиниці з молодшого розряду  174 0000 0001 1000 0010 LOAD 386   175 0011 0001 0110 1000 SUB 360   176 0001 0001 1000 0010 STORE 386   177 1000 0000 1011 1000 JNZ 184   178 0000 0001 0111 1100 LOAD 380   179 0100 0001 0110 0000 AND 352   180 1111 0010 0000 0000 LSR Збереження знаку мантиси результату подвійним зсувом вправо  181 1111 0010 0000 0000 LSR   182 0001 0001 0111 1110 STORE 382   183 0000 0001 0111 1101 LOAD 381   184 0010 0001 0111 1110 ADD 382   185 0010 0001 0111 1111 ADD 383 Формування результату, тобто нормалізація вихідних даних, для зчитування власне користувачем  186 0010 0001 1000 0000 ADD 384   187 0001 0001 1000 0011 STORE 387   188 0111 1100 0000 0000 HALT           Завершення програми   . Висновок: на цій лабораторні роботі я ознайомився з поданням чисел у нормальній формі, вивчив правила додавання (віднімання) двійкових чисел з рухомою комою.
Антиботан аватар за замовчуванням

20.12.2016 00:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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