Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 5
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: Дослідження виконання арифметичних операцій з числами у форматі з
фіксованою комою у навчальному комп’ютері - симуляторі DeComp ”
Тема: Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у симуляторі DeComp.
Мета: Вивчити подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою;
Навчитись розробляти алгоритми виконання операції віднімання з використанням обернених, доповнювальних і модифікованих кодів;
Навчитись розробляти алгоритми виконання операції множення додатних і від’ємних двійкових чисел.
Теоретичні відомості
Відомо, що одним з можливих шляхів виконання операції віднімання є заміна знаку числа, яке віднімається, на протилежний і додавання його до зменшуваного.
А - В = А + ( - В)
Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах. Числа зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код.
При додаванні двох двійкових чисел, за абсолютною величиною менших одиниці, код суми може за абсолютною величиною перевищити одиницю або стати рівним їй. У такому випадку відбудеться переповнення розрядної сітки, що призведе до неправильного результату.
Переповнення розрядної сітки при додавання модифікованих кодів може бути лише у випадках, коли доданки мають однакові знаки. Таке переповнення виявляється способом порівняння знакових розрядів отриманої суми. Признаком переповнення є неспівпадіння цифр, які створюються у двох знакових розрядах суми, тобто результат неможливо віднести до жодного з модифікованих кодів.
Операція множення двох чисел зводиться до послідовного виконання сукупності операцій множення множеного на розряди множника і зсуву проміжних добутків та множника. Нагадаємо, що у цьому процесі у дійсності застосовуються тільки два правила множення одного двійкового числа на двійкову цифру:
якщо ця цифра множника дорівнює 1, то двійкове число (множник) просто копіюється;
якщо цей розряд множника дорівнює 0, то проміжний добуток дорівнює 0.
При створенні кожного нового проміжного добутку він зсувається вліво на один розряд по відношенню до попереднього проміжного добутку. Наступний проміжний добуток зсувається вліво на один розряд від попереднього і у тому випадку, коли він дорівнює 0. Цей процесс продовжується до тих пір, поки не будуть використані всі розряди множника. Отримані проміжні добутки додаються і їх сума дає остаточний результат.
Алгоритми виконання операції множення для різних форм подання чисел відрізняються незначно. Головні відмінності полягають у визначенні величини порядку добутку при множенні чисел з рухомою комою і місця коми при множенні чисел з фіксованою комою.
Крім необхідності враховувати знаки співмножників для визначення знаку добутку, потрібно враховувати вплив їх знаків на достовірність результату. Від’ємними можуть бути як множене, так і множник. Якщо від’ємний знак подається одиницею перед старшим розрядом модуля двійкового числа, це сприймається комп’ютером як старший розряд числа. Тоді результат операції множення, коли множене або множник від’ємний, буде хибний і величина похибки залежить від того, яке з двох чисел (або обидва) є від'ємним.
Таким чином, крім операції додавання для отримання добутку необхідна операція зсуву. При цьому з'являється можливість зсувати множене або суму проміжних добутків, що дає підставу для різних методів реалізації операції множення.
Виконання роботи
Розробити алгоритм і написати програму додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді у інструкці ях навчального комп’ютера DeComp
Інформація про вхідні дані:
А
3010
B
4010
N
6010
Блок-схема програми:
Код програми у мнемонічних кодах:
№п/п
Код інструкції
Мнемонічний запис
Коментар
0
0000 0000 0001 1110
Load 30
Перевірка чи число від’ємне
1
1111 1100 0000 0000
RCL
2
1100 0000 0001 0000
JNC 8
Якщо число не від’ємне то перейти на 8-у комірку
3
0000 0000 0001 1110
Load 30
Подання числа у доповняльному коді
4
0111 0000 0000 0000
NOT
5
0010 0000 0011 1100
ADD N
6
0001 0000 0011 0111
Store 55
7
1110 0000 0000 1010
JMP 10
8
0000 0000 0001 1110
LOAD A
Залишаю додатне число без змін
9
0001 0000 0011 0111
Store 55
10
0000 0000 0010 1000
Load B
11
1111 1100 0000 0000
RCL B
Перевірка чи число від*ємне
12
1100 0000 0001 0010
JNC 18
Якщо число додатне то перейти на 16 комірку
13
0000 0000 0010 1000
LOAD B
Подання числа у доповняльному коді
14
0111 0000 0000 0000
NOT
15
0010 0000 0011 1100
Add N
16
0001 0000 0010 1101
Store 45
17
1110 0000 0001 0100
JMP 20
18
0000 0000 0010 1000
Load В
Залишаю додатне число без змін
19
0001 0000 0010 1101
Store 45
20
0000 0000 0011 0111
Load 55
Обчислюю результат
21
0010 0000 0010 1101
Add 45
22
0001 0000 0010 0011
Store 35
23
0000 0000 0010 0011
Load 35
Переводжу результат у прямий код
24
0111 0000 0000 0000
Not
25
0010 000 0011 1100
ADD N
26
0001 0000 0010 0011
Store 35
27
0111 1100 0000 0000
Halt
К
РА
РД
А
РІ
ЛАІ
РО
(ZSC)
1
0000 0001 1110
0000 0000 0000 1100
0000 0000 0000 1101
0000 0000 0001 1110
0000 0000 0001
000
2
0000 0000 0001
1111 1100 0000 0000
0000 0000 0001 1000
1111 1100 0000 0000
0000 0000 0010
000
3
0000 0000 0010
1100 0000 0000 0100
0000 0000 0001 1000
1100 0000 0000 1000
0000 0000 1000
000
4
0000 0001 1110
0000 0000 0001 1110
0000 0000 0000 1100
0000 0000 0001 1110
0000 0000 1001
000
5
0000 0011 0111
0001 0000 0011 0111
0000 0000 0000 1100
0001 0000 0011 0111
0000 0000 1010
000
6
0000 0010 1000
1100 0000 0000 1111
1100 0000 0000 1111
0000 0000 0010 1000
0000 0000 1011
000
7
0000 0000 1011
1111 1100 0000 0000
1000 0000 0001 1110
1111 1100 0000 0000
0000 0000 1100
011
8
0000 0000 1100
1100 0000 0001 0010
1000 0000 0001 1110
1100 0000 0001 0010
0000 0000 1101
011
9
0000 0010 1000
0000 0000 0000 1111
1100 0000 0000 1111
0000 0000 0010 1000
0000 0000 1110
011
10
0000 0000 1110
0111 0000 0000 0000
0011 1111 1111 0000
0111 0000 0000 0000
0000 0000 1111
000
11
0000 0011 1100
0010 0000 0011 1100
1111 1111 1111 0001
0010 0000 0011 1100
0000 0001 0000
010
12
0000 0010 1101
1111 1111 1111 0001
1110 0000 0001 0100
0001 0000 0001 0001
0000 0001 0001
010
13
0000 0001 0001
0000 0000 0001 0000
0000 0000 0000 0010
1110 0000 0001 0100
0000 0001 0100
010
14
0000 0011 0111
0000 0000 0000 1100
0000 0000 0000 1100
0000 0000 0011 0111
0000 0001 0101
010
15
0000 0010 1101
1111 1111 1111 0001
1111 1111 1111 1101
0010 0000 0010 1101
0000 0001 0110
010
16
0000 0010 0011
1111 1111 1111 1101
1111 1111 1111 1101
0001 0000 0010 0011
0000 0001 1000
010
17
0000 0001 0011
1111 1111 1111 1101
1111 1111 1111 1101
0000 0000 0010 0011
0000 0001 1001
000
18
0000 0001 1000
0111 0000 0000 0000
0000 0000 0000 0010
0111 0000 0000 0000
0000 0001 1001
000
19
0000 0011 1100
1100 0000 0000 0011
1100 0000 0000 0011
0010 0000 0011 1100
0000 0001 1010
010
20
0000 0010 0011
1100 0000 0000 0011
1100 0000 0000 0011
0001 0000 0010 0011
0000 0001 1011
010
21
0000 0001 1011
0111 1100 0000 0000
1100 0000 0000 0011
0111 1100 0000 0000
0000 0001 1011
010
Отже в акумуляторі ми отримали число (–3)10 що свідчить що програма написана правильно.
3. Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку.
Блок-схема програми:
Число А зберігаю у 3010 комірці памяті число В у 3110 та у 6410 зберігаю число 1, у 32 комірці початкове значення =0
Код програми
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
0
0000 0000 0001 1110
Load 30
Загрузити число А
1
0010 0000 0010 0000
ADD 32
Додати початкове значення
2
0001 0000 0010 0000
Store 32
Зберегти в 32 комірці
3
0000 0000 0001 1111
Load B
Загрузити число В
4
0011 0000 0100 0000
Sub 64
Відняти 1
5
0001 0000 0001 1111
Store B
Зберегти різницю у 31 комірці
6
1000 0000 0000 0000
JNZ B
Перевірка на 0
7
0000 0000 0010 0000
Load A
Загрузити А
8
0001 0000 0011 1100
Store A
Зберегти А
9
0111 1100 0000 0000
Halt
Зупинити програму
№ кроку
РА
РД
А
РІ
ЛАІ
РО
ZSC
1
0000 0001 1110
0000 0000 0000 0101
0000 0000 0000 0101
0000 0000 0001 1000
0000 0000 0001
000
2
0000 0010 0000
0000 0000 0110 0100
0000 0000 0110 1001
0010 0000 0010 0000
0000 0000 0010
000
3
0000 0010 0000
0000 0000 0110 1001
0000 0000 0110 1001
0001 0000 0010 0000
0000 0000 0011
000
4
0000 0001 1111
0000 0000 0000 1010
0000 0000 0000 1010
0000 0000 0001 1111
0000 0000 0100
000
5
0000 0100 0000
0000 0000 0000 0001
0000 0000 0000 1001
0011 0000 0100 0000
0000 0000 0101
000
6
0000 0001 1111
0000 0000 0000 1001
0000 0000 0000 1001
0001 0000 0001 1111
0000 0000 0110
000
7
0000 0000 0110
1000 0000 0000 0000
0000 0000 0000 1001
1000 0000 0000 0000
0000 0000 0000
000
Повторення циклу n разів приведе до отриманння результату а саме 11 00112 тобто 5010.
Висновок: Під час виконання цієї лабораторної роботи я вивчив подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою. Навчився розробляти алгоритми виконання операції віднімання з використанням обернених, доповнювальних і модифікованих кодів, розробляти алгоритми виконання операції множення додатних і від’ємних двійкових чисел.