Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Методичні вказівки
до лабораторної роботи № 3
з дисципліни “Організація та функціонування комп’ютерів”
на тему: “Дослідження інструкцій переходів і зсувів.
Організація циклів”
Укладач:
ст.викл. Кудрявцев О.Т.
Львів
2006
Лабораторна робота № 3
Тема: Дослідження інструкцій переходів і зсувів. Організація циклів.
Мета роботи: 1. Засвоїти використання основних операції зсуву і переходів у системі команд
навчального комп'ютера.
2. Навчитись організовувати цикли.
1. Теоретичні відомості
У цій роботі продовжуємо вивчення системи команд навчального комп’ютера – симулятора DeComp. Давайте ще раз подивимось на набір інструкцій навчальної ЕОМ:
Рис.1.1. Набір інструкцій навчальної ЕОМ
Як вже зазначалося у лабораторній роботі № 2, усі інструкції можна розбити на групи згідно призначенню. Інструкції, з якими ми будемо знайомитися у даній роботі відносяться до:
інструкції керування виконанням програми:
інструкція зупинки (HALT);
інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);
інструкція безумовного переходу (JMP);
інструкції зсувів (вліво (Left) та вправо (Right)):
інструкції логічного зсуву (LSL та LSR);
інструкції арифметичного зсуву (ASL та ASR);
інструкції циклічного зсуву (ROL та ROR);
інструкції циклічного зсуву через перенос C (RCL та RCR).
1.1. Розглянемо інструкції переходів. Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходів 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не та інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу.
Машинний код інструкції безумовного переходу JMP ADR має вигляд: 1110 aaaa aaaa aaaa. Відповідно код операції дорівнює 1110, а решта розрядів – адресна частина. Мікропрограма виконання інструкції JMP має наступний вигляд:
ЛАІ –> РА;
Пам(РА) –> РД;
РД –> РІ, декодування;
Адр(РІ) –> ЛАІ.
Як видно, інструкція переходу просто записує до ЛАІ значення своєї адресної частини. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal та Basic.
Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: в залежності від виконання умови (встановлення чи не встановлення відповідного тригера у Регістрі Ознак) перехід або буде здійснюватись, або ні. Якщо умова не виконується, тоді наступною буде інструкція, яка знаходиться зразу після інструкції переходу. Якщо умова виконується, тоді наступною буде інструкція, яка розміщена у комірці пам’яті, що вказана у адресній частині коду інструкції.
Фактично інструкції умовного переходу дозволяють реалізувати оператори розгалуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal
if (a<b) then
c:=a;
else
c:=b;
у якому змінна 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 ; зупинити програму
Наведений фрагмент програми складається з 4-х стовпців: адреси інструкцій (у двійковій системі числення); машинні коди інструкцій (двійкові); мнемонічні коди інструкцій (операнди у десятковій системі числення); коментарі. Коментарі наводяться після крапки з комою.
Як видно з програми, оператор 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-й комірках).
Отже, маємо наступні інструкції умовних переходів:
JNZ – перехід, якщо ознака Z = 0 (результат у акумуляторі A0); код операції – 1000;
JZ – перехід, якщо ознака Z = 1 (результат у акумуляторі A=0); код операції – 1001;
JP – перехід, якщо ознака S = 0 (результат у акумуляторі A0); код операції – 1010;
JM – перехід, якщо ознака S = 1 (результат у акумуляторі A<0); код операції – 1011;
JNC – перехід, якщо ознака C = 0 (результат у акумуляторі A255); код операції – 1100;
JC – перехід, якщо ознака С = 1 (результат у акумуляторі A255); код операції – 1101.
Для прикладу мікропрограма інструкції JM матиме вигляд:
ЛАІ –> РА;
Пам(РА) –> РД;
РД –> РІ, декодування;
Якщо S=1, тоді Адр(РІ) –> ЛАІ,
інакше ЛАІ + 1 –> ЛАІ.
1.2. Для організації циклу засобами процесора DeComp в одній з комірок пам’яті необхідно розмістити лічильник циклів. Лічильник циклів це число, яке може мати значення N (якесь число) або 0 (const = N або const = 0). Відповідно, у циклі необхідно кожний раз лічильник зменьшувати (або збільшувати) на 1 і за допомогою інструкції умовного переходу перевіряти, чи потрібно зробити цикл ще раз.
Наприклад, у комірці 10 - лічильник (const = N), у комірці 11 – константа = 1 (const = 1), тоді обслуговування циклу:
LOOP: . . . – мітка (адреса) попередньої частини програми;
LOAD 10 - вибрати значення з комірки 10 і розмістити його у акумуляторі;
SUB 11 - із значення, що є у акумуляторі, відняти 1;
JNZ LOOP – перехід на LOOP, якщо у результаті виконання попередньої операції
вміст акумулятора не дорівнює 0, інакше – перехід на наступну
адресу.
Це є лічильник "на 0".
Особливості виконання операцій зсуву:
- LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку
переносу С).
- ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє не зі
старшого, тобто - знакового розряду, а з попереднього - старшого розряду числа).
- ROL, ROR - циклічні зсуви ( розряди обертаються, не потрапляючи у ознаку переносу С).
- RCL, RCR - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С).
2. Порядок виконання роботи:
Ознайомитись з теоретичними відомостями до лабораторної роботи № 3.
Дослідити в потактовому режимі інструкції ROL, RCL. JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак.
Скласти програму, закодувати її, ввести у симулятор та виконати її у автоматичному режимі, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок.
Розробити алгоритм і написати програму у інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи.
Оформити та захистити звіт з лабораторної роботи.
Вимоги до звіту.
Звіт повинен містити:
Назву (тему) лабораторної роботи;
Мету роботи;
Короткий теоретичний вступ (від 1,5 до 2 стор.);
Результати виконання пунктів 2 – 4 розділу „Порядок виконання роботи”;
Висновки.
Література.
Нешумова К. А. Электронные вычислительные машины и системы. Учеб. для техникумов спец. ЭВТ. – 2-е изд., доп. и перераб. М.: Высш. шк., 1989.
Рабинович З. Л., Раманаускас В. А. Типовые операции в вычислительных машинах. К.: Техніка, 1980.
Компьютеры: Справочное руководство. В 3-х томах. Том 1. Пер. с англ./ Под ред. Г. Хелмса – М.: Мир, 1986.
Преснухин Л. Н., Нестеров П. В. Цифровые вычислительные машины. Учеб. Пособие для втузов. М., «Высшая школа», 1974.
Цилькер Б. Я., Орлов С. А. Организация ЭВМ и систем. Учебник для вузов. – СПб.: Питер. 2006.
Хамахер К., Вранешич З., Заки. – Организация ЭВМ. 5-е изд. – СПб.: Питер; Киев: Издательская группа BHV, 2003. – (Серия «Классика computer science»).