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

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

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

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

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

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №5 З дисципліни «Організація та функціонування комп’ютерів» На тему: «Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у навчальному комп’ютері - симуляторі DeComp» Тема: Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у симуляторі DeComp. Мета: Вивчити подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою; Навчитись розробляти алгоритми виконання операції віднімання з використанням обернених, доповнювальних і модифікованих кодів; Навчитись розробляти алгоритми виконання операції множення додатних і від’ємних двійкових чисел. Теоретичні відомості Відомо, що одним з можливих шляхів виконання операції віднімання є заміна знаку числа, яке віднімається, на протилежний і додавання його до зменшуваного. А - В = А + ( - В) Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах. Числа зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код. При додаванні двох двійкових чисел, за абсолютною величиною менших одиниці, код суми може за абсолютною величиною перевищити одиницю або стати рівним їй. У такому випадку відбудеться переповнення розрядної сітки, що призведе до неправильного результату. Переповнення розрядної сітки при додавання модифікованих кодів може бути лише у випадках, коли доданки мають однакові знаки. Таке переповнення виявляється способом порівняння знакових розрядів отриманої суми. Признаком переповнення є неспівпадіння цифр, які створюються у двох знакових розрядах суми, тобто результат неможливо віднести до жодного з модифікованих кодів. Операція множення двох чисел зводиться до послідовного виконання сукупності операцій множення множеного на розряди множника і зсуву проміжних добутків та множника. Нагадаємо, що у цьому процесі у дійсності застосовуються тільки два правила множення одного двійкового числа на двійкову цифру: якщо ця цифра множника дорівнює 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), то множення починається із старшого розряду і у кожному такті зсувається вліво сума проміжних добутків. Крім згаданих вище існують і інші методи та алгоритми. Взагалі множення двійкових чисел може здійснюватися: - послідовним способом – при цьому одночасно аналізується тільки один розряд множника і формуються часткові добутки множеного на один розряд множника. Ці добутки послідовно сумуються; паралельним способом – при цьому одночасно аналізуються всі розряди множника і одразу формується кінцевий результат – добуток множеного на усі розряди множника; проміжним способом – при цьому одночасно аналізуються декілька розрядів множника і формуються часткові добутки множеного на декілька розрядів множника, ці добутки послідовно сумуються. Виконання роботи 1) Щоб виконати додавання двох чисел в 40-у комірку заношу число 0000 0000 0001 0000, а у 41-у – 1100 0000 0000 1000. В 42-у – 1100 0000 0000 0000, 43-у – 1, 44-у і 45 – нулі, 46 – результат, 47 – проміжна. Від’ємне число буде подаватись у модифікованому коді, для цього використаю таку програму: Код програми: №п/п Адреса комірки Код інструкції Мнемонічний запис Коментар  1 0000 0000 0000 0000 0000 0010 1000 Load 40 Перевірка чи число від’ємне  2 0000 0000 0001 1111 1100 0000 0000 RCL   3 0000 0000 0010 1100 0000 0000 1000 JNC 8 Якщо число не від’ємне то перейти на 8-у комірку  4 0000 0000 0011 0000 0000 0010 1000 Load 40 Подання числа у доповняльному коді  5 0000 0000 0100 0111 0000 0000 0000 NOT   6 0000 0000 0101 0101 0000 0010 1010 OR 42   7 0000 0000 0110 0010 0000 0010 1011 Add 43   8 0000 0000 0111 0001 0000 0000 0000 Store 40   9 0000 0000 1000 0000 0000 0010 1001 Load 41 Перевірка другого числа на від’ємність  10 0000 0000 1001 1111 1100 0000 0000 RCL   11 0000 0000 1010 1100 0000 0001 0000 JNC 16 Якщо друге число не від’ємне, то перейти на 16-у комірку  12 0000 0000 1011 0000 0000 0010 1001 Load 41 Подання другого числа у доповняльному коді  13 0000 0000 1100 0111 0000 0000 0000 NOT   14 0000 0000 1101 0101 0000 0010 1010 OR 42   15 0000 0000 1110 0010 0000 0010 1011 Add 43   16 0000 0000 1111 0001 0000 0010 1001 Store 41   17 0000 0001 0000 0000 0000 0010 1000 Load 40 Обчислення результату  18 0000 0001 0001 0010 0000 0010 1001 Add 41   19 0000 0001 0010 0001 0000 0010 1110 Store 46   20 0000 0001 0011 1111 1100 0000 0000 RCL Перевірка старшого розряду  21 0000 0001 0100 0001 0000 0010 1111 Store 47   22 0000 0001 0101 1100 0000 0001 1001 JNC 25 Якщо С = 0 перейти на 25-у комірку  23 0000 0001 0110 0000 0000 0010 1100 Load 44 Запис до 44-ї комірки 1  24 0000 0001 0111 0010 0000 0010 1011 Add 43   25 0000 0001 1000 0001 0000 0010 1100 Store 44   26 0000 0001 1001 0000 0000 0010 1111 Load 47 Перевірка передостаннього розряду  27 0000 0001 1010 1111 1100 0000 0000 RCL   28 0000 0001 1011 1100 0000 0001 1110 JNC 30   29 0000 0001 1100 0000 0000 0010 1101 Load 45 Перевірка на переповнення розрядної сітки  30 0000 0001 1101 0010 0000 0010 1011 Add 43   31 0000 0001 1110 0110 0000 0010 1100 XOR 44   32 0000 0001 1111 1000 0000 0010 0101 JNZ 37   33 0000 0010 0000 0000 0000 0010 1110 Load 46 Перевірка знаку результату  34 0000 0010 0001 1111 1100 0000 0000 RCL   35 0000 0010 0010 1000 0000 0010 0101 JNC 37   36 0000 0010 0011 0111 0000 0000 0000 NOT Переведення в прямий код  37 0000 0010 0100 0010 0000 0010 1011 Add 43   38 0000 0010 0101 0111 1100 0000 0000 Halt Зупинка виконання програми   2) Для виконання множення над двома довільними числами у модифікованому коді виконаю таку програму: Для виконання порграми попередньо в комірки заношу числа: Номер комірки Номер комірки в двійковому коді Призначення комірки, або число, що в ній міститься  80 0000 0101 0000 Перше число (множиме)  81 0000 0101 0001 Друге число (множник)  82 0000 0101 0010 Нуль  83 0000 0101 0011 Знак першого числа  84 0000 0101 0100 Знак другого числа  85 0000 0101 0101 1100 0000 0000 0000  86 0000 0101 0110 Знак результату  87 0000 0101 0111 0011 1111 1111 1111  88 0000 0101 1000 Перший проміжний добуток, такий самий як перше число  89 0000 0101 1001 Результат старших розрядів  90 0000 0101 1010 14  91 0000 0101 1011 1  92 0000 0101 1100 13  93 0000 0101 1101 Результат молодших розрядів  94 0000 0101 1110 1000 0000 0000 0000 – маска  95 0000 0101 1111 1000 0000 0000 0000 – параметр для зміни маски  96 0000 0110 0000 Проміжна комірка  97 0000 0110 0001 Другий проміжний добуток   Далі виконую таку програму: №п/п Адреса комірки Код інструкції Мнемонічний запис Коментар  1 0 0000 0000 0101 0000 Load 80 Визначення знаку першого числа  2 1 0010 0000 0101 0010 Add 82   3 2 1010 0000 0000 0101 JP 5   4 3 0000 0000 0101 0101 Load 85   5 4 0001 0000 0101 0011 Store 83   6 5 0000 0000 0101 0001 Load 81 Визначення знаку другого числа  7 6 0010 0000 0101 0010 Add 82   8 7 1010 0000 0000 1010 JP 10   9 8 0000 0000 0101 0101 Load 85   10 9 0001 0000 0101 0100 Store 84   11 10 0000 0000 0101 0100 Load 84 Визначення знаку результату  12 11 0110 0000 0101 0011 XOR 83   13 12 0001 0000 0101 0110 Store 86   14 13 0000 0000 0101 0000 Load 80 Підготовка чисел до множення  15 14 0100 0000 0101 0111 AND 87   16 15 0001 0000 0101 0000 Store 80   17 16 0000 0000 0101 0001 Load 81   18 17 0100 0000 0101 0111 And 87   19 18 0001 0000 0101 0001 Store 81   20 19 0000 0000 0101 0001 Load 81 Підготовка множника  21 20 1111 0000 0000 0000 LSL   22 21 1111 0000 0000 0000 LSL   23 22 0001 0000 0110 0000 Store 96   24 23 0000 0000 0110 0000 Load 96 Перевірка поточного розряду множника  25 24 1111 1100 0000 0000 RCL   26 25 0001 0000 0110 0000 Store 96   27 26 1100 0000 0001 1110 JNC 30   28 27 0000 0000 0101 1001 Load 89 Формування результату старших розрядів  29 28 0010 0000 0101 1000 Add 88   30 29 0001 0000 0101 1001 Store 89   31 30 0000 0000 0101 1000 Load 88 Підготовка порміжного добутку  32 31 1111 0010 0000 0000 LSR   33 32 0001 0000 0101 1000 Store 88   34 33 0000 0000 0101 1010 Load 90 Зміна параметрів і керування циклом  35 34 0011 0000 0101 1011 SUB 91   36 35 0001 0000 0101 1010 Store 90   37 36 1000 0000 0001 0111 JNZ 23   38 37 0000 0000 0101 0000 Load 80 Підготовка проміжного добутку  39 38 0001 0000 0110 0001 Store 97   40 39 0000 0000 0101 0001 Load 81 Підготовка множника  41 40 1111 0000 0000 0000 LSL   42 41 1111 0000 0000 0000 LSL   43 42 0001 0000 0110 0000 Store 96   44 43 0000 0000 0110 0001 Load 97 Зсув проміжного добутку  45 44 1111 1010 0000 0000 ROR   46 45 0001 0000 0110 0001 Store 97   47 46 0000 0000 0110 0000 Load 96 Перевірка поточного розряду множника на наявність одиниці  48 47 1111 1100 0000 0000 RCL   49 48 0001 0000 0110 0000 Store 96   50 49 1100 0000 0011 1001 JNC 59   51 50 0000 0000 0110 0001 Load 97 Формування проміжного добутку з накладанням маски  52 51 0100 0000 0101 1110 AND 94   53 52 0001 0000 0101 1000 Store 88   54 53 0010 0000 0101 1101 Add 93 Формування результату молодших розрядів  55 54 0001 0000 0101 1101 Store 93   56 55 1100 0000 0011 1001 JNC 59 Перевірка на перенесення одиниці до старших розрядів  57 56 0000 0000 0101 1001 Load 89   58 57 0010 0000 0101 1011 Add 91   59 58 0001 0000 0101 1001 Store 89   60 59 0000 0000 0101 1111 Load 95 Зміна параметрів маски  61 60 1111 1010 0000 0000 ROR   62 61 0001 0000 0101 1111 Store 95   63 62 0010 0000 0101 1110 Add 94   64 63 0001 0000 0101 1110 Store 94   65 64 0000 0000 0101 1100 Load 92 Зміна параметрів та керування циклом  66 65 0011 0000 0101 1011 Sub 91   67 66 0001 0000 0101 1100 Store 92   68 67 1000 0000 0010 1011 JNZ 43   69 68 0111 1100 0000 0000 Halt Завершення виконання програми   Висновки: Під час виконання цієї лабораторної роботи я вивчив подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою. Навчився розробляти алгоритми виконання операції віднімання з використанням обернених, доповнювальних і модифікованих кодів. Навчився розробляти алгоритми виконання операції множення додатних і від’ємних двійкових чисел.
Антиботан аватар за замовчуванням

28.01.2013 14:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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