1.4. Дослідження виконання інструкцій навчального комп’ютера
Для дослідження алгоритмів і ходу виконання програм за окремими інструкціями існує покроковий режим роботи навчального комп’ютера, з яким ми ознайомилися у лабораторній роботі № 1.
Загальний принцип виконання однієї інструкції ми вже знаємо: спочатку її необхідно прочитати з пам’яті, а потім, у залежності від коду операції, виконати ті або інші необхідні дії. Це і є найбільш спрощений порядок виконання інструкції:
вибірка (читання) інструкції (fetch – вибір, виклик). ;
виконання інструкції (execution –виконання).
Оскільки більшість інструкцій призначені для виконання різних операцій, для яких необхідні вхідні числа, а також збереження результату, для більшості процесорів комп’ютерів стандартним є такий, більш детальний порядок виконання інструкцій:
вибірка інструкції;
декодування (розпізнавання) інструкції;
вибірка (читання) операндів;
виконання операції (арифметичної, логічної чи якоїсь іншої);
збереження (запис) результату.
У порівнянні із попереднім, простішим порядком виконання інструкції, у детальнішому порядку етап вибірки інструкції розділився на 2 частини: вибірку та декодування (розпізнавання) інструкції. Дійсно, етап декодування є надзвичайно важливим: він фактично є функцією пристрою керування, який повинен розпізнати (декодувати) інструкцію за її кодом операції, а також згенерувати послідовність керуючих сигналів, які спричинять виконання усіх наступних етапів.
Крім того, 2-й етап – виконання інструкції – розділився на 3 частини: вибірку операндів, виконання операції та збереження результату. При цьому, під читанням та записом маються на увазі операції звертання до пам’яті.
Але насправді виконання інструкції складається з ще більшої кількості етапів.
Для дослідження порядку виконання окремих інструкцій у процесорі призначений 3-й режим роботи навчального комп’ютера – потактовий.
Виконання роботи:
1. Описати призначення прапорців Регістру Ознак.
Регістр ознак служить для фіксації трьох станів:
а) Z (zero) – результат операції дорівнює 0
б) S (sign) – результат операції від’ємне число.
в) С(carry) – переповнення розрядної сітки акумулятора, наприклад про додавання 2-ох 16-ти розрядних чисел.
2. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненнями.
1) Запустив програму DeComp, увімкнув живлення.
2) Перевів симулятор до потактового режиму роботи.
3) Натискаючи кнопку «Пуск», виконав програму, фіксуючи хід програми у нижчеподаній таблиці.
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
1 |
ЛАІ РА |
0000 0000 0000 |
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси |
2 |
ПамРА РД |
0000 0000 0000 1010 |
вибір коду 1-ої інструкції з пам’яті за адресою РА і занесення його до Регістра Даних |
3 |
РД РІ |
0000 0000 0000 1010 |
декодування інструкції у Регістрі Інструкцій |
4 |
РІ РА |
0000 0000 1010 |
вибір адреси 1-го операнда |
5 |
ПамРА РД |
0000 0000 0010 0011 |
вибір коду 1-го операнда з пам’яті за адресою РА і запис його до Регістру Даних |
6 |
РД А |
0000 0000 0010 0011 |
занесення операнду з РД до Акумулятора |
7 |
ЛАІ + 1 ЛАІ |
0000 0000 0001 |
підготовка адреси нової інструкції |
8 |
ЛАІ РА |
0000 0000 0001 |
вибір адреси 2-ої інструкції і занесення її до Регістра Адреси |
9 |
ПамРА РД |
0010 0000 0000 1011 |
вибір коду 2-ої інструкції з пам’яті за адресою РА і занесення його до Регістра Даних |
10 |
РД РІ |
0010 0000 0000 1011 |
декодування інструкції у Регістрі Інструкцій |
11 |
РІ РА |
0000 0000 0000 1011 |
вибір адреси 2-го операнда |
12 |
ПамРА РД |
0000 0000 0010 0011 |
вибір коду 2-го операнда з пам’яті за адресою РА і запис його до Регістру Даних |
13 |
А+РДА |
0000 0000 0011 1101 |
виконання операції додавання |
14 |
А(Z,S,C)РО |
000 |
встановлення прапорців Регістру Ознак |
15 |
ЛАІ + 1 ЛАІ |
0000 0000 0010 |
підготовка адреси нової інструкції |
16 |
ЛАІ РА |
0000 0000 0010 |
вибір адреси 3-ої інструкції і занесення її до Регістра Адреси |
17 |
ПамРА РД |
0001 0000 0000 1100 |
вибір коду 3-ої інструкції з пам’яті за адресою РА і запис його до Регістру Даних |
18 |
РД РІ |
0001 0000 0000 1100 |
декодування інструкції у Регістрі Інструкцій |
19 |
РІ РА |
0000 0000 1100 |
вибір адреси для зберігання значення акумулятора |
20 |
А РД |
0000 0000 0011 1101 |
перенесення значення з Акумулятора до Регістру Даних |
21 |
РД ПамРА |
0000 0000 0011 1101 |
занесення значення з Регістру Даних до комірки пам’яті за адресою РА |
22 |
ЛАІ + 1 ЛАІ |
0000 0000 0011 |
підготовка адреси нової інструкції |
23 |
ЛАІ РА |
0000 0000 0011 |
вибір адреси 4-ої інструкції і занесення її до Регістра Адреси |
24 |
ПамРА РД |
0111 1100 0000 0000 |
вибір коду 4-ої інструкції з пам’яті за адресою РА і запис його до Регістру Даних |
25 |
РД РІ |
0111 1100 0000 0000 |
декодування інструкції у Регістрі Інструкцій |
3. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати.
Використовуються комірки 1010 та 1110 для значень А і В відповідно, та комірка 1210 для збереження результату.
Текст програми:
№
|
№ комірки пам’яті у двійковому коді |
Код інструкції (двійковий) |
Мнемонічний запис інструкції |
Коментар до інструкції |
1 |
0000 0000 0000 |
0000 0000 0000 1010 |
LOAD 10 |
Завантаження числа А з 10 комірки до акумулятора |
2 |
0000 0000 0001 |
0011 0000 0000 1011 |
SUB 11 |
Віднімання числа В з 11 комірки від числа в акумуляторі |
3 |
0000 0000 0010 |
0001 0000 0000 1100 |
STORE 12 |
Запис результату з акумулятора в пам'ять |
4 |
0000 0000 0011 |
0111 1100 0000 0000 |
HALT |
Припинення виконання програми |
A=B
|
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й крок |
0000 0000 1010 |
0000 0000 0011 0000 |
0000 0000 0011 0000 |
0000 0000 0000 1010 |
0000 0000 0001 |
0 0 0 |
2-й крок |
0000 0000 1011 |
0000 0000 0000 0000 |
0000 0000 0000 0000 |
0011 0000 0000 1011 |
0000 0000 0010 |
1 0 0 |
3-й крок |
0000 0000 1100 |
0000 0000 0011 1101 |
0000 0000 0000 0000 |
0001 0000 0000 1100 |
0000 0000 0011 |
1 0 0 |
4-й крок |
0000 0000 0011 |
0111 1100 0000 0000 |
0000 0000 0000 0000 |
0111 1100 0000 0000 |
0000 0000 0011 |
1 0 0 |
Результат операції віднімання дорівнює 0 , тому перший тригер РО Z встановлений в 1. 0 число без знаку, переповнення розрядної сітки не виникло тому решта тригерів S та С встановлені в 0.
А > В
|
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й крок |
0000 0000 1010 |
0000 0000 0000 0010 |
0000 0000 0000 0010 |
0000 0000 0000 1010 |
0000 0000 0001 |
0 0 0 |
2-й крок |
0000 0000 1011 |
0000 0000 0011 0000 |
0000 0000 0000 1100 |
0011 0000 0000 1011 |
0000 0000 0010 |
0 0 0 |
3-й крок |
0000 0000 1100 |
0000 0000 0000 1100 |
0000 0000 0000 1100 |
0001 0000 0000 1100 |
0000 0000 0011 |
0 0 0 |
4-й крок |
0000 0000 0011 |
0111 1100 0000 0000 |
0000 0000 0000 1100 |
0111 1100 0000 0000 |
0000 0000 0011 |
0 0 0 |
Результат операції не дорівнює 0, число додатне, переповнення розрядної сітки не виникло, тому всі тригери РО встановлені в 0.
А < В
|
РА |
РД |
А |
РІ |
ЛАІ |
РО |
1-й крок |
0000 0000 1010 |
0000 0000 0000 0010 |
0000 0000 0000 0010 |
0000 0000 0000 1010 |
0000 0000 0001 |
0 0 0 |
2-й крок |
0000 0000 1011 |
0000 0000 0000 0011 |
1111 1111 1111 1111 |
0011 0000 0000 1011 |
0000 0000 0010 |
0 1 1 |
3-й крок |
0000 0000 1100 |
1111 1111 1111 1111 |
1111 1111 1111 1111 |
0001 0000 0000 1100 |
0000 0000 0011 |
0 1 1 |
4-й крок |
0000 0000 0011 |
0111 1100 0000 0000 |
1111 1111 1111 1111 |
0111 1100 0000 0000 |
0000 0000 0011 |
0 1 1 |
Результат операції число від’ємне, тому в 1 встановлений тригер S, до того ж виникло переповнення розрядної сітки акумулятора, тому в 1 встановлений також тригер С. Переповнення виникло через те, що для симулятора числом після 0 у від’ємному напрямку буде не -110, а 1111 1111 1111 11112, так само як при додаванні до 1111 1111 1111 11112 числа 110 результатом буде 0. Через те що розрядна сітка не передбачує від’ємних чисел, або чисел розрядністю більше 1610, для кодування від’ємних чисел використовується тригер S(знак). Отже число 1111 1111 1111 11112 при тригері S встановленому в 1 інтерпретується як -1, а при тригері S встановленому в 0 як 6553510.
4. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
LOAD.
В 110 комірці пам’яті розташована інструкція LOAD 10102 , в 1010 комірці число 510.
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
1 |
ЛАІ РА |
0000 0000 0000 |
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси |
2 |
ПамРА РД |
0000 0000 0000 1010 |
вибір коду 1-ої інструкції з пам’яті за адресою РА і занесення його до Регістра Даних |
3 |
РД РІ |
0000 0000 0000 1010 |
Декодування інструкції у Регістрі Інструкцій |
4 |
РІ РА |
0000 0000 1010 |
вибір адреси операнда |
5 |
ПамРА РД |
0000 0000 0000 0101 |
вибір коду операнда з пам’яті за адресою РА і запис його до Регістру Даних |
6 |
РД А |
0000 0000 0000 0101 |
занесення операнду з РД до Акумулятора |
STORE.
В 210 комірці пам’яті розташована інструкція STORE 10112, в акумуляторі число 410.
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
1 |
ЛАІ РА |
0000 0000 0001 |
вибір адреси 2-ої інструкції і занесення її до Регістра Адреси |
2 |
ПамРА РД |
0000 0000 0001 1011 |
вибір коду 2-ої інструкції з пам’яті за адресою РА і занесення його до Регістра Даних |
3 |
РД РІ |
0000 0000 0001 1011 |
Декодування інструкції у Регістрі Інструкцій |
4 |
РІ РА |
0000 0000 1011 |
вибір адреси для зберігання значення акумулятора |
5 |
А РД |
0000 0000 0000 0100 |
Перенесення значення з Акумулятора до Регістру Даних |
6 |
РД ПамРА |
0000 0000 0000 0100 |
занесення значення з Регістру Даних до комірки пам’яті за адресою РА |
SUB.
В 310 комірці пам’яті розташована інструкція SUB 10112, в акумуляторі число 510, в 11 комірці число 410.
1 |
ЛАІ РА |
0000 0000 0010 |
вибір адреси 3-ої інструкції і занесення її до Регістра Адреси |
2 |
ПамРА РД |
0011 0000 0000 1011 |
вибір коду 3-ої інструкції з пам’яті за адресою РА і занесення його до Регістра Даних |
3 |
РД РІ |
0011 0000 0000 1011 |
декодування інструкції у Регістрі Інструкцій |
4 |
РІ РА |
0000 0000 1011 |
вибір адреси операнда |
5 |
ПамРА РД |
0000 0000 0000 0100 |
вибір коду операнда з пам’яті за адресою РА і запис його до Регістру Даних |
6 |
А-РДА |
0000 0000 0000 0001 |
виконання операції віднімання |
7 |
А(Z,S,C)РО |
000 |
встановлення прапорців Регістру Ознак |
