Курсова з архітектури комп'ютера

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

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

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

Рік:
2018
Тип роботи:
Курсова робота
Предмет:
Архітектура комп’ютерів та комп’ютерних систем
Варіант:
9 6

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / Пояснювальна записка до курсової роботи З дисципліни “Архітектура комп’ютерів” На тему: «Проектування комп’ютера» Варіант №9 Анотація Курсова робота складається з трьох частин: перша частина являє собою розробку програми, яка перетворює вхідну програму на мові асемблер в мову машинних кодів. В цій частині проводиться аналіз всіх команд які потрібно реалізувати, а також розробка тестів для тестування даної програми. В другій частині здійснюється розробка симулятора, який може відсимулювати будь-який машинний код, а також розробка тестів для тестування розробленої програми. Третя частина являє собою розробку асемблерної програми для перевірки коректності роботи моделі спрощеного комп’ютера. Програма має бути ефективною: - не перевищувати 50 рядків; - і не має виходити за 1000 інструкцій для будь яких вхідних даних. Зміст 1. Конкретизовані та розширені вихідні дані для проектування 4 2. Аналіз основних принципів побудови комп’ютерів. 7 2.1. Система команд 11 2.2. Способи адресації 12 3. Аналіз принципів побудови спрощеного комп’ютера 14 3.1. Структура СК до модифікації 14 3.2. Система команд 16 3.3. Структура СК після модифікації 18 3.4. Потактове виконання команд 21 4. Результат роботи 25 Висновок 35 Список використаної літератури 36 Додаток А. Вихідний код транслятора. 37 Додаток Б. Вихідний код симулятора. 46 Конкретизовані та розширені вихідні дані для проектування Кожен варіант складається з наступних завдань: 8 додаткових інструкцій без використання регістрів стану: 3 – арифметичні 3 – логічні 2 – керування 3 додаткові інструкції з використання регістрів стану. Передбачити на власний вибір 3 інструкцій (з розроблених в п. 1, 2), які підтримують додатковий тип адресації. Таблиця 1.1 – Варіант №9 № Розряд- ність Арифметичні Логічні Керування Прапорці Адре- сація    1 2 3 4 5 6 7 8  1 2 3   9 2 4 1 6 3 10 12 1 13 ZF 1 2 4 1   Визначити формати команд згідно розрядності шини даних, розміру пам’яті та регістрового файлу. Таблиця 1.2 - Розрядність № Розрядність шини даних Розмір пам’яті Байт Розмір регістрового файлу(к-сть регістрів)  2 24 4096 8   Реалізація додаткових команд. Необхідно реалізувати 8 додаткових команд. Серед них 3 арифметичні, 3 логічні та 2 команди керування згідно варіанту. Команди не мають повторюватися. Таблиця 1.3 – Арифметичні команди № Мнемонічнй код Зміст  4 IDIV regA regB destReg Знакове ділення destReg=regA/regB  1 DEC regA Зменшити regA на 1  6 XADD regA regB destReg Додати і обміняти операнди місцями destReg=regA+regB regA<=>regB   Таблиця 1.4 – Логічні команди № Мнемонічнй код Зміст  3 SHL regA regB destReg Логічний зсув вліво destReg=regA << regB  10 OR regA regB destReg Логічне побітове АБО destReg=regA | regB  12 NEG regA destReg Заміна знаку на протилежний   Таблиця 1.5 – Команди керування № Мнемонічнй код Зміст  1 JMA regA regB offSet Беззнакове більше if (regA> regB) PC=PC+1+offSet  13 JMNE regA regB offSet Не рівно if (regA!= regB) PC=PC+1+offSet   Реалізувати додатковий спосіб адресації. Передбачити, що 3 інструкції підтримують інший вид адресації згідно варіанту. Визначення операндів, які підтримують інший спосіб адресації узгодити з викладачем.(крім безадресної) Примітка: безадресний варіант передбачає створення стеку та реалізацію 2 додатковий команд наведених в таблиці. Таблиця 1.6 – Додаткова адресація № Адресація  1 Безадресна – реалізація стеку. Максимальна глибина 32 слова по 32 розряди.   Таблиця 1.7 – Безадресні команди Мнемонічнй код Зміст  POP Зчитати з стеку в 1 регістр  PUSH Записати в стек з 1 регістру   Регістри стану: CF –регістр переносу, SF – регістр знаку, ZF – регістр 0. Таблиця 1.8 – регістр ознаки нуля ZF № Мнемонічнй код Зміст  1 CMP regA regB Порівняти regA regB і встановити прапорці CF SF ZF  regA < regB 1 1 0  regA = regB 0 0 1  regA > regB 0 0 0    3 BSR regA destReg Побітове сканування в зворотньому напрямку(від старших до молодших) regA в пошуках біта з 1 , повертає номер позиції в destReg. Якщо 1 знайдено ZF=1, інакше ZF=0  4 JE offSet Перейти, якщо менше, if(ZF==0)PC=offset   Аналіз основних принципів побудови комп’ютерів. CISC (англ. Complex Instruction Set Computer — комп'ютер зі складним набором команд) — це архітектура системи команд, в якій більшість команд є комплексними, тобто реалізують певний набір простіших інструкцій процесора або шляхом зіставлення з кожною CISC-командою певної мікропрограми, або принаймні можуть бути зведені до набору таких простих інструкцій. Крім того, ознаками CISC-архітектури можна вважати також наявність великої кількості методів адресації пам'яті з можливістю безпосередньої роботи з операндами в основній пам'яті комп'ютера. Тобто, CISC-архітектури відносяться, як правило, до класу двохадресних. Архітектури з комплексними наборами команд, розвиток яких припав на кінець 60-х — 70-ті роки пропонували програмісту досить різноманітний набір порівняно високорівневих інструкцій машинної мови, таких, наприклад, як «виклик підпрограми» або «відняти одиницю та перейти, якщо результат ненульовий», а також велику кількість способів звертання до операндів в пам'яті для полегшення роботи зі складними структурами даних. В ті часи, за відсутності повноцінних мов програмуваннявисокого рівня та відповідних компіляторів, така апаратна підтримка високорівневого інструментарію програмування могла підвищити продуктивність праці програміста. До того ж, програма, складена з таких команд займала небагато в пам'яті комп'ютера. Типовими прикладами CISC-архітектур були системи VAX, PDP-11, IBM System/360, сімейства мікропроцесорів Motorola 68000 та Intel x86. Але з появою високорівневих мов та оптимізуючих компіляторів, розвитком електроніки, який спричинив здешевлення комп'ютерної пам'яті виявилось, що використання високорівневих машинних команд суттєво обмежує можливості до оптимізації програми, підвищення її швидкодії. Зокрема, складні команди потребували багато часу на процедуру декодування, потребували багато апаратурних ресурсів для реалізації, що негативно відображалось на загальній швидкодії та складності системи. Далі, наявність спеціальних команд, таких як «виклик підпрограми» не завжди виправдовувала себе, в багатьох випадках доцільніше було б замість такої загальної команди використати набір елементарніших інструкцій, які в результаті спричиняли б виконання меншої кількості обчислень процесором. Це стосувалось і обчислювальних команд, які підтримували роботу з операндами в повільній пам'яті, що далеко не завжди давало оптимальний результат. Набагато ефективніше було б відокремити процедури роботи з пам'яттю (завантаження та збереження операндів) від проведення обчислень, що дало б можливість оптимізувати процедури звертання до запам'ятовуючого пристрою. Зрозуміло, що ці оптимізації повинні були виконуватись вже компіляторами з мов високого рівня, які до того часу досягли досить високого рівня функціональності. Ці та інші проблеми CISC-архітектур призвели до створення в 80-ті роки RISC-архітектур (від англ. Reduced Instruction Set Computer — комп'ютер зі скороченим набором команд), які вибудовують прямо протилежну модель системи команд з максимальним спрощенням семантики машинної команди, зведенням її до елементарної, мінімізацією методів адресації пам'яті тощо та принциповою орієнтацією на мови високого рівня й оптимізуючі компілятори з них, аніж на програмування безпосередньо в машинних мовах. Сучасні CISC-архітектури, такі як останні втілення сімейства процесорів x86, хоч і відповідають CISC-концепції на рівні архітектури системи команд, але всередині процесора реалізують якраз пристосованішу до сьогоднішніх реалій RISC-модель, трансформуючи потік CISC-команд в процесі виконання в набори з простіших RISC-мікрооперацій, які й виконуються процесором. Для виконання задачі на комп’ютері необхідно: забезпечити вибірку команди програми із його пам’яті в заданій послідовності, організувати звернення до неї за відповідними адресами; забезпечити розпізнавання типів виконуваних операцій; організувати звернення до пам’яті за відповідними адресами для вибірки необхідних для виконання кожної команди даних; організувати виконання над даними операцій відповідно до вказівок команд; запам’ятати результат обчислень. Комп'ютер виконує кожну команду як послідовність простих операцій: Вибірка чергової команди із основної пам'яті. Визначення типу вибраної команди, тобто її дешифрування. Визначення адрес даних, необхідних для виконання цієї команди. Виконання операцій пересилання даних (зчитування даних із пам'яті в регістри процесора). Виконання операції відповідно до її коду в полі коду операції команди. Визначення адрес, за якими запам'ятовуються результати. Запам'ятовування результатів. Підготовка до виконання наступної команди, тобто обчислення її адреси. Для процесора комп'ютера із складною системою команд характерні наступні особливості: виконання команди за багато тактів, оскільки для цього потрібно здійснити багаторазові операції звернення до основної пам'яті та до програмно-доступних регістрів процесора; орієнтація АЛП на виконання великої кількості операцій, що пов'язано з розширеним складом системи команд; складна система розпізнавання команди, що пов'язано з великою кількістю методів адресації та великою кількістю форматів команд різної розрядності; програмне дешифрування команд з метою зменшення затрат обладнання; складна організація конвеєризації виконання команд, що пов'язано, в першу чергу, з різнотипністю їх виконання; орієнтація структури на виконання команд типу регістр-пам'ять та пам'ять-пам'ять. Основні елементи процесора - арифметико-логічний пристрій, пристрій керування і регістрова пам'ять або, як її ще називають, надоперативний запам'ятовуючий пристрій. До складу регістрової пам'яті, в свою чергу, входять наступні вузли - програмний лічильник, регістри: адреси, команди, даних, слова стану програми, а також регістровий файл, який складається з програмно доступних регістрів. Структура регістрової (надоперативної) пам'яті процесора складається з регістрів спеціального та зального призначення. До регістрів спеціального призначення належать: регістри адреси (РгА); регістри команд (РгК); програмний лічильник(ПЛ) регістри даних (РгД). РгА зберігає адресу даного або команди при зверненні до основної пам'яті. РгД зберігає операнд при його запису або зчитуванні з основної пам'яті. В ролі операнда може бути дане, команда або адреса. РгК зберігає команду після її зчитування з основної пам'яті. ПЛ підраховує команди та зберігає адресу поточної команди. Комп'ютер з архітектурою Джона фон Неймана має один програмний лічильник. 2.1. Система команд Різноманітність типів даних, форм представлення та опрацювання, необхідні дії для обробки та керування ходом виконання обчислень призводить до необхідності використання різноманітних команд – набора команд. Кожен процесор має власний набір команд, який називається системою команд процесора. Система команд характеризується трьома аспектами: формат, способи адресації, система операцій. Форматом команди – є довжина команди, кількість, розмір, положення, призначення та спосіб кодування полів. Команди мають включати наступні види інформації: тип операції, яку необхідно реалізувати в даній команді (поле команду операції - КОП); місце в пам’яті звідки треба взяти перший операнд (А1); місце в пам’яті звідки треба взяти другий операнд (А2); місце в пам’яті куди треба помістити результат (А3). Кожному з цих видів інформації відповідає своя частина двійкового слова – поле. Реальна система команд зазвичай має команди декількох форматів, тип формату визначає КОП. Команда в комп'ютері зберігається в двійковій формі. Вона вказує тип операції, яка має бути виконаною, адреси операндів, над якими виконується операція, та адреси розміщення результатів виконання операції. Відповідно до цього команда складається з двох частин, коду операції та адресної частини. . Способи адресації Варіанти інтерпретації бітів (розрядів) поля адреси з метою знаходження операнда називаються способами адресації. Коли команда вказує на операнд, він може знаходитись в самій команді, в основній або зовнішній пам'яті чи в регістровій пам'яті процесора. За роки існування комп'ютерів була створена своєрідна технологія адресації, яка передбачає реалізацію різних способів адресації, чому послужило ряд причин: забезпечення ефективного використання розрядної сітки команди; забезпечення ефективної апаратної підтримки роботи з масивами даних; забезпечення задання параметрів операндів; можливість генерації великих адрес на основі малих. Існує велика кількість способів адресації. Розглянемо п’ять основних способів адресації операндів в командах. Пряма – в цьому випадку адресне поле зберігає адресу операнда. Її різновидом є пряма регістрова адресація, яка адресує не комірку пам’яті а номер регістру. Безпосередня – в поле адреси команди поміщається не адреса, а сам операнд. Непряма – в полі адреси команди зберігається адреса комірки пам’яті в якій знаходиться адреса операнда. Такій спосіб дозволяє оперувати з адресами як з даними. Різновид непряма-регістрова адресація, адреса адреси зберігається в регістрі загального призначення. Відносна – адреса формується, як сума з двох доданків: бази, яка зберігається в спеціальному регістрі чи в одному з регістрів спеціального призначення, та зміщення, яке задається в полі адреси команди. Різновид індексна та базова індексна. При індексній замість базового регістра є індексний, який автоматично модифікується (зазвичай збільшується на 1). Базова-індексна адресація формується адреса як сума трьох доданків: бази, індексу та зміщення. Безадресна – поле адреси в команді відсутнє. Адреса операнда, або немає змісту або є по замовчуванню(наприклад дії на спеціальним регістром - акумулятором). Безадресні команди неможливо використати для інших регістрів чи комірок пам’яті. Одним з різновидів безадресної адресації є використання стеку. В команду вводяться спеціальні ознаки з тим, щоб пристрій керування міг розпізнати використаний спосіб. Це можуть бути додаткові розряди в команді, або для різних типів команд закріплюватись різні способи адресації. Аналіз принципів побудови спрощеного комп’ютера Структура СК до модифікації / Рис. 3.1. Функціональна схема СК до модифікації В спрощеному комп’ютері (СК) в пам’яті зберігаються, як дані так і інструкції. Кожна інструкція закодована числом. Це число складається з декількох полів: поле назви команди чи код операції (КОП) та полів операндів. В СК є два види пам’яті: загальна пам’ять, та регістрова пам’ять. В загальній пам’яті зберігаються інструкції програми та дані над якими оперують інструкції. В регістровий пам’яті зберігаються дані над якими виконуються інструкції. У реальних комп’ютерах регістрова пам’ять є малою за розмірами та швидкою, працює на швидкості ядра процесора, загальна пам’ять є великою за розміром, але набагато повільніша за ядро процесора. Регістрова пам’ять підтримує лише пряму адресацію, загальна пам’ять підтримує декілька типів адресації. У СК є 8 регістрів по 32 розряди, пам’ять складається з 65536 слів по 32 розряди. Отже СК є 32 розрядним комп’ютером. Він підтримує 8 інструкцій, кожна з яких розписана нижче. У СК є спеціальний регістр лічільник команд (ЛК). За прийнятою домовленістю 0вий регістр завжди містить 0 (це не обмовлено апаратними вимогами проте асемблерна програма ніколи не має змінювати значення 0ого регістра, який ініціалізуються 0 ). / Рис.3.2. Формат СК СК підтримує 4 формати інструкцій. Біти 31-25 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. Інструкції R-типу (add, nand): біти 24-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-3: не використовуються ( =0) біти 2-0: destReg / Рис.3.3. Інструкція R-типу I-тип інструкцій (lw, sw, beq): біти 24-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-0: зміщення (16 біт, значення від -32768 до 32767) / Рис.3.4. Інструкція I-типу J-тип інструкцій: біти 24-22: код операції біти 21-19: reg A біти 18-16: reg B біти 15-0: не використовуються ( =0) O-тип інструкцій (halt, noop): біти 24-22: код операції біти 21-0: не використовуються ( =0) Система команд Таблиця 1.9. Система команд № Мнемонічний код інструкції КОП Опис операції  1 ADD regA regB destReg 00000 Додає вміст регістру regA до вмісту regB, та зберігає в destReg  2 NAND regA regB destReg 00001 Виконує логічне побітове І-НЕ вмісту regA з вмістом regB, та зберігає в destReg  3 LW regA regB offset 00010 Завантажує regB з пам’яті. Адреса пам’яті формується додаванням зміщення до вмісту regA.  4 SW regA regB offset 00011 Зберігає вміст регістру regB в пам’ять. Адреса пам’яті формується додаванням зміщення до вмісту regA.  5 BEQ regA regB offset 00100 Якщо вміст регістрів regA та regB однаковий, виконується перехід на адресу програмний лічильник(ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної тобто beq інструкції.  6 JALR regA regB 00101 Спочатку зберігає ПЛ+1 в regB, в ПЛ адреса поточної (jalr) інструкції. Виконує перехід на адресу, яка зберігається в regA. Якщо в якості regA regB задано один і той самий регістр, то спочатку в цей регістр запишеться ПЛ+1, а потім виконається перехід до ПЛ+1.  7 HALT 00110 Збільшує значення ПЛ на 1, потім припиняє виконання, стимулятор має повідомляти, що виконано зупинку.  8 IDIV regA regB destReg 00111 Знакове ділення destReg=regA/regB  9 DEC regA 01000 Зменшити regA на 1  10 XADD regA regB destReg 01001 Додати і обміняти операнди місцями destReg=regA+regB regA<=>regB  11 SHL regA regB destReg 01010 Логічний зсув вліво destReg=regA << regB  12 OR regA regB destReg 01011 Логічне побітове АБО destReg=regA | regB  13 NEG regA destReg 01100 Заміна знаку на протилежний  14 JMA regA regB offSet 01101 Беззнакове більше if (regA> regB) PC=PC+1+offSet  15 JMNE regA regB offSet 01110 Не рівно if (regA!= regB) PC=PC+1+offSet  16 CMP regA regB 01111 Порівняти regA regB і встановити прапорці  17 BSR regA destReg 10000 Побітове сканування в зворотньому напрямку(від старших до молодших) regA в пошуках біта з 1 , повертає номер позиції в destReg. Якщо 1 знайдено ZF=1, інакше ZF=0  18 JE offSet 10001 Перейти, якщо менше, if(ZF==0)PC=offset  19 PUSH regA 10010 Записує значення regA в вершину стеку.  20 POP regA 10011 Зчитує значення з вершини стеку і заносить в regA.   Структура СК після модифікації / Рис. 3.5. Функціональна схема СК після модифікації. Після модифікації відбулись зміни : Зменшилась шина данних (з 32бітів до 24 бітів). Додано 8 додаткових операцій: 3 арифметичні операції (IDIV, XADD, DEC); 3 логічні операції (SHL, OR, NEG); 2 операції керування (JMA, JMNE). Було додано прапорець ZF, з яким працюють команди CMP, BSR, JE. Зменшилась пам’ять (з 65535 слів до 4096). Число регістрів залишилось незмінним (8). Додано 2 команди (PUSH/POP) для збереження/завантаження даних при безадресній адресації. Отже , СК є 24 розрядним комп’ютером. У СК є 8 регістрів по 24 розряди. Пам’ять складається з 4096 слів по 24 розряди. Він підтримує 20 інструкцій, кожна з яких буде розписана нижче. За прийнятою домовленістю 0вий регістр завжди містить 0 (це не обмовлено апаратними вимогами проте асемблерна програма ніколи не має змінювати значення 0-ого регістра, який ініціалізуються 0 ). СК підтримує 6 форматів інструкцій. Інструкції R-типу (add, nand, idiv, xadd, shl, or): біти 23-18: код операції; біти 17-15: reg A; біти 14-12: reg B; біти 11-3: не використовуються (=0) біти 2-0: destReg. 23-18 17-15 14-12 11-3 2-0  opcode regA regB unused destReg  Рис.3.6. Інструкція R-типу після модифікації. I-тип інструкцій (lw, sw, beq, jma , jmne): біти 23-18: код операції; біти 17-15: reg A; біти 14-12: reg B; біти 11-0: зміщення (12 біт, значення від -2048 до 2047). 23-18 17-15 14-12 11-0  opcode regA regB Offset  Рис.3.7. Інструкція I-типу після модифікації. J-тип інструкцій (jalr, neg, cmp, bsr): біти 23-18: код операції; біти 17-15: reg A; біти 14-12: reg B; біти 11-0: не використовуються (=0) 23-18 17-15 14-12 11-0  opcode regA regB Unused  Рис.3.8. Інструкція J-типу після модифікації. Інструкції S-типу (push, pop, dec): біти 23-18: код операції; біти 17-15: reg A; біти 14-0: не використовуються; 23-18 17-15 14-0  opcode regA Unused  Рис.3.9. Інструкція S-типу після модифікації. Інструкції K-типу (JE): біти 23-18: код операції; біти 17-12: не використовуються; біти 11-0: зміщення (12 біт, значення від -2048 до 2047). 23-18 17-12 11-0  opcode Unused Offset  Рис.3.10. Інструкція K-типу після модифікації. O-тип (halt): біти 43-39: код операції; біти 38-0: не використовуються. 23-18 17-0  opcode Unused  Рис.3.11. Інструкція O-типу після модифікації. Прапорець нуля (англ. Zero flag) – використовується в командах CMP, BSR, JE (команда CMP впливає на стан прапорців CF, SF i ZF, BSR – побітове сканування, JE – команда переходу). Потактове виконання команд Інструкції add, nand, idiv, xadd, shl, or: memAddr <= PC; PC++; mem (встановлення адреси); instrReg <= mem[memAddr]; aluOP <= Reg[instrReg[17-15]] aluRes <=aluOP operation Reg[IR[14-12]]; Reg[instrReg[2-0]] <= aluRes; Інструкції lw, sw, beq, jma , jmnle: sw/lw memAddr <= PC; PC++; mem (встановлення адреси); instrReg <= mem[memAddr]; memAddr <= Reg[instrReg[14-12]] + instrReg [11-0]; memData <= mem[mamAddr]; or mem[mamAddr] <= memData then Reg[instrReg[14-12]] <= mem[Addr]; умовних переходів memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; aluRes <= Reg[instrReg [17-15]] logic_operation Reg[instrReg [14-12]]; Якщо умова виконується, то: PC <= PC + instrReg[11-0] + 1; Інструкції jalr, cmp, neg, bsr : Jalr: memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; Reg[instrReg [24-20]] <= PC; PC <= Reg[instrReg[29-25]]; If Reg[instrReg[29-25]] = Reg[instrReg [24-20]] then: Reg[instrReg[29-25]] <= PC+1; PC <= Reg[instrReg[29-25]]; neg: memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; Reg[instrReg[14-12]] <= - Reg[instrReg [17-15]] bsr: memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; Reg[instrReg[14-12]] <= Reg[instrReg [17-15]] >> cycle bits If bit == 1 then ZF <= 1 Reg[instrReg[14-12]] <= NumberOfBits[Reg[instrReg [17-15]]]. Break. Cmp: memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; If Reg[instrReg[17-15]] < Reg[instrReg [14-12]] then: CF = 1; SF=1; ZF=0; If Reg[instrReg[17-15]] = Reg[instrReg [14-12]] then: CF = 0; SF=0; ZF=1; If Reg[instrReg[17-15]] > Reg[instrReg [14-12]] then: CF = 0; SF=0; ZF=0; Інструкції halt: memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; Stop. Інструкції push, pop: push memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; StackTop != MaxWordsOfStack If true then StackTop <= StackTop+1; StackData <= Reg[instrReg [17-15]]; Stack[StackTop] <= StackData; NumberOfStack <= NumberOfStack+1; If false then Exit pop memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; StackTop != MinWordsOfStack If true then StackData <= Stack[StackTop]; Reg[instrReg [17-15]] <= StackData; Stack[StackTop] <= 0; StackTop < StackTop - 1; If false then Exit JE memAddr <= PC; PC++; mem (встановлення адреси); IR <= mem[memAddr]; If ZF == 0 then PC <= Offset[instrReg[11-0]]. Результат роботи Для перевірки коректної роботи процесора написані спеціальні програми. Ці програми використовують усі наявні команди, що були розроблені в даному процесорі. Програма для перевірки команд IDIV, XADD, SHL, DEC, LW, BEQ, NEG. Код програми lw 0 1 x1 lw 0 2 x2 start idiv 1 2 4 xadd 1 2 3 shl 1 2 1 dec 2 beq 2 0 done beq 0 0 start done neg 2 2 halt x1 .fill 8 x2 .fill 2 Результат виконання: @@@ state: pc 0 memory: mem[ 0 ] 528394 mem[ 1 ] 532491 mem[ 2 ] 1875972 mem[ 3 ] 2400259 mem[ 4 ] 2662401 mem[ 5 ] 2162688 mem[ 6 ] 1114113 mem[ 7 ] 1114106 mem[ 8 ] 3219456 mem[ 9 ] 1572864 mem[ 10 ] 8 mem[ 11 ] 2 registers: reg[ 0 ] 0 reg[ 1 ] 0 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 Stack Top: -1 Stack: Flags: CF 0 SF 0 ZF 0 end state /**********************************************************/ machine halted total of 10 instructions executed final state of machine: @@@ state: pc 10 memory: mem[ 0 ] 528394 mem[ 1 ] 532491 mem[ 2 ] 1875972 mem[ 3 ] 2400259 mem[ 4 ] 2662401 mem[ 5 ] 2162688 mem[ 6 ] 1114113 mem[ 7 ] 1114106 mem[ 8 ] 3219456 mem[ 9 ] 1572864 mem[ 10 ] 8 mem[ 11 ] 2 registers: reg[ 0 ] 0 reg[ 1 ] 512 reg[ 2 ] -7 reg[ 3 ] 10 reg[ 4 ] 4 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 Stack Top: -1 Stack: Flags: CF 0 SF 0 ZF 0 end state Перевірка виконання команд: BSR. Код програми: lw 0 1 x1 lw 0 2 x2 lw 0 3 x3 bsr 2 4 halt x1 .fill 10 x2 .fill 262144 x3 .fill 15 Результат обчислень: @@@ state: pc 0 memory: mem[ 0 ] 528389 mem[ 1 ] 532486 mem[ 2 ] 536583 mem[ 3 ] 4276224 mem[ 4 ] 1572864 mem[ 5 ] 10 mem[ 6 ] 262144 mem[ 7 ] 15 registers: reg[ 0 ] 0 reg[ 1 ] 0 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 Stack Top: -1 Stack: Flags: CF 0 SF 0 ZF 0 end state /**********************************************************/ machine halted total of 5 instructions executed final state of machine: @@@ state: pc 5 memory: mem[ 0 ] 528389 mem[ 1 ] 532486 mem[ 2 ] 536583 mem[ 3 ] 4276224 mem[ 4 ] 1572864 mem[ 5 ] 10 mem[ 6 ] 262144 mem[ 7 ] 15 registers: reg[ 0 ] 0 reg[ 1 ] 10 reg[ 2 ] 262144 reg[ 3 ] 15 reg[ 4 ] 18 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 Stack Top: -1 Stack: Flags: CF 0 SF 0 ZF 1 end state Перевірка виконання команд: OR, NEG, JMA, JMNE. Код програми lw 0 1 x1 lw 0 2 x2 lw 0 3 x3 start or 1 2 1 neg 3 3 jma 3 2 done jmne 0 0 start done halt x1 .fill 10 x2 .fill 5 x3 .fill 15 Результат виконання: @@@ state: pc 0 memory: mem
Антиботан аватар за замовчуванням

16.05.2019 21:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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