Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра СКС
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.”
Тема: Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.
Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;
2. Засвоїти призначення регістра ознак процесора;
3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.
4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та
навчитися досліджувати хід виконання окремих інструкцій.
1. Теоретичні відомості
Усі інструкції у навчальному комп’ютері можна поділяти за такими напрямками:
За форматом коду інструкції;
За призначенням.
Нагадаємо, що за форматом коду інструкції є адресні та безадресні (див. розділ ІІ “Опис архітектури навчального комп’ютера DeComp”). Безадресні інструкції взагалі не використовують будь-які операнди, як, наприклад, інструкція 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. Хід виконання роботи
1. Описати призначення прапорців Регістру Ознак;
Регістр ознак призначений для аналізу результату арифметичних дій. Він складається з трьох тригерів:
Z (Zero - нуль) – цей прапорець змінює своє значення на 1 коли у результаті обчислення в акумуляторі знаходиться нуль.
S (Sign - знак) – цей прапорець відслідковує від’ємні числа, змінює своє значення на одиницю коли в результаті обчислень в акумуляторі записане від’ємне число.
C (Carry - перенос) – цей прапорець інформує про переповнення розрядної сітки, встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки.
2. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями.
Як і у першій роботі перед вводом програми я записую числа та у комірки з адресою та . Після цього я вводжу програму з лабораторної роботи №1.
Задана програма у мнемонічних кодах:
Програма у машинних кодах:
- двійковий код 1-ої інструкції
- двійковий код 2-ої інструкції
- двійковий код 3-ої інструкції
- двійковий код 4-ої інструкції
Коли числа і програма записані до пам’яті я запускаю програму у потоковому режимі.
Дослідження додавання двох чисел у по тактовому режимі
інструкція комп’ютер регістр
3. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати
Моя програма для віднімання двох чисел:
Перша умова(А=В) вимагає двох рівних чисел для обчислень, я вибрав число 44. Число у двійковому коді:
Виконую програму у покроковому режимі, покази регістрів:
У цьому випадку в регістрі ознак жовтим кольором засвітилося значення Z. Це означає, що результатом програми є нуль. І справді, якщо прочитати значення результату у комірці (111)2 то там буде (0000 0000 0000 0000)2.
Виконуємо програму змінивши умову(А > В), для цієї умови я вибрав такі числа:
Покази регістрів:
Регістр ознак показує значення , адже ми віднімали числа які задовільнять умову(А > В), тому результат не є від’ємним числом чи нулем.
Запустимо знову змінивши умову(А<В), обміняємо числа 44 і 37 місцями.
Покази регістрів:
В даному випадку засвітилися жовтим кольором прапорці S і C. S означає, що результатом є від’ємне число. С означає, що це результат вийшов за межі розрядної сітки, тобто виник перенос із старшого розряду результату і крайній розряд числа вийшов за межі розрядної сітки. Якщо прочитати значення результату у комірці (111)2 то там буде (1111 1111 1111 1001)2.
5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
Load
Інструкція LOAD(Машинний код: 0000 аааа аааа аааа), зчитує дані з комірки пам’яті з адреси «аааа аааа аааа» і записує їх до акумулятора. Вона обробляє лише один операнд, що повинен бути заздалегідь підготовлений.
У комірку з адресою 010(0000000002) записую інструкцію
LOAD 05 (0000 0000 0000 0101), а в комірку з адресою 52(0000000001012) записую число 1010(00000000000010102). У ЛАІ записую адрес цієї інструкції, тобто 010(0000000002). Результатом роботи програми повинно бути завантаження числа 00000000000010102 до Акумулятора.
Store
Інструкція STORE 01 (Машинний код: 0001 aaaa aaaa aaaa), записує з акумулятора число в комірку з адресою «аааа аааа аааа». Інструкція обробляє однин операнд, що повинен бути підготовлений заздалегідь.
Записую в комірку з адресою 010(0000000002) інструкцію
Store 11 (0001 0000 0000 1011). Тоді в Акумулятор записую число 1010(00000000000010102). У ЛАІ записую адрес цієї інструкції, тобто 010(0000000002). Результатом роботи програми повинно бути завантаження числа з Акумулятора до комірки пам'яті з адресою. 1110(0000000010112).
SUB
Інструкція SUB (Машинний код: 0011 aaaa aaaa aaaa), віднімає два числа(від того, що міститься в акумуляторі віднімає число, що знаходиться у комірці з адресю «аааа аааа аааа»). Дана інструкція обробляє два операнда, які повинні бути заздалегідь підготовлені.
Записую в комірку з адресою 010(0000000002) інструкцію Sub 11 (0011 0000 0000 1011).
В комірку з адресою 1110(00000000000010112) записую число 1010(00000000000010102).
В Акумулятор записую число 2110(00000000000101012). У ЛАІ записую адрес цієї інструкції, тобто 010(0000000002). Результатом роботи програми повинно бути збереження числа
1110(00000000000010112) в Акумуляторі, бо 21-10=11.
3.Висновок