Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

Київський національний університет імені Тараса Шевченка

Факультет комп'ютерних наук та кібернетики

ЛАБОРАТОРНА РОБОТА №2
з теми
"Імітаційна модель процесора"

Виконав
студент 1-ого курсу
групи К-15
спеціальності "Інформатика"
Савчук Олександр Юрійович
Київ – 2023
Постановка задачі
Необхідно розробити програмну модель процесора та реалізувати його
імітаційну (тобто комп’ютерну) модель.

Виконавцю буде запропоновано індивідуальний варіант, в якому буде


визначена конкретна:

1)    адресність процесора (1-, 2-, 3-адресна або стекова);


2)    бітність процесора (магістралі даних);
3)    обов’язкова для реалізації команда процесора (згідно індивідуального
варіанта).

Мій варіант:
1) Стекова адресність
2) 18 бітів на регістр
3) Арифметичний зсув вправо або вліво

Має бути реалізовано:

1)    розміщення інтерпретованої програми у текстовому файлі (наприклад,


один рядок = одна команда);
2)    мінімум 2 команди (одна з них – занесення значення у регістр, інші
задаються варіантом);
3)    для операндів/регістрів представлення побітно, можливо, для деяких
варіантів із побайтним групуванням бітів;
4)    фіксація у регістрі стану як мінімум знаку результату виконання
команди;
5)    потактове виконання команд (наприклад, 1-й такт – занесення команди
у регістр команди, 2-й такт – виконання операції і занесення результату).
Результат виконання
Додаток із кодом програми
#include <iostream>

#include <bitset>

#include <string>

using namespace std;

bitset<15> load(int &R)

bitset<15> binary_R1 (R);

return binary_R1;

bitset<15> MoveLeft(int R, int shift)

return (load(R) << shift);

bitset<15> MoveRight(int R, int shift)

return (load(R) >> shift);

}
int main() {

int value1, value2, value3, value4, value, value11, value22, value33, value44;

string command, r;

int tc = 1;

int pc = 0;

int ps;

int i = 0;

cout << "Commands" << endl << "1: Load" << endl << "2: MoveLeft" << endl << "3:
MoveRight" << endl << "4: Exit" << endl;

while(1)

string command1 = command;

cin >> command >> r >> value;

if(r == "R1"){

value1 = value;

if(r == "R2"){
value2 = value;

if(r == "R3"){

value3 = value;

if(r == "R4"){

value4 = value;

if(i < 4){

value11 = value1;

value22 = value2;

value33 = value3;

value44 = value4;

i++;

if(command != command1)
{

pc++;

tc = 1;

if (command == "Exit" || command == "4")

return 0;

if (command == "MoveLeft" || command == "2")

if(r == "R1")

cout << "R1" << ": " << MoveLeft(value11, value1) << endl;

cout << "R2" << ": " << load(value22) << endl;

cout << "R3" << ": " << load(value33) << endl;

cout << "R4" << ": " << load(value44) << endl;

if(r == "R2")

cout << "R1" << ": " << MoveLeft(value11, value1) << endl;

cout << "R2" << ": " << MoveLeft(value22, value2) << endl;

cout << "R3" << ": " << load(value33) << endl;

cout << "R4" << ": " << load(value44) << endl;

if(r == "R3")
{

cout << "R1" << ": " << MoveLeft(value11, value1) << endl;

cout << "R2" << ": " << MoveLeft(value22, value2) << endl;

cout << "R3" << ": " << MoveLeft(value33, value3) << endl;

cout << "R4" << ": " << load(value44) << endl;

if(r == "R4")

cout << "R1" << ": " << MoveLeft(value11, value1) << endl;

cout << "R2" << ": " << MoveLeft(value22, value2) << endl;

cout << "R3" << ": " << MoveLeft(value33, value3) << endl;

cout << "R4" << ": " << MoveLeft(value44, value4) << endl;

if(value <= 0)

cout << "ps: " << 1 << endl;

else

cout << "ps: " << 0 << endl;

cout << "pc: " << pc << endl;

cout << "tc: " << tc << endl;

tc++;

if (command == "MoveRight" || command == "3")


{

if(r == "R1")

cout << "R1" << ": " << MoveRight(value11, value1) << endl;

cout << "R2" << ": " << load(value2) << endl;

cout << "R3" << ": " << load(value3) << endl;

cout << "R4" << ": " << load(value4) << endl;

if(r == "R2")

cout << "R1" << ": " << MoveRight(value11, value1) << endl;

cout << "R2" << ": " << MoveRight(value22, value2) << endl;

cout << "R3" << ": " << load(value3) << endl;

cout << "R4" << ": " << load(value4) << endl;

if(r == "R3")

cout << "R1" << ": " << MoveRight(value11, value1) << endl;

cout << "R2" << ": " << MoveRight(value22, value2) << endl;

cout << "R3" << ": " << MoveRight(value33, value3) << endl;

cout << "R4" << ": " << load(value4) << endl;

if(r == "R4")

cout << "R1" << ": " << MoveRight(value11, value1) << endl;

cout << "R2" << ": " << MoveRight(value22, value2) << endl;
cout << "R3" << ": " << MoveRight(value33, value3) << endl;

cout << "R4" << ": " << MoveRight(value44, value4) << endl;

if(value <= 0)

cout << "ps: " << 1 << endl;

else

cout << "ps: " << 0 << endl;

cout << "pc: " << pc << endl;

cout << "tc: " << tc << endl;

tc++;

if(command == "Load" || command == "1")

if(r == "R1")

cout << "R1" << ": " << load(value1) << endl;

if(r == "R2")

cout << "R1" << ": " << load(value1) << endl;
cout << "R2" << ": " << load(value2) << endl;

if(r == "R3")

cout << "R1" << ": " << load(value1) << endl;

cout << "R2" << ": " << load(value2) << endl;

cout << "R3" << ": " << load(value3) << endl;

if(r == "R4")

cout << "R1" << ": " << load(value1) << endl;

cout << "R2" << ": " << load(value2) << endl;

cout << "R3" << ": " << load(value3) << endl;

cout << "R4" << ": " << load(value4) << endl;

if(value <= 0)

cout << "ps: " << 1 << endl;

else

cout << "ps: " << 0 << endl;

cout << "pc: " << pc << endl;

cout << "tc: " << tc << endl;

tc++;
}

}
}

You might also like