Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи №6
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: Дослідження виконання арифметичних операцій у форматі з рухомою комою»
Тема: Дослідження виконання арифметичних операцій у форматі з рухомою комою.
Мета роботи:
Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою.
Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою.
Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.
Теоретична частина
1.Подання чисел з рухомою комою
У форматі з рухомою комою, який звичайно називають нормальною формою запису, числа записуються наступним чином:
A = ( М * d ( Р ,
де p – ціле число, яке називається порядком числа А;
d – основа системи числення;
М – мантиса числа А (звичайно |M| < 1).
Числа, що записані у такій формі називаються нормалізованими. Іншими словами, у нормалізованих числах у мантисі першою цифрою перед комою стоїть 0, а перша цифра після коми – це цифра відмінна від нуля. Для двійкової системи числення вона дорівнює 1.
Таким чином, мантису розглядають як число менше одиниці, а порядок – як ціле число.
Операція нормалізації виконується шляхом зсуву мантиси вліво із зменшенням порядку, або вправо із збільшення порядку на величину, яка дорівнює кількості розрядів, на яку була зсунута мантиса.
Нормалізоване подання чисел дозволяє зберігати у розрядній сітці комп’ютера більшу кількість цифр, що мають значення, тому точність обчислень підвищується. Зазвичай у комп’ютерах нормалізація здійснюється автоматично як при вводі чисел, так і у процесі обчислень (після виконання чергової операції). При цьому мантиса зсувається ліворуч на необхідну кількість розрядів і виконується відповідне зменшення порядку, тобто виконується “нормалізація вліво”.
При виконанні операції додавання або віднімання нормалізованих чисел з різними порядками одно з них “денормалізується” до вирівнювання порядків, а сума (або різниця) знову нормалізується.
1.2. Правила додавання (віднімання) двійкових чисел з рухомою комою
Додавання і віднімання чисел з рухомою комою виконується у декілька етапів.
Вирівнювання порядків;
Як відомо, реальна величина (вага) Ni одиниці і-го розряду мантиси визначається не тільки позицією даного розряду, але й порядком р числа, тобто Ni = d p-і, де і – номер позиції, рахуючи вправо від коми.
2.Додавання мантис;
Додавання мантис із вирівненими порядками виконується згідно правил додавання чисел з фіксованою комою. Зазвичай використовується модифікований доповнювальний код.
3. Переведення результату додавання мантис у прямий код.
У результаті додавання мантис може виникнути один з трьох випадків:
а). Виникає переповнення розрядної сітки комп’ютера (порушення нормалізації вправо). Ознакою переповнення є невизначенність знакових розрядів, коли результат неможливо віднести ні до додатних, ні до від’ємних чисел (код 01 або 10). У цьому випадку необхідно виконати корекцію результату додавання мантис шляхом його зсуву вправо на один розряд і одночасного збільшення порядку на 1.
4. Нормалізація результату.
Остаточний результат додавання двох чисел з рухомою комою: сума мантис – це мантиса результату, порядок результату – вирівняний порядок доданків, із врахуванням всіх проведених корекцій
2.Хід роботи:
Розробили алгоритм і написали програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp.
Блок-схема написаної програми
так
ні
так
ні
так
ні
так
ні
ні
так
ні
так
ні
так
ні
так
Попередньо в такі комірки заношу такі дані:
Номер комірки
Значення
Коментар
110
Значення заноситься користувачем
Перше число
111
Значення заноситься користувачем
Друге число
112
0000 0000 0000 1111
Маска для виділення порядку
113
0000 0000 0000 0000
Порядок першого числа
114
0000 0000 0000 0000
Порядок другого числа
115
0000 0000 0011 1111
Маска для визначення знаку порядку
116
0000 0000 0000 0001
Одиниця
117
0000 0000 0000 0000
Різниця порядків
118
0000 0000 0000 0000
Лічильник для визначення, яке число має більший порядок
119
0000 0000 0000 0000
Для проміжних обчислень
120
1111 1111 1111 0000
Маска для виділення числа без порядку
121
0000 0000 0000 0000
Перша мантиса
122
0000 0000 0000 0000
Друга мантиса
123
0000 0000 0000 0000
Порядок результату
124
1100 0000 0000 0000
Маска для обробітку знаків
125
0000 0000 0000 0000
Результат додавання мантис
126
0000 0000 0000 0000
Для проміжних обчислень
Код програми:
№п/п
Адреса комірки
Код інструкції
Мнемонічний запис
Коментар
1
0
0000 0000 0110 1110
Load 110
Визначення порядку 1-го числа
2
1
0100 0000 0111 0000
And 112
3
2
0001 0000 0111 0001
Store 113
4
3
0000 0000 0110 1111
Load 111
Визначення порядку 2-го числа
5
4
0100 0000 0111 0000
And 112
6
5
0001 0000 0111 0010
Store 114
7
6
0111 0000 0000 0000
NOT
Визначення різниці порядків чисел
8
7
0010 0000 0111 0100
Add 116
9
8
0100 0000 0111 0011
And 115
10
9
0010 0000 0111 0001
Add 113
11
10
0001 0000 0111 0101
Store 117
12
11
1111 0010 0000 0000
LSR
Перевірка чи від’ємна різниця між порядками
13
12
1111 0010 0000 0000
LSR
14
13
1111 0010 0000 0000
LSR
15
14
1111 0010 0000 0000
LSR
16
15
1111 1110 0000 0000
RCR
17
16
1100 0000 0001 1000
JNC 24
Якщо не від’ємна, то перейти на 24-у комірку
18
17
0000 0000 0111 0101
Load 117
Переведенння від’ємного числа в прямий код
19
18
0111 0000 0000 0000
NOT
20
19
0010 0000 0111 0100
Add 116
21
20
0001 0000 0111 0101
Store 117
22
21
0000 0000 0111 0110
Load 118
Встановлення в лічильнику одиниці
23
22
0010 0000 0111 0100
Add 116
24
23
0001 0000 0111 0110
Store 118
25
24
0000 0000 0111 0101
Load 117
Використання проміжної комірки, щоб не втратити результат
26
25
0001 0000 0111 0111
Store 119
27
26
0000 0000 0110 1110
Load 110
Виділення першого числа без порядку
28
27
0100 0000 0111 1000
And 120
29
28
0001 0000 0111 1001
Store 121
30
29
1111 1100 0000 0000
RCL
Перевірка чи 1-е число від’ємне
31
30
1100 0000 0010 0100
JNC 36
32
31
0000 0000 0111 1001
Load 121
Переведення числа в модифікований доповняльний код
33
32
0111 0000 0000 0000
NOT
34
33
0010 0000 0111 0100
Add 116
35
34
0101 0000 0111 1100
OR 124
36
35
0001 0000 0111 1001
Store 121
37
36
0000 0000 0110 1111
Load 111
Виділення другого числа без порядку
38
37
0100 0000 0111 1000
And 120
39
38
0001 0000 0111 1010
Store 122
40
39
1111 1100 0000 0000
RCL
Перевірка чи друге число від’ємне
41
40
1100 0000 0010 1110
JNC 46
42
41
0000 0000 0111 1010
Load 122
Переведення числа в модифікований доповняльний код
43
42
0111 0000 0000 0000
NOT
44
43
0010 0000 0111 0100
Add 116
45
44
0101 0000 0111 1100
OR 124
46
45
0001 0000 0111 1010
Store 122
47
46
0000 0000 0111 0110
Load 118
Перевірка лічильника
48
47
1111 1110 0000 0000
RCR
49
48
1100 0000 0011 1010
JNC 58
50
49
0000 0000 0111 1010
Load 122
Денормалізація мантиси 2-го числа
51
50
1111 0010 0000 0000
LSR
52
51
0001 0000 0111 1010
Store 122
53
52
0000 0000 0111 0001
Load 113
54
53
0001 0000 0111 1011
Store 123
55
54
0000 0000 0111 0101
Load 117
Зміна параметрів циклу
56
55
0011 0000 0111 0100
Sub 116
57
56
0001 0000 0111 0101
Store 117
58
57
1000 0000 0011 0001
JNZ 49
Керування циклом
59
58
0000 0000 0111 1001
Load 121
Денормалізація 1-го мантиси числа
60
59
1111 0010 0000 0000
LSR
61
60
0001 0000 0111 1001
Store 123
62
61
0000 0000 0111 0101
Load 117
Зміна параметрів циклу
63
62
0011 0000 0111 0100
Sub 116
64
63
0001 0000 0111 0101
Store 117
65
64
1000 0000 0011 1010
JNZ 58
Керування циклом
66
65
0000 0000 0111 1010
Load 122
Формування результату
67
66
0001 0000 0111 1001
Add 121
68
67
0001 0000 0111 1101
Store 125
69
68
0100 0000 0111 1000
AND 120
Виділення результату без розрядів порядку
70
69
0001 0000 0111 1110
Store 126
71
70
0000 0000 0111 1101
Load 125
Виділення знаку результату
72
71
0100 0000 0111 1100
AND 124
73
72
0001 0000 0111 1111
Store 127
74
73
0000 0000 0111 1110
Load 126
Підготовка до перевірки на денормалізацію
75
74
1111 0000 0000 0000
LSL
76
75
1111 0000 0000 0000
LSL
77
76
0001 0000 0111 1110
Store 126
78
77
0000 0000 0111 1110
Load 126
Перевірка старшого розряду результату
79
78
1111 1100 0000 0000
RCL
80
79
0001 0000 0111 1110
Store 126
81
80
1101 0000 0101 1010
JC 90
Якщо не денормалізована, перейти на наступну перевірку
82
81
0000 0000 0111 1101
Load 125
Нормалізація мантиси
83
82
1111 0000 0000 0000
LSL
84
83
0001 0000 0111 1101
Store 125
85
84
0000 0000 0111 1011
Load 123
Зміна порядку числа
86
85
0011 0000 0111 0100
Sub 116
87
86
0001 0000 0111 1011
Store 123
88
87
0000 0000 0111 1110
Load 126
Перевірка наступного розряду
89
88
1111 1100 0000 0000
RCL
90
89
1100 0000 0100 1101
JNC 77
91
90
0000 0000 0111 1111
Load 127
Перевірка на переповнення розрядної сітки
92
91
1111 1100 0000 0000
RCL
93
92
0001 0000 0111 1111
Store 127
94
93
1100 0000 0110 0101
JNC 101
Якщо С = 0, перейти на 101-у комірку
95
94
0000 0000 0111 1111
Load 127
Перевірка наступного розряду
96
95
1111 1100 0000 0000
RCL
97
96
1101 0000 0110 1011
JC 107
Якщо переповнення нема, вийти з програми
98
97
0000 0000 0111 1101
Load 127
Якщо було виявлено переповнення, то коректувати результат
99
98
1111 0010 0000 0000
LSR
100
99
1111 0010 0000 0000
LSR
101
100
0001 0000 0111 1101
Store 125
102
101
0000 0000 0111 1111
Load 127
Перевірка знакового розряду
103
102
1111 1100 0000 0000
RCL
104
103
1100 0000 0110 1011
JNC 107
Якщо переповнення нема, вийти з програми
105
104
0000 0000 0111 1101
Load 125
Якщо було виявлено переповнення, то коректувати результат
106
105
1111 0010 0000 0000
LSR
107
106
0001 0000 0111 1101
Store 125
108
107
0111 1100 0000 0000
HALT
Зупинка виконання програми
Висновки: На даній лабораторній роботі
-ознайомилася з поданням чисел у нормальній формі. Засвоїла порядок нормалізації чисел з рухомою комою. Ознайомилася з поняттям “характеристика” для чисел з рухомою комою.
-вивчила правила додавання (віднімання) двійкових чисел з рухомою комою.
-розробила алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.