Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Кафедра СКС
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій. ”
Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;
2. Засвоїти призначення регістра ознак процесора;
3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.
4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та
навчитися досліджувати хід виконання окремих інструкцій.
Ознайомитись з теоретичними відомостями до лабораторної роботи.
Усі інструкції у навчальному комп’ютері можна поділяти за такими напрямками:
За форматом коду інструкції;
За призначенням.
За форматом коду інструкції є адресні та безадресні.
Безадресні інструкції взагалі не використовують будь-які операнди, як, наприклад, інструкція HALT або інструкції зсувів. У таких інструкціях однозначно відомо, звідки брати операнди для операції, наприклад:
- інструкція NOT однозначно працює з акумулятором (інвертує його вміст);
- так само роблять усі інструкції зсувів (LSL, ASR, ROR та інші);
- а от інструкції INPUT та OUTPUT працюють не лише з акумулятором, але й з портами вводу (INPUT) та виводу (OUTPUT).
У свою чергу, адресні інструкції для виконання своєї операції потребують операнди, в якості яких може бути вміст будь-якої з 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).
2) Описати призначення прапорців Регістру Ознак.
Відповідно до обмежень, які закладені у архітектурі любого комп’ютера, у тому числі і нашого навчального – симулятора DeComp, результат виконання арифметичних і більшості інших інструкцій необхідно аналізувати для визначення його певних особливостей. Що саме:
- потрібно відрізняти додатні і від’ємні числа;
- потрібно визначати стан, коли результат виконання інструкції дорівнює нулю;
- потрібно визначати переповнення розрядної сітки акумулятора.
Для фіксації цих станів існує регістр ознак у процесорі, який має три тригери: Z, S i C. На панелі навчального комп’ютера він розміщений біля акумулятора.
Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.
Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.
Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки.
Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати –мікропрограму виконання з необхідними поясненями.
У комарках памяті 10 та 11 знаходяться числа 22 і 33 відповідно. Необхідно знайти їхню суму та записати в комірку 12.
Для виконання інструкцій використовуються комірки під номерами 0-3.
1-й такт. Натиснемо кнопку ПУСК. У результаті спочатку синім кольором засвітиться лічильник адреси інструкції (ЛАІ), а потім білим – регістр адреси пам’яті (РА) і значення ЛАІ опиниться у РА, тобто код розміщення нашої першої інструкції - 0000 0000 0000.
ЛАІ РА.
2-й такт. Тепер синім кольором засвітиться вікно пам’яті, а білим – регістр даних пам’яті (РД), тобто значення (вміст) виділеної комірки пам’яті (на яку вказує РА) зчитується і записується до РД – у мому випадку випадку – 0000 0000 0000 1010 .
ПамРА РД.
3-й такт: Синій – РД, білий – регістр інструкції (РІ), тобто ми переносимо машинний код інструкції з РД до спеціального регістра – РІ. (0000 0000 0000 1010)
РД РІ.
4-й такт. В 4-му кроці значення адреси операнда (тобто 0000 0000 1010) з регістру інструкцій РІ заноситься до РА:
АДР (РІ) РА.
5-й такт. Операнд (тобто, двійковий код числа 2210 - 0000 0000 0001 0110) зчитується з пам’яті і записується до РД:
Пам(РА) РД.
6-й такт. Операнд (0000 0000 0001 0110) зчитується з РД і записується в А(акумулятор):
РДА
7-й такт. Підгттовка адресу (0000 0000 0001) наступної інструкції.
ЛАІ+1 ЛАІ
8-й такт. З ЛАІ адреса (0000 0000 0001) наступної інструкції записується в РА.
ЛАІ РА
9-й такт. Зміст виділеної комірки памяті (0010 0000 0000 1011) записався в РД.
памРА РД.
10-й такт. Переносимо код (0010 0000 0000 1011) з РД в РІ.
РД РІ
11-й такт. Значення адреси (0000 0000 1011) з РІ переноситься в РА.
адрРІ РА.
12-й такт. Значення виділеної комірки (0000 0000 0010 0001) зчитується з записується в РД.
памРА РД.
13-й такт. Значення РД (0000 0000 0010 0001) додається до значення (0000 0000 0001 0110) яке знаходилося в А ( акумуляторі ). Результат (0000 0000 0011 0111)
А+РД А.
14-й такт. Оскільки операція додавання є арифметичною, тому вона впливає на усі 3 прапорці регістру ознак (РО). Внутрішні схеми процесора аналізують у акумуляторі результат виконання операції і включають, при необхідності, відповідний прапорець:
Z, S, C (A) РО.
15-й такт. Підготовка адресу (0000 0000 0010) наступної інструкції.
ЛАІ+1 ЛАІ.
16-й такт. З ЛАІ адреса (0000 0000 0010) наступної інструкції записується в РА.
ЛАІ РА.
17-й такт. Зміст виділеної комірки памяті (0001 0000 0000 1100) записався в РД.
памРА РД.
18-й такт. Переносимо код (0001 0000 0000 1100) з РД в РІ.
РД РІ.
19-й такт. Значення адреси (0000 0000 1100) з РІ переноситься в РА.
адрРІ РА.
20-й такт. Значення А(акумулятора) (0000 0000 0011 0111) записується в РД.
А РД.
21-й такт. Значення РД (0000 0000 0011 0111) записується в виділену комірку пам’яті РА (0000 0000 1100).
РД памРА.
22-й такт. Підготовка адресу (0000 0000 0011) наступної інструкції.
ЛАІ+1 ЛАІ.
23-й такт. З ЛАІ адреса (0000 0000 0011) наступної інструкції записується в РА.
ЛАІ РА.
24-й такт. Зміст виділеної комірки (0111 1100 0000 0000) памяті записався в РД.
памРА РД.
25-й такт. Переносимо код (0111 1100 0000 0000) і з РД в РІ.
РД РІ.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ РА
0000 0000 0000
вибір адреси 1-ї інструкції і занесення її до Регістра Адреси
2
памРА РД
0000 0000 0000 1010
вибір коду 1-ї інструкції з пам’яті і запис її до Регістру Даних
3
РД РІ
0000 0000 0000 1010
декодування інструкції у Регістрі Інструкцій
4
адрРІ РА
0000 0000 1010
вибір адреси 1-го операнда
5
памРА РД
0000 0000 0001 0110
вибір коду 1-го операнда з РА і занесення його до Регістра Даних
6
РДА
0000 0000 0001 0110
Занесення значення 1-го операнда РД в А(акумулятор)
7
ЛАІ+1 ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
8
ЛАІ РА
0000 0000 0001
вибір адреси 2-ї інструкції і занесення її до Регістра Адреси
9
памРА РД
0010 0000 0000 1011
вибір коду 2-ї інструкції з пам’яті і запис її до Регістру Даних
10
РД РІ
0010 0000 0000 1011
декодування інструкції у Регістрі Інструкцій
11
адрРІ РА
0000 0000 1011
вибір адреси операнда
12
памРА РД
0000 0000 0010 0001
Занесення значення 2-го операнда в РД
13
А+РД А
0000 0000 0010 0001
+
0000 0000 0001 0110
=
0000 0000 0011 0111
виконання операції додавання (1-й операнд – у акумуляторі)
14
Z,S,C(A)РО
000
встановлення прапорців регістру ознак
15
ЛАІ+1 ЛАІ
0000 0000 0010
підготовка адреси нової інструкції
16
ЛАІ РА
0000 0000 0010
вибір адреси 3-ї інструкції і занесення її до Регістра Адреси
17
памРА РД
0001 0000 0000 1100
вибір коду 3-ї інструкції з пам’яті і запис її до Регістру Даних
18
РД РІ
0001 0000 0000 1100
декодування інструкції у Регістрі Інструкцій
19
адрРІ РА
0000 0000 1100
вибір адреси операнда
20
А РД
0000 0000 0011 0111
Запис значення операнда А в РД
21
РД памРА
0000 0000 0011 0111
0000 0000 1100
Запис значення операнда РД в виділену пам'ять РА
22
ЛАІ+1 ЛАІ
0000 0000 0011
підготовка адреси нової інструкції
23
ЛАІ РА
0000 0000 0011
вибір адреси 4-ї інструкції і занесення її до Регістра Адреси
24
памРА РД
0111 1100 0000 0000
вибір коду 4-ї інструкції з пам’яті і запис її до Регістру Даних
25
РД РІ
0111 1100 0000 0000
декодування інструкції у Регістрі Інструкцій
4) Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати.
А) A=B
A=1510=11112; B=1510=11112.
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0000 0000 0000 1111
0000 0000 0000 1111
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 0000 0000 1111
0000 0000 0000 0000
0011 0000 0000 1011
0000 0000 0010
100
3-й крок
0000 0000 1100
0000 0000 0000 0000
0000 0000 0000 0000
0001 0000 0000 1100
0000 0000 0011
100
4-й крок
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0000
0111 1100 0000 0000
0000 0000 0011
100
У результаті віднімання двох однакових числе ми отримуємо 0, тому засвітився прапорець «Z» Регістру Ознак.
B) A>B
A=1510=11112; B=1310=11012
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0000 0000 0000 1111
0000 0000 0000 1111
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 0000 0000 1101
0000 0000 0000 0010
0011 0000 0000 1011
0000 0000 0010
000
3-й крок
0000 0000 1100
0000 0000 0000 0010
0000 0000 0000 0010
0001 0000 0000 1100
0000 0000 0011
000
4-й крок
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0010
0111 1100 0000 0000
0000 0000 0011
000
У результаті віднімання двох додатніх чисел, меншого від більшого, ми отримуємо число додатнє, тому не засвітився жоден прапорець Регістру Ознак.
C) A<B
A=1510=11112; B=1610=100002
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 1010
0000 0000 0000 1111
0000 0000 0000 1111
0000 0000 0000 1010
0000 0000 0001
000
2-й крок
0000 0000 1011
0000 0000 0001 0000
1111 1111 1111 1111
0011 0000 0000 1011
0000 0000 0010
011
3-й крок
0000 0000 1100
1111 1111 1111 1111
1111 1111 1111 1111
0001 0000 0000 1100
0000 0000 0011
011
4-й крок
0000 0000 0011
1111 1111 1111 1111
1111 1111 1111 1111
0111 1100 0000 0000
0000 0000 0011
011
У результаті віднімання двох додатніх числе, більшого від меншого ми отримуємо число від’ємне, тому засвітився прапорець Регістра Ознак «S».
Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
Інструкція LOAD:
Зчитування числа 1510 (0000 0000 0000 11112) із комірки 1010 (0000 0000 0000 10102).
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ РА
0000 0000 0000
вибір адреси інструкції і занесення її до Регістра Адреси
2
памРА РД
0000 0000 0000 1010
вибір коду інструкції з пам’яті і запис її до Регістру Даних
3
РД РІ
0000 0000 0000 1010
декодування інструкції у Регістрі Інструкцій
4
адрРІ РА
0000 0000 1010
вибір адреси операнда
5
памРА РД
0000 0000 0000 1111
вибір коду операнда з Регістру Адрес і занесення його до Регістра Даних
6
РД А
0000 0000 0000 1111
Занесення значення операнда РД в А(акумулятор)
7
ЛАІ + 1 ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
Для виконання команди LOAD необхідно підготувати числа які будуть зчитуватися, підготувати інструкцію 0000 аааа аааа аааа( де аааа аааа аааа – адреса комірки, яка буде зчитуватися, а 0000 код команди LOAD).
Інструкція STORE:
Запис числа 0 який знаходиться в А(акумоляторі) до 1210 (0000 0000 11002) комірки пам’яті.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ РА
0000 0000 0000
вибір адреси інструкції і занесення її до Регістра Адреси
2
памРА РД
0001 0000 0000 1100
вибір коду інструкції з пам’яті і запис її до Регістру Даних
3
РД РІ
0001 0000 0000 1100
декодування інструкції у Регістрі Інструкцій
4
адрРІ РА
0000 0000 1100
вибір адреси операнда
5
РД памРА
0000 0000 0000 0000
Запис значення Регістру Даних до виділеної комірки пам’яті Регістру Адрес
6
ЛАІ + 1 ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
Для виконання команди STORE необхідно записати число в А(акумулятор) яке буде записано в пам’ять, також необхідно підготувати інструкцію 0001 аааа аааа аааа
( де аааа аааа аааа – адреса комірки, у яку буде записно число, а 0001 код команди STORE).
Інстукція SUB:
Віднімання числа 1510 (0000 0000 0000 11112), яке знаходиться в комірці 1010 (10102) від числа 24010 (0000 0000 1111 00002) ,яке знаходиться в А(акумуляторі).
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА РД
0011 0000 0000 1010
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД РІ
0011 0000 0000 1010
декодування інструкції у Регістрі Інструкцій
4
РІ РА
0000 0000 1010
вибір адреси 1-го операнда
5
РА РД
0000 0000 0000 1111
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
6
А-РД А
0000 0000 1110 0001
виконання операції віднімання (2-й операнд – у акумуляторі)
7
ZSC(А) РО
000
встановлення прапорців регістру ознак
8
ЛАІ + 1 ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
Для виконання команди SUB необхідно підготувати числа, з якими буде проходити виконання дії,а аткож інструкцію 0011 аааа аааа аааа ( де аааа аааа аааа – адреса комірки, у якій знаходиться число яке будудть віднімати, а 0011 код команди SUB).
Висновки: У цій лабораторній роботі я засвоїв порядок виконання програм у комп’тері, ознайомився з форматом та набором інструкцій стимулятора навчально ЕОМ, засвоїм формати та способи використання інструкцій звертання до пам’яті та інструкції арифметичних операцій. Засвоїв призначення РО( Регістра Ознак) процесора. Ознайомився з потактовим режимом роботи навчального комп’ютера. Засвоїв базовий порядок виконання інструкції навчального комп’ютера та навчився досліджувати хід виконання окремих інструкцій.