- apply patches/patch.disasm-luizshiguno from Luiz Henrique Shigunov.
From the author: I've implemented functions ALOb(), ObAL(), YbAL(), ALXb() and eAXXv() from dis_groups.cc. I've also changed dis_decode.cc to print cmpsd if code is 32 bits and cmpsw if code is 16 bits. The same with stosd, lodsd and scasd.
This commit is contained in:
parent
dc01227a03
commit
c4782d5e9c
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: dis_decode.cc,v 1.12 2002-11-19 05:47:44 bdenney Exp $
|
||||
// $Id: dis_decode.cc,v 1.13 2003-01-21 13:23:47 cbothamy Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -960,16 +960,54 @@ bx_disassemble_c::disasm(bx_bool is_32, Bit32u ip, Bit8u *instr, char *disbuf)
|
||||
goto done;
|
||||
|
||||
case 0xA6: dis_sprintf("cmpsb "); XbYb(); goto done;
|
||||
case 0xA7: dis_sprintf("cmpsw "); XvYv(); goto done;
|
||||
|
||||
case 0xA7:
|
||||
if (db_32bit_opsize) {
|
||||
dis_sprintf("cmpsd ");
|
||||
}
|
||||
else {
|
||||
dis_sprintf("cmpsw ");
|
||||
}
|
||||
XvYv();
|
||||
goto done;
|
||||
|
||||
case 0xA8: dis_sprintf("test AL, "); Ib(); goto done;
|
||||
case 0xA9: dis_sprintf("test "); eAX(); dis_sprintf(", "); Iv(); goto done;
|
||||
case 0xAA: dis_sprintf("stosb "); YbAL(); goto done;
|
||||
case 0xAB: dis_sprintf("stosw "); YveAX(); goto done;
|
||||
case 0xAC: dis_sprintf("lodsb "); ALXb(); goto done;
|
||||
case 0xAD: dis_sprintf("lodsw "); eAXXv(); goto done;
|
||||
case 0xAE: dis_sprintf("scasb "); ALXb(); goto done;
|
||||
case 0xAF: dis_sprintf("scasw "); eAXXv(); goto done;
|
||||
|
||||
case 0xAB:
|
||||
if (db_32bit_opsize) {
|
||||
dis_sprintf("stosd ");
|
||||
}
|
||||
else {
|
||||
dis_sprintf("stosw ");
|
||||
}
|
||||
YveAX();
|
||||
goto done;
|
||||
|
||||
case 0xAC: dis_sprintf("lodsb "); ALXb(); goto done;
|
||||
|
||||
case 0xAD:
|
||||
if (db_32bit_opsize) {
|
||||
dis_sprintf("lodsd ");
|
||||
}
|
||||
else {
|
||||
dis_sprintf("lodsw ");
|
||||
}
|
||||
eAXXv();
|
||||
goto done;
|
||||
|
||||
case 0xAE: dis_sprintf("scasb "); YbAL(); goto done;
|
||||
|
||||
case 0xAF:
|
||||
if (db_32bit_opsize) {
|
||||
dis_sprintf("scasd ");
|
||||
}
|
||||
else {
|
||||
dis_sprintf("scasw ");
|
||||
}
|
||||
YveAX();
|
||||
goto done;
|
||||
|
||||
case 0xB0: dis_sprintf("mov AL, "); Ib(); goto done;
|
||||
case 0xB1: dis_sprintf("mov CL, "); Ib(); goto done;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: dis_groups.cc,v 1.7 2002-11-19 05:47:44 bdenney Exp $
|
||||
// $Id: dis_groups.cc,v 1.8 2003-01-21 13:23:47 cbothamy Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -337,11 +337,57 @@ bx_disassemble_c::ObAL(void)
|
||||
}
|
||||
|
||||
void
|
||||
bx_disassemble_c::YbAL(void) {dis_sprintf("*** YbAL() unfinished ***");}
|
||||
bx_disassemble_c::YbAL(void)
|
||||
{
|
||||
char *edi;
|
||||
|
||||
if (db_32bit_addrsize) {
|
||||
edi = "EDI";
|
||||
}
|
||||
else {
|
||||
edi = "DI";
|
||||
}
|
||||
|
||||
dis_sprintf("ES:[%s], AL", edi);
|
||||
}
|
||||
|
||||
void
|
||||
bx_disassemble_c::ALXb(void) {dis_sprintf("*** ALXb() unfinished ***");}
|
||||
bx_disassemble_c::ALXb(void)
|
||||
{
|
||||
char *esi;
|
||||
|
||||
if (db_32bit_addrsize) {
|
||||
esi = "ESI";
|
||||
}
|
||||
else {
|
||||
esi = "SI";
|
||||
}
|
||||
|
||||
dis_sprintf("AL, [%s]", esi);
|
||||
}
|
||||
|
||||
void
|
||||
bx_disassemble_c::eAXXv(void) { dis_sprintf("*** eAXXv() unfinished ***"); }
|
||||
bx_disassemble_c::eAXXv(void)
|
||||
{
|
||||
char *eax, *esi;
|
||||
|
||||
if (db_32bit_opsize) {
|
||||
eax = "EAX";
|
||||
}
|
||||
else {
|
||||
eax = "AX";
|
||||
}
|
||||
|
||||
if (db_32bit_addrsize) {
|
||||
esi = "ESI";
|
||||
}
|
||||
else {
|
||||
esi = "SI";
|
||||
}
|
||||
|
||||
dis_sprintf("%s, [%s]", eax, esi);
|
||||
}
|
||||
|
||||
void
|
||||
bx_disassemble_c::Es(void) {dis_sprintf("*** Es() unfinished ***");}
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user