forked from petarpetrov96/Cigma16
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassembler017.cpp
51 lines (46 loc) · 2.08 KB
/
assembler017.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
#include "assembler017.h"
Assembler017::Assembler017(const char* data, int length) : Assembler(data,length) {
}
char Assembler017::getRRR(char *instrName) {
if(!strcmp(instrName,"add")) return '0';
if(!strcmp(instrName,"sub")) return '1';
if(!strcmp(instrName,"mul")) return '2';
if(!strcmp(instrName,"div")) return '3';
if(!strcmp(instrName,"cmplt")) return '4';
if(!strcmp(instrName,"cmpeq")) return '5';
if(!strcmp(instrName,"cmpgt")) return '6';
if(!strcmp(instrName,"inv")) return '7';
if(!strcmp(instrName,"and")) return '8';
if(!strcmp(instrName,"or")) return '9';
if(!strcmp(instrName,"xor")) return 'a';
if(!strcmp(instrName,"shiftl")) return 'b';
if(!strcmp(instrName,"shiftr")) return 'c';
if(!strcmp(instrName,"trap")) return 'd';
return ' ';
}
char Assembler017::getRX(char *instrName) {
if(!strcmp(instrName,"lea")) return '0';
if(!strcmp(instrName,"load")) return '1';
if(!strcmp(instrName,"store")) return '2';
if(!strcmp(instrName,"jump")) return '3';
if(!strcmp(instrName,"jumpf")) return '4';
if(!strcmp(instrName,"jumpt")) return '5';
if(!strcmp(instrName,"jal")) return '6';
return ' ';
}
char Assembler017::getJump(char *instrName) {
if(!strcmp(instrName,"jump"))
return '0';
return ' ';
}
int Assembler017::getInstructionType(char *instrName) {
if(!strcmp(instrName,"add") || !strcmp(instrName,"sub") || !strcmp(instrName,"mul") || !strcmp(instrName,"div") || !strcmp(instrName,"cmplt") || !strcmp(instrName,"cmpeq") || !strcmp(instrName,"cmpgt") || !strcmp(instrName,"inv") || !strcmp(instrName,"and") || !strcmp(instrName,"or") || !strcmp(instrName,"xor") || !strcmp(instrName,"shiftl") || !strcmp(instrName,"shiftr") || !strcmp(instrName,"trap"))
return 1;
if(!strcmp(instrName,"lea") || !strcmp(instrName,"load") || !strcmp(instrName,"store") || !strcmp(instrName,"jumpf") || !strcmp(instrName,"jumpt") || !strcmp(instrName,"jal"))
return 3;
if(!strcmp(instrName,"jump"))
return 4;
if(!strcmp(instrName,"data"))
return 5;
return -1;
}