Проектування комп’ютера

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

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

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

Рік:
2012
Тип роботи:
Курсова робота
Предмет:
Архітектура комп'ютерів

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

Міністерство освіти і науки, молоді та спорту України Національний університет „Львівська політехніка” Кафедра ЕОМ Курсова робота з дисципліни: “Архітектура комп’ютера” на тему: “Проектування комп’ютера” Анотація Цей курсовий проект оснований на розробці асемблера та симулятора, дослідженні архітектури комп’ютера типу CISCIRISC. Симулятор написаний на мові С++ і С в змішаному режимі. Асемблер виконує функцію транслятора в машинні коди команд, що записані у файлі, а симулятор виконує ці машинні команди. Також результат роботи виводиться на екран консолі або у файл. Зміст Вступ........................................................................................................................ст. 4 Конкретизовані та розширені вихідні дані на проектування............................ст. 5 Аналітичний розділ з роз'ясненням та аналізом основних принципів побудови комп'ютерів на прикладі визначених на реалізацію інструкцій.......................ст. 7 Алгоритми роботи розробленого емулятора та асемблера................................ст. 13 Опис виконання кожного типу розроблених інструкцій в по тактовому режимі....................................................................................................................ст. 15 Функціональна схема комп’ютера до модифікації.............................................ст. 22 Функціональна схема після модифікації, з визначеними сигналами керування................................................................................................................ст. 20 Опис розроблених форматів команд....................................................................ст. 24 Основні результати роботи (висновок).................................................................ст.26 Література Додаток 1. Код асеммблера Додаток 2. Код симулятора Вступ Цей курсовий проект оснований на проектуванні комп’ютера на архітектурі типу CISC. Під нього потрібно було також зробити асемблер та симулятор, написані на мові С/С++. Ці дві програмки є в консольному вигляді, на вході отримують файли одного типу, а після обробки створюють відповідні файли. Асемблер має перетворювати послідовність команд, написану на мові асемблера у мову машинних кодів – тобто файл із машинними командами. Симулятор має завантажити відповідний файл із машинними кодами та виконати його і в результаті отримати новий файл із кожним зі станів симулятора від початку його роботи до останньої завершальної команди. CISC (англ.ComplexInstructionSetComputer — комп'ютер зі складним набором команд) — це архітектура системи команд, в якій більшість команд є комплексними, тобто реалізують певний набір простіших інструкцій процесора або шляхом зіставлення з кожною CISC-командою певної мікропрограми, або принаймні можуть бути зведені до набору таких простих інструкцій. Крім того, ознаками CISC-архітектури можна вважати також наявність великої кількості методів адресації пам'яті з можливістю безпосередньої роботи з операндами в основній пам'яті комп'ютера. Тобто, CISC-архітектури відносяться, як правило, до класу двохадресних. В ході виконання даного курсового проекту студент має ознайомитись та опанувати архітектуру CISC – комп’ютера. Приведемо основні принципи даної архітектури, які запропонував Джон фон Нейман: 1. Інформація кодується в двійковому представленні. 2. Інформація в комп’ютері ділиться на команди і дані. 3. Різнотипні за змістом слова розрізняються за способом застосування, а не по способу кодування. 4. Слова інформації розміщаються в комірках пам’яті та ідентифікуються номерами комірок – адресами слів. 5. Пам’ять є лінійною. 6. Пам’ять має довільну адресацію. 7. Команди і дані зберігаються в одній пам’яті. 8. Алгоритми представляються у вигляді послідовності керуючих слів, як називаються командами. Команда визначається найменуванням операції та слів інформації, які в ній приймають участь. Алгоритм записаний у вигляді послідовності команд, називається програмою. 9. Весь набір виконуваних комп’ютером команд називається системою команд комп’ютера. 10. Виконання обчислень, які визначені алгоритмом, являють собою послідовне виконання команд в порядку визначеному програмою. Конкретизовані та розширені вихідні дані на проектування Нижче наведено таблиці, що містять розширене представлення мого завдання. Мій варіант на курсову роботу - 24. Таб 1. Загальні дані № Розрядність Арифметичні Логічні Керування Прапорці Адресація    1 2 3 4 5 6 7 8  1 2 3   4 3 2 9 11 2 3 18 3 13 CF 4 5 7 8   Таб. 2. Таблиця завдань на розрядність № Розрядність шини даних Розмір пам’яті Байт Розмір регістрового файлу(к-сть регістрів)  3 32 65536 16   Таб. 3. Додаткові арифметичні команди № Мнемонічнй код Зміст  2 INC regA Збільшити на 1  9 XIDIV regA regB destReg Знакове ділення і обмін операндів місцями destReg=regA/regB  11 XSUB regA regB destReg Віднімання і обмін операндів місцями: destReg=regAregB   Таб. 4. Додаткові логічні команди № Мнемонічнй код Зміст  2 XOR regA regB destReg Додавання по модулю 2: destReg=regA # regB  3 SHL regA regB destReg Логічний зсув вліво destReg=regA << regB  18 CMPLE regA regB destReg Порівняти regA regB destReg= regA <= regB   Таб. 5. Додаткові команди керування № Мнемонічнй код Зміст  3 JMB regA regB offSet Беззнакове більше if (regA> regB) PC=PC+1+offSet  13 JMNE regA regB offSet Не рівно if (regA!= regB) PC=PC+1+offSet   Таб. 6. Таблиця адресації № Адресція  8 Базово – індексна (розробити IR та BR – базовий регістр) передбачити команду чи директиву встановлення базового регістру, індексний регістр має інкрементуватися/декрементуватися після кожного звернення *   Таб. 7. Описи заданих регістрів № Мнемонічнй код Зміст  4 CMP regA regB Порівняти regA regB і встановити прапорці CF ZF SF  regA < regB 1 1 0  regA = regB 0 0 1  regA > regB 0 0 0    5 STС Встановити СF =1  7 RCR regA regB destReg Зсунути циклічно вправо через CF destReg=regA >> regB   Аналітичний розділ з роз'ясненням та аналізом основних принципів побудови комп'ютерів на прикладі визначених на реалізацію інструкцій Комп'ютер - це електронний пристрій, що виконує операції введення інформації, зберігання та оброблення її за певною програмою, виведення одержаних результатів у формі, придатній для сприйняття людиною. За кожну з названих операцій відповідають спеціальні блоки комп'ютера:  пристрій введення,  центральний процесор,  запам'ятовуючий пристрій,  пристрій виведення. Всі ці блоки складаються з окремих дрібніших пристроїв. Зокрема в центральний процесор можуть входити арифметико-логічний пристрій (АЛП), внутрішній запам'ятовуючий пристрій у вигляді регістрів процесора та внутрішньої кеш-пам'яті, керуючий пристрій (КП). Пристрій введення, як правило, теж не є однією конструктивною одиницею. Оскільки види інформації, що вводиться, різноманітні, джерел може бути декілька. Це стосується і пристрою виведення. Запам'ятовуючий пристрій - це блок ЕОМ, призначений для тимчасового (оперативна пам'ять) та тривалого (постійна пам'ять) зберігання програм, вхідних і результуючих даних та деяких проміжних результатів. Інформація в оперативній пам'яті зберігається тимчасово лише при включеному живленні, але оперативна пам'ять має більшу швидкодію. В постійній пам'яті дані можуть зберігатися навіть при вимкненому комп'ютері, проте швидкість обміну даними між постійною пам'яттю та центральним процесором, у переважній більшості випадків, значно менша. Арифметико-логічний пристрій - це блок ЕОМ, в якому відбувається перетворення даних за командами програми: арифметичні дії над числами, перетворення кодів та ін. Керуючий пристрій координує роботу всіх блоків комп'ютера. У певній послідовності він вибирає з оперативної пам'яті команду за командою. Кожна команда декодується, за потреби елементи даних з указаних в команді комірок оперативної пам'яті передаються в АЛП. АЛП настроюється на виконання дії, вказаної поточною командою (в цій дії можуть брати участь також пристрої введення-виведення); дається команда на виконання цієї дії. Цей процес буде продовжуватися доти, доки не виникне одна з наступних ситуацій: вичерпано вхідні дані, з одного з пристроїв надійшла команда на припинення роботи, вимкнено живлення комп'ютера. CISC (англ.ComplexInstructionSetComputer — комп'ютер зі складним набором команд) — це архітектура системи команд, в якій більшість команд є комплексними, тобто реалізують певний набір простіших інструкцій процесора або шляхом зіставлення з кожною CISC-командою певної мікропрограми, або принаймні можуть бути зведені до набору таких простих інструкцій. Крім того, ознаками CISC-архітектури можна вважати також наявність великої кількості методів адресації пам'яті з можливістю безпосередньої роботи з операндами в основній пам'яті комп'ютера. Тобто, CISC-архітектури відносяться, як правило, до класу двохадресних. Зокрема, складні команди потребували багато часу на процедуру декодування, потребували багато апаратурних ресурсів для реалізації, що негативно відображалось на загальній швидкодії та складності системи. Далі, наявність спеціальних команд, таких як «виклик підпрограми» не завжди виправдовувала себе, в багатьох випадках доцільніше було б замість такої загальної команди використати набір елементарніших інструкцій, які в результаті спричиняли б виконання меншої кількості обчислень процесором. Це стосувалось і обчислювальних команд, які підтримували роботу з операндами в повільній пам'яті, що далеко не завжди давало оптимальний результат. Набагато ефективніше було б відокремити процедури роботи з пам'яттю (завантаження та збереження операндів) від проведення обчислень, що дало б можливість оптимізувати процедури звертання до запам'ятовуючого пристрою. Зрозуміло, що ці оптимізації повинні були виконуватись вже компіляторами з мов високого рівня, які до того часу досягли досить високого рівня функціональності. Сучасні CISC-архітектури, такі як останні втілення сімейства процесорів x86, хоч і відповідають CISC-концепції на рівні архітектури системи команд, але всередині процесора реалізують якраз пристосованішу до сьогоднішніх реалій RISC-модель, трансформуючи потік CISC-команд в процесі виконання в набори з простіших RISC-мікрооперацій, які й виконуються процесором. Для процесора комп'ютера із складною системою команд характерні наступні особливості: виконання команди за багато тактів, оскільки для цього потрібно здійснити багаторазові операції звернення до основної пам'яті та до програмно-доступних регістрів процесора; орієнтація АЛП на виконання великої кількості операцій, що пов'язано з розширеним складом системи команд; складна система розпізнавання команди, що пов'язано з великою кількістю методів адресації та великою кількістю форматів команд різної розрядності; програмне дешифрування команд з метою зменшення затрат обладнання; складна організація конвеєризації виконання команд, що пов'язано, в першу чергу, зрізнотипністю їх виконання; орієнтація структури на виконання команд типу регістр-пам'ять та пам'ять-пам'ять. Основні елементи процесора - арифметико-логічний пристрій, пристрій керування і регістрова пам'ять або, як її ще називають, надоперативний запам'ятовуючий пристрій. Доскладу регістрової пам'яті, в свою чергу, входять наступні вузли - програмний лічильник,регістри: адреси, команди, даних, слова стану програми, а також регістровий файл, якийскладається з програмно доступних регістрів. Cтруктура регістрової (надоперативної) пам'яті процесора складається з регістрів спеціального та зального призначення. До регістрів спеціального призначення належать: регістри адреси (РгА); регістри команд (РгК); програмний лічильник(ПЛ) регістри даних (РгД). РгА зберігає адресу даного або команди при зверненні до основної пам'яті. РгД зберігає операнд при його запису або зчитуванні з основної пам'яті. В ролі операнда може бути дане, команда або адреса. РгК зберігає команду після її зчитування з основної пам'яті. ПЛ підраховує команди та зберігає адресу поточної команди. Комп'ютер з архітектурою Джона фон Неймана має один програмний лічильник. Більшість комп'ютерів мають в складі процесора тригери для зберігання бітів стану процесора, або, як їх іще називають, прапорців. Кожен прапорець має спеціальне призначення. Частина прапорців вказує на результати арифметичних і логічних операцій: додатній результат (Р), від'ємний результат (N), нульовий результат (Z), перенос (С), арифметичне переповнення (V), і т. д. В системі команд комп'ютера є команди, які вказують процесору коли встановити чи скинути ці тригери. Інша частина прапорців вказує режими захисту пам'яті. Існують також прапорці, які вказують пріоритети виконуваних програм. В деяких процесорах додаткові тригери служать для зберігання кодів умов, формуючи регістр кодів умов. Взяті разом описані прапорці формують слово стану програми (ССП), а відповідні тригери - регістр ССП. Регістри загального призначення (РЗП) є програмно доступними. Зазвичай 'їх називають регістровим файлом. Вони можуть використовуватись програмістом в якості регістрів для зберігання вхідних та вихідних даних, а також проміжних результатів обчислень, в якості адресних та індексних регістрів при виконанні операцій модифікації адрес.Різноманітність типів даних, форм представлення та опрацювання, необхідні дії дляобробки та керування ходом виконання обчислень призводить до необхідностівикористання різноманітних команд – набора команд.Кожен процесор має власний набір команд, який називається системою командпроцесора. Система команд характеризується трьома аспектами: формат, способи адресації, система операцій. Форматом команди – є довжина команди, кількість, розмір, положення, призначення та спосіб кодування полів. Команди мають включати наступні види інформації: тип операції, яку необхідно реалізувати в даній команді (поле команду операції - КОП) місце в пам’яті звідки треба взяти перший операнд (А1); місце в пам’яті звідки треба взяти другий операнд (А2); місце в пам’яті куди треба помістити результат (А3). Кожному з цих видів інформації відповідає своя частина двійкового слова – поле. Реальнасистема команд зазвичай має команди декількох форматів, тип формату визначає КОП.Команда в комп'ютері зберігається в двійковій формі. Вона вказує тип операції, якамає бути виконаною, адреси операндів, над якими виконується операція, та адресирозміщення результатів виконання операції. Відповідно до цього команда складається здвох частин, коду операції та адресної частини. КОП займає k розрядів. Ним може бути закодовано до N = 2k різних операцій. Кількість двійкових розрядів, які відводяться під код операції, вибирається таким чином,щоб ними можна було закодувати всі виконувані в даному комп'ютері операції. Якщодеякий комп'ютер може виконувати Nc різних операцій, то мінімальна розрядність полякоду операції k визначається наступним чином: k = [log Nc], де вираз в дужках означаєзаокруглення до більшого цілого. Поле адреси (адресна частина) займає m розрядів. В ньому знаходяться адреси операндів. Кожна _______адреса займає mi розрядів, де і - номер адреси (і=1,2,...1), 1 – кількістьадресних полів. Кожною адресою можна адресувати пам'ять ємністю 2ті слів.Розмір команди k + m повинен бути узгодженим з розміром даних, тобто бути зним однаковим або кратним цілому числу, що спрощує організацію роботи з пам'яттю. Якправило, розмір команди рівний 8, 16, 32 біти. При написанні програми крім двійкової можуть використовуватись й інші форми представлення команд: вісімкова, шістнадцяткова, символьна (мнемонічна). Використаннявісімкового і шістнадцяткового кодування дозволяє скоротити записи і спростити роботупрограміста. Як відомо 3 двійкових розряди (тріада) замінюються на 1 вісімковий, а 4двійкових розряди (тетрада) - на 1 шістнадцятковий. Мнемонічне кодування спрощує процес написання, читання і відлагодження програми. Основний принцип такого кодування - кожна команда представляється 3-х або4-х буквеним символом, який показує назву команди. Деякі приклади мнемонічногокодування: ADD - додати (add), SUB - відняти (subtract), MPY - перемножити (multiply), DIV - поділити (divide), Операнди також представляються символічно. Наприклад команда ADD R Y означає додавання вмісту комірки пам'яті Y до вмісту регістра R. Зауважимо, що операція виконується над вмістом, а не над адресою комірки пам'яті та регістра. Таким чином, з'являється можливість написання машинних програм в символічній формі. Повний набір символічних назв і правила їх використання утворюють мову програмування, відому як асемблерна мова. Символічні імена називаються мнемонічними,а правила їх використання для створення команд і програм називаютьсясинтаксисом мови. Програма, яка переводить із мнемонічного коду асемблерної мови в машинний, називається асемблером. Команди, які використовуються для переводу вихідної програмив асемблерну, називаються командами асемблера. Ці команди вказують як інтерпретуватиназви, де розмістити програму в пам'яті, яка кількість комірок пам'яті необхідна длязберігання даних. Способи адресації. Варіанти інтерпретації бітів (розрядів) поля адреси з метою знаходження операнда називаються способами адресації. Коли команда вказує на операнд, він може знаходитись в самій команді, в основній або зовнішній пам'яті чи в регістровій пам'яті процесора. За роки існування комп'ютерів була створена своєрідна технологія адресації, яка передбачає реалізацію різних способів адресації, чому послужило ряд причин: забезпечення ефективного використання розрядної сітки команди; забезпечення ефективної апаратної підтримки роботи з масивами даних; забезпечення задання параметрів операндів; можливість генерації великих адрес на основі малих. Існує велика кількість способів адресації. Розглянемо п’ять основних способів адресації опрандів в командах. Пряма – в цьому випадку адресне поле зберігає адресу операнда. Її різновидом є пряма регістрова адресація, яка адресує не комірку пам’яті а номер регістру. Безпосередня – в поле адреси команди поміщається не адреса, а сам операнд. Непряма – в полі адреси команди зберігається адреса комірки пам’яті в якій знаходиться адреса операнда. Такій спосіб дозволяє оперувати з адресами як з даними. Різновид непряма-регістрова адресація, адреса адреси зберігається в регістрі загального призначення. Відносна – адреса формується, як сума з двох доданків: бази, яка зберігається вспеціальному регістрі чи в одному з регістрів спеціального призначення, та зміщення, якезадається в полі адреси команди. Різновид індексна та базова індексна. При індекснійзамість базового регістра є індексний, який автоматично модифікується (зазвичайзбільшується на 1). Базова-індексна адресація формується адреса як сума трьох доданків:бази, індексу та зміщення. Безадресна – поле адреси в команді відсутнє. Адреса операнда, або немає змістуабо є по замовчуванню(наприклад дії на спеціальним регістром - акумулятором).Безадресні команди неможливо використати для інших регістрів чи комірок пам’яті.Одним з різновидів безадресної адресації є використання стеку. Алгоритми роботи розробленого емулятора та асемблера Алгоритми роботи асемблер та симулятора не є складні. Саму програму асемблера можна поділити на 3 частини: Створення списку міток Перевірка на помилки коду програми Створення машинного коду Кожен з етапів має власну реалізацію, і відмінності. Створення списку міток: Зчитати рядок команди з файлу Прибрати форматування ( коментарі, лишні пробіли ітд.) Записати цей рядок у список команд Якщо є мітка то виконати наступні дії, інакше перейти до кроку 5 Перевірити чи мітка не задовга ( 6 символів + «/0») Перевірити чи існує така мітка Перевірити чи мітка починається з літери Перевірити чи має символи відмінні від літер/цифр Якщо не кінець файлу, то перейти до пункту 1. Кінець Після цього іде перевірка правильності команд. Цей асемблер визначає такі типи помилок: Чи існує така команда Чи правильні аргументи Чи існує мітка, на яку може бути перехід Чи правильне зміщення в командах переходу Алгоритм роботи блоку перевірки: Перевірити чи існує інструкція Перевірити регістри Якщо є непряма-регістрова адресація Якщо регістрова адресація Перевірити чи існує мітка в командах переходів Перевірити чи числа не завеликі. Після цього іде створення машинного коду. Машинний код створюється на основі зміщень кожного з операндів. Кожна команда має власне число, що їй відповідає. Нижче описуються усі зміщення: Код інструкці – 24 1 аргумент – 20 2 аргумент – 16 3 аргумент – 0 Сам машинний код записується у файл з розширенням .mc Алгоритм роботи симулятора є досить простий, основою його є цикл та вказівник на інструкції. Перед його виконанням створюється підготовка коду – записати у список усі команди з файлу, а потім записати їх у пам’ять. Вказівник на інструкцію = 0. Після цього можна виконувати їх. Якщо інструкція HALT, перейти на крок 7 Збільшити ІР Розкодовування інструкції ( отримання аргументів із зміщення) Пошук інструкції Отримати аргументи Виконанти інструкцію Зберегти результат Вивести на екран стан симулятора Перейти на крок 1 Кінець Опис виконання кожного типу розроблених інструкцій в потактовому режимі В даному розділі буде описано усі інструкції та їх виконання в потактовому режимі. Кожна команда має власні особливості та принцип виконання. Є декілька типів команд, що виконуються в комп’ютері: Інструкції арифметичні Інструкції логічні Інструкції умовного переходу Інструкції з використанням прапорців Інструкції пересилання даних Інструкції арифметичні addreg1 reg2 dest– додає 2 числа і записує результат у вказаний регістр Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC =регістр[операнд 2] АСС = АСС + регістр[операнд 2] Регістр[операнд 3] = АСС xsubreg1 reg2 dest –віднімає 2 числа і записує результат у вказаний регістр, і міняє операнди місцями Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC =регістр[операнд 2] АСС = АСС - регістр[операнд 2] Змінити операнди місцями Регістр[операнд 3] = АСС xidivreg1 reg2 dest –ділення 2 чисел та обмін місцями операндів Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC =регістр[операнд 2] АСС = АСС / регістр[операнд 2] Змінити операнди місцями Регістр[операнд 3] = АСС increg1 – інкремент числа, що знаходиться в регістріreg1 Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] ACC = ACC + 1 Регістр[операнд 3] = ACC Інструкції логічні xorreg1 reg2 dest– Побітове виключне або. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] Побітове виключне АБО над АСС і регістр[операнд 2] Регістр[операнд 3] = АСС shlreg1 reg2 dest– зсув вліво на задану кількість біт. ЇЇ реалізація: Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC =регістр[операнд 1] Зсунути число в АСС на кількість біт, що в регістр[операнд 2] Регістр[операнд 3] = АСС nandreg1 reg2 dest– побітове І-НЕ. Результат зберігається у регістрі або по вказівнику у пам’ять. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] Побітове І-НЕ над числом в АСС та регістр[операнд 2] Регістр[операнд 3] = АСС cmplereg1 reg2 dest – порівняння 2 чисел: reg1<= reg2 Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] Побітове І-НЕ над числом в АСС та регістр[операнд 2] Регістр[операнд 3] = АСС Інструкції умовного переходу jmbreg1 reg2 offset- Беззнакове більше if (regA> regB) PC=PC+1+offSet Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] АСС = ACC – регістр[операнд 2] Якщо число більше за 0, то IP = регістр[операдн 3] + IP Якщо результат інший, то перейти до наступної інструкції jmgnereg1 reg2 offset–Нерівно if (regA!= regB) PC=PC+1+offSet Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] АСС = ACC – регістр[операнд 2] Якщо число не 0, то IP = регістр[операдн 3] + IP Якщо результат інший, то перейти до наступної інструкції jarlreg1 reg2 – ця інструкція просто присвоює регістру 2 вказівник на команду, а сам вказівник набуває значення, що лежить в регістрі 1. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію Регістр[операнд 2] = ІР ІР = регістр[операнд 2] beqreg1 reg2 label– виконує перехід на мітку або по зміщенню, якщо значення в 2-х регістрах рівні. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] АСС = ACC – регістр[операнд 2] Якщо результат ZF == 0, CF == 0, SF == 0, ІР = регістр [операнд 3], або якщо використано зміщення, то ІР = ІР + операнд 3 Якщо результат інший, то перейти до наступної інструкції Інструкції з використанням прапорців cmp reg1 reg2 – порівнює значення з 2-х регістрів і виставляє відповідно прапорці. 1. Вибрати інструкцію з MAR 2. IP = IP + 1 3. Розкодувати інструкцію 4. ACC = регістр[операнд 1] 5. АСС = ACC – регістр[операнд 2] 6. Виставити потрібні прапорці rcl reg1 reg2 dest – виконує циклічний звус через прапорець CF числа, що в регістрі 1 на число, що в регістрі 2 і результат запишеться у регістр 3. 1. Вибрати інструкцію з MAR 2. IP = IP + 1 3. Розкодувати інструкцію 4. ACC = регістр[операнд 1] 5. АСС = ACC зсунути на число, що в регістр[операнд 2] 6. Виставити прапорець CF, якщо потрібно stc – виставляє 1 в прапорці переповнення 1. Вибрати інструкцію з MAR 2. IP = IP + 1 3. Розкодувати інструкцію 4. Виставити прапорець CF Інструкції пересилання даних swreg1 mem – зберігає дані з регістра у пам’ять. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] регістр[операнд 1] = АСС lwreg1 mem – пересилає дані з регістра 1 в регістр 2. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію ACC = регістр[операнд 1] 5. регістр[операнд 2] = АСС Halt –інструкція для припинення роботи програми. Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію Припинити роботу Setbasereg1 – встановлює регістр бази Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = регістр[операнд 1] BR = ACC Setindexreg1 – встановлює регістр індекса Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = регістр[операнд 1] IR = ACC Також є додаткові команди, що мають базово-індексну адресацію. Потактовий режим для ниж є практично такий же як і для інших аналогічних команд, лише змінений код операції та вибірка аргумента. Список операцій, що підтримують базово-індексну адресацію: Add_b Nand_b Inc_b Xidiv_b Xsub_b Addreg1 reg2 #– додає 2 числа і записує результат у вказаний регістр, що визначається IR + BR Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = IR ACC = ACC + BR MAR = ACC ACC =регістр[операнд 2] АСС = АСС + регістр[операнд 2] Регістр[операнд 3] = MAR xsubreg1 reg2 # –віднімає 2 числа і записує результат у вказаний регістр,що визначається IR + BR і міняє операнди місцями Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = IR ACC = ACC + BR MAR = ACC ACC =регістр[операнд 2] АСС = АСС - регістр[операнд 2] Регістр[операнд 3] = MAR Змінити операнди місцями xidivreg1 reg2 # –ділення 2 чисел та обмін місцями операндів, результат записує в регістр,що визначається IR + BR Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = IR ACC = ACC + BR MAR = ACC ACC =регістр[операнд 2] АСС = АСС / регістр[операнд 2] Регістр[операнд 3] = MAR Змінити операнди місцями nandreg1 reg2 #– побітове І-НЕ. результат записує в регістр,що визначається IR + BR Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = IR ACC = ACC + BR MAR = ACC ACC = регістр[операнд 1] Побітове І-НЕ над числом в АСС та регістр[операнд 2] Регістр[операнд 3] = MAR inc#– інкремент числа, що знаходиться в регістрі, який визначається IR + BR Вибрати інструкцію з пам’яті Збільшити вказівник на команду Розкодувати інструкцію АСС = IR ACC = ACC + BR MAR = ACC ACC = регістр[операнд 1] ACC = ACC + 1 Регістр[операнд 3] = MAR Функціональна схема комп’ютера до модифікації рис. 1. Функціональна схема комп’ютера до модифікації Функціональна схема комп’ютера після модифікації рис. 2. Функціональна схема комп’ютера після модифікації Опис розроблених форматів команд Розрядність шини даних комп’ютера 32 біт. Кожна команда має мати власний формат. Загальний формат інструкції зображено нижче: Таб. 8. Формат команди 31-29 28-24 23-20 19-16 15-0  - opcode Arg1 Arg2 Arg3   Opcode – код операції Arg1 – перший аргумент Arg2 - другий аргумент Arg3 – третій аргумент Спеціальні команди, що використовуються: .fill – заповнює своє місце числом що вказане в аргументі 1 Halt – команда припинення роботи програми Так як шина даних є 32-бітна, то і числа можуть мати лише стільки біт. Для даного представлення використав вбудований тип int (int32). Він уже має підтримку компілятора. Він підтримує як від’ємні числа, так і додатні. Таб. 9. Тип Байти Біти Min Max  Signed int 4 32 -2147483648 2147483647   Таб. 10. Спосіб представлення в пам’яті Знак – 31 біт Мантиса 30-0 біти  S M   Формат команди, що мають 3 операнди addreg1 reg2 dest nandreg1 reg2 dest xidivreg1 reg2 dest xsub reg1 reg2 dest xor reg1 reg2 dest shl reg1 reg2 dest cmple reg1 reg2 dest jmb reg1 reg2 offset|label jmnge reg1 reg2 offset|label rcr reg1 reg2 dest Add_breg1 reg2 # Nand_breg1 reg2 # Xidiv_breg1 reg2 # Xsub_b reg1 reg2 #   Таб. 11. Формат команди з 3-ма аргументами 31 28-24 23-20 19-16 15-0  IB opcode Arg1 Arg2 Arg3   Формат команди, що мають 2 операнди lwreg1 label swreg1 label beqreg1 label jalrreg1 label cmp reg1 reg2 Таб. 12. Формат команди з 2-ма аргументами 31-29 28-24 23-20 19-16 15-0  - opcode Arg1 Arg2 -   Формат команди, що мають 1 операнд Setbase reg1 Inc reg1 Inc_b reg1   Таб. 13. Формат команди зупинки 31-29 28-24 23-20 19-16 15-0  - opcode - - Arg3   Формат команди, що не мають операндів Stc halt Таб. 14. Формат команди зупинки 31-29 28-24 23-20 19-16 15-0  - opcode - - -   Основні результати роботи (висновок) В даному розділі виконується тестування ассемблера на маленькій програмці. В папці з програмою є і іншітестові програмки. lw 1 a lw 2 b xidiv 1 2 3 halt a .fill 21 b .fill 7 / Рис.3. Створення машинних кодів в асемблері Вміст самого файлу з машинними кодам: 51642368 52756480 135397379 0 21 7 Нижче наведено знімок екрану після симуляції. Вивід здійснюється у текстовий файл під назвою log.txt / Рис. 4. Запуск програми асемблера на виконання / Рис 5. Знімок екрану звіту програми у блокноті Нижче наведено сам код із звітом виконнаня програми: @@@ state: pc=0 base register=0 instruction register=0 Carry flag=0 Sign flag=0 Zero flag=0 memory: mem[ 0 ] = 51642368 mem[ 1 ] =
Антиботан аватар за замовчуванням

04.06.2014 14:06-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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