Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

офк звіт 2

.doc
Скачиваний:
11
Добавлен:
21.12.2018
Размер:
261.12 Кб
Скачать

Міністерство освіти і науки України

Національний університет „Львівська політехніка”

Кафедра ЕОМ

Звіт

з лабораторної роботи № 2

з дисципліни: “Організація та функціонування комп’ютерів”

на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій ”

Виконав: ст.гр. КІ-11

Москва О.Р.

Прийняв: ст..викл.

Кудрявцев О.Т.

Львів

2011

Лабораторна робота № 2

Тема: Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.

Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;

2. Засвоїти призначення регістра ознак процесора;

3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.

4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та

навчитися досліджувати хід виконання окремих інструкцій.

Теоретичні відомості:

Усі інструкції навчального комп’ютера за призначенням можна розділити на такі групи:

1) інструкції звертання до пам’яті (LOAD та STORE);

2) арифметичні інструкції (ADD та SUB);

3) логічні інструкції (AND, OR, XOR та NOT);

4) інструкції вводу/виводу (INPUT та OUTPUT);

5) інструкції керування виконанням програми:

а) інструкція зупинки (HALT);

б) інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);

в) інструкція безумовного переходу (JMP);

6) інструкції зсувів (вліво (Left) та вправо (Right)):

а) інструкції логічного зсуву (LSL та LSR);

б) інструкції арифметичного зсуву (ASL та ASR);

в) інструкції циклічного зсуву (ROL та ROR);

г) інструкції циклічного зсуву через тригер ознаки переносу C (RCL та RCR).

1.1. Інструкції звертання до пам’яті:

1) LOAD ADR - завантажити машинний код цієї інстркції – 0000 aaaa aaaa aaaa; виконання – (ADDR)  Акумулятор.

Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. Наприклад, для того, щоб прочитати число з 15-ї або 2041-ої комірки пам’яті і записати його до акумулятора, необхідно використати :

Мнемонічний запис

Машинний код

LOAD 15

0000 0000 0000 1111

LOAD 2041

0000 1111 1111 1001

2) STORE ADR – зберегти. Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор (ADDR)).

Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Наприклад, щоб записати значення вмісту акумулятора до 148-ї або 2043 комірки, необхідно використати такі машинні коди:

Мнемонічний запис

Машинний код

STORE 148

0001 0000 1001 0100

STORE 2043

0001 1111 1111 1011

Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом, через який відбудеться передача.

Так, програма з двох інструкцій:

Мнемонічний запис

Машинний код

LOAD 28

0000 0000 0001 1100

STORE 56

0001 0000 0011 1000

виконує переміщення 16-розрядного числа, яке знаходилось у 28-й комірці пам’яті, до 56-ї комірки. Відзначимо, що інструкція читання (завантаження) LOAD не знищує числа у 28-ій комірці. Після виконання у цій програмі інструкції запису (збереження) STORE, код числа з 28-ої комірки пам’яті буде скопійований до 56-ої комірки, а у акумуляторі залишиться те саме 16-розрядне число з 28-ї комірки.

1.2. Інструкції арифметичних операцій:

1) ADD ADR – арифметичне додавання

Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) Акумулятор.

Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат.

Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора.

Нехай нам потрібно додати 3 числа, які знаходяться у 21-й, 22-й та 23-й комірках пам’яті, а результат необхідно зберегти в 25-й комірці. Відповідна програма у мнемонічних кодах матиме вигляд:

Машинний код

Мнемонічний запис

Коментар

0000 0000 0001 0101

LOAD 21

зчитування 1-го операнда з пам’яті до акумулятора

0010 0000 0001 0110

ADD 22

додавання вмісту акумулятора (числа з 21-ої комірки) і вмісту 22-ої комірки пам’яті. Тепер у акумуляторі знаходиться перший проміжний доданок

0010 0000 0001 0111

ADD 23

додавання першого проміжного доданку, що знаходиться у акумуляторі, з вмістом 23-ої комірки пам’яті. Тепер у акумуляторі – другий проміжний доданок – результат додавання трьох чисел

0001 0000 0001 1001

STORE 25

збереження результату у 25-й комірці пам’яті. Числовий код результату копіюється до 25-ї комірки і він же залишається у акумуляторі. У машинних кодах ця програма матиме наступний вигляд

2) SUB ADR – віднімання (від англ. Subtraction - віднімання).

Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR) Акумулятор.

Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися. Інші властивості цієї інструкції співпадають із властивостями інструкції додавання ADD.

1-й такт. Натиснемо кнопку ПУСК. У результаті спочатку синім кольором засвітиться лічильник адреси інструкції (ЛАІ), а потім білимрегістр адреси пам’яті (РА) і значення ЛАІ опиниться у РА, тобто код розміщення нашої першої (і єдиної) інструкції - 0000 0000 0000. Дійсно, перш ніж прочитати інструкцію з пам’яті, необхідно до РА занести її адресу. Оскільки за адресами інструкцій слідкує ЛАІ, то саме з нього ми беремо потрібну нам адресу: ЛАІ РА. Такий скорочений формат запису цього такту можна тлумачити таким чином: вміст регістру ЛАІ (де розміщена адреса інструкції) переноситься до РА.

2-й такт. Ще раз натиснемо кнопку ПУСК (Власне для виконання кожного такту потрібно натискати ПУСК). Тепер синім кольором засвітиться вікно пам’яті, а білимрегістр даних пам’яті (РД), тобто значення (вміст) виділеної комірки пам’яті (на яку вказує РА) зчитується і записується до РД – у нашому випадку - 0010 0000 0000 0001. Зараз машинний код інструкції вже прочитаний з пам’яті, але поки що знаходиться у регістрі даних:

ПамРА РД.

3-й такт: Синій – РД, білийрегістр інструкції (РІ), тобто ми переносимо машинний код інструкції з РД до спеціального регістра – РІ. Саме з нього процесор може декодувати інструкцію, що і відбувається на цьому ж 3-му кроці. З точки демонстрації дія декодування абсолютно непомітна – це внутрішній процес пристрою управління, але після нього процесор вже точно знає, які саме дії необхідно виконувати саме у цій інструкції:

РД РІ.

4-й такт. Оскільки команда додавання ADD використовує один з операндів, який знаходиться у пам’яті, тому на 4-му кроці значення адреси операнда (тобто 0000 0000 0001) з регістру інструкцій РІ заноситься до РА:

АДР (РІ) РА.

5-й такт. Операнд (тобто, двійковий код числа 1510 - 0000 0000 0000 1111) зчитується з пам’яті і записується до РД:

Пам(РА) РД.

6-й такт. Тепер ми маємо обидва операнди: один попередньо занесений у акумуляторі (0000 0000 1111 0000), а другий – у РД. Відповідно, на 6-му кроці виконується операція додавання і результат записується до акумулятора (0000 0000 1111 1111):

А + РД А.

Відзначимо, що виконання будь-якого етапу закінчується операцією запису якогось проміжного результату до одного з регістрів процесора або пам’яті. Так, сама операція додавання не потребує запису – вона є “наскрізною”: будь-яка зміна чисел (операндів) на входах АЛП призводить до майже миттєвої зміни на його виході. А от запис результату до акумулятора і визначає закінчення 6-го кроку.

7-й такт. Оскільки операція додавання є арифметичною, тому вона впливає на усі 3 прапорці регістру ознак (РО). Внутрішні схеми процесора аналізують у акумуляторі результат виконання операції (у нас – додавання) і включають, при необхідності, відповідний прапорець: Z, S, C (A) РО. (Хоча у нашому випадку жодна з ознак не змінюється).

8-й такт. На цьому виконання нашої інструкції ADD можна вважати закінченим. Залишився один маленький крок, хоча й надзвичайно важливий: підготувати адресу наступної інструкції. Якщо цього не зробити, процесор знову і знову виконуватиме ту ж саму інструкцію ADD:

ЛАІ + 1 ЛАІ.

У нашому випадку, замість інструкції у наступній комірці 0000 0000 0001, виявиться наше число 1510 = (0000 0000 0000 1111)2, але оскільки наша програма складається лише з однієї інструкції, то усе добре. Правильніше було б наш операнд записати до комірки, яка гарантовано не попадає у зону адрес роботи програми.

Отже, виконання інструкції ADD зайняло 8 тактів. У скороченому вигляді мікрокоманди виконання інструкції ADD для нашого прикладу можна було б представити у такому вигляді:

Мнемонічний запис

Код, що обробляється

Коментар

1

ЛАІ  РА

0000 0000 0000

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

2

РА  РД

0010 0000 0000 0001

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

3

РД  РІ

0010 0000 0000 0001

декодування інструкції у Регістрі Інструкцій

4

РІ  РА

0000 0000 0001

вибір адреси 1-го операнда

5

РА  РД

0000 0000 0000 1111

вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних

6

А + РД  А

0000 0000 1111 1111

виконання операції додавання (2-й операнд – у акумуляторі)

7

ZSC(А)  РО

000

встановлення прапорців регістру ознак

8

ЛАІ + 1  ЛАІ

0000 0000 0001

підготовка адреси нової інструкції

Такий запис мікрокоманд виконання інструкції називають мікропрограмою виконання інструкції. У дужках наведено фактичні значення, які записуються у регістри процесора для нашої інструкції ADD 01.

2. Порядок виконання роботи

1. Опис призначення прапорців Регістру Ознак;

Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.

Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.

Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки.

2. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1

У двійковому поданні дана програма матиме наступний вигляд:

0000 0000 0000 1010 – двійковий код 1-ої інструкції

0010 0000 0000 1011 - - “ - 2-ої інструкції

0001 0000 0000 1100 - - “ - 3-ої інструкції

0111 1100 0000 0000 - - “ - 4-ої інструкції

Відповідно, двійковий код першої інструкції необхідно занести до комірки з адресою 0 (0000 0000 0000), другу – у комірку з адресою 1 (0000 0000 0001), третю – у комірку з адресою 2 (0000 0000 0010), а четверту – у комірку з адресою 3 (0000 0000 0011).

Після того, як програма розміщена у пам’яті навчального комп’ютера і у 10-ту (код адреси у двійковій формі - 0000 0000 1010) та у 11-ту (код адреси - 0000 0000 1011) комірки будуть занесені задані числа, необхідно у Лічильнику Адреси Інструкції за допомогою набірного поля встановити адресу першої інструкції, тобто код адреси - 0000 0000 0000, тобто показати процесору звідки починати виконання програми.

Дослідження:

Мнемонічний запис

Код, що обробляється

Коментар

1

ЛАІ  PA

0000 0000 0000

Вибір першої інструкції і занесення її до Регістра Адреси

2

РА  РД

0000 0000 0000 1010

Вибір коду інструкції Load10 і занесення його до Регістра Даних

3

РД→ РІ

0000 0000 0000 1010

Декодування інструкції у Регістрі Інструкцій

4

РІ → РА

0000 0000 1010

Вибір адреси першого операнда

5

РА → РД

0000 0000 0000 1101

Вибір коду першого операнда з пам’яті і запис його до Регістру Даних

6

РД→ А

0000 0000 0000 1101

Занесення інформації з регістра даних в Акумулятор

7

ЛАІ+1→ ЛАІ

000 000 001

Вибір адреси другої інструкції

8

ЛАІ→ РА

000 000 001

Занесення адреси другої інструкції до Регістра Адреси

9

РА → РД

0010 0000 0000 1011

Вибір коду інструкції ADD11 і занесення його до Регістра Даних

10

РД → РІ

0010 0000 0000 1011

Декодування інструкції у Регістрі Інструкцій

11

РІ→ РА

0000 0000 1011

Вибір адреси другого операнда

12

РА→ РД

0000 0000 0010 0001

Вибір коду другого операнда і запис його до Регістру Даних

13

А+РД → А

0000 0000 0010 1110

Виконання операції додавання (другий операнд у акумуляторі)

14

ZSC(A) → РО

000

Встановлення прапорців регістру ознак

15

ЛАІ+1→ ЛАІ

0000 0000 0010

Вибір адреси третьої інструкції

16

ЛАІ→ РА

0000 0000 0010

Вибір третьої інструкції і занесення її до Регістра Адреси

17

РА → РД

0001 0000 0000 1100

Вибір коду інструкції STORE12 і занесення його до Регістра Даних

18

РД → РІ

0001 0000 0000 1100

Декодування інструкції у Регістрі Інструкцій

19

РІ → РА

0000 0000 1100

Вибір адреси другого операнда

20

А→ РД

0000 0000 0010 1110

Запис інформації з акумулятора в регістр даних(в 12 комірку)

21

РД → РА

22

ЛАІ+1→ ЛАІ

0000 0000 0011

Вибір адреси четвертої інструкції

23

ЛАІ→ РА

0000 0000 0011

Вибір четвертої інструкції і занесення її до Регістра Адреси

24

РА→ РД

0111 1100 0000 0000

Вибір коду інструкції HALT і занесення його до Регістра Даних

25

РД→ РІ

0111 1100 0000 0000

Декодування інструкції у Регістрі Інструкцій

4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення.

Програма що буде віднімати числа:

Програма:

Мнемонічний

код інструкції

Дія, яку виконує інструкція

LOAD 10

завантажити (прочитати) значення числа з 10-ї комірки пам’яті до

акумулятора;

SUB 11

Відняти від числа в акумуляторі значення числа з 11-ї комірки пам’яті і

результат зберегти в акумуляторі;

STORE 12

зберегти (записати) значення числа з акумулятора до 12-ї комірки пам’яті;

HALT

зупинити роботу процесора.

У двійковому поданні дана програма матиме наступний вигляд:

0000 0000 0000 1010 – двійковий код 1-ої інструкції

0011 0000 0000 1011 - - “ - 2-ої інструкції

0001 0000 0000 1100 - - “ - 3-ої інструкції

0111 1100 0000 0000 - - “ - 4-ої інструкції

Відповідно, двійковий код першої інструкції необхідно занести до комірки з адресою 0 (0000 0000 0000), другу – у комірку з адресою 1 (0000 0000 0001), третю – у комірку з адресою 2 (0000 0000 0010), а четверту – у комірку з адресою 3 (0000 0000 0011).

Після того, як програма розміщена у пам’яті навчального комп’ютера і у 10-ту (код адреси у двійковій формі - 0000 0000 1010) та у 11-ту (код адреси - 0000 0000 1011) комірки будуть занесені задані числа, необхідно у Лічильнику Адреси Інструкції за допомогою набірного поля встановити адресу першої інструкції, тобто код адреси - 0000 0000 0000, тобто показати процесору звідки починати виконання програми.

При А=B (3=3)

інструкція

Крок 1

Крок 2

Крок 3

Крок 4

РА

0000 0000 1010

0000 00001011

0000 0000 0010

0000 0000 0011

РД

0000 00000011

0000 00000011

0000 00000000

0111110000000000

S C Z

------

Z

Z

Z

А

0000 0000 0000 0011

000000000000 0000

0000 0000 0000 0000

0000 000000000000

РІ

0000 0000 0000 1010

0011000000001011

00001000000001100

0111110000000000

ЛАІ

000000000001

000000000010

000000000011

0000 0000 0011

Загорівся прапорець що означає нуль, бо 3-3=0.

При А>B (4=3)

інструкція

Крок 1

Крок 2

Крок 3

Крок 4

РА

000000001010

000000001011

000000001100

000000000011

РД

0000000000000100

0000000000000011

0000000000000001

0111110000000000

S C Z

----

----

----

----

Акумулятор

0000000000000100

0000000000000001

0000000000000001

0000000000000001

РІ

1010

0011000000001011

00001000000001100

0111110000000000

ЛАІ

000000000001

000000000010

000000000011

000000000011

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]