Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 4
з дисципліни: “Архітектура комп’ютерів”
на тему: “Робота з симулятором машини Ноймана. Дослідження архітектури системи команд”
Мета лабораторної роботи
Зрозуміти принципи виконання архітектури системи команд на симуляторі машини Ноймана, зрозуміти і дослідити виконання інструкції.
Теоретичні відомості
Загальна схема роботи асемблера складається з 2 проходів. На першому проході асемблер перевіряє коректність синтаксису команд. На другому виконується генерування відповідних машинних команд, тобто числового представлення асемблерної команди.
Функція readAndParse виконує зчитування рядку асемблерної програми і декодування на відповідні поля: мітка, код операції, операнди. Отримана таким чином і декодована інструкція перевіряється на коректність: існування команди, відповідна кількість аргументів, існування міток та т. п.
Функція testRegArg перевіряє коректність використання назви регістра.
Функція testAddrArg перевіряє коректність використання адреси.
Функція labelArray перетворює відповідну мітку у адресу.
Симулятор починає свою роботу ініціалізацією пам’яті та регістрів 0 значеннями. Наступним кроком відбувається заванаження програми у машинних кодах в пам’ять. Далі відбувається покрокове виконання інструкцій та вивід стану на зовнішній пристрій (чи на екран консолі чи у файл).
У stateStruct зберігається стан машини – значення регістрів, пам’яті та програмний лічільник.
Функція Run виконує обробку інструкцій з пам’яті, функція printState виводить поточний стан машини, а функція convertNum виконує перетворення числа у доповняльний код.
Індивідуальне завдання
Розширити архітектуру систему команд симулятора машини Ноймана, скласти програму на асемблері з розширеним набором команд, перетворити її у машинні коди, запустити симулятор, увести до нього коди машинних, проаналізувати і пояснити отримані результати, довести коректність роботи розширеного набору команд, скласти звіт з виконання лабораторних досліджень та захистити його.
15
Декремент
Фрагмент коду
if (opcode == DEC) {
--state.reg[arg2];
}
Код для перевірки команди симулятора
lw 0 1 number number >> reg1
dec 0 0 1 reg1--
sw 0 1 number reg1 >> number
halt end of program
number .fill 7
Результат виконання програми (початковий і кінцевий стани)
@@@
state:
pc 0
memory:
mem[ 0 ] 8454148
mem[ 1 ] 29360129
mem[ 2 ] 12648452
mem[ 3 ] 25165824
mem[ 4 ] 7
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
machine halted
total of 4 instructions executed
final state of machine:
@@@
state:
pc 4
memory:
mem[ 0 ] 8454148
mem[ 1 ] 29360129
mem[ 2 ] 12648452
mem[ 3 ] 25165824
mem[ 4 ] 6
registers:
reg[ 0 ] 0
reg[ 1 ] 6
reg[ 2 ] 0
reg[ 3 ] 0
reg[ 4 ] 0
reg[ 5 ] 0
reg[ 6 ] 0
reg[ 7 ] 0
end state
Висновок
Я зрозумів принципи виконання архітектури системи команд на симуляторі машини Ноймана, зрозумів і дослідив виконання інструкції.