ПРОЕКТУВАННЯ КОМП'ЮТЕРА

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / Курсова робота На тему: “ПРОЕКТУВАННЯ КОМП'ЮТЕРА” з дисципліни «Архітектура комп’ютера» Анотація В ході виконання даного курсового проекту передбачає ознайомлення та опанування архітектуру CISC – комп’ютера. Проект складається з трьох частин. В першій частині розробляється програма, яка перетворює вхідну асемблерну програму у відповідний код на мові машинних інструкцій. В другій частини розробляється поведінковий стимулятор результуючого машинного коду. В третій частині розробляється невеличка програма на асемблерній мові. CISC (англ.ComplexInstructionSetComputer — комп'ютер зі складним набором команд) — це архітектура системи команд, в якій більшість команд є комплексними, тобто реалізують певний набір простіших інструкцій процесора або шляхом зіставлення з кожною CISC-командою певної мікропрограми, або принаймні можуть бути зведені до набору таких простих інструкцій. Крім того, ознаками CISC-архітектури можна вважати також наявність великої кількості методів адресації пам'яті з можливістю безпосередньої роботи з операндами в основній пам'яті комп'ютера. Тобто, CISC-архітектури відносяться, як правило, до класу двохадресних. Основні принципи даної архітектури, які запропонував Джон фон Нейман: 1. Інформація кодується в двійковому представленні. 2. Інформація в комп’ютері ділиться на команди і дані. 3. Різнотипні за змістом слова розрізняються за способом застосування, а не по способу кодування. 4. Слова інформації розміщаються в комірках пам’яті та ідентифікуються номерами комірок – адресами слів. 5. Пам’ять є лінійною. 6. Пам’ять має довільну адресацію. 7. Команди і дані зберігаються в одній пам’яті. 8. Алгоритми представляються у вигляді послідовності керуючих слів, як називаються командами. Команда визначається найменуванням операції та слів інформації, які в ній приймають участь. Алгоритм записаний у вигляді послідовності команд, називається програмою. 9. Весь набір виконуваних комп’ютером команд називається системою команд комп’ютера. Зміст Вихідні дані на проектування Аналітичний розділ Алгоритми роботи розробленого емулятора та ассемблера Виконання кожного типу розроблених інструкцій Функціональна схема комп’ютера до модифікації Функціональна схема після модифікації Опис розроблених форматів команд Основні результати роботи (висновок) Література Додатки Вихідні дані на проектування Реалізація додаткових команд. Необхідно реалізувати 8 додаткових команд. Серед них 3 арифметичні, 3 логічні та 2 команди керування згідно варіанту. Команди не мають повторюватися. Розрядність Розрядність шини даних : 32 Розмір пам’яті (Байт) : 65536 Розмір регістрового файлу(к-сть регістрів) : 16 Арифметичні DIV regAregBdestReg Беззнакове діленняdestReg=regA/regB  XIMUL regAregBdestReg Знакове множення і обмін операндів місцями destReg=regA*regB  XSUB regAregBdestReg Віднімання і обмін операндів місцями: destReg=regAregB   Логічні SHR regAregBdestReg Логічний зсув вправо destReg=regA>>regB  ROL regAregBdestReg Циклічний зсув вправо destReg=regA<<regB  NOT regAdestReg Логічне побітове НЕ destReg=~regA   Умовні переходи JMA regAregBoffSet Беззнакове більше if (regA>regB) PC=PC+1+offSet  JMNL regAregBoffSet Знакове не менше if (regA!<regB) PC=PC+1+offSet   Регістр ознаки нуля ZF CMP regAregB Порівняти regAregB і встановити прапорці/  BSR regAdestReg Побітове сканування в зворотньому напрямку(від старших до молодших) regA в пошуках біта з 1 , повертає номер позиції в destReg. Якщо 1 знайдено ZF=1, інакше ZF=0  JNE offSet Перейти, якщо більше чи рівно, if(ZF! =0)PC=offset   Адресація Безпосередня Реалізовані додаткові команди Мнемонічнй код  Зміст  BDIV Ділення, реалізоване безпосередньою адресацією  BSUB Віднімання, реалізоване безпосередньою адресацією  BADD Додавання, реалізоване безпосередньою адресацією   Аналітичний розділ В першій частині даного курсового проекту необхідно написати програму, якаперетворює вхідну програму на мові асемблер в мову машинних кодів. Програма маєперетворити асемблерні імена команд в числові еквіваленти, наприклад асемблернукоманду beq в 100, також перетворити символьні імена адрес в числові значення.Результуючий файл має складатися з послідовності 32 бітних інструкцій (біти 31-25інструкції завжди рівні 0). Формат лінійки асемблерного коду наступний (<пробіл> означає послідовністьтабуляцій і/або пробілів): мітка <пробіл>інструкція<пробіл>поле№1<пробіл>поле№2<пробіл>поле№3<пробіл>коментар Крайнє ліве поле лінійки асемблерного коду – поле мітки. Коректна мітка маєскладатися максимуму з 6 символів, символами можуть бути літери або цифри, алепочинатися з букви. Поле мітки є необов’язковим, проте пробіл після даного поля єобов’язковим. Мітки дозволяють значно спростити процес написання асемблернихпрограм, в іншому випадку прийшлось би модифікувати всі адресні частини кожен разколи додавався рядок коду! Після не обов’язкової мітки іде обов’язковий пробіл. Далі іде поле назви інструкції,в якому може бути ім’я будь якої асемблерної інструкції зазначені вище в таблиці. Післяпробілів ідуть відповідні поля. Всі поля можуть зберігати або десяткові значення абомітки. Кількість полів залежить від інструкції, поля які не використовуються ігноруються. Після останнього поля має йти пробіл за яким може розміщуватися коментар.Коментар закінчується з кінцем лінії асемблерної програми. Коментарі дуже важливі дляотримання зрозумілої асемблерної програми, тому що інструкції самі по собі малозрозумілі. Крім інструкцій СК, асемблерна програма може містити директиви для асемблера.В даному курсовому проекті для асемблера використовується лише одна директива - .fill(зверніть увагу на точку попереду). Директива . fill повідомляє компілятору про те, що вінмає зберегти число за адресою відповідно де дана інструкція знаходиться. Директива .fillвикористовує одне поле, в якому може бути як число так і символьна адреса. Наприклад«.fill 32» означає зберегти число 32 за адресою де дана інструкція знаходиться. (Оскількив нас кожен рядок програми відповідає адресі починаючи з 0, то відповідно адреса будедорівнювати номеру рядка - 1). Директива . fill з символьною адресою збереже адресуданої мітки. Асемблер має виконувати два проходи через асемблерну програму. На першомупроході, асемблер має вирахувати адреси кожної символьної мітки. Виходячи з того, щоперша інструкція знаходить по нульовій адресі. На другому проході, асемблер маєгенерувати машинні інструкції (у вигляді десткових чисел) для кожного рядкуасемблерної мови. Зауважимо, що програмі імена файлів мають передаватися у якості аргументівкомандного рядка. Асемблер має зберігати в результуючому файлі лише машинні командиу вигляді десяткових чисел, одну команду в одному рядку. Порушення даного форматупризведе до того, що вихідний файл не можна буде виконати. Інший вивід (наприклад длявідладки ) програма може виконувати у консоль. Асемблер має визначати наступні помилки в асемблер ній програмі: використанняне визначених міток, використання однакових міток, використання змішення якеперевищує 16 біт, не визначені команди. Асемблер має повертати 1, якщо він визначивпомилку та 0 у випадку успішного виходу з програми. Асемблер не має визначати помилки виконання програми, тобто помилки які виникають під час виконання програми. Поведінкова симуляція. Другою частино даної курсової роботи є створення програми, яка може відсимулювати роботу любого вірного машинного коду СК. Вхідним має бути файл змашинним кодом програми, якій має створити асемблер. Наприклад, якщо назва програмиsimulateта машинний код зберігається в файлі program.mc, програма має запускатисянаступнимчином: simulateprogram.mc>output При цьому весь вивід буде виконуватися в файл "output". Симулятор має розпочинати роботи з ініціалізації вмісту всіх регістрів Симулятор має виконувати програму доти не зустріне команду halt. Симулятор має виводити вивід стану комп’ютера перед виконанням кожноїінструкції та один раз перед виходом з програми. Вивід стану має включати вивід вмістувсіх регістрів, ПЛ, пам’яті. Пам’ять має виводитися лише для комірок визначених в файліз машинними кодами (наприклад у наведеному вище прикладі це адреси від 0 до 9). Алгоритми роботи розробленого емулятора та ассемблера Алгоритм роботи програми ассемблер: Зчитати перший рядок вхідного файлу Розбити його на лексеми (мітка,команда,операнд 1,операнд 2,операнд 3) Перевірка, чи дійсна команда(чи така існує) Перевірка полів регістрів для команд операндами яких є регістри Перевірка полів адрес для команд операндами яких є адреса Перевірка на наявність інших операндів Перевірка на правильність мітки (чи назадовга, чи починається з букви,складається з букв і цифр) Кодування команди в машинний код і запис у вихідний файл Повторювати алгоритм циклічно до кінця вхідного файлу Алгоритм роботи програми емулятора: Ініціалізація пам’яті, регістрів та стеку Зчитується машинний код Декодування машинного коду Виконання заданих команд Запис стану після виконання однієї команди у вихідний файл Повторювати циклічно до появи команди виходу Виконання кожного типу розроблених інструкцій Інструкції r-типу (add, nand,div,ximul,xsub,shr,rol) потребують наявності 3 полів: поле№1 – regA, поле№2 regB, поле№3 destReg. Декодування машинного коду, отримання команди і трьох операндів (номерів регістрів) Виконнання заданої команди(завантаження 1-го операнду в AluOperand,виконання операції, запис результату в AluResult, завантаження в регістр даних з AluResult) Інструкції і-типу (jma,jmnl) вимагають 3 полів: поле№1 – regA, поле№2 regB поле№3 – числове значення зміщення чи символьна адреса. Числове значення може бути як додатнім так і відємним Декодування машинного коду, отримання команди і трьох операндів (номерів регістрів та адреси переходу) Виконання заданої команди(завантаження 1-го операнду в AluOperand, виконання порівняння, якщо порівняння виконується, то до РС додається зміщення що зберігається в регістрі) Інструкції J-типу (not,bsr,cmp) вимагає 2 полів: поле№1 – regA, поле№2 regB Декодування машинного коду, отримання команди і двох операндів(номерів регістрів) завантаження першого операнду з данного регістру а АЛП, виконання операції, позицію знайденої 1 записується в AluResult, а після чого з AluResult в регістр,встановлення ZF = 1(якщо знайдено,якщо ні то 0) Операції BADD, BSUB, BDIV потребують наявності 3 полів: поле№1 – регістр в який записується результат , поле№2- регістр даних, поле№3- константа яка використовується для виконання заданої операції. Операція JNE поле№3 – числове значення зміщення чи символьна адреса PC = PC + offsetякщо ZF =1 Функціональна схема комп’ютера до модифікації / Рис 1. Функціональна схема Спрощеного Комп’ютера. Функціональна схема після модифікації / Рис. 2 Функціональна схема СК після модифікації Опис розроблених форматів команд ADD 1 2 3 31 30 29 24 23 20 19 16 15 4 3 0 unused opcode Reg A Reg B unused destReg   Інструкції R-типу (add, nand,div,ximul,xsub,shr,rol): біти 29-24: код операції біти 23-20: reg A біти 19-16: reg B біти 15-4: не використовуються ( =0) біти 3-0: destReg Біти 31-30 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. JMNL 1 2 offset 31 30 29 24 23 20 19 16 15 0 unused opcode Reg A Reg B Offset   СК підтримує 4 формати інструкцій. Біти 31-30 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. Інструкції І-типу (lw, sw, beq, jma, jmnl) біти 29-24: код операції біти 23-20: reg A біти 19-16: reg B біти 15-0 : адреса переходу Біти 31-30 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. Інструкції J-типу (jalr,bsr, cmp, not): біти 29-24: код операції біти 23-20: reg A біти 19-16: reg B біти 15-0: не використовуються ( =0) Біти 31-30 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. Інструкції 0-типу (noop, halt) біти 29-24: код операції біти 23-0: не використовуються ( =0) Біти 31-30 не використовує жодна інструкція тому вони завжди мають дорівнювати 0. Інструкції К-типу (jne) біти 29-24: код операції біти 23-20: reg A біти 19-0: не використовуються ( =0) Висновок: Розроблені програми – асемблер та симулятор працюють вірно. Тести для всіх функцій пройшли перевірку. Виконуючи цю курсову роботу я засвоїв методи розробки архітектури спрощеного комп’ютера. Також я засвоїв написання коду різних функцій для СК а також засвоїв різні типи адресації інструкцій комп’ютера. Також була досягнута головна мета – розроблена модель архітектури спрощеного комп’ютера (СП). Дана модель побудована на основі CISC архітектури і забезпечила виконання всіх основних принципів описаних фон Нейманом: Вся інформація ділиться на команди і дані Команди і дані розміщуються в одній пам’яті, доспуп до них можна отримати по адресі комірки Пам’ять є лінійною Пам’ять має довільну адресацію Алгоритми представляються у послідовності команд Та інші. Одже дана модель відповідає всім поставленим вимог і є простим прикладом комп’ютера з CISC архітектурою. Додатки: Текст набраної програми для перевірки операції ADD lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 add 1 2 3 donehalt op1 .fill 10 op2 .fill 2 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 1179651 100663296 10 2 0 Результат: Register[1] = 10 Register[2] = 2 Register[3] = 12 Текст набраної програми для перевірки операції BADD lw 0 1 a badd 3 1 10 donehalt a .fill 100 Машинні коди цієї програми : 33619971 355532810 100663296 100 Результат: Register[1] = 100 Register[2] = 0 Register[3] = 110 Текст набраної програми для перевірки операції BDIV lw 0 1 a bdiv 3 1 1000 donehalt a .fill 10000 Машинні коди цієї програми : 33619971 321979368 100663296 10000 Результат: Register[1] = 10000 Register[2] = 0 Register[3] = 10 Текст набраної програми для перевірки операції BSR lw 0 1 op1 lw 0 2 op2 bsr 1 2 donehalt op1 .fill 32 op2 .fill 0 Машинні коди цієї програми : 33619972 33685509 286392320 100663296 32 0 Результат: Register[1] = 32 Register[2] = 6 Register[3] = 0 Текст набраної програми для перевірки операції BSUB lw 0 1 a bxsub 3 1 10 donehalt a .fill 100 Машинні коди цієї програми : 33619971 338755594 100663296 100 Результат: Register[1] = 100 Register[2] = 0 Register[3] = 90 Текст набраної програми для перевірки операції CMP lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 cmp 1 2 donehalt op1 .fill 10 op2 .fill 10 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 269615104 100663296 10 10 0 Результат: Register[1] = 10 Register[2] = 10 Register[3] = 0 CF=0 SF=0 ZF=1 Текст набраної програми для перевірки операції DIV lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 div 1 2 3 donehalt op1 .fill 10 op2 .fill 2 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 135397379 100663296 10 2 0 Результат: Register[1] = 10 Register[2] = 2 Register[3] = 5 Текст набраної програми для перевірки операції JMA lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 jma 1 2 e jma 2 1 l e xsub 1 2 3 endhalt l add 1 2 3 donehalt op1 .fill 10 op2 .fill 5 op3 .fill 0 Машинні коди цієї програми : 33619977 33685514 33751051 236060673 237043714 168951811 100663296 1179651 100663296 10 5 0 Результат: Register[1] = 5 Register[2] = 10 Register[3] = 5 Текст набраної програми для перевірки операції JMNL lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 jmnl 1 2 e jmnl 2 1 l e xsub 1 2 3 endhalt l add 1 2 3 donehalt op1 .fill 10 op2 .fill 50 op3 .fill 0 Машинні коди цієї програми : 33619977 33685514 33751051 252837889 253820930 168951811 100663296 1179651 100663296 10 50 0 Результат: Register[1] = 10 Register[2] = 50 Register[3] = 60 Текст набраної програми для перевірки операції NOT 33619972 33685509 219152386 100663296 10 1 Машинні коди цієї програми : 33619971 286392320 100663296 4 Результат: Register[1] = 10 Register[2] = -11 Текст набраної програми для перевірки операції ROL lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 rol 1 2 3 donehalt op1 .fill -1 op2 .fill 1 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 202506243 100663296 4294967295 1 0 Результат: Register[1] = -1 Register[2] = 1 Register[3] = -1 Текст набраної програми для перевірки операції SHR lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 shr 1 2 3 donehalt op1 .fill 12 op2 .fill 2 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 185729027 100663296 12 2 0 Результат: Register[1] = 12 Register[2] = 2 Register[3] =3 Текст набраної програми для перевірки операції XIMUL lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 ximul 1 2 3 donehalt op1 .fill 100 op2 .fill -2 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 152174595 100663296 100 4294967294 0 Результат: Register[1] = -2 Register[2] = 100 Register[3] =-200 Текст набраної програми для перевірки операції XSUB lw 0 1 op1 lw 0 2 op2 lw 0 3 op3 xsub 1 2 3 donehalt op1 .fill -10 op2 .fill 4 op3 .fill 0 Машинні коди цієї програми : 33619973 33685510 33751047 168951811 100663296 4294967286 4 0 Результат: Register[1] = 4 Register[2] = -10 Register[3] =14
Антиботан аватар за замовчуванням

04.06.2014 20:06-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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