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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра CКС Звіт з лабораторної роботи № 5 з дисципліни: “Організація та функціонування комп’ютерів” на тему: “ Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у симуляторі DeComp.” комою у симуляторі DeComp. Мета роботи: Вивчити форми подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою; Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичних операцій додавання та віднімання над двійковими числами з фіксованою комою у модифікованих кодах; Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичної операції множення двійкових чисел без знаку. 1. Теоретична частина. 1.1. Додавання і віднімання двійкових чисел з фіксованою комою Простота виконання арифметичних дій є важливою особливістю двійкової системи числення. Але у дійсності, при виконанні арифметичних операцій у конкретному комп’ютері потрібно додатково враховувати не тільки знаки чисел, що обробляються, але і діапазон та форму подання чисел. Відомо, що одним з можливих шляхів виконання операції віднімання є заміна знаку числа, яке віднімається, на протилежний і додавання його до зменшуваного. А - В = А + ( - В) Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах. Числа, що зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код. При реалізації заміни віднімання додаванням, другий доданок у наведенному виразі переводиться у доповняльний код шляхом інвертування та додавання одиниці у молодший розряд. (Треба пам’ятати, що доповняльний код додатного числа співпадає з прямим кодом). A –B = A ++1 При додаванні двох двійкових чисел, за абсолютною величиною менших одиниці, код суми може за абсолютною величиною перевищити одиницю або стати рівним їй. У такому випадку відбудеться переповнення розрядної сітки, що призведе до неправильного результату. У таких випадках результату не існує. Переповнення може відбутися у тих випадках, коли доданки мають однакові знаки. Ознакою переповнення розрядної сітки слугує протилежність знаку суми, що отримана, знакам доданків. Звідси витікає, що для отримання коректного результату при додаванні двійкових чисел з фіксованою комою обов’язковою є умова, щоб кожний з доданків і їх сума за абсолютною величиною були менше одиниці. 1.2. Додавання двійкових чисел у модифікованому доповняльному коді Доповняльні коди чисел додаються порозрядно. Причому знакові розряди додаються як звичайні розряди цілих чисел. Одиниця переносу, яка виникає при додаванні знакових розрядів, не враховується, тобто відкидається. Суму отримуємо у доповняльному коді. Для отримання остаточного результату цю суму необхідно обов’язково перевести у прямий код, тобто зробити друге доповнення. Приклад 1. Додати у модифікованому доповняльному коді двійкові числа А і В при наступних умовах: А > 0; B > 0; A + B > 0. A = + 0,1101; B = + 0,0001 +  00,1110; 00,1110; 2. А < 0; B < 0; A + B < 0. A = - 0,1101; B = - 0,0001; +   111,0010; 11,1110; Одиниця переносу із старшого знакового ( розряду не враховується При переведенні у прямий код отриманих від’ємних результатів переводиться саме число і не переводиться знак (див. приклад 2), або число із спотвореним знаком береться за абсолютною величиною. 1.3. Додавання двійкових чисел у модифікованому оберненому коді Реалізується так само, як і в доповняльному коді. Обернені коди чисел додаються порозрядно, знакові розряди додаються як розряди цілих чисел. Суму отримуємо у оберненому коді. Відмінність полягає у тому, що одиницю переносу із старшого знакового розряду, якщо вона з’являється, потрібно додати до молодшого розряду суми, тобто виникає циклічний перенос. Приклад 2. Додати у модифікованому оберненому коді числа А і В при умові: 1) А > 0; B < 0; A + B > 0. A = + 0,1101; B = - 0,0001; +  100,1011 Циклічний перенос +1 ; 00,1100; 2) А < 0; B < 0; A + B < 0. A = - 0,1101; B = - 0,0001; +  111,0000; Циклічний перенос +1  11,1110; 1.4. Переповнення розрядної сітки при додаванні у модифікованих машинних кодах Переповнення розрядної сітки при додаванні модифікованих кодів, так само як і при додаванні у звичайних кодах із фіксованою комою, може бути лише у випадках, коли доданки мають однакові знаки. Таке переповнення виявляється способом порівняння знакових розрядів отриманої суми, наприклад, застосовуючи операцію додавання за модулем 2 (XOR). Ознакою переповнення є неспівпадання цифр, які створюються у двох знакових розрядах суми, тобто код знаку числа має вигляд 01 або 10. Відповідно, результат неможливо віднести до додатних, ні до від’ємних модифікованих кодів. Пояснимо це на наступних прикладах. Приклад 3: 1. А = + 0,1101; 2. А = - 0,1101; В = + 0,0111; В = - 0,0111; А + В > 0; А + В < 0; + +   Відкидається ( Як видно з прикладів, у знакових розрядах отриманої суми додатних доданків маємо комбінацію „01”, а від’ємних – „10”, що свідчить про переповнення розрядної сітки. 1.5. Множення двійкових чисел без знаку Множення двійкових чисел виконують за правилами, аналогічними для десяткових чисел, тобто визначають проміжні добутки, а потім їх додають. Але, важливо зазначити, що у цьому процесі значно полегшується процес визначення проміжних добутків. Насправді виконуються тільки два правила множення двійкового числа на двійкову цифру: 1). Якщо ця двійкова цифра (розряд множника) дорівнює 1, то двійкове множене просто копіюється без змін у якості проміжного добутку; 2). Якщо цей розряд множника дорівнює 0, то проміжний добуток дорівнює 0. Ці правила ілюструє приклад 4. Дії виконуються наступним шляхом: у першому розряді множника стоїть 1, тому у якості першого проміжного добутку копіюється значення множеного. У наступному зліва розряді множника стоїть 0, і, відповідно, другий проміжний добуток дорівнює 0000. Далі, дії повторюються. При визначенні кожного наступного проміжного добутку він зсувається вліво на один розряд відносно попереднього. Всі отримані проміжні добутки, враховуючи зсуви, додаються між собою. Таблиця ХХ – таблиця множення одного розряду двійкових чисел. Табл. ХХ Приклад 4. 0 * 0  0   1 * 0  0   0 * 1  0   1 * 1  1   1 0 0 1 - множене * 1 1 0 1 - множник 1 0 0 1 + 0 0 0 0 проміжні 1 0 0 1 добутки 1 0 0 1 . 1 1 1 0 1 0 1 = добуток Отже, операція множення двійкових чисел зводиться до операцій зсуву та додавання. Крім того зауважимо, що множення двох n – розрядних чисел  дає результат, який містить 2n бітів. Відомі два наступні основні способи виконання операції множення: а) Множення, починаючи з молодших розрядів множника, із зсувом вліво, процес починається з молодшого розряду множника; б) Множення, починаючи із старших розрядів множника, із зсувом вправо, процес починаючи із старших розрядів множника: 1101 - множене 1101 - множене * 1101 - множник * 1101 - множник 1101 1101 + 0000 + 1101 1101 0000 1101 1101 10101001 - добуток 10101001 - добуток а) б) Схема множення із зсувом СДП вправо подана на наступному малюнку.  На цьому малюнку позначено: A(a3, a2, a1, a0) i B(b3, b2, b1, b0) – двійкові 4-ри розрядні числа – сомножники; Р – добуток; ДПі – проміжні добутки. Зауважимо, що операція множення числа на 10 ± n - основу системи числення в степені ± n, рівноцінна зсуву даного числа вправо на n розрядів, якщо степінь додатна, і вліво, якщо степінь від’ємна. Хоча процес аналізу розрядів множника і додавання множенного із самим собою стільки разів, скільки одиниць у множнику, простий, він вимагає достатньо великих витрат часу. Сумування проміжних добутків (ДП) виконується звичайно не на кінцевому етапі, а по мірі їх отримання. Це дозволяє не зберігати всі ДП, тобто скорочує апаратні витрати. У залежності від способу отримання суми ДП (СДП) можливі чотири варіанти реалізації “традиційної” схеми множення: 1. Множення, починаючи з молодших розрядів множника, із зсувом СДП вправо і при множеному, що є нерухоме; 2. Множення, починаючи із старших розрядів множника, при зсуві СДП вліво і при множеному, що є нерухоме; 3. Множення, починаючи з молодших розрядів множника, із зсувом множеного вліво і СДП, що є нерухоме; 4. Множення, починаючи із старших розрядів множника, при зсуві множеного вправо і при СДП, що є нерухоме. Варіанти із зсувом множеного (вар. 3, 4) на практиці використовуються менше, тому що для їх реалізації регістри множеного, СДП і суматор повинні мати розрядність 2n . Виконання алгоритму множення без знаку із зсувом вправо для двох чисел: А = 1010 і В = 1110 показане на наступному прикладі:   Коментар   A B  1010 * 1011 Множене Множник   СДП  0000 початкове значення сумарного проміжного добутку   ДП0 = Ab0 P 0 = СДП + ДП0 P 0 2-1  + 1010 01010 01010 Множення множенного на 20 розряд множника (= 1); Перший проміжний добуток Зсув вправо першого добутку    ДП1 = Ab1 P 1 = P 0 2-1+ ДП1 P 1 2-1 + 1010 011110 011110 Множення множенного на 21 розряд множника (= 1); Другий проміжний добуток Зсув вправо другого добутку    ДП2 = Ab2 P 2 = P 1 2-1 + ДП2 P 2 2-1 + 0000 0011110 0011110 Множення множенного на 22 розряд множника (= 0); Третій проміжний добуток Зсув вправо третього добутку    ДП3 = Ab3 P 3 = P 2 2-1 + ДП3 P 3 2-1 + 1010 01101110 01101110 Множення множенного на 23 розряд множника (= 1); Четвертий проміжний добуток Зсув вправо четвертого добутку,  отриманий кінцевий результат.   Даний алгоритм множення без знаку із зсувом вправо можна описати таким чином: 1. Первинне значення СДП приймається таким, що дорівнює 0; 2. Аналізується наступна цифра множника (аналіз починається з молодшого розряду). Якщо він дорівнює 1, то до СДП додається множене, інакше додавання не виконується; 3. Виконується зсув СДП вправо на один розряд; 4. Пункти 2 і 3 повторюються для усіх цифрових розрядів множника. Аналогічним шляхом реалізуються і інші варіанти алгоритмів множення двійкових чисел без знаку. 2. Порядок роботи: Вивчити теоретичні відомості методичних вказівок. Розробити алгоритм і написати програму додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді у інструкціях навчального комп’ютера DeComp. Алгоритм програми додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді подано на наступній сторінці. Примітка: якщо після додавання двох числе виникне переповнення розрядної сітки, то програма запише наш кінцевий результат 16-тьма одиничками. Комірка пам’яті Значення  200 Число А  201 Число В  202 Число А1  203 Число B1  204 Тимчасова змінна S  205 Число 1  206  змінна Minus (1100 0000 0000 0000)  207 Результат R  208 змінна R1  209 Повідомлення переповнення розрядної сітки (1111 1111 1111 1111)  210 змінна R2  211 змінна (1100 0000 0000 0000)   № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар   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    Виконати дослідження програми, розробленої у пункті 2, у покроковому режимі. Дослідження програми у покроковому режимі для додавання чисел 1 і -5 подано у таблиці нижче. Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку. Варіант виконання вибрати з таблиці: Комірка пам’яті Значення  50 Множене А  51 Множник В  52 Результат  53 Лічильник циклу. Число 15  54 Число 1   № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар  0 0000 0000 0011 0011 LOAD 51 Визначаємо, на яке число ми будем множити 1 чи 0  1 1111 0010 0000 0000 LSR   2 0001 0000 0011 0011 STORE 51   3 1100 0000 0001 0011 JNC 7   4 0000 0000 0011 0010 LOAD 50 Запис 1 проміжного добутку при множенні на 1  5 0010 0000 0011 0100 ADD 52   6 0001 0000 0011 0100 STORE 52   7 0000 0000 0011 0011 LOAD 51 Визначаємо, на яке число ми будемо множити 1 чи 0  8 1111 0010 0000 0000 LSR   9 0001 0000 0011 0011 STORE 51   10 1100 0000 0001 1101 JNC 17   11 0000 0000 0011 0010 LOAD 50 Зсуваємо множене на 1 розряд вліво для знаходження проміжного добутку  12 1111 0000 0000 0000 LSL   13 0001 0000 0011 0010 STORE 50   14 0010 0000 0011 0100 ADD 52 Додаємо проміжні добутки і переходимо до наступної інструкції  15 0001 0000 0011 0100 STORE 52   16 1110 0000 0010 0000 JMP 32   17 0000 0000 0011 0010 LOAD 50 У випадку множення на 0 ПД=0.Тому просто зсуваємо множене на 1 розряд  18 1111 0000 0000 0000 LSL   19 0001 0000 0011 0010 STORE 50   20 0000 0000 0011 0101 LOAD 53 Зменшуємо лічильник циклу на 1  21 0011 0000 0011 0110 SUB 54   22 0001 0000 0011 0101 STORE 53   23 1000 0000 00001 0011 JNZ 19 Перевірка умови циклу  24 0111 1100 0000 0000 HALT Завершуємо виконання програми   Виконати дослідження програми, розробленої у пункті 4, у покроковому режимі. Оформити і захистити звіт. Висновок: на лабораторній роботі я вивчив форми подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою; навчився розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp; виконав арифметичні операції додавання та віднімання над двійковими числами з фіксованою комою у модифікованих кодах; навчився розробляти алгоритми і здійснив їх реалізацію у інструкціях процесора навчального комп'ютера DeComp; виконав дослідження арифметичної операції множення двійкових чисел без знаку.
Антиботан аватар за замовчуванням

28.01.2013 17:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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