Набір інструкцій навчальної ЕОМ. Порядок виконання інструкцій

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

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

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

Рік:
2003
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Організація та функціонування комп’ютерів

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

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Методичні вказівки до лабораторної роботи №2 з дисципліни “Організація та функціонування комп’ютерів” на тему: “Набір інструкцій навчальної ЕОМ. Порядок виконання інструкцій” Укладач: ст.викл. кафедри ЕОМ, к.т.н., Ерметов Ю.О. Львів 2003 Лабораторна робота №2 Тема: “Набір інструкцій навчальної ЕОМ. Порядок виконання інструкцій”. Мета: Отримати знання про формат та набір інструкцій симулятора навчальної ЕОМ. Дізнатись про особливості арифметичних та логічних інструкцій, а також інструкцій переходів. Засвоїти базовий порядок виконання інструкції навчальної ЕОМ та дослідити порядок виконання різних інструкцій. 1. Теоретичні відомості На минулій лабораторній роботі ми познайомились із форматом інструкцій симулятора навчальної ЕОМ і навіть отримали уявлення про набір інструкцій, які в ній використовуються (див. рис.1.5, лаб.роб.№1). Отже, у навчальній ЕОМ усі інструкції діляться на дві частини: адресні та безадресні. У безадресних інструкціяї або взагалі не використовуються будь-які операнди (числа), як, наприклад, для інструкції HALT, або, як це є у більшості випадків, у таких інструкціяї однозначно відомо, звідки брати операнди для операції: наприклад, інструкція NOT однозначно працює з акумулятором (інвертує його); так само роблять усі інструкції зсувів (LSL, ASR, ROR та інші); а от інструкції INPUT та OUTPUT працюють не лише з акумулятором, але й з портами вводу (INPUT) та виводу (OUTPUT). Відповідно адресні інструкції для виконання своєї операції потребують операнда, в якості якого може бути будь-яка з 4096 комірок пам’яті. Отже, окрім коду операції, який займає найстарші 4 розряду машинного коду інструкції (від 15-го до 12-го ), решту розрядів займає 12-розрядна адреса комірки пам’яті, значення якої і стане операндом і буде оброблятись у даній інструкції. Давайте ще раз подивимось на набір інструкцій навчальної ЕОМ:  Рис.1.1. Набір інструкцій навчальної ЕОМ Розіб’ємо усі інструкції на наступні групи: інструкції звернення до пам’яті (LOAD та STORE); арифметичні інструкції (ADD та SUB); логічні інструкції (AND, OR, XOR та NOT); інструкції вводу/виводу (INPUT та OUTPUT); інструкції керування виконанням програми: інструкція зупинки (HALT); інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC); інструкція безумовного переходу (JMP); інструкції зсувів (вліво (Left) та вправо (Right)): інструкції логічного зсуву (LSL та LSR); інструкції арифметичного зсуву (ASL та ASR); інструкції циклічного зсуву (ROL та ROR); інструкції циклічного зсуву через перенос C (RCL та RCR). Перш ніж ми більш детально розглянемо усі інструкції, давайте нагадаємо собі з 1-ї лабораторної роботи принципи роботи комп’ютера (і нашої навчальної ЕОМ зокрема): Усі операції та обчислення здійснює процесор. Які саме дії буде виконуватиме процесор, визначає пам’ять. Послідовність дій процесора визначають інструкції, які розташовані в пам’яті. Процесору достатньо знати лише адресу першої інструкції (решту він сам знайде). Усі інструкції повинні розташовуватись строго одна після одної (саме це дозволяє процесору знаходити решту інструкцій автоматично). Окрім інструкцій у пам’яті повинні знаходитись данні (числа, операнди), які і будуть оброблятись процесором. Адресу даних, які повинні оброблятись, вказують інструкції (адресне поле). У відповідності до розглянутих принципів комп’ютер працює наступним чином: за вказаною адресою зчитує першу інструкцію; виконує дії, вказані у цій інструкції; збільшує вказану адресу на 1 і переходить до наступної інструкції і т.д. Отже, перша група інструкцій – це інструкції звернення до пам’яті: LOAD ADDR (машинний код – 0000 aaaa aaaa aaaa, виконання – (ADDR) –> Акумулятор). Ця інструкція здійснює читання (від анг. завантажувати) 16-розрядного числа з комірки пам’яті, на яку вказує адреса ADDR, і розміщує його у акумуляторі (відзначимо, що дужки означають комірку пам’яті, а число в дужках – її адресу). Перші (найстарші) 4 розряди містять код “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. Наприклад, для того, щоб прочитати до акумулятора число з 15-ї комірки (LOAD 15), необхідно використати машинний код 0000 0000 0000 1111, а для того, щоб прочитати з 2041-ї комірки (LOAD 2041) – машинний код 0000 0111 1111 1001. STORE ADDR (машинний код – 0001 aaaa aaaa aaaa, виконання – Акумулятора –> (ADDR)). Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення акумулятора записує (від анг. зберігати) у комірку пам’яті, на яку вказує адреса ADDR. Код операції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Наприклад, щоб записати значення акумулятора до 148-ї комірки (STORE 148), необхідно використати машинний код 0001 0000 1001 0100. А що, якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої? Однією командою цього зробити не можна, а потрібно скористатись двома командами LOAD та STORE, при чому акумулятор буде посередницьким пунктом через який відбудеться передача. Так, програма LOAD 28 STORE 56 виконує переміщення 16-розрядного числа, яке знаходилось у 28-й комірці, до 56-ї комірки. Відзначимо, що інструкція читання (завантаження) не знищує числа з 28-ї комірки, а після інструкції запису (збереження) у акумуляторі залишиться 16-розрядне число з 28-ї комірки. Відповідно цим двом інструкціям відповідатиме наступний машинний код: 0000 0000 0001 1100 0001 0000 0011 1000. Наступна група інструкцій – це інструкції арифметичних операцій: ADD ADDR (машинний код – 0010 aaaa aaaa aaaa, виконання – Акумулятор + (ADDR) –> Акумулятор). Отже, ця інстркція виконує додавання (від англ. addition) акумулятора та числа з комірки пам’яті, на яку вказує адреса ADDR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу в пам’яті 2-го числа, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат. Можна не переживати, що результат “зітре” одне з 2-х чисел – адже перш ніж додаватись, число зчитується до акумулятора з пам’яті. Нехай нам потрібно додати 3 числа, які знаходяться у 21-й, 22-й та 23-й комірках пам’яті, а результат необхідно зберегти до 25-ї комірки. Відповідна програма у мнемонічних кодах матиме вигляд: LOAD 21 ADD 22 ADD 23 STORE 25 У машинних кодах ця програма матиме наступний вигляд: 0000 0000 0001 0101 0010 0000 0001 0110 0010 0000 0001 0111 0001 0000 0001 1001. Відзначимо також на нову важливу особливість цієї інструкції – вона впливає на прапорці Z, S та C регістру ознак. Нагадаємо, що прапорець Z (Zero) встановлюється в 1, якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0 (або якщо додаються два однакових числа з протилежними знаками у доповняльному коді, але з цим ми познайомимось пізніше). Прапорець S (Sign) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’много результату за винятком чисел у доповняльному коді, яких ми поки що не розглядаємо. І, нарешті, прапорець C (Carry) встановлюється в 1, коли в результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду. Так, наприклад, перенос виникне (встановиться тригер C), якщо додати два числа: . Відслідковувати виникнення переносу C повинен сам програміст (як – трохи пізніше) і це дуже важлива задача, оскільки є головною умовою отримання коректного правильного результату. Адже у розглянутому прикладі, якщо не врахувати виникнення переносу, отримаємо: 22 375 + 47 733 = 4 572 (замість 70 108). SUB ADDR (машинний код – 0011 aaaa aaaa aaaa, виконання: Акумулятор – (ADDR) –> Акумулятор). Ця інструкція виконує віднімання (від англ. subtraction) від акумулятора комірки пам’яті з адресою ADDR і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, що буде відніматись. Відповідно, інструкція віднімання встановлює усі три ознаки: Z, S та C. Насправді операція віднімання здійснюється з використанням доповняльного коду, з яким ми познайомимось трохи пізніше, проте при відніманні додатніх чисел жодної різниці ми не побачимо: . Зрозуміло, якщо віднімати від меншого числа більше, отримаємо ознаку від’ємного результату S. Як і у випадку ознаки переносу C під час інструкції додавання при виконанні інструкцій віднімання програміст обов’язково повинен відслідковувати виникнення ознаки S для того, щоб бути впевнемим у правильному результаті. Наступна група інструкцій присвячена логічним операціям: AND (логічне І), OR (логічне АБО), XOR (логічне Виключне-АБО) та NOT (логічне НІ). За винятком останньої логічної інструкції NOT усі решта є адресними інструкціями, які виконують логічні операції над двома числами: значеннями акумулятора та комірки пам’яті, на яку вказує 12-розрядна адреса у машинному коді інструкції, а також записують результат назад до акумулятора. Інструкція NOT є безадресною і вона заперечує (інвертує) усі розряди акумулятора із збереженням результату назад до акумулятора. Перші 3 адресні інструкції мають наступні 4-розрядні коди операцій: AND – 0100, OR – 0101 та XOR – 0110. Безадресна інструкція NOT має 6-розрядний код інструкції 0111 00. Нагадаємо собі, що виконують логічні операції. Їх результати зручно представити з допомогою наступної таблички: &, ( |, ( (, #   ~  00 0 0 0  0 1  01 0 1 1  1 0  10 0 1 1     11 1 1 0     У представленій табличці перший стовпець містить 4 можливих варіанти комбінацій двох 1-розрядних чисел: 00, 01, 10 та 11. Наступні 3 стовпці зображують відповідні значення логічних функцій (операцій) І, АБО та Виключне-АБО. Останні два стовпці містять 2 варіанти одного 1-розрядного числа: 0 і 1, та відповідні значення функції (операції) НІ. Відзначте собі, які позначення використовуються для різних логічних операцій: І – & або (, АБО – | чи (, Виключне-АБО – ( чи #, та НІ – ~. Наприклад, 0 & 1 = 0, 1 ( 0 = 1, 1 ( 1 = 0 та ~1 = 0. Логічну операцію І (&, () ще називають кон’юнкцією або логічним множенням. Дійсно, результат операції І можна отримати, якщо перемножувати вхідні 1-розрядні числа: 0 * 1 = 0 або 1 * 1 = 1. Також назва кон’юнкія (з’єднання) йде від визначення логічне операції І: результат дорівнює 1 тільки у випадку, коли обидва числа дорівнюють 1. Логічна операція АБО (|, () має назви диз’юнкція та логічне додавання. Диз’юнкція (роз’єднання) означає, що кожне з вхідних чисел незалежно виявляє своє значення: за визначенням результат логічної операції АБО дорівнює 1, коли хоча б одне (або обидва) з вхідних чисел дорівнює 1. Правило логічного додавання тотожньо із арифметичним додаванням у 3-х випадках з 4-х: 1+1 ( 1, хоча 1 | 1 = 1. Логічну операцію Виключне-АБО ((, #) іноді ще називають сумою по модулю 2. Дійсно, результат операції Виключного-АБО повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0 ( 1 = 1 (0 + 1 = 1), хоча 1 ( 1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. Логічна операція НІ (~) дуже проста: ~0=1, ~1=0, тобто заміна вхідного значення на протилежне. Цю операцію ще називають запереченням або інвертуванням (від англ. inversion – перевертання). Розглянуті 4 логічні операції вважаються найосновнішими і найбільш розповсюдженими, хоча насправді для двох 1-розрядних вхідних чисел існує  різноманітних логічних функцій. Відзначимо також надзвичайно важливу відмінність логічних операцій у порівнянні з арифметичними – порозрядність, тобто якщо взяти два 16-розрядних числа, то логічна операція над ними буде виконуватись незалежно одна від одної над парами відповідних розрядів цих чисел: логічна операція над парою 0-х розрядів дасть 0-й розряд результату, результат 1-ї пари дасть 1-й розряд і т.д. Саме тому логічні операції не впливають на ознаку переносу C, хоча можуть змінювати ознаки нуля Z та знаку S. У обчислювальній техніці логічні операції використовуються надзвичайно широко, проте їх призначення ми розглянемо у одній з наступних лабораторних робіт. Наступна група інструкцій – інструкції вводу/виводу INPUT та OUTPUT – будуть розглянуті у наступній лабораторній роботі, а ми сьогодні ще розглянемо надзвичайно цікаві інструкції переходів – умовних (JNZ, JZ, JP, JM, JNC та JC) та безумовних (JMP). Хоча зрозуміти, навіщо вони потрібні, нескладно, проте для того, щоб зрозуміти, як вони працюють, перед цим необхідно розглянути порядок виконання інструкції. Загальний принцип виконання однієї інструкції ми вже знаємо: спочатку її необхідно прочитати з пам’яті, а потім, в залежності від коду операції, виконати ті або інші необхідні дії. Це і є найбільш спрощений порядок виконання інструкції: вибірка (від англ. fetch) інструкції; виконання інструкції. Оскільки більшість інструкцій призначені для виконання тих або інших арифметичних чи логічних операцій, для яких необхідні вхідні числа, а також збереження результату, для більшості комп’ютерів є стандартним наступний більш детальний порядок виконання інструкції: вибірка інструкції; декодування (розпізнавання) інструкції; вибірка (читання) операндів; виконання операції (арифметичної, логічної чи якоїсь інакшої); збереження (запис) результату. У порівнянні із попереднім простішим порядком виконання інструкції у детальнішому порядку етап вибірки інструкції розділився на 2 частини: вибірку та декодування (розпізнавання) інструкції. Дійсно, етап декодування є надзвичайно важливим: він фактично є функціює пристрою керування, який повинен розпізнати (декодувати) інструкцію по її коду операції, а також згенерувати послідовність керуючих сигналів, які спричинять виконання усіх наступних етапів. Також 2-й етап – виконання інструкції – розділився на 3 частини: вибірку операндів, виконання операції та збереження результату. При цьому під читанням та записом маються на увазі операції звернення до пам’яті. За такою послідовністю могла б виконуватись інструкція, яка б читала 2 числа з пам’яті, додавала їх та записувала до 3-ї комірки пам’яті. Але насправді виконання інстукції складається з іще більшої кількості етапів. Для дослідження порядку виконання інструкцій призначений 3-й режим роботи навчальної ЕОМ – потактовий. Давайте розглянемо з допомогою нього порядок виконання команди додавання ADD 01. Для цього спочатку з допомогою пульта управління занесемо до 0-ї комірки машинний код команди ADD 01: 0010 0000 0000 0001, до 1-ї комірки – число 15 (0000 0000 0000 1111), а до акумулятора число 240 (0000 0000 1111 0000). В результаті виконання цієї інструкції у акумуляторі ми повинні отримати суму – число 255 (0000 0000 1111 1111). Тепер для початку виконання інструкції до лічильника адреси інструкції занесемо адресу інструкції ADD 01: 0000 0000 0000, а також виберемо потактовий режим роботи (біля кнопки ПУСК). А тепер натиснемо кнопку ПУСК. В результаті спочатку синім кольором засвітиться лічильник адреси інструкції (ЛАІ), а потім білим – регістр адреси пам’яті (РА) і значення ЛАІ опиниться у РА (тобто 0000 0000 0000). І надалі синім кольором позначатиметься джерело інформації (вихідний пристрій), а білим – місце призначення (кінцевий пристрій). Ми виконали 1-й крок виконання інструкції. І правильно, перш ніж прочитати інструкцію з пам’яті, необхідно до РА занести її адресу. Оскільки за адресами інструкцій слідкує ЛАІ, то саме з нього ми беремо потрібну нам адресу. Відзначимо, що швидкість засвічення кольорів та виконання одного кроку можна змінювати. Для цього необхідно у самому верху (під синьою стрічкою заголовку програми симулятора) вибрати меню Режими, а у ньому – команду Тривалість підсвітки... У віконечку, що з’явиться, можна вибрати одне із значеннь затримки від 200 до 4000 мс. Стандартним значенням, яка автоматично встановлюється при запуску симулятора, є 800 мс. Ще раз натиснемо кнопку ПУСК. Тепер синім кольором засвітиться вікно пам’яті, а білим – регістр даних пам’яті (РД), тобто значення виділеної комірки пам’яті (на яку вказує РА) зчитується і записується до РД (тобто 0010 0000 0000 0001). Ми виконали 2-й крок виконання інструкції, в результаті якого машинний код інструкції вже прочитаний з пам’яті, але поки що знаходиться у регістрі даних. Ще раз натискаємо ПУСК (3-й крок): синій – РД, білий – регістр інструкції (РІ), тобто ми переносимо машинний код інструкції з РД до спеціального регістра – РІ. Саме з нього процесор може декодувати інструкцію, що і відбувається на цьому ж 3-му кроці. З точки демонстрації дія декодування абсолютно непомітна – це внутрішній процес пристроя управління, але після нього процесор абсолютно точно знає, які саме дії необхідно виконувати саме у цій інструкції. 4-й крок. Оскільки команда додавання ADD використовує один з операндів, який знаходиться у пам’яті, тому на 4-му кроці значення адреси операнда (тобто 0000 0000 0001) з машинного коду інструкції у РІ заноситься до РА: АДР(РІ) –> РА. 5-й крок. Операнд (тобто число 0000 0000 0000 1111) зчитується з пам’яті і записується до РД: Пам(РА) –> РД. 6-й крок. Тепер ми маємо обидва операнди: один у акумуляторі (0000 0000 1111 0000), а другий – у РД. Відповідно на 6-му кроці виконується операція додавання і результат записується до акумулятора (0000 0000 1111 1111): РД + А –> А. Відзначимо, що виконання будь-якого етапу закінчується операцією запису якогось проміжного результату до одного з регістрів процесора або пам’яті. Так, сама операція додавання не потребує запису – вона є “наскрізною”: будь-яка зміна чисел (операндів) на входах АЛП призводить до майже миттєвої зміни на його виході. А от запис результату до акумулятора і визначив закінчення 6-го кроку. 7-й крок. Оскільки операція додавання є арифметичною, тому вона впливає на усі 3 прапорці регістру ознак (РО): ZSC(A) –> А. Хоча у нашому випадку жодна з ознак не змінюється. 8-й крок. На цьому виконання нашої інструкції ADD можна вважати закінченим. Залишився один маленький крок, хоча й надзвичайно важливий: підготувати адресу наступної інструкції. Якщо цього не зробити, процесор знову і знову виконуватиме ту ж саму інструкцію ADD. Отже: ЛАІ + 1 –> ЛАІ. У нашому випадку наступною інструкцією виявиться наше число 0000 0000 0000 1111 у комірці 0000 0000 0001, але оскільки наша програма складається лише з однієї інструкції, то усе добре. Отже, виконання інструкції ADD зайняло 8 кроків. Один крок виконання інструкції – це 1 такт роботи процесора. Якщо б тактова частота процесора дорівнювала 1ГГц, тоді виконання нашої інструкції зайняло б 8 нс (8(10-9 сек!). Але це частота сучасного процесора, комп’ютери ж 1-го покоління могли працювати на тактовій частоті 50 КГц. В цьому випадку наша інструкція виконалась би аж за 160 мкс (1,6 (10-4 сек), хоча і це набагато швидше, ніж могла би порахувати людина. У скороченому вигляді виконання команди ADD можна було б представити у наступному вигляді: ЛАІ –> РА (0000 0000 0000); Пам(РА) –> РД (0010 0000 0000 0001); РД –> РІ, декодування (0010 0000 0000 0001); Адр(РІ) –> РА (0000 0000 0001); Пам(РА) –> РД (0000 0000 0000 1111); А + РД –> А (0000 0000 1111 1111); ZSC(А) –> РО (000); ЛАІ + 1 –> ЛАІ (0000 0000 0001). Такий запис мікрокроків виконання інструкції називають мікропрограмою виконання інструкції (у дужках наведено фактичні значення, які записуються у регістри процесора для нашої інструкції ADD 01). Наведемо ще одну мікропрограму – виконання інструкції STORE ADDR: ЛАІ –> РА; Пам(РА) –> РД; РД –> РІ, декодування; Адр(РІ) –> РА; А –> РД ; РД –> Пам(РА); ЛАІ + 1 –> ЛАІ. А тепер розглянемо інструкції переходів. Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходу 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу. Машинний код інструкції безумовного переходу JMP ADDR має вигляд: 1110 aaaa aaaa aaaa. Відповідно код операції дорівнює 1110, а решта розрядів – адреса частина. Мікропрограма виконання інструкції JMP має наступний вигляд: ЛАІ –> РА; Пам(РА) –> РД; РД –> РІ, декодування; Адр(РІ) –> ЛАІ. Як видно, інструкція переходу просто записує до ЛАІ значення своєї адресної частини. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal та Basic. Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: в залежності від виконання умови (встановлення чи не встановлення тригера (прапорця) ознаки) перехід або буде здійснюватись або ні. Якщо умова не виконується, тоді наступною буде інструкція, яка знаходиться зразу після інструкції переходу. Фактично інструкції умовного переходу дозволяють реалізувати оператори галуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal if (a<b) then c:=a; else c:=b; у якому змінна a знаходиться у 10-й комірці, змінна b – у 11-й, а змінна c – у 12-й, відповідатиме наступний фрагмент програми у машинних кодах: 0000 0000 0000 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a 0000 0000 0001 0011 0000 0000 1011 SUB 11; відняти від змінної a змінну b 0000 0000 0010 1100 0000 0000 0110 JNC 06; якщо C=0 (a>b), перейти до c:=b 0000 0000 0011 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a 0000 0000 0100 0001 0000 0000 1100 STORE 12; записати змінну a до змінної c 0000 0000 0101 0111 1100 0000 0000 HALT ; зупинити програму 0000 0000 0110 0000 0000 0000 1010 LOAD 11; завантажити до акумулятора змінну b 0000 0000 0100 0001 0000 0000 1100 STORE 12; записати змінну b до змінної c 0000 0000 0101 0111 1100 0000 0000 HALT ; зупинити програму Наведений фрагмент програми складається з 4-х стовпців: адреси інструкцій (у двійковій системі числення); машинні коди інструкцій (двійкові); мнемонічні коди інструкцій (операнди у десятковій системі числення); коментарі. Коментарі наводяться після крапки з комою. Як видно з програми, оператор IF (a<b) реалізується з допомогою інструкцій віднімання SUB та умовного переходу по відсутності переносу C JNC: якщо при відніманні від змінної a (у акумуляторі) змінної b (у 11-й комірці) не виникає переносу, це означає, що a > b, а значить, необхідно “перескочити” фрагмент, де виконується c:=a (інструкції LOAD, STORE та HALT у 3-й, 4-й та 5-й комірках), і почати виконувати фрагмент c:=b (інструкції LOAD, STORE та HALT у 6-й, 7-й та 8-й комірках). Відповідно маємо наступні інструкції умовних переходів: JNZ – перехід, якщо ознака Z=0 (результат у акумуляторі A(0); код операції – 1000; JZ – перехід, якщо ознака Z=1 (результат у акумуляторі A=0); код операції – 1001; JP – перехід, якщо ознака S=0 (результат у акумуляторі A(0); код операції – 1010; JM – перехід, якщо ознака S=1 (результат у акумуляторі A<0); код операції – 1011; JNC – перехід, якщо ознака C=0 (результат у акумуляторі A(255); код операції – 1100; JC – перехід, якщо ознака Z=1 (результат у акумуляторі A(255); код операції – 1101. Для прикладу мікропрограма інструкції JM матиме вигляд: ЛАІ –> РА; Пам(РА) –> РД; РД –> РІ, декодування; Якщо S=1, тоді Адр(РІ) –> ЛАІ, інакше ЛАІ + 1 –> ЛАІ. 2. Порядок виконання роботи: Ознайомитись з теоретичними відомостями до лабораторної роботи №2. Ввести у симулятор та виконати у покроковому режимі програму, яка додаватиме та відніматиме два числа (значення чисел та адрес комірок вказує викладач). Виписати результати та значення прапорців ознак. Ввести у симулятор та виконати у покроковому режимі програму, яка виконуватиме логічні операції І, АБО, Виключне-АБО та НІ над двома числами (значення чисел та адрес комірок вказує викладач). Виписати результати та значення прапорців ознак. Скласти програму, закодувати її, ввести у симулятор та виконати її у автоматичному режимі, яка реалізуватиме оператор IF (умову перевірки вказує викладач). Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок. Ввести у симулятор та виконати у потактовому режимі 3 команди (які вкаже викладач), виписати порядок їх виконання у вигляді мікропрограми (із вказанням реальних значень регістрів). Оформити та захистити звіт з лабораторної роботи.
Антиботан аватар за замовчуванням

29.12.2011 17:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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