Лабораторна робота №2 ОФК

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
СІ
Кафедра:
Кафедра ЕПМС

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Організація та функціонування комп’ютерів

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи № 2 з дисципліни: «Організація та функціонування комп’ютерів» на тему: «Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій» Мета: Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій; Засвоїти призначення регістра ознак процесора; Ознайомитися з потактовим режимом роботи навчального комп’ютера. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та навчитися досліджувати хід виконання окремих інструкцій. Теоретичні відомості Нагадаємо, що за форматом коду інструкції є адресні та безадресні (див. розділ ІІ “Опис архітектури навчального комп’ютера 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). 1) LOAD ADR - завантажити (від англ. Load - завантажувати). Дивимося на рис. 2.3: машинний код цієї інстркції – 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 - зберегти (від англ. Store - зберігати) Машинний код – 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 – арифметичне додавання (від англ. Addition -додавання) Машинний код – 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. Ознайомитись з теоретичними відомостями до лабораторної роботи № 2. 2. Описати призначення прапорців Регістру Ознак Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками. Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S. Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. 3. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями. Записати у пам’ять описану нижче програму, яка додаватиме числа, що знаходяться у 10-й та 11-й комірках пам’яті, а результат запише до 12-ї комірки. Програму розмістити у оперативній пам’яті, починаючи з комірки за адресою 0 (нуль). Попередньо у 10-ту та 11-ту комірки занести числа відповідно до свого варіанту Програма: 0000 0000 0000 1010 – двійковий код 1-ої інструкції 0010 0000 0000 1011 - - “ - 2-ої інструкції 0001 0000 0000 1100 - - “ - 3-ої інструкції 0111 1100 0000 0000 - - “ - 4-ої інструкції № за списком – 23 Число 1 – 29 Число 2 – 22 За допомогою набірного поля вводимо дану програму до пам’яті комп’ютера; Перемикаємо режим виконання програми на потактовий, нажимаю «Пуск», (слід зазначити, що у по тактовому режимі під час здійснення аналізу на панелі процесора синім кольором позначатиметься джерело інформації, а білим – місце призначення) № п/п Код інструкції Мнемонічний запис Коментар  1 0000 0000 0000 ЛАІ→РА Вибір адреси 1-ої інструкції і занесення її до РА  2 0000 0000 0000 1010 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  3 0000 0000 0000 1010 РД→РІ Декодування інструкції у РІ  4 0000 0000 1010 РІ→РА Вибір адреси 1-го операнда  5 0000 0000 0001 0000 Пам.РА→РД Вибір коду 1-го операнда з пам’яті і запис його до РД  6 0000 0000 0001 0000 РД→А Запис першого операнда до А  7 0000 0000 0001 ЛАІ→ЛАІ Вибір адреси 2- інструкції  8 0000 0000 0001 ЛАІ→РА Занесення адреси 2-ї інструкції до Регістру Адреси Пам’яті  9 0010 0000 0000 1011 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  10 0010 0000 0000 1011 РД→РІ Декодування інструкції у РІ  11 0000 0000 1011 РІ→РА Вибір адреси 2-го операнда  12 0000 0000 0010 0101 Пам.РА→РД Вибір коду 2-го операнда з пам’яті і запис його до РД  13 0000 0000 0011 0101 РД+А→А Виконується додавання у А, сума двох операндів  14 0 0 0 А→РО Встановлення прапорців регістру ознак  15 0000 0000 0010 ЛАІ→ЛАІ Вибір адреси 3-ї інструкції  16 0000 0000 0010 ЛАІ→РА Занесення адреси 3-ї інструкції до Регістру Адреси Пам’яті  17 0001 0000 0000 1100 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  18 0001 0000 0000 1100 РД→РІ Декодування інструкції у РІ  19 0000 0000 1100 РІ→РА Вибір адреси запису результату додаваня  20 0000 0000 0011 0101 А→РД Запис вмісту акумулятора до РД  21 0000 0000 0011 0101 РД→Пам.РА Запис результату додавання до пам’яті  22 0000 00000 0011 ЛАІ→ЛАІ Визначення адреси 4-ї інструкці  23 0000 0000 0011 ЛАІ→РА Занесення адреси 4-ї інструкції до Регістру Адреси Пам’яті  24 0111 1100 0000 0000 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  25 0111 1100 0000 0000 РД→РІ Декодування інструкції у РІ (завершення виконання програми)   4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати. Вибираємо довільні значення для А і В: А = 8; В = 4; Переводимо дані числа до двійкової системи числення: 8 : 2 = 4 (зал. 0) 810 = 10002 4 : 2 = 2 (зал. 0) 2 : 2 = 1 (зал. 0) 1 : 2 = 0 (зал. 1) 4 : 2 = 2 (зал. 0) 410 = 1002 2 : 2 = 1 (зал. 0) 1 : 2 = 0 (зал. 1) А – В, де А = В = 4 1) За допомогою набірного поля записуємо програму, що виконуватиме віднімання числа А від В; 2) Виставляємо покроковий режим, натискаємо кнопку «ПУСК»; 3) Записуємо результати виконання дослідження і значення прапорців ознак у таблицю: № РА РД А РІ ЛАІ РО ( z s c)  1 0000 0000 1010 0000 0000 0000 0100 0000 0000 0000 0100 0000 0000 0000 1010 0000 0000 0001 0 0 0  2 0000 0000 1011 0000 0000 0000 0100 0000 0000 0000 0000 0011 0000 0000 1011 0000 0000 0010 1 0 0  3 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 1100 0000 0000 0011 1 0 0  4 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 0000 0111 1100 0000 0000 0000 0000 0011 1 0 0   Результат опреції віднімання А від В становить 0, про що каже прапорець «Z» А – В, А>B, де А = 8; В = 4 Виконуємо ті ж самі дії які виконували у попередньому завданні № РА РД А РІ ЛАІ РО ( z s c)  1 0000 0000 1010 0000 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 1010 0000 0000 0001 0 0 0  2 0000 0000 1011 0000 0000 0000 0100 0000 0000 0000 0000 0011 0000 0000 1011 0000 0000 0010 0 0 0  3 0000 0000 1100 0000 0000 0000 0100 0000 0000 0000 0100 0001 0000 0000 1100 0000 0000 0011 0 0 0  4 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 0010 0111 1100 0000 0000 0000 0000 0011 0 0 0   Тут регістр ознак не змінився, із чого можна сказати що при відніманні утворилося додатнє число А – В, А<B, де А = 4; В = 8 Виконуємо ті ж самі дії які виконували у попередніх двох завданнях № РА РД А РІ ЛАІ РО ( z s c)  1 0000 0000 1010 0000 0000 0000 0100 0000 0000 0000 0100 0000 0000 0000 1010 0000 0000 0001 0 0 0  2 0000 0000 1011 0000 0000 0000 1000 1111 1111 1111 1100 0011 0000 0000 1011 0000 0000 0010 0 1 1  3 0000 0000 1100 1111 1111 1111 1100 1111 1111 1111 1100 0001 0000 0000 1100 0000 0000 0011 0 1 1  4 0000 0000 0011 0111 1100 0000 0000 1111 1111 1111 1100 0111 1100 0000 0000 0000 0000 0011 0 1 1   При відніманні ми отримуємо від’ємне число, про що свідчать ввімкнені прапорці «С» та «S». Прапорець «С» показує, що виник перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки, а прапорець «S» - що результат віднімання є від’ємним. 5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті. Інструкція LOAD ( Машинний код: 0000 aaaa aaaa aaaa) зчитує дані з комірки пам’яті з адреси aaaa aaaa aaaa і записує їх до акумулятора. Вона обробляє лише один операнд, що повинен бути завчасно підготовлений. Робимо підготовку до дослідження. За допомогою набірного поля записуємо у 0 комірку інструкцію LOAD 01 (0000 0000 0000 0001), а у 1 – число 8( 0000 0000 0000 1000); У ЛАІ встановлюємо початок програми з 0 комірки; Переключаємо покроковий режим роботи на потактовий, і виконуємо програму. № п/п Код інструкції Мнемонічний запис Коментар  1 0000 0000 0000 ЛАІ→РА Вибір адреси інструкції і занесення її до Регістра Адреси  2 0000 0000 0000 0001 Пам.РА→РД Вибір коду інструкції з РА і занесення його до Регістра Даних  3 0000 0000 0000 0001 РД→РІ Декодування інструкції у Регістрі Інструкцій  4 0000 0000 0001 РІ→РА Вибір адреси операнда  5 0000 0000 0000 0111 Пам.РА→РД Вибір коду операнда з пам’яті і запис його до Регістру Даних  6 0000 0000 0000 0111 РД→А Запис вмісту РД до А  7 0000 0000 0001 ЛАІ→ЛАІ Визначення адреси наступної інструкції   2) Інструкція STORE ( Машинний код: 0001 аааа аааа аааа) записує з акумулятора число в комірку з адресою аааа аааа аааа. Інструкція обробляє також один операнд, що повинен бути підготовлений наперед. Проводимо підготовку до дослідження. За допомогою набірного поля записуємо у 0 комірку інструкцію STORE 01 (0001 0000 0000 0001), а в Аккумулятор число 8 ( 0000 0000 0000 0111); У ЛАІ виставляємо початок програми з 0 комірки; Перевіряємо чи виставлений потактовий режим роботи, і виконуємо програму. № п/п Код інструкції Мнемонічний запис Коментар  1 0000 0000 0000 ЛАІ→РА Вибір адреси інструкції і занесення її до Регістра Адреси  2 0001 0000 0000 0001 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  3 0001 0000 0000 0001 РД→РІ Декодування інструкції у РІ  4 0000 0000 0001 РІ→РА Вибір адреси запису операнда  5 0000 0000 0000 0111 А→РД Запис значення Акумулятора до РД  6 0000 0000 0000 0111 РД→Пам.РА Запис вмісту РД до Пам’яті  7  0000 0000 0001 ЛАІ→ЛАІ Визначення адреси наступної інструкції   3) Інструкція SUB ( Машинний код: 0011 аааа аааа аааа ) віднімає два числа (від того, що міститься в акумуляторі віднімається число, що знаходиться у комірці з адресою аааа аааа аааа). Дана інструкціє обробляє 2 операнда, які повинні бути заздалегідь підготовлені. Проводимо підготовку до дослідження. За допомогою набірного поля записуємо у 0 комірку інструкцію SUB 01( 0011 0000 0000 0001), у 1 комірку – число 4 ( 0000 0000 0000 0101), а у Акумулятор – число 8( 0000 0000 0000 1000); У ЛАІ вибираємо початок програми з 0 комірки; Перевіряємо чи виставлений потактовий режим роботи, і виконуємо програму. № п/п Код інструкції Мнемонічний запис Коментар  1 0000 0000 0000 ЛАІ→РА Вибір адреси 1-ої інструкції і занесення її до РА  2 0001 0000 0000 0001 Пам.РА→РД Вибір коду інструкції з РА і занесення його до РД  3 0001 0000 0000 0001 РД→РІ Декодування інструкції у РІ  4 0000 0000 0001 РІ→РА Вибір адреси 1-го операнда (2-й операнд – у акумуляторі)  5 0000 0000 0000 0101 Пам.РА→РД Вибір коду 1-го операнда з пам’яті і запис його до РД  6 0000 0000 0000 0011 РД+А→А Виконання операції віднімання(додавання з перетворенням коду від’ємника з прямого на доповняльний)  7  000 А→РО Встановлення прапорців регістру ознак  8 0000 0000 0001 ЛАІ→ЛАІ Підготовка адреси нової інструкції   Висновок: у даній лабораторній роботі я засвоїв порядок виконання програм у комп’ютері, ознайомився з форматом та набором інструкцій симулятора навчальної ЕОМ, засвоїв формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій. Засвоїв призначення регістра ознак процесора. Ознайомився з потактовим режимом роботи навчального комп’ютера. Засвоїв базовий порядок виконання інструкції навчального комп’ютера та навчитися досліджувати хід виконання окремих інструкцій.
Антиботан аватар за замовчуванням

28.05.2019 16:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!