Виконання:
Для того щоб виконати це завдання я склав програму яка віднімає від числа з комірки 13, число з комірки 14 і зберігає результат в 15-ій комірці.
; ;
Мнемонічний код інструкції |
Машинний код |
Дія, яку виконує інструкція |
LOAD 13 |
0000 0000 0000 1101 |
завантажити (прочитати) значення числа з 13-ї комірки пам’яті до акумулятора; |
SUB 14 |
0011 0000 0000 1110 |
Відняти від числа в акумуляторі значення числа з 14-ї комірки пам’яті і результат зберегти в акумуляторі; |
STORE 15 |
0001 0000 0000 1111 |
зберегти (записати) значення числа з акумулятора до 15-ї комірки пам’яті; |
HALT |
0111 1100 0000 0000 |
зупинити роботу процесора. |
Запис програми починаю з 4 комірки пам’яті. Наступні коди інструкцій записую в наступні комірки:
; ; ;
Тепер можна переходити до дослідження роботи програми.
Почнемо з випадку при якому числа в комірках 13 та 14 будуть одинакові.
А = В
Нехай числом яке я запишу до 13-ї та 14-ї комірок буде . Перед натисканням кнопки ПУСК треба занести значення адреси першої інструкції (0000 0000 0000 0100) до Лічильника Адреси Інструкції. Потім я почав дослідження результати якого я записав в таблицю:
Крок |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й |
0000 0000 1101 |
0000 0000 0000 1010 |
0000 0000 0000 1010 |
0000 0000 0000 1101 |
0000 0000 0101 |
000 |
2-й |
0000 0000 1110 |
0000 0000 0000 1010 |
0000 0000 0000 0000 |
0011 0000 0000 1110 |
0000 0000 0110 |
100 |
3-й |
0000 0000 1111 |
0000 0000 0000 0000 |
0000 0000 0000 0000 |
0001 0000 0000 1111 |
0000 0000 0111 |
100 |
4-й |
0000 0000 0111 |
0111 1100 0000 0000 |
0000 0000 0000 0000 |
0111 1100 0000 0000 |
0000 0000 0111 |
100 |
Оскільки числа А та B одинакові, то результатом віднімання чисел є число 0. Щоб сповістити нас про результат, загорається прапорець Z, що означає що результатом операції є нуль.
Перейдемо до дослідження випадку коли число з комірки 13 більше, ніж число з комірки 14.
А > В
Нехай число А = 1, а число В = . Я записав їх до комірок 13 і 14, встановив адресу першої інструкції (0000 0000 0000 0100) і почав дослідження:
Крок |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й |
0000 0000 1101 |
0000 0000 0000 1010 |
0000 0000 0000 1010 |
0000 0000 0000 1101 |
0000 0000 0101 |
000 |
2-й |
0000 0000 1110 |
0000 0000 0000 0110 |
0000 0000 0000 0100 |
0011 0000 0000 1110 |
0000 0000 0110 |
000 |
3-й |
0000 0000 1111 |
0000 0000 0000 0100 |
0000 0000 0000 0100 |
0001 0000 0000 1111 |
0000 0000 0111 |
000 |
4-й |
0000 0000 0111 |
0111 1100 0000 0000 |
0000 0000 0000 0100 |
0111 1100 0000 0000 |
0000 0000 0111 |
000 |
Оскільки результатом віднімання є додатне число, то жоден прапорець не активувався. Через це в РО можна побачити наступне значення: 000.
І закінчимо дослідження програми випадком при якому число з комірки 13 менше, ніж число з комірки 13.
А < В
Нехай число А = а число В = 1. Я записав їх до комірок 13 і 14, встановив адресу першої інструкції (0000 0000 0000 0100) і почав дослідження:
Крок |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й |
0000 0000 1101 |
0000 0000 0000 0110 |
0000 0000 0000 0110 |
0000 0000 0000 1101 |
0000 0000 0101 |
000 |
2-й |
0000 0000 1110 |
0000 0000 0000 1010 |
1111 1111 1111 1100 |
0011 0000 0000 1110 |
0000 0000 0110 |
011 |
3-й |
0000 0000 1111 |
1111 1111 1111 1100 |
1111 1111 1111 1100 |
0001 0000 0000 1111 |
0000 0000 0111 |
011 |
4-й |
0000 0000 0111 |
0111 1100 0000 0000 |
1111 1111 1111 1100 |
0111 1100 0000 0000 |
0000 0000 0111 |
011 |
Оскільки результатом арифметичної операції є від’ємне число, то активувалось два прапорці: S (Sign) та C (Carry). Через це в РО можна побачити наступне значення: 011. Варто підмітити, що в якості результату ми отримали число -4 у доповняльному коді (1111 1111 1111 11002)
Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.