Робота з симулятором машини Ноймана. Дослідження архітектури системи команд

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ ЗВІТ про виконання лабораторної роботи № 4 «Робота з симулятором машини Ноймана. Дослідження архітектури системи команд.» з дисципліни «Архітектура комп’ютерів» Львів – 2012 Мета: зрозуміти принципи виконання архітектури системи команд на симуляторі машини Ноймана, зрозуміти і дослідити виконання інструкції. Теоретичні відомості Загальна схема роботи асемблера (рис. 1) складається з 2 проходів. На першому проході асемблер перевіряє коректність синтаксису команд. На другому виконується генерування відповідних машинних команд, тобто числового представлення асемблерної команди. Функція readAndParse виконує зчитування рядку асемблерної програми і декодування на відповідні поля: мітка, код операції, операнди. Отримана таким чином і декодована інструкція перевіряється на коректність: існування команди, відповідна кількість аргументів, існування міток та т. п. Функція testRegArg перевіряє коректність використання назви регістра. Функція testAddrArg перевіряє коректність використання адреси. Функція labelArray перетворює відповідну мітку у адресу. Program.as та program.mc – відповідно вхідний та вихідний файли. Симулятор починає свою роботу ініціалізацією пам’яті та регістрів 0 значеннями (рис. 2.). Наступним кроком відбувається заванаження програми у машинних кодах в пам’ять. Далі відбувається покрокове виконання інструкцій та вивід стану на зовнішній пристрій (чи на екран консолі чи у файл). У stateStruct зберігається стан машини – значення регістрів, пам’яті та програмний лічільник. stateStruct Функція Run виконує обробку інструкцій з пам’яті, функція printState виводить поточний стан машини, а функція convertNum виконує перетворення числа у доповняльний код. Завдання: розширити архітектуру систему команд симулятора машини Ноймана, скласти програму на асемблері з розшириним набором команд, перетворити її у машинні коди, запустити симулятор, увести до нього коди машинних, проаналізувати і пояснити отримані результати, довести коректність роботи розширеного набору команд, скласти звіт з виконання лабораторних досліджень та захистити його. Варіант № 20 -> If А==B Des=1, else Des=0 Хід роботи Заміняємо код в вайлі assemble на свій згідно з варінтом … #define FUNC 7 ... /* check register fields */ if (!strcmp(opcode, "add") || !strcmp(opcode, "nand") || !strcmp(opcode, "lw") || !strcmp(opcode, "sw") || !strcmp(opcode, "beq") || !strcmp(opcode, "jalr") || !strcmp(opcode, "FUNC")) { testRegArg(arg0); testRegArg(arg1); } if (!strcmp(opcode, "add") || !strcmp(opcode, "nand") || !strcmp(opcode, "FUNC")) { testRegArg(arg2); } … } else if (!strcmp(opcode, "FUNC")) { num = (FUNC << 22) | (atoi(arg0) << 19) | (atoi(arg1) << 16) | atoi(arg2); } … Заміняємо код в вайлі simulate на свій згідно з варінтом … else if (opcode == FUNC) { if (state.reg[arg0] == state.reg[arg1]) state.reg[arg2] = 1; else state.reg[arg2] = 0; } … Створюю тестову програму. lw 0 1 A load reg1 with A lw 0 2 B load reg2 with B FUNC 1 2 3 my Func halt end of program A .fill 5 B .fill 10 Запускаю створену програму на асемблювання та отримую наступні машинні інструкції. 8454148 8519685 30015491 25165824 5 10 Запускаю тестову програму на симуляцію. memory[0]=8454148 memory[1]=8519685 memory[2]=30015491 memory[3]=25165824 memory[4]=5 memory[5]=10 @@@ state: pc 0 memory: mem[ 0 ] 8454148 mem[ 1 ] 8519685 mem[ 2 ] 30015491 mem[ 3 ] 25165824 mem[ 4 ] 5 mem[ 5 ] 10 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 ] 8454148 mem[ 1 ] 8519685 mem[ 2 ] 30015491 mem[ 3 ] 25165824 mem[ 4 ] 5 mem[ 5 ] 10 registers: reg[ 0 ] 0 reg[ 1 ] 5 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 ] 8454148 mem[ 1 ] 8519685 mem[ 2 ] 30015491 mem[ 3 ] 25165824 mem[ 4 ] 5 mem[ 5 ] 10 registers: reg[ 0 ] 0 reg[ 1 ] 5 reg[ 2 ] 10 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state @@@ state: pc 3 memory: mem[ 0 ] 8454148 mem[ 1 ] 8519685 mem[ 2 ] 30015491 mem[ 3 ] 25165824 mem[ 4 ] 5 mem[ 5 ] 10 registers: reg[ 0 ] 0 reg[ 1 ] 5 reg[ 2 ] 10 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state machine halted total of 4 instructions executed final state of machine: @@@ state: pc 4 memory: mem[ 0 ] 8454148 mem[ 1 ] 8519685 mem[ 2 ] 30015491 mem[ 3 ] 25165824 mem[ 4 ] 5 mem[ 5 ] 10 registers: reg[ 0 ] 0 reg[ 1 ] 5 reg[ 2 ] 10 reg[ 3 ] 0 reg[ 4 ] 0 reg[ 5 ] 0 reg[ 6 ] 0 reg[ 7 ] 0 end state Висновок: На даній лабораторній роботі я розширив архітектуру системи команд симулятора машини Ноймана, склав програму на асемблері з розшириним набором команд, перетворив її у машинні коди, запустив симулятор, увів до нього коди машинних команд, проаналізував отримані результати.
Антиботан аватар за замовчуванням

06.02.2013 01:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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