звіт лаб6
.docМіністерство науки і освіти України
Технічний коледж національного університету
«Львівська політехніка»
ЗВІТ
з лабораторної роботи №6
З предмету архітектура комп’ютера
Виконав: ст. гр. КІ-21
Кобринович Р. В.
Прийняв:
Чистяк В. І.
Львів - 2019
Мета роботи:
-
Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою.
-
Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою.
-
Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.
Хід виконання роботи
-
Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі:
Знак порядку |
Знак мантиси |
Порядок |
Мантиса |
2 розряди |
2 розряди |
4 розряди |
8 розрядів |
У алгоритмі передбачити аналіз отриманого результату на:
-
переповнення розрядної сітки (порушення нормалізації вліво);
-
наявність порушення нормалізації вправо;
-
від'ємний результат
Передбачити відповідні заходи з корекції результату.
Блок схема алгоритму:
Так
Ні
Перевести
у доповняльний код
Ні
Так
Перевести
у доповняльний код
Додавання
порядків у доповняльному коді
Так
Ні
Так
Ні
Від
порядку числа A
відняти порядок числа В
Ні
Так
Збільшити
порядок числа В
на 1, зсув мантиси вправо
Збільшити
порядок числа А
на 1, зсунути мантису вправо
Ні
Ні
Так
Так
Ні
Так
Перевід
числа у доповняльний код
Ні
Так
Перевід
числа у доповняльний код
Додавання
чисел А
та В
Ні
Так
Зсув
результату вправо, збільшення порядку
на 1
Ні
Так
Перевід
у прямий код
Ні
Зсув
мантиси вліво, зменшення порядку на 1
Так
Після створення алгоритму, я приступаю до написання коду. Перед виконанням програми виконую таку підготовку:
Комірка 010 – число А = 0,11002*1011 → А = (0000 0011 0000 11002)
Комірка 110 – число В = -0,10002*1010 → В = (0011 0010 0000 10002)
Комірка 210 – число (0000 0000 0000 00012) - маска. Допомагає переводити у модифікований доповняльний код мантису.
Комірка 310 – число (1100 0000 0000 00002) - маска .Слугує для визначення знаку мантис А та В.
Комірка 410 – число (0011 0000 0000 00002) - маска ,служить для Слугує для визначення знаку порядків .
Комірка 510 – число (0000 0000 1000 00002) – маска. Допомагає переводити у модифікований доповняльний код порядок.
Комірка 610 – число (0000 0000 1111 11112) – маска. Слугує для відокремлення мантис без знаку.
Комірка 710 – число (1111 1111 0000 00002) – маска. Слугує для відокремлення порядку.
Комірка 810 – число (0000 0000 0000 00002)
Комірка 910 – число (1111 0000 1111 11112) – маска . Слугує для відокремлення знаків і мантиси від порядку.
Комірка 1010 – число (0000 1111 0000 00002) – маска. Слугує для відокремлення порядку без знаку.
Комірка 1110 – число (1100 1111 0000 00002) – маска. Слугує для відокремлення порядку зі знаком.
Комірка 1210 – число (0011 0000 1111 11112) – маска. Слугує для відокремлення мантис зі знаком.
Комірка 1310 – число (0011 1111 1111 11112) – маска. Слугує для відокремлення мантиси із знаком і порядку без знаку зі знаком.
Комірка 1410 – число (0000 1111 1111 11112) – маска. Слугує для відокремлення мантиси і порядку без знаків.
Комірка 1510 – число (0000 0000 0000 00002)
Комірка 1610 – число (0000 0000 0000 00002)
Комірка 1710 – число (0000 0000 0000 00002)
Комірка 1810 – число (0000 0001 0000 00002) маска. Перевіряє чи є порушення нормалізаці вліво
Адреса комірки пам’яті |
Код інструкції (двійковий) |
Мнемонічний формат інструкції |
Коментар інструкцій, що відповідають блокам алгоритму програми |
19 |
0000 0000 0000 0000 |
LOAD 0 |
Перевірка чи порядок числа А від’ємний, якщо так то ми його переводимо в доповняльний код |
20 |
1010 0000 0011 1011 |
AND 9 |
|
21 |
0100 0000 0000 1001 |
STORE 199 |
|
22 |
0001 0000 0110 0110 |
JP 30 |
|
23 |
0000 0000 0000 1000 |
LOAD 0 |
|
24 |
0100 0000 0000 1010 |
AND 10 |
|
25 |
0010 0000 0000 1001 |
ADD 9 |
|
26 |
0111 0000 0000 0000 |
NOT |
|
27 |
0010 0000 0001 0010 |
ADD 18 |
|
28 |
0010 0000 1100 0111 |
ADD 199 |
|
29 |
0001 0000 0000 0000 |
STORE 0 |
|
30 |
0000 0000 0000 0001 |
LOAD 1 |
Перевірка чи порядок числа В від’ємний, якщо так то ми його переводимо в доповняльний код |
31 |
1010 0000 0100 0110 |
JP 41 |
|
32 |
0100 0000 0000 1001 |
AND 9 |
|
33 |
0001 0000 1100 0111 |
STORE 199 |
|
34 |
0000 0000 0000 0001 |
LOAD 1 |
|
35 |
0100 0000 0000 1010 |
AND 10 |
|
36 |
0010 0000 0000 1001 |
ADD 9 |
|
37 |
0111 0000 0000 0000 |
NOT |
|
38 |
0010 0000 0001 0010 |
ADD 18 |
|
39 |
0010 0000 1100 0111 |
ADD 199 |
|
40 |
0001 0000 0000 0001 |
STORE 1 |
|
41 |
0000 0000 0000 0000 |
LOAD 0 |
Додавання порядків у модифікованому доповняльному коді |
42 |
0100 0000 0000 1011 |
AND 11 |
|
43 |
0001 0000 1100 1000 |
STORE 200 |
|
44 |
0000 0000 0000 0001 |
LOAD 1 |
|
45 |
0100 0000 0000 1011 |
AND 11 |
|
46 |
0010 0000 110 1000 |
ADD 200 |
|
47 |
1101 0000 1110 0011 |
JC 198 |
Перевірка, чи відбулось переповнення розрядної сітки, якщо так, то результат втрачено |
48 |
0000 0000 0000 0000 |
LOAD 0 |
Від першого порядку віднімаємо другий порядок |
49 |
0100 0000 000 1011 |
AND 11 |
|
50 |
0001 0000 1100 1001 |
STOR 201 |
|
51 |
0000 0000 0000 0001 |
LOAD 1 |
|
52 |
0100 0000 0000 1011 |
AND 11 |
|
53 |
0011 0000 1100 1001 |
SUB 201 |
|
54 |
1001 0000 0111 0011 |
JZ 86 |
|
55 |
1101 0000 0110 0100 |
JC 71 |
|
56 |
0000 0000 0000 0001 |
LOAD 1 |
Якщо результат від’ємний, то збільшуємо порядок числа В на 1, та робимо зсув мантиси вправо |
57 |
0100 0000 0000 1011 |
AND 11 |
|
58 |
0010 0000 0001 0010 |
ADD 18 |
|
59 |
0001 0000 1100 1010 |
STORE 202 |
|
60 |
0000 0000 0000 0001 |
LOAD 1 |
|
61 |
0100 0000 0000 0100 |
AND 4 |
|
62 |
0001 0000 1100 1011 |
STORE 203 |
|
63 |
0000 0000 0000 0001 |
LOAD 1 |
|
64 |
0100 0000 0000 0110 |
AND 6 |
|
65 |
1111 0010 0000 0000 |
LSR |
|
66 |
0010 0000 1100 1010 |
ADD 202 |
|
67 |
0010 0000 1100 1011 |
ADD 203 |
|
68 |
0001 0000 0000 0001 |
STORE 1 |
|
69 |
0011 0000 0000 0001 |
SUB 1 |
|
70 |
1001 0000 0101 0000 |
JZ 61 |
|
71 |
0000 0000 0000 0100 |
LOAD 8 |
Якщо результат додатній, то збільшуємо порядок числа А на 1, та робимо зсув мантиси вправо |
72 |
0100 0000 0000 1011 |
AND 11 |
|
73 |
0010 0000 0001 0010 |
ADD 18 |
|
74 |
0001 0000 1100 1010 |
STORE 202 |
|
75 |
0000 0000 0000 0000 |
LOAD 0 |
|
76 |
0100 0000 0000 0100 |
AND 4 |
|
77 |
0001 0000 1100 1011 |
STORE 203 |
|
78 |
0000 0000 0000 0000 |
LOAD 0 |
|
79 |
0100 0000 0000 0110 |
AND 6 |
|
80 |
1111 0010 0000 0000 |
LSR |
|
81 |
0010 0000 1100 1010 |
ADD 202 |
|
82 |
0010 0000 1100 1011 |
ADD 203 |
|
83 |
0001 0000 0000 0000 |
STORE 0 |
|
84 |
0011 0000 0000 0000 |
SUB 0 |
|
85 |
1001 0000 0100 1001 |
JZ 48 |
|
86 |
0000 0000 0000 1000 |
LOAD 0 |
Перевірка чи число А від’ємне, якщо так, то перевід числа у модифікований доповняльний код |
87 |
1111 0000 0000 0000 |
LSL |
|
88 |
1111 0000 0000 0000 |
LSL |
|
89 |
1010 0000 0111 1111 |
JP 98 |
|
90 |
0000 0000 0000 1000 |
LOAD 0 |
|
91 |
0100 0000 0000 0111 |
AND 7 |
|
92 |
0001 0000 1100 1100 |
STORE 204 |
|
93 |
0000 0000 0000 0000 |
LOAD 0 |
|
94 |
0100 0000 0000 0000 |
AND 6 |
|
95 |
0111 0000 0000 0000 |
NOT |
|
96 |
0010 0000 0000 0010 |
ADD 2 |
|
97 |
0010 0000 1100 1100 |
ADD 204 |
|
98 |
0000 0000 0000 0001 |
LOAD 1 |
Перевірка чи число В від’ємне, якщо так, то перевід числа у модифікований доповняльний код |
99 |
1111 0000 0000 0000 |
LSL |
|
100 |
1111 0000 0000 0000 |
LSL |
|
101 |
1010 0000 1000 1101 |
JP 105 |
|
102 |
0000 0000 0000 0001 |
LOAD 1 |
|
103 |
0100 0000 0000 0111 |
AND 7 |
|
104 |
0001 0000 1100 1100 |
STORE 204 |
|
105 |
0000 0000 0000 0001 |
LOAD 1 |
|
106 |
0100 0000 0000 0110 |
AND 6 |
|
107 |
0111 0000 0000 0000 |
NOT |
|
108 |
0010 0000 0000 0010 |
ADD 2 |
|
109 |
0010 0000 1100 1100 |
ADD 204 |
|
110 |
0100 0000 0000 1100 |
AND 12 |
|
111 |
0001 0000 1100 1101 |
STORE 205 |
|
112 |
0000 0000 0000 0000 |
LOAD 0 |
Додавання чисел А та В у модифікованому доповняльному коді |
113 |
0100 0000 0000 1100 |
AND 12 |
|
114 |
1111 0000 0000 0000 |
LSL |
|
115 |
1111 0000 0000 0000 |
LSL |
|
116 |
0001 0000 1100 1110 |
STORE 109 |
|
117 |
0100 0000 0000 0011 |
AND 3 |
|
118 |
0001 0000 1100 1111 |
STORE 207 |
|
119 |
0000 0000 1100 1110 |
LOAD 206 |
|
120 |
0100 0000 0000 1101 |
AND 13 |
|
121 |
1111 0000 0000 0000 |
LSL |
|
122 |
1111 0000 0000 0000 |
LSL |
|
123 |
1111 0000 0000 0000 |
LSL |
|
124 |
1111 0000 0000 0000 |
LSL |
|
125 |
0010 0000 1100 1111 |
ADD 207 |
|
126 |
0001 0000 1101 0000 |
STORE 208 |
|
127 |
0000 0000 0000 0001 |
LOAD 1 |
|
128 |
0100 0000 0000 1100 |
AND 12 |
|
129 |
1111 0000 0000 0000 |
LSL |
|
130 |
1111 0000 0000 0000 |
LSL |
|
131 |
0001 0000 110 1110 |
STORE 206 |
|
132 |
0100 0000 0000 0011 |
AND 3 |
|
133 |
0001 0000 1100 1111 |
STORE 207 |
|
134 |
0000 0000 1100 1110 |
LOAD 206 |
|
135 |
0100 0000 0000 1101 |
AND 13 |
|
136 |
1111 0000 0000 0000 |
LSL |
|
137 |
1111 0000 0000 0000 |
LSL |
|
138 |
1111 0000 0000 0000 |
LSL |
|
139 |
1111 0000 0000 0000 |
LSL |
|
140 |
0010 0000 0110 1110 |
ADD 207 |
|
141 |
0010 0000 1101 0000 |
ADD 208 |
|
142 |
1100 0000 1011 1111 |
JNC 149 |
Перевірка чи відбулося переповнення розрядної сітки. |
143 |
1111 0010 0000 0000 |
LSR |
|
144 |
1111 0010 0000 0000 |
LSR |
|
145 |
1111 0010 0000 0000 |
LSR |
|
146 |
0001 0000 1101 0001 |
STORE 209 |
|
147 |
0100 0000 0000 0100 |
AND 4 |
|
148 |
0001 0000 1101 0010 |
STORE 210 |
|
149 |
0000 0000 1101 0001 |
LOAD 209 |
Якщо так, то зсув результату вправо, збільшення порядку на 1. |
150 |
0100 0000 0000 1110 |
AND 14 |
|
151 |
1111 0010 0000 0000 |
LSR |
|
152 |
1111 0010 0000 0000 |
LSR |
|
153 |
1111 0010 0000 0000 |
LSR |
|
154 |
1111 0010 0000 0000 |
LSR |
|
155 |
0010 0000 1101 0010 |
ADD 210 |
|
156 |
0001 0000 1101 0010 |
STORE 210 |
|
157 |
0000 0000 1101 0000 |
LOAD 208 |
|
158 |
0100 0000 0000 0011 |
AND 3 |
|
159 |
0010 0000 0000 1010 |
ADD 10 |
|
160 |
0010 0000 1101 0010 |
ADD 210 |
|
161 |
0001 0000 1101 0010 |
STORE 210 |
|
162 |
0000 0000 1101 0010 |
LOAD 210 |
Перевірка чи результат від’ємний, якщо так то перевід у прямий код. |
163 |
1111 1000 0000 0000 |
ROL |
|
164 |
1111 1000 0000 0000 |
ROL |
|
165 |
1101 0000 1100 1101 |
JS 205 |
|
166 |
0001 0000 1101 0011 |
STORE 211 |
|
167 |
0100 0000 0000 0111 |
AND 7 |
|
168 |
0001 0000 1101 0100 |
STORE 212 |
|
169 |
0000 0000 1101 0011 |
LOAD 211 |
|
170 |
0100 0000 0000 0110 |
AND 6 |
|
171 |
0100 0000 0000 0111 |
ADD7 |
|
172 |
0111 0000 0000 0000 |
NOT |
|
173 |
0100 0000 0000 0010 |
ADD 2 |
|
174 |
0010 0000 1101 0010 |
ADD 212 |
|
175 |
0001 0000 0000 1111 |
STORE 15 |
|
176 |
0000 0000 0000 1111 |
LOAD 15 |
Перевірка чи нормалізоване число. |
177 |
0100 0000 0000 0101 |
AND 5 |
|
178 |
0011 0000 0000 0101 |
SUB 5 |
|
179 |
1001 0000 1110 0011 |
JZ 187 |
|
180 |
0000 0000 0000 0101 |
LOAD 5 |
|
181 |
0100 0000 0000 0110 |
AND 6 |
|
182 |
1111 0000 0000 0000 |
LSL |
|
183 |
0001 0000 0001 000 |
STORE 16 |
|
184 |
0000 0000 001 0001 |
LOAD 17 |
|
185 |
0010 0000 0001 0010 |
ADD 18 |
|
186 |
0001 0000 0001 0001 |
STORE 17 |
|
187 |
0000 0000 0001 0000 |
LOAD 16 |
|
188 |
0100 0000 0000 0101 |
AND 5 |
|
189 |
0011 0000 0000 0101 |
SUB 5 |
|
190 |
1001 0000 1101 1110 |
JZ 193 |
|
191 |
0000 0000 0001 0000 |
LOAD 16 |
Якщо ні, то зсув мантиси вліво, зменшення порядку на 1. |
192 |
1010 0000 1101 0011 |
JP 182 |
|
193 |
0000 0000 0000 1111 |
LOAD 15 |
|
194 |
0100 0000 0000 0111 |
AND 7 |
|
195 |
0010 0000 0001 0000 |
ADD 16 |
|
196 |
0011 0000 0001 0010 |
SUB 18 |
|
197 |
0001 0000 0000 1111 |
STORE 15 |
|
198 |
0111 1100 0000 0000 |
HALT |
Зупинка процесора |