| 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 |
|
|