- 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:
Christophe Bothamy 2003-01-21 13:23:47 +00:00
parent dc01227a03
commit c4782d5e9c
2 changed files with 95 additions and 11 deletions

View File

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

View File

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