forked from vxd555/CPUpipelining
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.cpp
79 lines (63 loc) · 1.6 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <vector>
#define REGSIZE 32
#define MEMSIZE 320
/*Ściąga do instrukcji
Rtype R1 R2 R3
ADD - dodawanie
MUL - mnożenie
SUB - odejmowanie
ADD i MUL są tylko specjalnymi przypadkami Rtype ale z dzieleniem raczej nie będziey mieli do czynienia
LW R4 100 R5
SW R6 100 R7
BEQ R8 R9 loop
Rliczba - jeden unsigned int oznaczający adres rejestru zapisany w wektorze registerTab
loop - można pominąć
*/
using namespace std;
enum insType
{
Rtype = 0, //instrukcje operacji może być uzywany jako zapełniacz
ADD = 1, //dodanie
MUL = 2, //mnożenie
SUB = 3, //odejmowanie
LW = 4, //zapisanie z reg -> mem
SW = 5, //wczytanie z mem -> reg
BEQ = 6, //skok warunkwy
NOP = 7 //nic
};
//instrukcja składa się z nazwy (typu) oraz indeksów rejestrów.
//niektóre mogą być nie wypełnione lub wypełnione losowo w zależności od typu instrukcji
struct instruction
{
insType type;
unsigned int reg1;
unsigned int reg2;
unsigned int reg3;
};
vector<bool> regLock; //czy dany rejestr jest zabolowany
vector<int> reg; //wartości wewnątrz rejestrów
vector<int> mem; //wartości wewnątrz pamięci
vector<instruction> ins; //lista instrukcji procesora
void ReadInstructions(fstream &f) //wczytanie instrukcji z pliku
{
}
int main(int argc, char** argv)
{
for(int i = 0; i < REGSIZE; ++i) //inicjalizacja rejestrów
{
reg.push_back(0);
regLock.push_back(false);
}
for(int i = 0; i < MEMSIZE; ++i) //inicjalizacji pamięci
{
mem.push_back(0);
}
//inicjalizacjia instrukcji
fstream file;
file.open("instruction.txt", fstream::in);
ReadInstructions(file);
return 0;
}