Оскільки числа А та 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. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
LOAD (0000 xxxx xxxx xxxx, де xxxx xxxx xxxx – адреса комірки, з якої дані будуть перенесені до акумулятор)
Зробимо так, щоб мікропрограма зчитувала вміст 8-ї комірки. Для цього запишемо в комірку 8 деяке число, наприклад 16. Після того як ми занесли число, до 8-ї комірки треба вписати інструкцію зчитування. Виглядає інструкція зчитування наступним чином: 0000 0000 0000 1000. Запишемо інструкцію в 9-ту комірку. До ЛАІ занесемо адресу першої інструкції (0000 0000 1001).
; ; ;
Отримуємо наступну мікропрограму:
|
№ п/п |
Код, що обробляється |
Мнемонічний запис |
Коментар до кожної інструкції |
|
1 |
0000 0000 1001 |
ЛАІ→РА |
Зчитування адреси інструкції |
|
2 |
0000 0000 0000 1000 |
РА→РД |
Зчитування вмісту комірки (інструкція) і занесення його до РД |
|
3 |
0000 0000 0000 1000 |
РД→РІ |
Декодування вмісту комірки і занесення його у РІ |
|
4 |
0000 0000 1000 |
РІ→РА |
Вибір адреси комірки, у якій знаходиться число |
|
5 |
0000 0000 0001 0000 |
РА→РД |
Зчитування і занесення вмісту комірки (число) до РД |
|
6 |
0000 0000 0001 0000 |
РД→А |
Занесення числа до акумулятору |
|
7 |
0000 0000 1010 |
ЛАІ→ЛАІ+1 |
Завершення виконання інструкції |
Після виконання інструкції в акумуляторі можна побачити наступне значення: 0000 0000 0001 0000 (число 16). Число є вмістом 8-ї комірки, з якої і відбувалось зчитування. Отже мікропрограма працює коректно.
STORE (0001 xxxx xxxx xxxx, де xxxx xxxx xxxx – адреса комірки, до якої буде записано число з акумулятора).
Зробимо так, щоб мікропрограма записувала вміст акумулятора до 8-ї комірки. Онулимо комірку 8. Щоб перевірити коректність роботи програми, заносимо будь-яке число до Акумулятора. Нехай це буде число 16. Після коректного виконання програми до 8-ї комірки має записатися число 16 замість числа яке було там до виконання операції.
Заносимо інструкцію до комірки з номером 9. Інструкція має наступний вигляд: 0001 0000 0000 1000. Коли інструкція була занесена, можна переходити до виконання. Для цього вносимо до ЛАІ адресу першої інструкції (0000 0000 1001), встановлюємо потактовий режим і натискаємо клавішу «ПУСК». Отримуємо наступну мікропрограму:
|
№ п/п |
Код, що обробляється |
Мнемонічний запис |
Коментар до кожної інструкції |
|
1 |
0000 0000 1001 |
ЛАІ→РА |
Зчитування адреси інструкції |
|
2 |
0001 0000 0000 1000 |
РА→РД |
Зчитування вмісту комірки (інструкція) і занесення його до РД |
|
3 |
0001 0000 0000 1000 |
РД→РІ |
Декодування вмісту комірки і занесення його у РІ |
|
4 |
0000 0000 1000 |
РІ→РА |
Вибір адреси комірки, у яку буде записане число |
|
5 |
0000 0001 0000 |
РА→А |
Зчитування числа з акумулятора |
|
6 |
0000 0001 0000 |
А→РД |
Запис числа з акумулятор до РД |
|
7 |
0000 0000 1010 |
ЛАІ→ЛАІ+1 |
Завершення виконання інструкції |
Після виконання інструкції в 8-ї комірці можна побачити наступне значення: 0000 0000 0001 0000 (число 16). Число 16 є вмістом акумулятора. Отже вміст акумулятора був записаний до 5-ї комірки. Це означає, що мікропрограма працює коректно.
SUB (0011 xxxx xxxx xxxx, де хххх хххх хххх – адреса комірки, у якій знаходиться від’ємник)
Зробимо так, щоб мікропрограма віднімала число, вказане у 8-ї комірці, від вмісту акумулятора. Але спочатку необхідно внести якесь число до акумулятора. Робимо це за допомогою мікропрограми LOAD яку ми розглядали вище. Запишемо до акумулятор число. Хай це буде 16.
Тепер ми можемо виконати віднімання. Спочатку задаємо від’ємник у комірку під номером 8. Хай це буде число 10 (0000 0000 0000 1010). У результаті віднімання (16 – 10) ми повинні отримати число 6 (0000 0000 0000 0110). Якщо після виконання інструкції ми отримаємо це число, то в такому випадку мікропрограма працює коректно.
Заносимо інструкцію до комірки з номером 9. Інструкція має наступний вигляд: 0011 0000 0000 1000. Якщо інструкція була занесена, можна переходити до виконання. Для цього вносимо до ЛАІ адресу першої інструкції (0000 0000 0000), встановлюємо потактовий режим і натискаємо клавішу «ПУСК».
|
№ п/п |
Код, що обробляється |
Мнемонічний запис |
Коментар до кожної інструкції |
|
1 |
0000 0000 1001 |
ЛАІ→РА |
Зчитування адреси інструкції |
|
2 |
0011 0000 0000 1000 |
РА→РД |
Занесення вмісту комірки (інструкція) до РД |
|
3 |
0011 0000 0000 1000 |
РД→РІ |
Декодування інструкції до РІ |
|
4 |
0000 0000 0000 1000 |
РІ→РА |
Зчитування адреси від’ємника |
|
5 |
0000 0000 0000 1010 |
РА→РД |
Зчитування значення від’ємника та його запис до РД |
|
6 |
0000 0000 0000 0110 |
РД+А→А |
Виконання арифметичної дії та запис результату до акумулятор |
|
7 |
000 |
А→РО |
Встановлення відповідних прапорців до РО |
|
8 |
0000 0000 0000 1010 |
ЛАІ→ЛАІ+1 |
Завершення виконання інструкції |
У результаті арифметичної дії віднімання ми отримали число 6 (0000 0000 0000 0110), яке зберігається в акумуляторі. При цьому вміст Регістру Ознак дорівнює 000. Це означає, що отримане число не є від’ємним, не дорівнює 0 и не переповнює розрядну сітку. Отже мікропрограма працює коректно.