Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра «ЕОМ»
Лабораторна робота №4
з предмету “Архітектура комп’ютерів”
Мета: зрозуміти принципи виконання архітектури системи команд на симуляторі машини Ноймана, зрозуміти і дослідити виконання інструкції.
Завдання: розширити архітектуру систему команд симулятора машини Ноймана, скласти програму на асемблері з розшириним набором команд, перетворити її у машинні коди, запустити симулятор, увести до нього коди машинних, проаналізувати і пояснити отримані результати, довести коректність роботи розширеного набору команд, скласти звіт з виконання лабораторних досліджень та захистити його.
Теоретичні відомості
Рис. 1. Схема роботи асемблера
Загальна схема роботи асемблера (рис. 1) складається з 2 проходів. На першому проході асемблер перевіряє коректність синтаксису команд. На другому виконується генерування відповідних машинних команд, тобто числового представлення асемблерної команди.
Функція readAndParse виконує зчитування рядку асемблерної програми і декодування на відповідні поля: мітка, код операції, операнди. Отримана таким чином і декодована інструкція перевіряється на коректність: існування команди, відповідна кількість аргументів, існування міток та т. п.
Функція testRegArg перевіряє коректність використання назви регістра.
Функція testAddrArg перевіряє коректність використання адреси.
Функція labelArray перетворює відповідну мітку у адресу.
Program.as та program.mc – відповідно вхідний та вихідний файли.
Рис. 2 Функціональна схема симулятора.
Симулятор починає свою роботу ініціалізацією пам’яті та регістрів 0 значеннями (рис. 2.). Наступним кроком відбувається заванаження програми у машинних кодах в пам’ять. Далі відбувається покрокове виконання інструкцій та вивід стану на зовнішній пристрій (чи на екран консолі чи у файл).
У stateStruct зберігається стан машини – значення регістрів, пам’яті та програмний лічільник. stateStruct
Функція Run виконує обробку інструкцій з пам’яті, функція printState виводить поточний стан машини, а функція convertNum виконує перетворення числа у доповняльний код.
Завдання
3
Остача від ділення
Хід роботи
Змінений код в файлі asol.c
#define DIV 7
...
if (!strcmp(opcode, "add") || !strcmp(opcode, "nand") ||
!strcmp(opcode, "lw") || !strcmp(opcode, "sw") ||
!strcmp(opcode, "beq") || !strcmp(opcode, "jalr") ||
!strcmp(opcode, "div") ) {
testRegArg(arg0);
testRegArg(arg1);
}
if (!strcmp(opcode, "add") || !strcmp(opcode, "nand") ||
!strcmp(opcode, "div") ) {
testRegArg(arg2);
}
…
} else if (!strcmp(opcode, "DIV_RE")) {
num = (DIV_RE << 22) | (atoi(arg0) << 19) | (atoi(arg1) << 16)
| atoi(arg2);
Змінений код в файлі ssol.c
#define DIV 7
…
else if (opcode ==DIV_RE) {
state.reg[arg2] = state.reg[arg0]%state.reg[arg1];
}
Після цього створила файл Budim4.as ,його код:
lw 0 1 ONE
lw 0 2 TWO
start DIV_RE 1 2 1
done halt
ONE .fill 11
TWO .fill 3
stAddr .fill start
Використовуючи консольне вікно та програми ASOLBUDIM.exe i SSOLBUDIM.exe перетворила ассемблерний код у машинний (команда ASOLBUDIM Budim4.as Budim4.mc) та провела симуляцію (ASOLBUDIM Budim4.mc>rezultl4.txt), де rezultl4.txt – файл, що зберігає покроковий вивід станів машини в ході виконання машинних інструкцій:
/
Рис.1 «Запис команд у консолі»
Отримані файли на локальному диску D:
/
Вмістиме файлу Budim4.mc:
8454148
8519685
30015489
25165824
11
3
2
Кінцевий результат у файлі rezultl4.txt:
machine halted
total of 4 instructions executed
final state of machine:
@@@
state:
pc 4
memory:
mem[ 0 ] 8454148
mem[ 1 ] 8519685
mem[ 2 ] 30015489
mem[ 3 ] 25165824
mem[ 4 ] 11
mem[ 5 ] 3
mem[ 6 ] 2
registers:
reg[ 0 ] 0
reg[ 1 ] 2
reg[ 2 ] 3
reg[ 3 ] 0
reg[ 4 ] 0
reg[ 5 ] 0
reg[ 6 ] 0
reg[ 7 ] 0
end state
В регістрах reg[4], reg[5] містяться змінні, які використовуються для ділення. Результат ми зберігаємо в reg[6] і його значення дорівнює 2;
11/3 = 3 (остача 2) – тому можна вважати, що дана програма працює правильно.
Висновок: після виконання даної лабораторної роботи я зрозуміла принципи виконання архітектури системи команд на симуляторі машини Ноймана, зрозуміла і дослідила виконання інструкції.