Циклічний зсув вліво ( розряди обертаються, потрапляючи у ознаку переносу С).
Виконаємо підготовку. В акумулятор внесемо число 110, в комірку №0 інструкцію RCL (двійковий код 1111 1100 0000 0000), в ЛАІ занесемо адресу 0-ї комірки пам’яті, де знаходиться наша інструкція.
Дослідження інструкції RCL:
|
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
|
1 |
ЛАІ→РА |
0000 0000 0000 |
Вибір адреси першої інструкції і занесення її до Регістра Адреси |
|
2 |
РА→РД |
1111 1100 0000 0000 |
Вибір коду інструкції RCL з Регістра Адреси і занесення його до Регістра Даних |
|
3 |
РД→РІ |
1111 1100 0000 0000 |
Декодування інструкції у Регістрі Інструкцій |
|
4 |
А→А |
0000 0000 0000 0000 |
Запис результату в Акумулятор, після циклічного зсуву вліво через C |
|
5 |
А→РО |
101 |
Перевірка результату в Регістрі Ознак і встановлення прапорців |
В даному випадку у Регістрі ознак 1 набуло значення С. Це і є наслідком виконання інструкції циклічного зсуву RCL.
Умовний перехід на певну комірку, якщо число у акумуляторі додатнє (S=0).
Виконаємо підготовку. В Акумулятор внесемо число 010 в комірку пам'яті за адресою 0 інструкцію віднімання від акумулятора числа з 4 комірки(двійковий код 0011 0000 0000 0100), в комірці 1 – умовний перехід JP (двійковий код 1010 0000 0000 0000), в 4 комірку число 510, а в ЛАІ ввести адресу першої інструкції, тобто 0000 0000 0000
Дослідження інструкції JP:
|
№ |
Мнемонічний запис |
Код, що обробляється |
Коментар |
|
1 |
ЛАІ→РА |
0000 0000 0000 |
Вибір адреси першої інструкції і занесення її до Регістра Адреси |
|
2 |
РА→РД |
0011 0000 0000 0100 |
Вибір коду інструкції SUB з Регістра Адреси і занесення його до Регістра Даних |
|
3 |
РД→РІ |
1111 1100 0000 0000 |
Декодування інструкції у Регістрі Інструкцій |
|
4 |
РІ→РА |
0000 0000 0100 |
Вибір адреси операнда |
|
5 |
РА→РД |
0000 0000 0000 0101 |
Вибір коду операнда з памяті і занесення його в Регістр Адреси |
|
6 |
А - РД→А |
1111 1111 1111 1011 |
Виконання операції віднімання із занесенням результату в Акумулятор |
|
7 |
А→РО |
011 |
Встановлення прапорців Регістру Ознак |
|
8 |
ЛАІ + 1 →ЛАІ |
0000 0000 0001 |
Вибір адреси наступної інструкції |
|
9 |
ЛАІ→РА |
0000 0000 0001 |
Занесення адреси інструкції до Регістра Адреси |
|
10 |
РА→РД |
1010 0000 0000 0000 |
Вибір коду інструкції JP 0 з Регістра Адреси і занесення його до Регістра Даних |
|
11 |
РД→РІ |
1010 0000 0000 0000 |
Декодування інструкції в Регістрі Інструкцій |
|
12 |
ЛАІ + 1 →ЛАІ |
0000 0000 0010 |
Якщо S=0, то перехід на 0 адресу, якщо ні – подальше виконання інструкцій |
В даному випадку у Регістрі ознак 1 набуло значення S. Це і є умовою виконання інструкції умовного переходу JP.
Скласти програму, яка буде реалізувати оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі, Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок.
Якщо а > b, то с := a – b, інакше c := a + b;
Змінна а знаходиться в 11-й комірці, змінна b – в 12-й, а змінна с збережеться в 13-й.
|
№ комірки пам’яті |
Двійковий код інструкції |
Мнемонічний запис інструкції |
Коментар |
|
0000 0000 0000 0000 |
0000 0000 0000 1011 |
LOAD 11 |
Завантажити до А змінну а |
|
0000 0000 0000 0001 |
0011 0000 0000 1100 |
SUB 12 |
Відняти від змінної а змінну b |
|
0000 0000 0000 0010 |
1100 0000 0000 0111 |
JNC 7 |
Якщо С = 1 (a < b), то перейти до c := a + b |
|
0000 0000 0000 0011 |
0000 0000 0000 1011 |
LOAD 11 |
Завантажити до А змінну а |
|
0000 0000 0000 0100 |
0010 0000 0000 1100 |
ADD 12 |
Додати до змінної а змінну b |
|
0000 0000 0000 0101 |
0001 0000 0000 1101 |
STORE 13 |
Зберегти результат (змінну с) |
|
0000 0000 0000 0110 |
0111 1100 0000 0000 |
HALT |
Зупинити програму |
|
0000 0000 0000 0111 |
0000 0000 0000 1011 |
LOAD 11 |
Завантажити до А змінну а |
|
0000 0000 0000 1000 |
0011 0000 0000 1100 |
SUB 12 |
Відняти від змінної а змінну b |
|
0000 0000 0000 1001 |
0001 0000 0000 1101 |
STORE 13 |
Зберегти результат (змінну с) |
|
0000 0000 0000 1010 |
0111 1100 0000 0000 |
HALT |
Зупинити програму |
Блок-схема програми:
Для того щоб перевірити умову а > b, я виконую віднімання чисел ( а – b ) і перевіряю значення прапорця С за допомогою інструкції JNC. Якщо а > b, то при відніманні ми отримаємо додатне значення, прапорець С не активується і програма виконає віднімання чисел і збереження результату. Якщо а < b, то при відніманні відбудеться переповнення розрядної сітки і прапорець С активується. Тоді виконається додавання чисел і збереження результату.
Дослідження в по кроковому режимі:
Для дослідження дам значення змінним а та b і занесу їх значення до комірок 11 та 12. Нехай а = 610, b = 810. Так як a < b, в результаті ми маємо отримати суму цих чисел, тобто 1410.
610 = 1102;
810 = 10002;
1410 = 11102;
|
Крок |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
|
1-й |
0000 0000 1011 |
0000 0000 0000 0110 |
0000 0000 0000 0110 |
0000 0000 0000 1011 |
0000 0000 0001 |
000 |
|
2-й |
0000 0000 1100 |
0000 0000 0000 1000 |
1111 1111 1111 1110 |
0011 0000 0000 1100 |
0000 0000 0010 |
011 |
|
3-й |
0000 0000 0010 |
1100 0000 0000 0111 |
1111 1111 1111 1110 |
1100 0000 0000 0111 |
0000 0000 0011 |
011 |
|
4-й |
0000 0000 1011 |
0000 0000 0000 0110 |
0000 0000 0000 0110 |
0000 0000 0000 1011 |
0000 0000 0100 |
011 |
|
5-й |
0000 0000 1100 |
0000 0000 0000 1000 |
0000 0000 0000 1110 |
0010 0000 0000 1100 |
0000 0000 0101 |
000 |
|
6-й |
0000 0000 1101 |
0000 0000 0000 1110 |
0000 0000 0000 1110 |
0001 0000 0000 1101 |
0000 0000 0110 |
000 |
|
7-й |
0000 0000 0110 |
0111 1100 0000 0000 |
0000 0000 0000 1110 |
0111 1100 0000 0000 |
0000 0000 0110 |
000 |
Отже, як можемо побачити, в результаті роботи програми значення акумулятора відповідає сумі двох цих чисел а і b. Тобто, в даному випадку програма спрацювала правильно.
Тепер перевіримо, що буде якщо ми поміняємо значення змінних місцями. Тобто а = 810, b = 610. Так як число а більше числа b, в результаті ми маємо отримати їх різницю, тобто, число 210
210 = 102;
|
Крок |
РА |
РД |
А |
РІ |
ЛАІ |
РО |
|
1-й |
0000 0000 1011 |
0000 0000 0000 1000 |
0000 0000 0000 1000 |
0000 0000 0000 1011 |
0000 0000 0001 |
000 |
|
2-й |
0000 0000 1100 |
0000 0000 0000 0110 |
0000 0000 0000 0010 |
0011 0000 0000 1100 |
0000 0000 0010 |
000 |
|
3-й |
0000 0000 0010 |
1100 0000 0000 0111 |
0000 0000 0000 0010 |
1100 0000 0000 0111 |
0000 0000 0111 |
000 |
|
4-й |
0000 0000 1011 |
0000 0000 0000 1000 |
0000 0000 0000 1000 |
0000 0000 0000 1011 |
0000 0000 1000 |
000 |
|
5-й |
0000 0000 1100 |
0000 0000 0000 0110 |
0000 0000 0000 0010 |
0011 0000 0000 1100 |
0000 0000 1001 |
000 |
|
6-й |
0000 0000 1101 |
0000 0000 0000 0010 |
0000 0000 0000 0010 |
0001 0000 0000 1101 |
0000 0000 1010 |
000 |
|
7-й |
0000 0000 1010 |
0111 1100 0000 0000 |
0000 0000 0000 0010 |
0111 1100 0000 0000 |
0000 0000 1010 |
000 |