
2. Порядок роботи:
-
Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі:
Знак порядку |
Знак мантиси |
Порядок |
Мантиса |
2 розряди |
2 розряди |
4 розряди |
8 розрядів |
У алгоритмі передбачити аналіз отриманого результату на:
-
переповнення розрядної сітки (порушення нормалізації вліво);
-
наявність порушення нормалізації вправо;
-
від'ємний результат
Передбачити відповідні заходи з корекції результату
Виконання:
Інформація про вхідні дані:
-
Адреса комірки
Дані в двійковому коді
Позначення змінної в алгоритмі
Інформація про вхідні дані та призначення комірок, що використовуються.
300
1100 0101 1101 0000
А
A перший доданок. А=-0,1101101(У декомпі А=1100 0101, 1101 0000) знаходиться у 300-й комірці
301
0000 0011 1100 0000
В
Число В – другий доданок. В=0,1100011 (У деком пі В=0000 0011, 1100 0000) знаходиться у 301-й комірці
302
1100 0000 0000 0000
М1
Число М1 – маска. Слугує для визначення знаку мантис А та В.
303
0011 0000 0000 0000
М2
Число М2 – маска. Слугує для визначення знаку порядків А та В.
304
1100 0000 1111 1111
М3
Число М3 – маска. Слугує для відокремлення мантис А та В зі знаком.
305
0011 1111 0000 0000
М4
Число М4 – маска. Слугує для відокремлення порядку А і В зі знаком
306
0000 1111 0000 0000
М5
Число М5 – маска. Слугує для відокремлення порядку без знаку
307
0000 0001 0000 0000
М6
Число М6 – маска. Допомагає переводити у модифікований доповняльний код порядок
308
0000 0000 0000 0001
М7
Число М7 – маска. Допомагає переводити у модифікований доповняльний код мантису
309
0000 0000 1000 0000
М8
Число М7 – маска. Перевіряє чи є порушення нормалізаці вліво
310
0000 0000 0000 0000
REZ
Результат додавання А і В
311
0000 0000 0000 0000
MA
Мантиса А
312
0000 0000 0000 0000
MB
Мантиса В
313
0000 0000 0000 0000
PA
Порядок А
314
0000 0000 0000 0000
PB
Порядок В
315
0000 0000 0000 0000
PAM
Порядок А у доп.мод коді
316
0000 0000 0000 0000
PBM
Порядок В у доп.мод коді
317
0000 0000 0000 0000
SPP
Різниця порядків
318
0000 0000 0000 0000
M
Проміжне значення мантиси
319
0000 0000 0000 0000
MM
Остаточне Значення мантии
320
0000 0000 0000 0000
P
Остаточне значення порядку REZ
Код програми:
-
дреса
комірки пам’яті
Код інструкції
(двійковий)
Мнемонічний формат
інструкції
Коментар
0
0000 0001 0010 1100
LOAD
300
Виділення мантиси А зі знаком (МА)
1
0100 0001 0011 0000
AND
304
2
0001 0001 0011 0111
STORE
311
3
0000 0001 0010 1101
LOAD
301
Виділення мантиси В зі знаком (МВ)
4
0100 0001 0011 0000
AND
304
5
0001 0001 0011 1000
STORE
312
6
0000 0001 0010 1100
LOAD
300
Виділення порядку А зі знаком (РА)
7
0100 0001 0011 0001
AND
305
8
0001 0001 0011 1001
STORE
313
9
0000 0001 0010 1101
LOAD
301
Виділення порядку В зі знаком (РВ)
10
0100 0001 0011 0001
AND
305
11
0001 0001 0011 1010
STORE
314
12
0000 0001 0011 1001
LOAD
313
Перевірка знаку порядку А. Якщо «+»(Z=1) то перехід на 21 ні программа виконується дальше.
13
0100 0001 0010 1111
AND
303
14
1001 0000 0001 0101
JZ
21
15
0000 0001 0011 1001
LOAD
313
Переведення РА у доп.мод код.
Запис РАМ. Перехід на 23.
16
0111 0000 0000 0000
NOT
17
0101 0001 0010 1111
OR
303
18
0100 0001 0011 0001
AND
305
19
0001 0001 0011 1011
STORE
315
20
1110 0000 0001 0111
JMP
23
21
0000 0001 0011 1001
LOAD
313
Завантаження РА, запис РАМ.(РА=РАМ)
22
0001 0001 0011 1011
STORE
315
23
0000 0001 0010 1101
LOAD
301
Перевірка знаку порядку числа В. Якщо «+»(Z=1) – перехід на 29, «-» - програма виконується дальше.
24
0100 0001 0010 1111
AND
303
25
1001 0000 0001 1101
JZ
29
26
0000 0001 0011 1011
LOAD
315
Знаходження різниці порядків SPP=PA+(-PB). Перехід на 37
27
0010 0001 0011 1010
ADD
314
28
1110 0000 0010 0100
JMP
37
29
0000 0001 0011 1010
LOAD
314
Переведення РВ у доп.мод код.
Запис РВМ.
30
0111 0000 0000 0000
NOT
31
0010 0001 0011 0011
ADD
307
32
0101 0001 0010 1111
OR
303
33
0100 0001 0011 0001
AND
305
34
0001 0001 0011 1100
STORE
316
35
0000 0001 0011 1011
LOAD
315
SPP=PAM+PBM
36
0010 0001 0011 1100
ADD
316
37
0001 0001 0011 1101
STORE
317
Запис різниці порядків (SPP)
38
0000 0001 0011 1101
LOAD
317
Перевірка знаку SPP. Якщо «+»(Z=1)- перехід на 63, «-» - програма виконується дальше.
39
0100 0001 0010 1111
AND
303
40
1001 0000 0011 1111
JZ
63
41
0000 0001 0011 1010
LOAD
314
Запис проміжного порядку суми
42
0001 0001 0010 1101
STORE
301
43
0000 0001 0011 1101
LOAD
317
Встановлення кількості зсувів мантиси А (МА)
44
0100 0001 0011 0010
AND
306
45
0001 0001 0011 1101
STORE
317
Запис кількості зсувів МА
46
0000 0001 0011 0111
LOAD
311
Зсув вправо МА. Запис нової МА.
47
1111 1010 0000 0000
ROR
48
0100 0001 0011 0000
AND
304
49
0001 0001 0011 0111
STORE
311
50
0000 0001 0010 1100
LOAD
300
Визначення знаку МА. Якщо «+»(Z=1)- перехід на 56, «-» - програма виконується дальше.
51
0100 0001 0010 1110
AND
302
52
1001 0000 0011 1000
JZ
56
53
0000 0001 0011 0111
LOAD
311
Встановлення знаку МА
54
0101 0001 0010 1110
OR
302
55
0001 0001 0011 0111
STORE
311
56
0000 0001 0011 1101
LOAD
317
Зменшення лічильника зсувів
57
0011 0001 0011 0011
SUB
307
58
1000 0000 0010 1101
JNZ
45
Перевірка якщо Z=0 перехід на 45, якщо Z=1 програма виконується дальше.
59
1110 0000 0110 0001
JMP
97
Перех на
60
0000 0001 0011 1101
LOAD
317
Перевірка чи SPP=0 чи ні
61
0100 0001 0011 0001
AND
305
62
1001 0000 0110 0001
JZ
97
63
0000 0001 0011 1001
LOAD
313
Встановлення проміжного порядку(Р) суми
64
0001 0001 0100 0000
STORE
320
65
0000 0001 0011 1101
LOAD
317
Встановлення кількості зсувів мантиси В (МВ)
66
0100 0001 0011 0010
AND
306
67
0001 0001 0011 1101
STORE
317
68
0000 0001 0011 1000
LOAD
312
Цикл зсуву мантиси числа В. МВ
69
1111 1010 0000 0000
ROR
70
0100 0001 0011 0000
AND
304
71
0001 0001 0011 1000
STORE
312
72
0000 0001 0010 1101
LOAD
301
73
0100 0001 0010 1110
AND
302
74
1001 0000 0100 1110
JZ
78
75
0000 0001 0011 1000
LOAD
312
76
0101 0001 0010 1110
OR
302
77
0001 0001 0011 1000
STORE
312
78
0000 0001 0011 1101
LOAD
317
79
0011 0001 0011 0011
SUB
307
80
1000 0000 0100 0011
JNZ
67
81
0000 0001 0011 0111
LOAD
311
Визначення знаку МА. Якщо «+»(Z=1)- перехід на 89, «-» - програма виконується дальше.
82
0100 0001 0010 1110
AND
302
83
1001 0000 0101 1001
JZ
89
84
0000 0001 0011 0111
LOAD
311
Переведення РА у доп.мод код.
Запис РАМ.
85
0111 0000 0000 0000
NOT
86
0010 0001 0011 0100
ADD
308
87
0101 0001 0010 1110
OR
302
88
0001 0001 0011 0111
STORE
311
89
0000 0001 0011 1000
LOAD
312
Визначення знаку МА. Якщо «+»(Z=1)- перехід на 97, «-» - програма виконується дальше.
90
0100 0001 0010 1110
AND
302
91
1001 0000 0110 0001
JZ
97
92
0000 0001 0011 1000
LOAD
312
Переведення РВ у доп.мод код.
Запис РВМ.
93
0111 0000 0000 0000
NOT
94
0010 0001 0011 0100
ADD
308
95
0101 0001 0010 1110
OR
302
96
0001 0001 0011 1000
STORE
312
97
0000 0001 0011 0111
LOAD
311
Додавання мантис запис результату (М).
98
0010 0001 0011 1000
ADD
312
99
0001 0001 0011 1110
STORE
318
100
0100 0001 0010 1110
AND
302
Визначення знаку М
101
1001 0000 0110 1011
JZ
107
102
0000 0001 0011 1110
LOAD
318
Переведення М у доп.мод код.
Запис М.
103
0111 0000 0000 0000
NOT
104
0010 0001 0011 0100
ADD
308
105
0101 0001 0010 1110
OR
302
106
0001 0001 0011 1110
STORE
318
107
0000 0001 0011 1110
LOAD
318
Перевірка наявності порушення нормалізації вправо. Якщо відсутнє (Z=1)- перехід на 143, присутнє - програма виконується дальше.
108
0100 0001 0011 0011
AND
307
109
1001 0000 1000 1111
JZ
143
110
0000 0001 0011 1110
LOAD
318
Зсув мантиси вправо(виправлення порушення нормалізації вліво) Запис ММ.
111
1111 1010 0000 0000
ROR
112
0100 0001 0011 0000
AND
304
113
0001 0001 0011 1111
STORE
319
114
0000 0001 0011 1110
LOAD
318
Визначення знаку М. Якщо «+»(Z=1)- перехід на 120, «-» - програма виконується дальше.
115
0100 0001 0010 1110
AND
302
116
1001 0000 0111 1000
JZ
120
117
0000 0001 0011 1111
LOAD
319
Встановлення знаку «-» Числу ММ.
118
0101 0001 0010 1110
OR
302
119
0001 0001 0011 1111
STORE
319
120
0000 0001 0100 0000
LOAD
320
Визначення знаку Р. Якщо «+»(Z=1)- перехід на 139, «-» - програма виконується дальше.
121
0100 0001 0010 1111
AND
303
122
1001 0000 1000 1011
JZ
139
123
0000 0001 0100 0000
LOAD
320
Переведення Р у доп.мод код.
Запис Р.
124
0111 0000 0000 0000
NOT
125
0010 0001 0011 0011
ADD
307
126
0100 0001 0011 0001
AND
305
127
0101 0001 0010 1111
OR
303
128
0010 0001 0011 0011
ADD
307
129
0001 0001 0100 0000
STORE
320
130
0100 0001 0010 1111
AND
303
Визначення знаку Р. Якщо «+»(Z=1)- перехід на 138, «-» - програма виконується дальше.
131
1001 0000 1000 1010
JZ
138
132
0000 0001 0100 0000
LOAD
320
Переведення Р у прямий модиф. код.
Запис Р
133
0111 0000 0000 0000
NOT
134
0010 0001 0011 0011
ADD
307
135
0100 0001 0011 0001
AND
305
136
0101 0001 0010 1111
OR
303
137
0001 0001 0100 0000
STORE
320
138
1110 0000 1011 0111
JMP
183
Перехід на 183
139
0000 0001 0100 0000
LOAD
320
Збільшення порядку Р+1
140
0010 0001 0011 0011
ADD
307
141
0001 0001 0100 0000
STORE
320
142
1110 0000 1011 0111
JMP
183
Перехід на 183
143
0000 0001 0011 1110
LOAD
318
Організація циклу у якому виправляється порушення нормалізація вправо з одночасним зменшенням порядку (Р) суми.
144
0100 0001 0011 0101
AND
309
145
1000 0000 1011 0101
JNZ
181
146
0000 0001 0011 1110
LOAD
318
147
1111 0100 0000 0000
ASL
148
0001 0001 0011 1111
STORE
319
149
0000 0001 0011 1110
LOAD
318
150
0100 0001 0010 1110
AND
302
151
1001 0000 1001 1101
JZ
157
152
0000 0001 0011 1111
LOAD
319
153
0100 0001 0011 0000
AND
304
154
0101 0001 0010 1110
OR
302
155
0001 0001 0011 1110
STORE
318
156
1110 0000 1010 0000
JMP
160
157
0000 0001 0011 1111
LOAD
319
158
0100 0001 0011 0000
AND
304
159
0001 0001 0011 1110
STORE
318
160
0000 0001 0100 0000
LOAD
320
161
0100 0001 0010 1111
AND
303
162
1001 0000 1010 1001
JZ
169
163
0000 0001 0100 0000
LOAD
320
164
0111 0000 0000 0000
NOT
165
0010 0001 0011 0011
ADD
307
166
0100 0001 0011 0001
AND
305
167
0101 0001 0010 1111
OR
303
168
0001 0001 0100 0000
STORE
320
169
0000 0001 0100 0000
LOAD
320
170
0010 0001 0011 0001
ADD
305
171
0001 0001 0100 0000
STORE
320
172
0100 0001 0010 1111
AND
303
173
1001 0000 1011 0100
JZ
180
174
0000 0001 0100 0000
LOAD
320
175
0111 0000 0000 0000
NOT
176
0010 0001 0011 0011
ADD
307
177
0100 0001 0011 0001
AND
305
178
0101 0001 0010 1111
OR
303
179
0001 0001 0100 0000
STORE
320
180
1110 0000 1000 1111
JMP
143
181
0000 0001 0011 1110
LOAD
318
М=ММ
182
0001 0001 0011 1111
STORE
319
183
0000 0001 0011 1111
LOAD
319
Формування результату
184
0010 0001 0100 0000
ADD
320
185
0001 0001 0011 0110
STORE
310
186
0111 1100 0000 0000
HALT
Зупинка виконання програми
.
Висновок: на цій лабораторні роботі я ознайомився з поданням чисел у нормальній формі засвоїв порядок нормалізації чисел з рухомою комою, ознайомився з поняттям “характеристика” для чисел з рухомою комою, вивчив правила додавання (віднімання) двійкових чисел з рухомою комою, розробив алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'ютера - симулятора DeComp.