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

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

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

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

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

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №5 З дисципліни «Організація та функціонування комп’ютерів» На тему: «Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у навчальному комп’ютері - симуляторі DeComp» Львів-2008 Теоретичні відомості Відомо, що одним з можливих шляхів виконання операції віднімання є заміна знаку числа, яке віднімається, на протилежний і додавання його до зменшуваного. А - В = А + ( - В) Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах. Числа зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код. При додаванні двох двійкових чисел, за абсолютною величиною менших одиниці, код суми може за абсолютною величиною перевищити одиницю або стати рівним їй. У такому випадку відбудеться переповнення розрядної сітки, що призведе до неправильного результату. Переповнення розрядної сітки при додавання модифікованих кодів може бути лише у випадках, коли доданки мають однакові знаки. Таке переповнення виявляється способом порівняння знакових розрядів отриманої суми. Признаком переповнення є неспівпадіння цифр, які створюються у двох знакових розрядах суми, тобто результат неможливо віднести до жодного з модифікованих кодів. Операція множення двох чисел зводиться до послідовного виконання сукупності операцій множення множеного на розряди множника і зсуву проміжних добутків та множника. Нагадаємо, що у цьому процесі у дійсності застосовуються тільки два правила множення одного двійкового числа на двійкову цифру: якщо ця цифра множника дорівнює 1, то двійкове число (множник) просто копіюється; якщо цей розряд множника дорівнює 0, то проміжний добуток дорівнює 0. При створенні кожного нового проміжного добутку він зсувається вліво на один розряд по відношенню до попереднього проміжного добутку. Наступний проміжний добуток зсувається вліво на один розряд від попереднього і у тому випадку, коли він дорівнює 0. Цей процесс продовжується до тих пір, поки не будуть використані всі розряди множника. Отримані проміжні добутки додаються і їх сума дає остаточний результат. Алгоритми виконання операції множення для різних форм подання чисел відрізняються незначно. Головні відмінності полягають у визначенні величини порядку добутку при множенні чисел з рухомою комою і місця коми при множенні чисел з фіксованою комою. Крім необхідності враховувати знаки співмножників для визначення знаку добутку, потрібно враховувати вплив їх знаків на достовірність результату. Від’ємними можуть бути як множене, так і множник. Якщо від’ємний знак подається одиницею перед старшим розрядом модуля двійкового числа, це сприймається комп’ютером як старший розряд числа. Тоді результат операції множення, коли множене або множник від’ємний, буде хибний і величина похибки залежить від того, яке з двох чисел (або обидва) є від'ємним. Таким чином, крім операції додавання для отримання добутку необхідна операція зсуву. При цьому з'являється можливість зсувати множене або суму проміжних добутків, що дає підставу для різних методів реалізації операції множення. М е т о д 1. Нехай А – множене (А > 0), В – множник (В > 0), С – добуток. Тоді у випадку подання чисел у формі з фіксованою комою отримаємо: А = 0, а1 а2 а3 . . . аn; В = 0, b1 b2 . . .bn = b12-1 + b22-2 + . . . + bn2-n. Звідси С = А * В = 0, а1 а2 а3 . . . аn(b12-1 + . . . + bn2-n) = = (2-1 * 0, a1 a2 . . . an )b1 + (2-2 * 0, a1 a2 . . .an )bn + . . . + (2-n * 0, a1 a2 . . . an )bn . Множник 2-n означає зсув на n розрядів вправо числа, яке знаходиться у дужках, тобто у даному випадку зсувається вправо множене і множення починається із старших розрядів. М е т о д 2. Нехай А = 0, а1 а2 а3 . . . аn – множене і В = 0, b1 b2 . . .bn – множник. Множник легко перетворити, використовуючи метод Горнера: В = (. . .((bn * 2-1 + bn-1)2-1 + bn-2) * 2-1 + . . . b2) * 2-1 + b1) * 2-1 . Тоді С = А * В = (. . .((b * 0, a1 a2 . . . an) * 2-1 + bn-1 0, a1 a2 . . .an )2-1 + b1 0, a1 a2 . . .an )2-1 . У цьому випадку множення починається з молодшиз розрядів і зсувається вправо сума проміжних добутків. М е т о д 3. Нехай А = 0, а1 а2 а3 . . . аn – множене і В = 0, b1 b2 . . .bn – множник. Множник, використовуючи метод Горнера, можна записати таким чином: В = 2-n (b1 * 2n-1 + b2* 2n-2 + bn-1* 21 + bn * 20) = 2n-1 (. . . ((b1 * 21 * b2) 21 + . . . + b n-1) 21 + bn). У цьому випадку С = А * В = 2-n (bn * 0, a1 a2 . . . an + (21 * 0, a1 a2 . . . an) bn-1 + . . . + (2n-1 * 0, a1 a2 . . . an)b1), що означає: множення починається з молодших розрядів, і множене зсувається вліво на один розряд у кожному такті. М е т о д 4. Нехай А = 0, а1 а2 а3 . . . аn – множене і В = 0, b1 b2 . . .bn – множник. Якщо множник В записати за методом Горнера: С = А * В = 2-n (. . .(21 (b1 * 0, a1 a2 . . . an) + b2* 0, a1 a2 . . . an) 21 + . . . . . . + bn-1* 0, a1 a2 . . . an) 21 + bn* 0, a1 a2 . . . an), то множення починається із старшого розряду і у кожному такті зсувається вліво сума проміжних добутків. Крім згаданих вище існують і інші методи та алгоритми. Взагалі множення двійкових чисел може здійснюватися: - послідовним способом – при цьому одночасно аналізується тільки один розряд множника і формуються часткові добутки множеного на один розряд множника. Ці добутки послідовно сумуються; паралельним способом – при цьому одночасно аналізуються всі розряди множника і одразу формується кінцевий результат – добуток множеного на усі розряди множника; проміжним способом – при цьому одночасно аналізуються декілька розрядів множника і формуються часткові добутки множеного на декілька розрядів множника, ці добутки послідовно сумуються. Виконання роботи Розробити алгоритм і написати програму додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді у інструкціях навчального комп’ютера DeComp Щоб виконати додавання двох 16-розрядних двійкових чисел зі знаком у форматі з фіксованою комою у модифікованому доповняльному коді, в 45-ту комірку занесемо число 0000 0000 0001 0000, а у 46-ту – 1100 0000 0000 1000. В 47-му – 1100 0000 0000 0000, 48-му – 1, 49-ту і 50-ту – 0000 0000 0000 0000, 51-шу – результат, а 52-га – проміжна. Для цього використаємо таку програму: Адреса комірки Код інструкції Мнемонічний запис Коментар  0 0000 0000 0010 1101 LOAD 45 Перевірка чи число від’ємне, циклічним зсувом Якщо число не від’ємне то перейти на 8-у комірку  1 1111 1100 0000 0000 RCL   2 1100 0000 0000 1000 JNC 8   3 0000 0000 0010 1101 LOAD 45 Інвертування числа і додавання одиниці до числа тобто представлення у доповнняльному коді запис у 45 комірку  4 0111 0000 0000 0000 NOT   5 0101 0000 0010 1111 OR 47   6 0010 0000 0011 0000 ADD 48   7 0001 0000 0010 1101 STORE 45   8 0000 0000 0010 1110 LOAD 46 Перевірка другого числа на від’ємність, циклічним зсувом. Якщо друге число не від’ємне, то перейти на 16-у комірку  9 1111 1100 0000 0000 RCL   10 1100 0000 0001 0000 JNC 16   11 0000 0000 0010 1110 LOAD 46 Інвертування числа і додавання одиниці до числа тобто представлення у доповняльному коді, запис у 46-шу комірку.  12 0111 0000 0000 0000 NOT   13 0101 0000 0010 1111 OR 47   14 0010 0000 0011 0000 ADD 48   15 0001 0000 0010 1110 STORE 46   16 0000 0000 0010 1101 LOAD 45 Додавання чисел.  17 0010 0000 0010 1110 ADD 46   18 0001 0000 0011 0011 STORE 51   19 1111 1100 0000 0000 RCL Перевірка старшого розряду Якщо С = 0 перейти на 25-у комірку  20 0001 0000 0011 0100 STORE 52   21 1100 0000 0001 1001 JNC 25   22 0000 0000 0011 0001 LOAD 49 Запис до 49-ї комірки 1  23 0010 0000 0011 0000 ADD 48   24 0001 0000 0011 0001 STORE 49   25 0000 0000 0011 0100 LOAD 52 Перевірка передостаннього розряду  26 1111 1100 0000 0000 RCL   27 1100 0000 0001 1110 JNC 30   28 0000 0000 0011 0010 LOAD 50 Перевірка на переповнення розрядної сітки  29 0010 0000 0011 0000 ADD 48   30 0110 0000 0011 0001 XOR 49   31 1000 0000 0010 0101 JNZ 37   32 0000 0000 0011 0011 LOAD 51 Перевірка знаку результату  33 1111 1100 0000 0000 RCL   34 1000 0000 0010 0101 JNC 37   35 0111 0000 0000 0000 NOT Переведення в прямий код  36 0010 0000 0011 0000 ADD 48   37 0111 1100 0000 0000 HALT Зупинка виконання програми  a – 45 комірка, заноситься перше число b – 46 комірка, заноситься друге число d – 51 комірка, сума чисел а i b e – 49 комірка, останій розряд f – 52 комірка, передостанній розряд j – 50 комірка, перевірка на переповнення розрядної сітки 2) Виконати дослідження програми, розробленої у пункті 2, у покроковому режимі. РА РД А  1-й крок 0000 0010 1101 0000 0000 0001 0000 0000 0000 0001 0000  2-й крок 0000 0000 0001 1111 1100 0000 0000 0000 0000 0010 0000  3–й крок 0000 0000 0010 1100 0000 0000 1000 0000 0000 0010 0000  4-й крок 0000 0010 1110 1100 0000 0000 1000 1100 0000 0000 1000  5-й крок 0000 0000 1001 1111 1100 0000 0000 1000 0000 0001 0000  6-й крок 0000 0000 1010 1100 0000 0001 0000 1000 0000 0001 0000  7-й крок 0000 0000 1011 1100 0000 0001 0000 1000 0000 0001 0000  8-й крок 0000 0000 1100 0111 0000 0000 0000 0111 1111 1110 1111  9-й крок 0000 0000 1101 0111 0000 0000 0000 1000 0000 0001 0000  10-й крок 0000 0011 0000 0000 0000 0000 0001 1000 0000 0001 0001  11-й крок 0000 0010 1110 1000 0000 0001 0001 1000 0000 0001 0001  12-й крок 0000 0010 1101 0000 0000 0001 0000 0000 0000 0001 0000  13-й крок 0000 0010 1110 1000 0000 0001 0001 1000 0000 0001 0001  14-й крок 0000 0011 0011 1000 0000 0001 0001 1000 0000 0001 0001  15-й крок 0000 0001 0011 1111 1100 0000 0000 0000 0000 0100 0010  16–й крок 0000 0011 0100 0000 0000 0100 0010 0000 0000 0100 0010  17-й крок 0000 0001 0101 1100 0000 0001 1001 0000 0000 0100 0010  18-й крок 0000 0011 0001 0000 0000 0000 0000 0000 0000 0000 0000  19-й крок 0000 0011 0000 0000 0000 0000 0001 0000 0000 0000 0001  20-й крок 0000 0011 0100 0000 0000 0100 0010 0000 0000 0100 0010  21-й крок 0000 0001 1001 1111 1100 0000 0000 0000 0000 1000 0100  22-й крок 0000 0001 1010 1100 0000 0001 1110 0000 0000 1000 0100  23-й крок 0000 0001 1110 1000 0000 0010 0101 0000 0000 1000 0100  24-й крок 0000 0010 0101 0111 1100 0000 0000 0111 1100 0000 0000   РІ ЛАІ РО  0000 0000 0010 1101 0000 0000 0001 0  1111 1100 0000 0000 0000 0000 0010 0  1100 0000 0000 1000 0000 0000 1000 0  0000 0000 0010 1110 0000 0000 1001 0  1111 1100 0000 0000 0000 0000 1010 SC  1100 0000 0001 0000 0000 0000 1011 SC  1100 0000 0001 0000 0000 0000 1100 SC  0111 0000 0000 0000 0000 0000 1101 0  0111 0000 0000 0000 0000 0000 1110 0  0010 0000 0011 0000 0000 0000 1111 S  0001 0000 0010 1110 0000 0001 0000 S  0000 0000 0010 1101 0000 0001 0001 S  0001 0000 0010 1110 0000 0001 0010 S  0001 0000 0011 0011 0000 0001 0011 S  1111 1100 0000 0000 0000 0001 0100 C  0001 0000 0011 0010 0000 0001 0101 C  1100 0000 0001 1001 0000 0001 0110 C  0000 0000 0011 0001 0000 0001 0111 C  0010 0000 0011 0000 0000 0001 1000 0  0000 0000 0011 0100 0000 0001 1001 0  1111 1100 0000 0000 0000 0001 1010 0  1100 0000 0001 1110 0000 0001 1110 0  1000 0000 0010 0101 0000 0010 0101 0  1111 1100 0000 0000 0000 0010 0101 0   3) Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку. Варіант виконання вибрати з таблиці: Для виконання множення над двома довільними числами у модифікованому коді виконаємо таку програму: Для виконання порграми попередньо в наступні комірки заносимо числа: Номер комірки Номер комірки в двійковому коді Призначення комірки, або число, що в ній міститься  100 0000 0110 0100 Перше число (множене)  101 0000 0110 0101 Друге число (множник)  102 0000 0110 0110 Нуль  103 0000 0110 0111 Знак першого числа  104 0000 0110 1000 Знак другого числа  105 0000 0110 1001 1100 0000 0000 0000  106 0000 0110 1010 Знак результату  107 0000 0110 1011 0011 1111 1111 1111  108 0000 0110 1100 Перший проміжний добуток, такий самий як перше число  109 0000 0110 1101 Результат старших розрядів  110 0000 0110 1110 14  111 0000 0110 1111 1  112 0000 0111 0000 13  113 0000 0111 0001 Результат молодших розрядів  114 0000 0111 0010 1000 0000 0000 0000 – маска  115 0000 0111 0011 1000 0000 0000 0000 – параметр для зміни маски  116 0000 0111 0100 Проміжна комірка  117 0000 0111 0101 Другий проміжний добуток   Далі виконуємо таку програму: Адреса комірки Код інструкції Мнемонічний запис Коментар  0 0000 0000 0110 0100 LOAD 100 Підготовка чисел до множення  1 0100 0000 0110 1011 AND 107   2 0001 0000 0110 0100 STORE 100   3 0000 0000 0110 0101 LOAD 101   4 0100 0000 0110 1011 AND 107   5 0001 0000 0110 0101 STORE 101   6 0000 0000 0110 0101 LOAD 101 Підготовка множника  7 1111 0000 0000 0000 LSL   8 1111 0000 0000 0000 LSL   9 0001 0000 0111 0100 STORE 116   10 0000 0000 0111 0100 LOAD 116 Перевірка поточного розряду множника  11 1111 1100 0000 0000 RCL   12 0001 0000 0111 0100 STORE 116   13 1100 0000 0001 1110 JNC 31   14 0000 0000 0110 1101 LOAD 109 Формування результату старших розрядів  15 0010 0000 0110 1100 ADD 108   16 0001 0000 0110 1101 STORE 109   17 0000 0000 0110 1100 LOAD 108 Підготовка порміжного добутку  18 1111 0010 0000 0000 LSR   19 0001 0000 0110 1100 STORE 108   20 0000 0000 0110 1110 LOAD 110 Зміна параметрів і керування циклом  21 0011 0000 0110 1111 SUB 111   22 0001 0000 0110 1110 STORE 110   23 1000 0000 0001 0111 JNZ 0   24 0000 0000 0110 0100 LOAD 100 Підготовка проміжного добутку  25 0001 0000 0111 0101 STORE 117   26 0000 0000 0110 0101 LOAD 101 Підготовка множника  27 1111 0000 0000 0000 LSL   28 1111 0000 0000 0000 LSL   29 0001 0000 0111 0100 STORE 116   30 0000 0000 0111 0101 LOAD 117 Зсув проміжного добутку  31 1111 1010 0000 0000 ROR   32 0001 0000 0111 0101 STORE 117   33 0000 0000 0111 0100 LOAD 116 Перевірка поточного розряду множника на наявність одиниці  34 1111 1100 0000 0000 RCL   35 0001 0000 0111 0100 STORE 116   36 1100 0000 0011 1001 JNC 42   37 0000 0000 0111 0101 LOAD 117 Формування проміжного добутку з накладанням маски  38 0100 0000 0111 0010 AND 114   39 0001 0000 0110 1100 STORE 108   40 0010 0000 0111 0001 ADD 113 Формування результату молодших розрядів  41 0001 0000 0110 0001 STORE 113   42 0000 0000 0111 0011 LOAD 115 Зміна параметрів маски  43 1111 1010 0000 0000 ROR   44 0001 0000 0111 0011 STORE 115   45 0010 0000 0111 0010 ADD 114   46 0001 0000 0111 0010 STORE 114   47 0000 0000 0111 0000 LOAD 112 Зміна параметрів та керування циклом  48 0011 0000 0110 1111 SUB 111   49 0001 0000 0111 0000 STORE 112   50 1000 0000 0010 1011 JNZ 43   51 0111 1100 0000 0000 HALT Завершення виконання програми   k – 110 комірка N – 112 комірка Висновки: Під час виконання цієї лабораторної роботи я вивчив подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою. Навчився розробляти алгоритми виконання операції віднімання з використанням обернених, доповнювальних і модифікованих кодів. Навчився розробляти алгоритми виконання операції множення додатних і від’ємних двійкових чисел.
Антиботан аватар за замовчуванням

07.05.2013 00:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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