Кінець
Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті:
Вхідними даними будуть числа 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, у покроковому режимі.
|
№ |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
|
1 |
0000 0001 0111 |
0000 0000 0000 1010 |
0000 0000 0000 1010 |
0000 0000 0001 0111 |
0000 0000 0001 |
000 |
|
2 |
0000 0001 1011 |
0000 0000 0000 0000 |
0000 0000 0000 1010 |
0010 0000 0001 1011 |
0000 0000 0010 |
000 |
|
3 |
0000 0000 0010 |
1010 0000 0000 0111 |
0000 0000 0000 1010 |
1010 0000 0000 0111 |
0000 0000 0111 |
000 |
|
4 |
0000 0001 1000 |
1100 0000 0000 1001 |
1100 0000 0000 1001 |
0000 0000 0001 1000 |
0000 0000 0001 |
000 |
|
5 |
0000 0001 1011 |
0000 0000 0000 0000 |
11000 0000 0000 1001 |
00010 0000 0001 1011 |
0000 0000 1001 |
010 |
|
6 |
0000 0000 1001 |
1010 0000 0000 1110 |
1100 0000 0000 1001 |
1010 0000 0000 1110 |
0000 0000 1010 |
010 |
|
7 |
0000 0001 1010 |
1100 0000 0000 0000 |
0000 0000 0000 1001 |
0110 0000 0001 1010 |
0000 0000 1011 |
000 |
|
8 |
0000 0000 1011 |
0111 0000 0000 0000 |
1111 1111 1111 0110 |
0111 0000 0000 000 |
0000 0000 1100 |
010 |
|
9 |
0000 0001 1001 |
0000 0000 0000 0001 |
1111 1111 1111 0111 |
0010 0000 0001 1001 |
0000 0000 1101 |
010 |
|
10 |
0000 0001 1000 |
1111 1111 1111 0111 |
1111 1111 1111 0111 |
0001 0000 0001 1000 |
0000 0000 1110 |
010 |
|
11 |
0000 0001 0111 |
0000 0000 0000 1010 |
0000 0000 0000 1010 |
0000 0000 0001 0111 |
0000 0000 1111 |
010 |
|
12 |
0000 0001 1000 |
1111 1111 1111 0111 |
0000 0000 0000 0001 |
0010 0000 0001 1000 |
0000 0001 0000 |
001 |
|
13 |
0000 0001 1100 |
0000 0000 0000 0001 |
0000 0000 0000 0001 |
0001 0000 0001 1100 |
0000 0001 0001 |
001 |
|
14 |
0000 0001 0110 |
0111 1100 0000 0000 |
0111 1100 0000 0001 |
0101 0000 0001 0110 |
0000 0001 0010 |
001 |
|
15 |
0000 0001 0010 |
0111 0000 0000 0000 |
1000 0011 1111 1110 |
0111 0000 0000 0000 |
0000 0001 0011 |
010 |
Після виконання програми значення 28-ої комірки змінилось на 1111 1111 1111 01112, тобто число В у доповняльному модифікованому коді, в комірці 31 встановилось значення
0000 0000 0000 00012, тобто двійковий результат додавання десяткових чисел 1010 і -910.
4. Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку.
Блок-схема алгоритму:

Інформація про вхідні дані і їх попереднє розташування у комірках пам’яті:
Вхідними даними будуть числа A і B, які розташовуватимуться у 20-ій і 21-ій комірках пам’яті відповідно. Змінна А є множеним і дорівнює десятковому числу 12210, яке у двійковому поданні дорівнює 0000 0000 0111 10102. Змінна B є множником і дорівнює десятковому числу 4310, яке у двійковому поданні дорівнює 0000 0000 0010 10112.
Призначення комірок що використовуються:
Для роботи програми використовується 22-а, 23-а, 24-а комірка пам’яті. У 24-ій комірці записано двійковий код десяткового числа 110, що необхідна для зменшення лічильника циклу, а також для інкременту лічильника кількості одиниць у вхідному числі. У 23-ій комірці записано двійковий код 0000 0000 0001 00002, що відіграє роль лічильника циклів. У 22-ій комірці записано двійковий код десяткового числа 010. Ця змінна необхідна для збереження результату множення.
Текст програми:
|
Адреса
|
Двійковий код інструкції |
Мнемонічний код |
Коментар |
|
0 |
0000 0000 0001 0100 |
LOAD 20 |
Зсув множеного вправо і збереження. |
|
1 |
1111 1010 0000 0000 |
ROR |
|
|
2 |
0001 0000 0001 0100 |
STORE 20 |
|
|
3 |
0000 0000 0001 0101 |
LOAD 21 |
Зсув множника вліво через ознаку С і збереження. |
|
4 |
1111 1100 0000 0000 |
RCL |
|
|
5 |
0001 0000 0001 0101 |
STORE 20 |
|
|
6 |
1100 0000 0000 1010 |
JNC 10 |
Якщо С = 0, додавання множеного до результату пропускається. |
|
7 |
0000 0000 0001 0110 |
LOAD 22 |
Додавання проміжного доданку до результату. |
|
8 |
0010 0000 0001 0100 |
ADD 20 |
|
|
9 |
0001 0000 0001 0110 |
STORE 22 |
|
|
10 |
0000 0000 0001 0111 |
LOAD 23 |
Зменшення лічильника циклів на 1. |
|
11 |
0011 0000 0001 1000 |
SUB 24 |
|
|
12 |
0001 0000 0001 0111 |
STORE 23 |
|
|
13 |
1000 0000 0000 0000 |
JNZ 0 |
Якщо K не 0, то виконується цикл з 0 комірки. |
|
14 |
0111 1100 0000 0000 |
HALT |
Зупинка програми |
Виконати дослідження програми, розробленої у пункті 4, у покроковому режимі.
Програма протягом своєї роботи повертається в початок , таким чином у неї умовні блоки будуть майже аналогічні, відмінність буде лише тоді, коли при зсуві множника 1 потрапляє в ознаку С, тоді крім операцій зсуву множника і множеного буде присутня операція додавання проміжного доданку.