DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

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

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

Про що ця робота

У звіті досліджено принципи виконання архітектури системи команд за допомогою симулятора машини Ноймана. Розширено набір команд симулятора та асемблера на основі індивідуального завдання.

У роботі розглядаються

  • Архітектура комп'ютерів
  • Симулятор машини Ноймана
  • Система команд
  • Машинні коди
  • Циклічний зсув

Зміст і розділи

  1. Мета
  2. Завдання
  3. Теоретичні відомості
  4. Індивідуальне завдання
  5. Зміни в кодах симулятора
  6. Зміни в кодах компілятора
  7. Текст тестової програми
  8. Результати виконання
  9. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Викладач кафедри ЕОМ

Ключові поняття

машина Нойманасистема командпам'ятьінструкціякод операціїоперанд

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

Міністерство освіти та науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ  Звіт З лабораторної роботи №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 Висновок: в цій лабораторній роботі я дослідив архітектуру системи команд, отримав знання та навички для подальшої роботи, що створило підгрунтя для подальшого опрацювання матеріалу, виконання наступних лабораторних робіт та курсової роботи.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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