Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера.
Загальний порядок виконання інструкцій. ”
Тема: Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.
Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ;
2. Засвоїти призначення регістру ознак процесора;
3. Ознайомитися з режимами роботи навчального комп’ютера. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та навчитися досліджувати хід виконання окремих інструкцій.
Теоретичні відомості
Для виконання конкретної задачі у пам’ять записується відповідна програма, яка складається із множини інструкцій. Інструкції по черзі пересилаються з пам’яті у процесор, який їх виконує. У відповідності до розглянутих принципів процесор працює наступним чином:
за вказаною адресою зчитує першу інструкцію;
виконує дії, вказані у цій інструкції;
збільшує вказану адресу на 1 і переходить до виконання нової, наступної інструкції і т.п.
Усі інструкції у навчальному комп’ютері можна розділяти за такими напрямками:
За форматом коду інструкції;
За призначенням.
Перший поділ ми розглянули у роботі № 1. Нагадаємо: інструкції є адресні та безадресні. Безадресні інструкції або взагалі не використовують будь-які операнди (це числа, що використовуються у якості даних), як, наприклад, інструкції 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).
Отже, перша група інструкцій – це:
1.1. Інструкції звертання до пам’яті:
1). LOAD ADR - завантажити (від англ. Load - завантажувати). Дивимся у рис. 1.1.:
машинний код – 0000 aaaa aaaa aaaa; виконання – (ADDR) ( Акумулятор.
Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. Наприклад, для того, щоб прочитати число з 15-ї або 2041-ої комірки пам’яті і записати його до акумулятора, необхідно використати :
Таблиця 1.1.
Мнемонічний запис
Машинний код
LOAD 15
0000 0000 0000 1111
LOAD 2041
0000 1111 1111 1001
2). STORE ADR - зберегти (від англ. Store - зберігати)
Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор ( (ADDR)).
Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Наприклад, щоб записати значення вмісту акумулятора до 148-ї або 2043 комірки, необхідно використати наступні машинні коди:
Таблиця 1.2.
Мнемонічний запис
Машинний код
STORE 148
0001 0000 1001 0100
STORE 2043
0001 1111 1111 1011
Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом через який відбудеться передача.
Наступна група інструкцій – це:
1.2. Інструкції арифметичних операцій:
1). ADD ADR – арифметичне додавання (від англ. Addition -додавання)
Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) ( Акумулятор.
Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат.
2). SUB ADR – віднімання (від англ. Subtraction - віднімання).
Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR) ( Акумулятор.
Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися.
1.3. Призначення Регістру Ознак
Відповідно до обмежень, які закладені у архитектурі любого комп’ютера, у тому числі і нашого навчального – симулятора DeComp, результат виконання арифметичних і більшості інших інструкцій необхідно аналізувати для визначення його певних особливостей. Що саме:
- потрібно відрізняти додатні і від’ємні числа;
- потрібно визначати стан, коли результат виконання інструкції дорівнює нулю;
- потрібно визначати переповнення розрядної сітки акумулятора.
Для визначення таких станів існує регістр ознак у процесорі, який має три тригери: Z, S i C. На панелі навчального комп’ютера він розміщений біля акумулятора.
Нагадаємо, що прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.
Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’много результату за винятком чисел у доповняльному коді, яких ми поки що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.
І, нарешті, прапорець C (Carry - переніс) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату.
Хід роботи
2). Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.
Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Інструкція ADD не може дати від’много результату за винятком чисел у доповняльному коді, яких ми поки що не розглядаємо. Якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.
Прапорець C (Carry - переніс) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату.
3).
ЛАІ ( РА - (0000 0000 0000) - вибір адреси інструкції;
Пам(РА) ( РД - (0000 0000 0010 0101)- вибір коду інструкції;
РД ( РІ, - (0000 0000 0010 0101) - декодування інструкції;
Адр(РІ) ( РА - (0000 0000 1010) - вибір адреси 1-го операнду;
Пам(РА)( РД - (0000 0000 0010 0101)- вибір коду 1-го операнду;
РД ( А - (0000 0000 1111 1111) – виконання інструкції 1-й операнд – у акумуляторі);
ZSC(А) ( РО - (000) - встановлення прапорців регістру ознак;
ЛАІ + 1 ( ЛАІ - (0000 0000 0001) - підготовка адреси нової
ЛАІ ( РА - (0000 0000 0001) - вибір адреси інструкції;
Пам(РА) ( РД - (0010 0000 0001 0101)- вибір коду інструкції;
РД ( РІ, - (0010 0000 0001 0101) - декодування інструкції;
Адр(РІ) ( РА - (0000 0000 1011) - вибір адреси 2-го операнду;
Пам(РА)( РД - (0000 0000 0001 0101)- вибір коду 2-го операнду;
РД+А ( А - (0010 0000 0001 0101) – виконання інструкції 2-й операнд + акумулятор – у акумуляторі);
ZSC(А) ( РО - (000) - встановлення прапорців регістру ознак;
ЛАІ + 1 ( ЛАІ - (0000 0000 0011) - підготовка адреси нової
ЛАІ ( РА - (0000 0000 0011) - вибір адреси інструкції;
Пам(РА) ( РД - (0100 0000 0000 1100)- вибір коду інструкції;
РД ( РІ, - (0100 0000 0000 0100) - декодування інструкції;
Адр(РІ) ( РА - (0000 0000 1100) - вибір адреси ;
Пам(РА)( РД - (0100 0000 000 1100)- вибір коду ;
РД ( А - (0000 0000 1111 1111) – виконання інструкції акумулятор – у 12 комірку);
ZSC(А) ( РО - (000) - встановлення прапорців регістру ознак;
ЛАІ + 1 ( ЛАІ - (0000 0000 0100) - підготовка адреси нової
інструкції.
ЛАІ ( РА - (0000 0000 0100) - вибір адреси інструкції;
Пам(РА) ( РД - (1111 1100 0000 0000)- вибір коду інструкції;
РД ( РІ, - (1111 1100 0000 0000 ) - декодування інструкції;
Завершення роботи.
4). Вводимо у пам’ять програму, яка відніматиме два чила А і В. Починаємо з комірки з адресо. 0000 0000 0000 0000. Числа будуть знаходитися у комірках з адресами:
Число А – 0000 0000 0000 1010, В – 0000 0000 0000 1011, А результат запишемо до комірки з адресою 0000 0000 0000 1100.
Програма матиме наступний вигляд:
0000 0000 0000 1010 LOAD 10
0011 0000 0000 1011 SUB 11
0001 0000 0000 1100 STORE 12
0111 1100 0000 0000. HALT
а). А=В=20. Заносимо до комірки з адресою 0000 0000 0000 число А, яке рівне
0000 0000 0001 0100 і таке ж саме значення до комірки - 0000 0000 0000 1011.
Виконаємо програму у покроковому режимі.
По закінчені програми ми спостерігаємо, значення Регістру ознак рівне Z (Zero - нуль), тобто кінцевий результат рівний нулю. Значення комірки за адресою 0000 0000 0000 1100 рівне 0000 0000 0000 0000.
б). А>B. А=0000 0000 0010 1000, В=0000 0000 0001 1001. По закінчені програми ми спостерігаємо, що прапорці Регістру ознак не увімкнені. Кінцевий результат рівний15. Значення комірки за адресою 0000 0000 0000 1100 рівне 0000 0000 0000 1111.
в). А<B. А=0000 0000 0001 1001, В=0000 0000 0010 1000. По закінчені програми ми спостерігаємо, значення Регістру ознак рівне S (Sign - знак) та C (Carry - переніс), тобто кінцевий результат від’ємний і відбувається переніс у старший розряд. Значення комірки за адресою 0000 0000 0000 1100 рівне 1111 11111 1111 0001 (В пам’яті симулятора не вистачає розрядної сітки для виведення числа -15.
5). ЛАІ ( РА - (0000 0000 0000) - вибір адреси інструкції;
Пам(РА) ( РД - (0011 0000 0010 1010)- вибір коду інструкції;
РД ( РІ, - (0011 0000 0000 1010) - декодування інструкції;
Адр(РІ) ( РА - (0000 0000 1010) - вибір адреси 1-го операнду;
Пам(РА)( РД - (0000 0000 0010 1100)- вибір коду 1-го операнду;
А-РД ( А - (0011 0000 0000 1010) – виконання інструкції акумулятор – 1-ий операнд – у акумуляторі);
ZSC(А) ( РО - (100) - встановлення прапорців регістру ознак;
ЛАІ + 1 ( ЛАІ - (0000 0000 0001) - підготовка адреси нової
№
п\п
Значення РА у двійковому коді
Код інструкції
Мнемонічний запис інструкції
Коментар
1.
0000 0000 0000 0000
0000 0000 0000 1010
LOAD 10
Зчитує значення 10-ої комірки і записує його до акумулятора.
2.
0000 0000 0000 0001
11 000 000 001 011
SUB 11
Зчитує значення 11-ої комірки і віднімає його від значення акумулятора та заносить результат у Акумулятор.
3.
0000 0000 0000 0010
0001 0000 0000 1100
STORE 12
Зчитує значення Акумулятора і заносить його до комірки з адресою 12.
Висновок:
На даній лабораторній роботі засвоїв порядок виконання програм у комп’ютері,
ознайомився з форматом та набором інструкцій симулятора навчальної ЕОМ,
засвоїв призначення регістру ознак процесора, ознайомився з режимами роботи навчального
комп’ютера та засвоїв базовий порядок виконання інструкції навчального комп’ютера та
навчився досліджувати хід виконання окремих інструкцій. Навчився вводити інструкції до
пам’яті навчальної ЕОМ та розрізняти харатер кінцевих результатів за допомогою Регістру
ознак та зрозумів порядок роботи процесора.