-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathListingLineClass.h
94 lines (71 loc) · 1.69 KB
/
ListingLineClass.h
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#pragma once
#define LOCSTART 0
#define LOCLEN 4
#define SYMNAMEST 8
#define SYMNAMELEN 6
#define OPCDST 16
#define OPCDLEN 7
#define OPERST 25
#define OPERLEN 24
#define MACHINST 51
#define MACHINLEN 20
#include <iostream>
#include <string>
#include <vector>
#include "NumericalStringFunctions.h"
#include "SimpleExpressionEvaluator.h"
using namespace std;
class ListingLineClass {
private:
void ParseListingLine(string line);
string GrabFieldFromLine(string line, int lineLen, int startPos, int length);
void CalcMachInstrLen();
void CalcProgramCounter();
void ParseOperandExpression();
public:
vector<string> tokens;
SimpleExpressionEvaluator* ExpressionEval;
void SetFlags();
string Loc;
string SymbolName;
string Opcode;
string Operand;
string MachInstr;
bool Extended;
bool Immediate;
bool Indirect;
bool Literal;
bool PCRel;
bool BaseRel;
bool Indexed;
bool Label;
unsigned int ProgCounter;
unsigned int LocNum;
int MachInstrLen;
unsigned int Displacement;
ListingLineClass(string line)
{
MachInstrLen = 0;
ProgCounter = 0;
PCRel = false;
BaseRel = false;
Indexed = false;
ParseListingLine(line);
SetFlags();
CalcMachInstrLen();
LocNum = ConvertHexStringToNumber(Loc);
CalcProgramCounter();
ParseOperandExpression();
// Remove when done//////////////////////////////////////
if (Extended)
cout << "Extended\n";
if (Immediate)
cout << "Immediate\n";
if (Indirect)
cout << "Indirect\n";
if (Literal)
cout << "Literal\n";
cout << "PC: " << hex << ProgCounter << "\n";
//////////////////////////////////////////////////////////
}
};