Лабораторна робота 2

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Інститут комп’ютерних технологій, автоматики та метрології
Кафедра:
СКС

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

Рік:
2016
Тип роботи:
Звіт до лабораторної роботи
Предмет:
ООФК
Група:
КІ 13
Варіант:
2 6 РКФ

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра СКС / ЗВІТ з лабораторної роботи № 2 з дисципліни «Організація та функціонування комп’ютерів» на тему: «Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.» Тема: «Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій» Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій; 2. Засвоїти призначення регістра ознак процесора; 3. Ознайомитися з потактовим режимом роботи навчального комп’ютера. 4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та навчитися досліджувати хід виконання окремих інструкцій. Теоретична частина Усі інструкції навчального комп’ютера за призначенням можна розділити на такі групи: 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 - завантажувати); машинний код цієї інструкції – 0000 aaaa aaaa aaaa; виконання – (ADDR) ( Акумулятор. Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. 2) STORE ADR - зберегти (від англ. Store - зберігати); машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор ( (ADDR). Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом, через який відбудеться передача. 3) ADD ADR – арифметичне додавання (від англ. Addition -додавання); машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) ( Акумулятор. Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат. Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора. 4) 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-ти розрядному процесорі:  - результат – 17-ти розрядне число. Відслідковувати виникнення переносу (ознака – C) або від’ємного результату (ознака – S) повинен сам програміст і це дуже важлива задача, оскільки є головною умовою отримання коректного, правильного результату. Адже, наприклад, у розглянутому прикладі, якщо не врахувати виникнення переносу, отримаємо: 22 375 + 47 733 = 4 572 (замість 70 108). Які дії треба виконувати для корекції помилкових результатів – це питання буде розглядатися при вивченні алгоритмів виконання арифметичних операцій у наступних роботах. Деколи різні ознаки результату можуть з’являтися одночасно. Які ознаки встановлюються і якою інструкцією подано на рис. 2.3. Наприклад, інструкція віднімання SUB може встановлювати усі три ознаки: Z, S та C. Насправді, операція віднімання здійснюється з використанням доповняльного коду, з яким ми познайомимось трохи пізніше. Хід роботи 1. Ознайомитись з теоретичними відомостями до лабораторної роботи № 2. 2. Описати призначення прапорців Регістру Ознак; Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Код регістру з активним прапорцем Z: 100. Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Код регістру з активним прапорцем S: 010. Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. Код регістру з активним прапорцем C: 001. 3. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 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 1001 вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних  6 РД ( А 0000 0000 0001 1001 запис коду до акумулятора  7 ЛАІ + 1 ( ЛАІ 0000 0000 0001 підготовка адреси нової інструкції  8 ЛАІ ( РА 0000 0000 0001 вибір адреси 2-ої інструкції і занесення її до Регістра Адреси  9 РА ( РД 0010 0000 0000 1011 вибір коду інструкції з РА і занесення його до Регістра Даних  10 РД ( РІ 0010 0000 0000 1011 декодування інструкції у Регістрі Інструкцій  11 РІ ( РА 0000 0000 1011 вибір адреси 2-го операнда  12 РА ( РД 0000 0000 0010 0010 вибір коду 2-го операнда з пам’яті і запис його до Регістру Даних  13 A+РД ( А 0000 0000 0011 1011 виконання операції додавання  14 А ( РО 000 перевірка ознак  15 ЛАІ + 1 ( ЛАІ 0000 0000 0010 підготовка адреси нової інструкції  16 ЛАІ ( РА 0000 0000 0010 вибір адреси 3-ої інструкції і занесення її до Регістра Адреси  17 РА ( РД 0010 0000 0000 1100 вибір коду інструкції з РА і занесення його до Регістра Даних  18 РД ( РІ 0010 0000 0000 1100 декодування інструкції у Регістрі Інструкцій  19 РІ ( РА 0000 0000 1100 вибір адреси 3-го операнда  20 РА ( РД 0000 0000 0000 1001 вибір коду 3-го операнда з пам’яті і запис його до Регістру Даних  21 РД ( А 0000 0000 0100 0100 запис коду до акумулятора  22 А ( РО 000 перевірка ознак  23 ЛАІ + 1 ( ЛАІ 0000 0000 0011 підготовка адреси нової інструкції  24 ЛАІ ( РА 0000 0000 0011 вибір адреси 4-ої інструкції і занесення її до Регістра Адреси  25 РА ( РД 011 11100 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних   4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати. Мнемонічний код інструкції Дія, яку виконує інструкція  LOAD 10 завантажити (прочитати) значення числа з 10-ї комірки пам’яті до акумулятора;  SUB 11 Відняти від числа в акумуляторі значення числа з 11-ї комірки пам’яті і результат зберегти в акумуляторі;  STORE 12 зберегти (записати) значення числа з акумулятора до 12-ї комірки пам’яті;  HALT зупинити роботу процесора.  1. Значення регістрів при А = В (А = В=25). крок РА РД А РІ ЛАІ РО  1-й 0000 0000 1010 0000 0000 0001 1001 0000 0000 0001 1001 0000 0000 0000 1010 0000 0000 0001 000  2-й 0000 0000 1011 0000 0000 0001 1001 0000 0000 0000 0000 0011 0000 0000 1011 0000 0000 0010 100  3-й 0000 0000 1100 0000 0000 000 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  Програма, виконавши 2 крок, записала до РО 100. Це означає, що встановився прапорець в ознаці Z, тобто значення після виконання арифметичної операції дорівнює нулю. 2. Значення регістрів при А> В (34>25). крок РА РД А РІ ЛАІ РО  1-й 0000 0000 1010 0000 0000 0010 0010 0000 0000 0010 0010 0000 0000 0000 1010 0000 0000 0001 000  2-й 0000 0000 1011 0000 0000 0001 1001 0000 0000 0000 1001 0011 0000 0000 1011 0000 0000 0010 000  3-й 0000 0000 1100 0000 0000 000 1001 0000 0000 0000 1001 0001 0000 0000 1100 0000 0000 0011 000  4-й 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 1001 0111 1100 0000 0000 0000 0000 0011 000  Після виконання кожної інструкції в РО був записаний код 000. Тобто, після віднімання не один з прапорців не був активний так, як при відніманні меншого числа від більшого в будь-якому випадку отримаємо число більше нуля. 3. Значення регістрів при А< В (25<34). крок РА РД А РІ ЛАІ РО  1-й 0000 0000 1010 0000 0000 0001 1001 0000 0000 0001 1001 0000 0000 0000 1010 0000 0000 0001 000  2-й 0000 0000 1011 0000 0000 0010 0010 1111 1111 1111 0111 0011 0000 0000 1011 0000 0000 0010 011  3-й 0000 0000 1100 1111 1111 1111 0111 1111 1111 1111 0111 0001 0000 0000 1100 0000 0000 0011 011  4-й 0000 0000 0011 0111 1100 0000 0000 1111 1111 1111 0111 0111 1100 0000 0000 0000 0000 0011 011  В даному випадку засвітилися жовтим кольором прапорці S і C. S означає, що результатом є від’ємне число. С означає, що результат вийшов за межі розрядної сітки, тобто виник перенос із старшого розряду результату і крайній розряд числа вийшов за межі розрядної сітки. Оскільки число є від’ємним, то його значення у А та РД записане у доповняльному коді 1111 1111 1111 0111. 5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказуванням реальних значень регістрів і поясненням дій, що виконуються у кожному такті. Інструкція LOAD. Машинний код цієї інструкції – 0000 аааа аааа аааа. Виконання – (ADDR) ( Акумулятор. аааа аааа аааа – адреса комірки, з якої відбувається читання. Заніс значення 1510=11112 до 1-ї комірки. В 0-ву комірку заношу інструкцію LOAD1 (0000 0000 0000 0001). Онулив ЛАІ і запустив програму в потактовому режимі, а результати записав в таблицю. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 0000 0000 0000 0001 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 0000 0000 0000 0001 декодування інструкції у Регістрі Інструкцій  4 РІ ( РА 0000 0000 0001 вибір адреси 1-го операнда  5 РА ( РД 0000 0000 0000 1111 вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних  6 РД ( А 0000 0000 0000 1111 виконання операції запису коду до акумулятора  7 ЛАІ + 1 ( ЛАІ 0000 0000 0001 підготовка адреси нової інструкції   Інструкція STORE. Машинний код цієї інструкції – 0001 аааа аааа аааа. Виконання – Акумулятор ((ADDR). аааа аааа аааа – адреса комірки пам’яті. В 0-ву комірку заніс інструкцію 0001 0000 0000 0001, записав число 1510=11112 в акумулятор. Онулив ЛАІ і запустив програму в потактовому режимі. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 0001 0000 0000 0001 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 0001 0000 0000 0001 декодування інструкції у Регістрі Інструкцій  4 РІ ( РА 0000 0000 0001 вибір адреси 1-го операнда  5 А ( РД 0000 0000 0000 1111 Запис коду з акумулятора до Регістру Даних  6 РД ( РА 0000 0000 0000 0001 вибір коду інструкції з РД і занесення його до Регістра Адреси  7 ЛАІ + 1 ( ЛАІ 0000 0000 0001 підготовка адреси нової інструкції   Інструкція SUB. Машинний код цієї інструкції – 0011 аааа аааа аааа. Виконання – (ADDR) ( Акумулятор. аааа аааа аааа – адреса комірки, вміст якої буде відніматися від значення в акумуяторі. Записав в 1-шу комірку число 15 (0000 0000 0000 1111), а в нульову комірку код інструкції 0011 0000 0000 1001. Записавши в акумулятор число 14 (0000 0000 0000 1110), Онулив ЛАІ і запустив програму в потактовому режимі. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 0011 0000 0000 0001 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 0011 0000 0000 0001 декодування інструкції у Регістрі Інструкцій  4 РІ ( РА 0000 0000 0001 вибір адреси 1-го операнда  5 РА ( РД 0000 0000 0000 1111 Запис коду з акумулятора до Регістру Даних  6 РД ( А 1111 1111 1111 1111 вибір коду інструкції з РД і занесення його до Регістра Адреси  7 ZSC(А) ( РО 011 встановлення прапорців регістру ознак  8 ЛАІ + 1 ( ЛАІ 0000 0000 0001 підготовка адреси нової інструкції   Висновок: я ознайомився з набором інструкцій навчального комп’ютера та загальним порядком виконання інструкцій.
Антиботан аватар за замовчуванням

20.12.2016 00:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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