Робота з симулятором машини Ноймана

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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Архітектура комп'ютерів

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

Міністерство освіти та науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ  Звіт З лабораторної роботи №4 З Архітектури комп’ютерів На тему: Робота з симулятором машини Ноймана. Дослідження архітектури системи команд. Львів – 2012 Мета: зрозуміти принципи виконання архітектури системи команд на тимулятора машини Ноймана, зрозуміти і дослідити виконання інструкції. Завдання: розширити архітектуру систему команд тимулятора машини Ноймана, скласти програму на асемблері з розшириним набором команд, перетворити її у машинні коди, запустити тимулятор, увести до нього коди машинних, проаналізувати і пояснити отримані результати, довести коректність роботи розширеного набору команд, скласти звіт з виконання лабораторних досліджень та захистити його. Теоретичні відомості:  Рис. 1. Схема роботи асемблера Загальна схема роботи асемблера (рис. 1) складається з 2 проходів. На першому проході асемблер перевіряє коректність синтаксису команд. На другому виконується генерування відповідних машинних команд, тобто числового представлення асемблерної команди. Функція readAndParse виконує зчитування рядку асемблерної програми і декодування на відповідні поля: мітка, код операції, операнди. Отримана таким чином і декодована інструкція перевіряється на коректність: існування команди, відповідна кількість аргументів, існування міток та т. п. Функція testRegArg перевіряє коректність використання назви регістра. Функція testAddrArg перевіряє коректність використання адреси. Функція labelArray перетворює відповідну мітку у адресу. Program.as та program.mc – відповідно вхідний та вихідний файли.  Рис. 2 Функціональна схема тимулятора. Симулятор починає свою роботу ініціалізацією пам’яті та регістрів 0 значеннями (рис. 2.). Наступним кроком відбувається заванаження програми у машинних кодах в пам’ять. Далі відбувається покрокове виконання інструкцій та вивід стану на зовнішній пристрій (чи на екран консолі чи у файл). У stateStruct зберігається стан машини – значення регістрів, пам’яті та програмний лічільник. stateStruct Функція Run виконує обробку інструкцій з пам’яті, функція printState виводить поточний стан машини, а функція convertNum виконує перетворення числа у доповняльний код. Індивідуальне завдання згідно варіанту : 12варіан: циклічний зсув вліво Зміни в кодах симулятора: #define LCS 7 ///////////////////////////////////////////////////////////////////// int LCS(int,int); ///////////////////////////////////////////////////////////////////// else if (opcode == LCS) { if(state.reg[arg0]<0){ state.reg[arg0]<<=1; state.reg[arg0]=state.reg[arg0]+1; } else{ state.reg[arg0]<<=1; Зміни в кодах компілятора: #define LCS 7 ///////////////////////////////////////////////////////////////////// if (strcmp(opcode, "add") && strcmp(opcode, "nand") && strcmp(opcode, "lw") && strcmp(opcode, "sw") && strcmp(opcode, "beq") && strcmp(opcode, "jalr") && strcmp(opcode, "halt") && strcmp(opcode, "LCS") && strcmp(opcode, ".fill") ) { printf("error: unrecognized opcode %s at address %d\n", opcode, address); exit(1); } //////////////////////////////////////////////////////////////////// if (!strcmp(opcode, "add") || !strcmp(opcode, "nand") || !strcmp(opcode, "lw") || !strcmp(opcode, "sw") || !strcmp(opcode, "beq") || !strcmp(opcode, "jalr") || !strcmp(opcode, "LCS")){ testRegArg(arg0); testRegArg(arg1); } ///////////////////////////////////////////////////////////////////////// if ( (strcmp(opcode, "halt") && strcmp(opcode, ".fill") && strcmp(opcode, "jalr")&& strcmp(opcode, "LCS") && arg2[0]=='\0') || (!strcmp(opcode, "jalr") && arg1[0]=='\0') || (!strcmp(opcode, ".fill") && arg0[0]=='\0')) { printf("error at address %d: not enough arguments\n", address); exit(2); } ////////////////////////////////////////////////////////////////// } else if (!strcmp(opcode, "LCS")) { num = (LCS << 22) | (atoi(arg0) << 19); Текст тестової програми: lw 0 1 var start lcs 1 done halt var .fill -1 stAddr .fill start Результати виконання: memory[0]=8454147 memory[1]=29884416 memory[2]=25165824 memory[3]=-1 memory[4]=1 @@@ state: pc 0 memory: mem[ 0 ] 8454147 mem[ 1 ] 29884416 mem[ 2 ] 25165824 mem[ 3 ] -1 mem[ 4 ] 1 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 end state @@@ state: pc 1 memory: mem[ 0 ] 8454147 mem[ 1 ] 29884416 mem[ 2 ] 25165824 mem[ 3 ] -1 mem[ 4 ] 1 registers: reg[ 0 ] 0 reg[ 1 ] -1 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state @@@ state: pc 2 memory: mem[ 0 ] 8454147 mem[ 1 ] 29884416 mem[ 2 ] 25165824 mem[ 3 ] -1 mem[ 4 ] 1 registers: reg[ 0 ] 0 reg[ 1 ] -1 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state machine halted total of 3 instructions executed final state of machine: @@@ state: pc 3 memory: mem[ 0 ] 8454147 mem[ 1 ] 29884416 mem[ 2 ] 25165824 mem[ 3 ] -1 mem[ 4 ] 1 registers: reg[ 0 ] 0 reg[ 1 ] -1 reg[ 2 ] 0 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state Висновок: в цій лабораторній роботі я дослідив архітектуру системи команд, отримав знання та навички для подальшої роботи, що створило підгрунтя для подальшого опрацювання матеріалу, виконання наступних лабораторних робіт та курсової роботи.
Антиботан аватар за замовчуванням

04.06.2014 15:06-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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