- •Теоретичні відомості
- •1.1. Додавання і віднімання двійкових чисел з фіксованою комою
- •1.2. Додавання двійкових чисел у модифікованому доповняльному коді
- •1.3. Додавання двійкових чисел у модифікованому оберненому коді
- •1.4. Переповнення розрядної сітки при додаванні у модифікованих машинних кодах
- •1.5. Множення двійкових чисел без знаку
- •Хід виконання роботи
- •Результат дослідження
- •Результат дослідження
Хід виконання роботи
-
Розробити алгоритм і написати програму додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді у інструкціях навчального комп’ютера DeComp.
Блок-схема алгоритму:
Ввід чисел
Перше число від’ємне
Ні
Так
Перевести число у доповняльний код
Друге число від’ємне
Ні
Так
Перевести число у доповняльний код
Додати числа у доповняльних кодах
Виникло переповнення розрядної сітки
Так
Ні
Ні
Результат від’ємний число
Результат втрачено,
Записати ознаку переповнення
Так
Переведення результату у прямий код
Кінець
Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті:
Вхідними даними будуть числа A та B, які розташовуватимуться у 27-ій та 28-ій комірках пам’яті відповідно. Змінна А дорівнює десятковому числу 1010, яке у модифікованому доповняльному коді дорівнює 0000 0000 0000 10102. Змінна B дорівнює десятковому числу -910, яке у модифікованому доповняльному коді дорівнює 1100 0000 0000 10012.
Призначення комірок що використовуються:
Для роботи програми використовується 29-а, 30-а, 31-а, 32-а комірка пам’яті. У 29-ій комірці записано двійковий код десяткового числа 110, що необхідна для зменшення лічильника циклу, та інкременту лічильника кількості одиниць у вхідному двійковому числі. У 30-ій комірці записано двійковий код 1100 0000 0000 00002. Це маска, що призначена для визначення знаку числа. У 31-ій комірці записано двійковий код десяткового числа 010, для збереження результату додавання. У 32-ій комірці записано двійковий код 1111 1111 1111 11112. Це ознака неправильного результату.
Текст програми:
Адреса комірки пам’яті |
Двійковий код інструкції |
Мнемонічний формат інструкції |
Коментар інструкцій, що відповідають блокам алгоритму програми |
0 |
0000 0000 0001 1011 |
LOAD 27; |
Додаємо вміст 3110 комірки в якій записано 010 ,для того щоб перевірити чи від’ємне це число. |
1 |
0010 0000 0001 1111 |
ADD 31; |
|
2 |
1010 0000 0000 0111 |
JP 7; |
Перевірка знаку першого доданка “А”, якщо S = 0, то операція доповнення пропускається. |
3 |
0110 0000 0001 1110 |
XOR 30; |
Переведення першого доданка “А” з прямого модифікованого коду в доповняльний модифікований. |
4 |
0111 0000 0000 0000 |
NOT; |
|
5 |
0010 0000 0001 1101 |
ADD 29; |
|
6 |
0001 0000 0001 1011 |
STORE 27; |
|
7 |
0000 0000 0001 1100 |
LOAD 28; |
Додаємо вміст 3110 комірки в якій записано 010 ,для того щоб перевірити чи від’ємне це число. |
8 |
0010 0000 0001 1111 |
ADD 31; |
|
9 |
1010 0000 0000 1110 |
JP 14; |
Перевірка знаку другого доданка “В”, якщо S = 0,то операція доповнення пропускається. |
10 |
0110 0000 0001 1110 |
XOR 30; |
Переведення другого доданка “В” з прямого модифікованого коду в доповняльний модифікований. |
11 |
0111 0000 0000 0000 |
NOT; |
|
12 |
0010 0000 0001 1101 |
ADD 29; |
|
13 |
0001 0000 0001 1100 |
STORE 28; |
|
14 |
0000 0000 0001 1011 |
LOAD 27; |
Додати до вмісту 2710 комірки нього вміст 2810. |
15 |
0010 0000 0001 1100 |
ADD 28; |
|
16 |
0001 0000 0001 1100 |
STORE 28; |
|
17 |
1100 0000 0001 0100 |
JNC 21; |
Перевірка результату на переповнення розрядної сітки. |
18 |
0000 0000 0010 0000 |
LOAD 32; |
Перехід на кінець виконання програми. Результат не коректний. |
19 |
0000 0000 0001 1111 |
STORE 31; |
|
20 |
0000 0000 0001 1010 |
JMP 26; |
21 |
0101 0000 0001 1010 |
JP 26; |
Перевірка чи результат додавання невід’ємне число тобто S = 0. Якщо так, то перетворення суми у прямий код пропускається. |
22 |
0111 0000 0000 0000 |
NOT; |
Перетворення результату суми у прямий код.
|
23 |
0010 0000 0001 1101 |
ADD 29; |
|
24 |
0110 0000 0001 1110 |
XOR 30; |
|
25 |
0001 1100 0001 1111 |
STORE 31; |
|
26 |
0111 1100 0000 0000 |
HALT; |
Зупинка процесора. |
-
Виконати дослідження програми, розробленої у пункті 2, у покроковому режимі.