Лабораторна робота № 3
Тема: Дослідження інструкцій переходів і зсувів. Організація циклів.
Мета роботи: 1. Засвоїти використання основних інструкцій зсуву і переходів у системі
команд навчального комп'ютера DeComp.
2. Навчитись організовувати цикли необхідної стуктури і використовувати їх
у програмах.
1. Теоретичні відомості
Інструкції, з якими ми будемо знайомитися у даній роботі складають дві групи:
1) інструкції керування виконанням програми:
інструкція зупинки (HALT);
інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);
інструкція безумовного переходу (JMP);
2) інструкції зсувів (вліво (Left) та вправо (Right)):
інструкції логічного зсуву (LSL та LSR);
інструкції арифметичного зсуву (ASL та ASR);
інструкції циклічного зсуву (ROL та ROR);
інструкції циклічного зсуву через перенос C (RCL та RCR).
1.1. Розглянемо інструкції переходів.
Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходів 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не та інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу.
Інструкція безумовного переходу JMP ADR має машинний код 1110 aaaa aaaa aaaa.
Відповідно, код операції дорівнює 1110, а решта розрядів – адресна частина. Мікропрограма виконання інструкції JMP має наступний вигляд:
ЛАІ ( РА;
РА ( РД;
РД ( РІ, декодування;
РІ ( ЛАІ – перехід на вказану адресу відбувається без будь-яких попередніх умов.
Як видно, інструкція безумовного переходу JMP просто записує до ЛАІ значення своєї адресної частини і програма буде змушена виконати інструкцію, що записана у комірці пам’яті за цією адресою. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal, Basic та ін.
Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: у залежності від виконання чи не викогаггя умови, зазначеної у алгоритмі програми, перехід або буде здійснюватись, або не буде. Контроль виконання умови здійснює Регістр Ознак шляхом встановлення чи не встановлення відповідного тригера. (див. методичні матеріали до лабораторної роботи № 2).
Якщо умова виконується, тоді наступною буде виконуватися інструкція, яка розміщена у комірці пам’яті, номер якої вказаний у адресній частині коду інструкції.
Якщо умова не виконується, тоді наступною буде виконуватися інструкція, яка знаходиться відразу в сусідній комірці пам’яті з коміркою інструкції переходу.
Фактично інструкції умовного переходу дозволяють реалізувати оператори розгалуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal
if (a < b) then
c:= a;
else
c:= b;
при реалізації його у навчальному комп’ютері DeComp (причому, змінна a знаходиться у 10-й комірці, змінна b – у 11-й, а змінна c – у 12-й) відповідатиме такий фрагмент програми у машинних кодах:
№ комірки пам’яті
Двійковий код інструкції
Мнемонічний запис
інструкції
Коментар

0000 0000 0000
0000 0000 0000 1010
LOAD 10;
завантажити до акумулятора змінну a

0000 0000 0001
0011 0000 0000 1011
SUB 11;
відняти від змінної a змінну b

0000 0000 0010
1100 0000 0000 0110
JNC 06;
якщо C = 0 (a>b), перейти до c:=b

0000 0000 0011
0000 0000 0000 1010
LOAD 10;
завантажити до акумулятора змінну a

0000 0000 0100
0001 0000 0000 1100
STORE 12;
записати змінну a на місце змінної c

0000 0000 0101
0111 1100 0000 0000
HALT;
зупинити програму

0000 0000 0110
0000 0000 0000 1011
LOAD 11;
завантажити до акумулятора змінну b

0000 0000 0111
0001 0000 0000 1100
STORE 12;
записати змінну b на місце змінної c

0000 0000 1000
0111 1100 0000 0000
HALT;
зупинити програму


Як видно з програми, оператор IF (a < b) реалізується за допомогою інструкцій віднімання SUB та умовного переходу за умови відсутності переносу C - JNC: якщо при відніманні від змінної a (розміщеної у акумуляторі) змінної b (розміщеної у 11-й комірці) не виникає переносу, це означає, що a > b, а значить, необхідно “перескочити” фрагмент, де виконується c:= a (блок інструкцій LOAD, STORE та HALT у 3-й, 4-й та 5-й комірках), і почати виконувати фрагмент c:= b (блок інструкцій LOAD, STORE та HALT у 6-й, 7-й та 8-й комірках).
Отже, у навчальному комп’ютері DeComp маємо такі інструкції умовних переходів (результат – число А знаходиться в акумуляторі):
Двійковий код
інструкції
Мнемонічний
запис інструкції
Значення ознаки, яка перевіряється
Значення
результату, що розміщений в акумуляторі

1000;
JNZ ADR
Z = 0
A ( 0

1001
JZ ADR
Z = 1
A = 0

1010
JP ADR
S = 0
A > 0

1011
JM ADR
S = 1
A <0

1100
JNC ADR
C = 0
A ( 216 - 1

1101
JC ADR
C = 1
A ( 216 - 1


При дослідженні інструкцій переходів у потактовому режимі видно, що їх хід відрізняється від розглянутого у прикладі, наведеному у лабораторній робті № 2. Для прикладу, мікропрограма інструкції JM матиме вигляд:

Мнемонічний
запис мікрооперації
Коментар

1
ЛАІ ( РА;
вибір адреси 1-ої інструкції і занесення її до регістру РА

2
РА ( РД;
вибір коду інструкції з РА і занесення його до регістру РД

3
РД ( РІ;
декодування іперевірка регістру ознак РО

4
РІ ( ЛАІ
якщо S = 1, інакше 5)

5
ЛАІ + 1 ( ЛАІ
якщо S = 0


1.2. Організація програмних циклів
Для організації циклу засобами навчального комп’ютера DeComp в одній з комірок пам’яті необхідно розмістити лічильник циклів. Лічильник циклів це число, яке може мати значення N (якесь число) або 0 (const = N або const = 0). Відповідно, у циклі необхідно кожний раз лічильник зменшувати (або збільшувати) на 1 і за допомогою інструкції умовного переходу перевіряти, чи потрібно зробити цикл ще раз.
Наприклад, у комірці пам’яті за адресою 1010 розміщений лічильник - const = K = 15, у комірці пам’яті за адресою 1110 – константа = 1 (const = 1), яка буде обслуговувати цей лічильник. Тоді програма обслуговування циклу:
LOOP 1: . . . – мітка (адреса) попередньої частини програми;
LOAD 10 - вибрати значення з комірки 10 і розмістити його у акумуляторі;
SUB 11 - із значення, що є у акумуляторі, відняти 1;
JNZ LOOP 1 – перехід на LOOP 1, якщо у результаті виконання попередньої
операції ознака Z ? 0, тобто вміст акумулятора не дорівнює 0,
інакше – перехід на наступну aдресу – LOOP 2.
LOOP 2 . . . .
Це є лічильник "на 0", тобто процедура LOOP 1 виконується K = 15 разів і кожний раз виконується перевірка числа таких виконань шляхом зменшення значення у лічильнику (комірка пам’яті – 10). Коли у лічильнику значення стане рівним 0, програма почне виконувати процедуру LOOP 2.
1.3. Особливості виконання операцій зсуву
- LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку
переносу С).
- ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє
не зі старшого, тобто - знакового розряду, а з попереднього - старшого розряду
числа).
- ROL, ROR - циклічні зсуви ( розряди обертаються, не потрапляючи у ознаку переносу С).
- RCL, RCR - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С).
2. Порядок виконання роботи:
Вивчити теоретичні відомостями до лабораторної роботи № 3.
Дослідити у потактовому режимі інструкції ROL, RCL. JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак.
Скласти програму, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі, Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок.
Розробити алгоритм і cкласти програму в інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи. Програма виконується в автоматичному режимі.
Оформити та захистити звіт з лабораторної роботи.
3. Вимоги до звіту.
Крім основних вимог, що зазначені у додатку, у звіті програми повинні бути оформлені у такому вигляді:
- формулювання задачі;
- блок-схема алгоритма;
- інформація про вхідні дані і їх попереднє розташування у комірках пам’яті;
- призначення комірок, що використовуються;
- текст програми у наступному форматі:

Адреса комірки пам’яті
у десятковому коді
Код інструкції
(двійковий)
Мнемонічний формат
інструкції
Коментар до груп інструкцій,
що відповідають блокам
алгоритму програми