83 |
despasm::despasm ( vector<unsigned long> spasm_code, int typ_reg) |
despasm::despasm ( vector<unsigned long> spasm_code, int typ_reg) |
84 |
{ |
{ |
85 |
instr_word rozkaz; |
instr_word rozkaz; |
86 |
string linia; |
string linia, regreg, regimm; |
87 |
char *bufor; |
char *bufor; |
88 |
long adres; |
long adres; |
89 |
|
|
97 |
rozkaz = bit_word(spasm_code[i]); |
rozkaz = bit_word(spasm_code[i]); |
98 |
|
|
99 |
memset(bufor, 0, DEASM_BUFOR); |
memset(bufor, 0, DEASM_BUFOR); |
100 |
|
linia = ""; |
101 |
|
regreg = ""; |
102 |
|
regimm = ""; |
103 |
|
|
104 |
sprintf(bufor, INSTR_FORMAT, rozkazy[rozkaz.instr]); |
sprintf(bufor, INSTR_FORMAT, rozkazy[rozkaz.instr]); |
105 |
linia = bufor; |
linia = bufor; |
106 |
|
|
120 |
linia += bufor; |
linia += bufor; |
121 |
break; |
break; |
122 |
case (instr_word::primary_reg): |
case (instr_word::primary_reg): |
123 |
linia += rejestr(rozkaz.src1, typ_reg) + ", " + |
regreg += (string) "[ " + rejestr(rozkaz.src1,typ_reg) + |
124 |
rejestr(rozkaz.src2, typ_reg) + ", " + |
(string) " + " + rejestr(rozkaz.src2,typ_reg) + (string) " ]"; |
125 |
rejestr(rozkaz.dst, typ_reg); |
|
126 |
|
if (rozkaz.group == instr_word::load |
127 |
|
|| rozkaz.instr == instr_word::swap) |
128 |
|
linia += regreg + ", " + rejestr(rozkaz.dst, typ_reg); |
129 |
|
else if (rozkaz.group == instr_word::store) |
130 |
|
linia += rejestr(rozkaz.dst, typ_reg) + ", " + regreg; |
131 |
|
else |
132 |
|
linia += rejestr(rozkaz.src1, typ_reg) + ", " + |
133 |
|
rejestr(rozkaz.src2, typ_reg) + ", " + |
134 |
|
rejestr(rozkaz.dst, typ_reg); |
135 |
break; |
break; |
136 |
case (instr_word::primary_imm): |
case (instr_word::primary_imm): |
137 |
sprintf(bufor, IMM_FORMAT, (int) rozwinZnak(rozkaz.imm13, 13)); |
sprintf(bufor, IMM_FORMAT, (int) rozwinZnak(rozkaz.imm13, 13)); |
138 |
linia += rejestr(rozkaz.src1, typ_reg) + ", " + |
regreg = rejestr(rozkaz.src1,typ_reg) + " + " + (string) bufor; |
139 |
bufor + ", " + rejestr(rozkaz.dst, typ_reg); |
regimm += (string) "[ " + regreg + " ]"; |
140 |
|
|
141 |
|
if (rozkaz.group == instr_word::load |
142 |
|
|| rozkaz.instr == instr_word::swap) |
143 |
|
linia += regimm + ", " + rejestr(rozkaz.dst, typ_reg); |
144 |
|
else if (rozkaz.group == instr_word::store) |
145 |
|
linia += rejestr(rozkaz.dst, typ_reg) + ", " + regimm; |
146 |
|
else if (rozkaz.instr == instr_word::jmpl) |
147 |
|
linia += regreg + ", " + rejestr(rozkaz.dst, typ_reg); |
148 |
|
else |
149 |
|
linia += rejestr(rozkaz.src1, typ_reg) + ", " + |
150 |
|
bufor + ", " + rejestr(rozkaz.dst, typ_reg); |
151 |
break; |
break; |
152 |
} |
} |
153 |
|
|