Виконання:
Мій порядковий номер зі списку групи - непарний, тому моя програма буде підраховувати кількість одиниць в двійковому записі числа А.
А – вибране число
k – кількість одиниць у записі числа А
b – лічильник циклу
с – ознака виходу за межі розрядної сітки
№ |
№ комірки пам’яті |
Двійковий код інструкції |
Мнемонічний запис інструкції |
Коментар |
1 |
0000 0000 0000 |
0000 0000 0000 1010 |
LOAD 10; |
завантажити до акумулятора змінну a |
2 |
0000 0000 0001 |
0011 0000 0000 1011 |
SUB 11; |
відняти від змінної a змінну b |
3 |
0000 0000 0010 |
1000 0000 0000 0101 |
JNZ 05; |
якщо Z = 0 (a≠b), перейти до c:=a+b |
4 |
0000 0000 0011 |
0001 0000 0000 1100 |
STORE 12; |
записати 0 на місце змінної c |
5 |
0000 0000 0100 |
0111 1100 0000 0000 |
HALT; |
зупинити програму |
6 |
0000 0000 0101 |
0000 0000 0000 1010 |
LOAD 10; |
завантажити до акумулятора змінну a |
7 |
0000 0000 0110 |
0010 0000 0000 1011 |
ADD 11; |
Додати до змінної a змінну b |
8 |
0000 0000 0111 |
0001 0000 0000 1100 |
STORE 12; |
записати суму a і b на місце змінної c |
9 |
0000 0000 1000 |
0111 1100 0000 0000 |
HALT; |
зупинити програму |
-
Адр.12 → k
-
Адр.13 → 1
-
Адр.14 → b
-
Адр.15 → А(число)
-
ЛАІ → Адр.0
Алгоритм програми:
-
Завантажити до акумулятора число A.
-
Для того, щоб визначити значення старшого розряду числа, виконати логічний зсув вліво. Якщо це 12, то до попередньо підготовленої комірки пам’яті додаємо 110 ,якщо 02, пропускаємо додавання.
-
В лічильнику циклу віднімаємо 110. Перевіряємо, чи число в лічильнику дорівнює 010 . Якщо ні, то повертаємося до п.2. Якщо так – закінчуємо програму.
№ |
№ комірки пам’яті |
Двійковий код інструкції |
Мнемонічний запис Інструкції |
Коментар |
1 |
0000 0000 0000 |
0000 0000 0000 1111 |
LOAD 15 |
Визначення старшого розряду за допомогою зсуву числа A на один розряд вліво |
2 |
0000 0000 0001 |
1111 1100 0000 0000 |
RCL |
|
3 |
0000 0000 0010 |
0001 0000 0000 1111 |
STORE 15 |
|
4 |
0000 0000 0011 |
1101 0000 0000 0111 |
JC 7 |
Умовний перехід на 7 комірку, якщо С=1. Інакше виконується наступний оператор |
5 |
0000 0000 0100 |
0000 0000 0000 1100 |
LOAD 12 |
Збільшення лічильника одиниць на 1 та збереження нового значення. |
6 |
0000 0000 0101 |
0010 0000 0000 1101 |
ADD 13 |
|
7 |
0000 0000 0110 |
0001 0000 0000 1100 |
STORE 12 |
|
8 |
0000 0000 0111 |
0000 0000 0000 1110 |
LOAD 14 |
Зменшення лічильника циклу на 1 та збереження нового значення. |
9 |
0000 0000 1000 |
0011 0000 0000 1101 |
SUB 13 |
|
10 |
0000 0000 1001 |
0001 0000 0000 1110 |
STORE 14 |
|
11 |
0000 0000 1010 |
1000 0000 0000 0000 |
JNZ 0 |
Перевіряємо умову виконання циклу |
12 |
0000 0000 1011 |
0111 1100 0000 0000 |
HALT |
Завершення програми |
Висновок: під час виконання лабораторної роботи я засвоїв використання основних інструкцій зсуву і переходів у системі команд навчального комп'ютера DeComp, а також навчився організовувати цикли необхідної структури і використовувати їх, створивши власну програму.