Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.”
Тема:
“Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.”
Мета:
1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;
2. Засвоїти призначення регістра ознак процесора;
3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.
4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та
навчитися досліджувати хід виконання окремих інструкцій.
Теоретичні відомості
Усі інструкції у навчальному комп’ютері можна поділяти за такими напрямками:
За форматом коду інструкції;
За призначенням.
У свою чергу, адресні інструкції для виконання своєї операції потребують операнди, в якості яких може бути вміст будь-якої з 4096 комірок пам’яті симулятора. Отже, окрім коду операції, який займає найстарші 4 розряди машинного коду інструкції (від 15-го до 12-го ), решту розрядів займає 12-розрядна адреса комірки пам’яті, значення вмісту якої стане операндом і буде оброблятись у даній інструкції.
Усі інструкції навчального комп’ютера за призначенням можна розділити на такі групи:
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) ADD ADR – арифметичне додавання (від англ. Addition -додавання)
Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) ( Акумулятор.
Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора.
2) SUB ADR – віднімання (від англ. Subtraction - віднімання).
Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR) ( Акумулятор.
Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися. Інші властивості цієї інструкції співпадають із властивостями інструкції додавання ADD.
Призначення Регістру Ознак
Відповідно до обмежень, які закладені у архітектурі любого комп’ютера, у тому числі і нашого навчального – симулятора DeComp, результат виконання арифметичних і більшості інших інструкцій необхідно аналізувати для визначення його певних особливостей. Що саме:
- потрібно відрізняти додатні і від’ємні числа;
- потрібно визначати стан, коли результат виконання інструкції дорівнює нулю;
- потрібно визначати переповнення розрядної сітки акумулятора.
Для фіксації цих станів існує регістр ознак у процесорі, який має три тригери: Z, S i C. На панелі навчального комп’ютера він розміщений біля акумулятора.
Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.
Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.
Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. Так, наприклад, перенос виникне і, відповідно, встановиться тригер C, якщо додати два 16-ти розрядних числа у 16-ти розрядному процесорі:
Дослідження виконання інструкцій навчального комп’ютера
Оскільки більшість інструкцій призначені для виконання різних операцій, для яких необхідні вхідні числа, а також збереження результату, для більшості процесорів комп’ютерів стандартним є такий, більш детальний порядок виконання інструкцій:
вибірка інструкції;
декодування (розпізнавання) інструкції;
вибірка (читання) операндів;
виконання операції (арифметичної, логічної чи якоїсь іншої);
збереження (запис) результату.
Для дослідження порядку виконання окремих інструкцій у процесорі призначений 3-й режим роботи навчального комп’ютера – потактовий.
2.Порядок виконання роботи
1. Описати призначення прапорців Регістру Ознак:
Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.
Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.
Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. Так, наприклад, перенос виникне і, відповідно, встановиться тригер C, якщо додати два 16-ти розрядних числа у 16-ти розрядному процесорі:
Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0000 0000 0000 1010
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0000 0000 0000 1010
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 1010
вибір адреси 1-го операнда
5
РА ( РД
0000 0000 0001 1011
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
6
РД ( А
0000 0000 0001 1011
Вибір коду інструкції з РД і занесення його до А
7
ЛАІ + 1 ( ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
8
ЛАІ ( РА
0000 0000 0001
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
9
РА ( РД
0010 0000 0000 1111
вибір коду інструкції з РА і занесення його до Регістра Даних
10
РД ( РІ
0010 0000 0000 1011
декодування інструкції у Регістрі Інструкцій
11
РІ ( РА
0000 0000 1011
вибір адреси 1-го операнда
12
РА ( РД
0000 0000 0001 1011
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
13
РД ( А
0000 0000 0010 1010
виконання операції додавання (2-й операнд – у акумуляторі)
14
ZSC(А) ( РО
000
встановлення прапорців регістру ознак
15
ЛАІ + 1 ( ЛАІ
0000 0000 0010
підготовка адреси нової інструкції
16
ЛАІ ( РА
0000 0000 0010
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
17
РА ( РД
0001 0000 0000 1100
вибір коду інструкції з РА і занесення його до Регістра Даних
18
РД ( РІ
0001 0000 0000 1100
декодування інструкції у Регістрі Інструкцій
19
РІ ( РА
0000 0000 1100
вибір адреси 1-го операнда
20
А ( РД
0000 0000 0001 1011
Занесення результату з А до РД
21
РД ( пам’ять
0000 0000 0001 1011
Запис числа з РД у комірку пам’яті РА
22
ЛАІ + 1 ( ЛАІ
0000 0000 0011
підготовка адреси нової інструкції
23
ЛАІ ( РА
0000 0000 0011
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
24
РА ( РД
0111 1100 0000 0000
вибір коду інструкції з РА і занесення його до Регістра Даних
25
РД ( РІ
0111 1100 0000 0000
декодування інструкції у Регістрі Інструкцій
Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати.
Програма у покроковому режимі яка віднімає два числа А і В для значень, коли А = В, А > В і А < В:
До комірки з адресою 0 (0000 0000 0000) записую двійковий код першої інструкції – 0000 0000 0000 0111.
До комірки з адресою 1 (0000 0000 0001) записую двійковий код другої інструкції – 0011 0000 0000 1000.
До комірки з адресою 2 (0000 0000 0010) записую двійковий код третьої інструкції – 0001 0000 0000 1001.
До комірки з адресою 3 (0000 0000 0011) записую двійковий код четвертої інструкції – 0111 1100 0000 0000.
а) А = 1111, В = 1111.
РА
РД
А
РІ
ЛАІ
О
1-й крок
1010
11011
11011
1010
0001
-
2-й крок
1011
11011
0000
0011 0000 0000 1011
0010
Z
3-й крок
1100
101010
0000
0001 0000 0000 1100
0011
Z
4-й крок
0011
0111 1100 0000 0000
0000
0111 1100 0000 0000
0011
Z
цьому випадку в регістрі ознак жовтим кольором засвітилося значення z. Це означає, що результатом програми є нуль. І справді, якщо прочитати зачення результату у комірці 1001 то там буде 0000 0000 0000 0000.
б) А>В
А = 11011, В = 1111.
РА
РД
А
РІ
ЛАІ
О
1-й крок
1010
11011
11011
1010
0001
-
2-й крок
1011
1111
1100
0011 0000 0000 1011
0010
-
3-й крок
1100
101010
1100
0001 0000 0000 1100
0011
-
4-й крок
0011
0111 1100 0000 0000
1100
0111 1100 0000 0000
0011
-
В цьому випадку регістр ознак не набуває жодного значення оскільки результатом дії не є нуль і є додатнє число. Якщо прочитати зачення результату у комірці 1001 то там буде 0000 0000 0000 0001.
в) A<B
А = 1111 В = 11011
РА
РД
А
РІ
ЛАІ
О
1-й крок
1010
1111
1111
1010
0001
-
2-й крок
1011
11011
1111 1111 1111 0100
0011 0000 0000 1011
0010
SC
3-й крок
1100
1111 1111 1111 0100
1111 1111 1111 0100
0001 0000 0000 1100
0011
SC
4-й крок
0011
0111 1100 0000 0000
1100
0111 1100 0000 0000
0011
SC
В даному випадку засвітилися жовтим кольором прапорці S і C. S означає, що результатом є від’ємне число. С означає, що це результат вийшов за межі розрядної сітки, тобто виник перенос із старшого розряду результату і крайній розряд числа вийшов за межі розрядної сітки. Якщо прочитати зачення результату у комірці 1001 то там буде 1111 1111 1111 0100
Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
Інструкція LOAD. В даному випадку зевантажує значення з комірки 0000 0000 0111 до акумулятора.
0000 0000 0111 – код першої інструкції
0111 1100 0000 – код другої інструкції
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0000 0000 0000 1111
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0000 0000 0000 1111
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 1111
вибір адреси 1-го операнда
5
РА ( РД
0000 0000 0001 1011
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
6
РД ( А
0000 0000 0001 1011
виконання операції завантаження (2-й операнд – у акумуляторі)
Інструкція STORE. В даному випадку записує значення вмісту акумулятора у комірку пам’яті 0000 0000 0010.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0001 0000 0000 0010
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0001 0000 0000 0010
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 0010
вибір адреси 1-го операнда
5
А ( РД
0000 0000 0010 1010
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
6
РД ( РА
0000 0000 0010 1010
виконання операції записування (2-й операнд – у акумуляторі)
Інструкція SUB – це інструкція віднімання. Її машинний ко 0011, решту займає адреса комірки.
Мнемонічний запис
Код, що обробляється
Коментар
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
РА ( РД
0011 0000 0000 0010
вибір коду інструкції з РА і занесення його до Регістра Даних
РД ( РІ
0011 0000 0000 0010
декодування інструкції у Регістрі Інструкцій
РІ ( РА
0000 0000 0010
вибір адреси 1-го операнда
А ( РД
0000 0000 0000 1100
Віднімання вмісту акумулятора і даного, що міститься в комірці 1
Висновки: У даній лабораторній роботі я навчився працювати з інструкціями LOAD, STORE i SUB, засвоїв та ознайомився з регістром ознак процесора, навчився досліджувати програму у потактовому режимі та дослідив хід виконання окремих інструкцій.