home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-30 | 61.3 KB | 1,220 lines |
- /********************************** module *********************************/
- /* */
- /* disasmtb */
- /* disassembler for CodeView */
- /* */
- /***************************************************************************/
- /* */
- /* @ Purpose: */
- /* */
- /* @ Functions included: */
- /* */
- /* */
- /* @ Author: Gerd Immeyer @ Version: */
- /* */
- /* @ Creation Date: 10.19.89 @ Modification Date: */
- /* */
- /***************************************************************************/
-
-
-
- /* Strings: Operand mnemonics, Segment overrides, etc. for disasm */
-
- char dszAAA[] = "aaa";
- char dszAAD[] = "aad";
- char dszAAM[] = "aam";
- char dszAAS[] = "aas";
- char dszADC[] = "adc";
- char dszADD[] = "add";
- char dszADDRPRFX[] = "";
- char dszAND[] = "and";
- char dszARPL[] = "arpl";
- char dszBOUND[] = "bound";
- char dszBSF[] = "bsf";
- char dszBSR[] = "bsr";
- char dszBST[] = "bst";
- char dszBSWAP[] = "bswap";
- char dszBT[] = "bt";
- char dszBTC[] = "btc";
- char dszBTR[] = "btr";
- char dszBTS[] = "bts";
- char dszCALL[] = "call";
- char dszCBW[] = "cbw";
- char dszCDQ[] = "cdq";
- char dszCLC[] = "clc";
- char dszCLD[] = "cld";
- char dszCLI[] = "cli";
- char dszCLTS[] = "clts";
- char dszCMC[] = "cmc";
- char dszCMP[] = "cmp";
- char dszCMPS[] = "cmps";
- char dszCMPSB[] = "cmpsb";
- char dszCMPSD[] = "cmpsd";
- char dszCMPSW[] = "cmpsw";
- char dszCMPXCHG[] = "cmpxchg";
- char dszCMPXCHG8B[] = "cmpxchg8b";
- char dszCPUID[] = "cpuid";
- char dszCS_[] = "cs:";
- char dszCWD[] = "cwd";
- char dszCWDE[] = "cwde";
- char dszDAA[] = "daa";
- char dszDAS[] = "das";
- char dszDEC[] = "dec";
- char dszDIV[] = "div";
- char dszDS_[] = "ds:";
- char dszENTER[] = "enter";
- char dszES_[] = "es:";
- char dszF2XM1[] = "f2xm1";
- char dszFABS[] = "fabs";
- char dszFADD[] = "fadd";
- char dszFADDP[] = "faddp";
- char dszFBLD[] = "fbld";
- char dszFBSTP[] = "fbstp";
- char dszFCHS[] = "fchs";
- char dszFCLEX[] = "fclex";
- char dszFCOM[] = "fcom";
- char dszFCOMP[] = "fcomp";
- char dszFCOMPP[] = "fcompp";
- char dszFCOS[] = "fcos";
- char dszFDECSTP[] = "fdecstp";
- char dszFDISI[] = "fdisi";
- char dszFDIV[] = "fdiv";
- char dszFDIVP[] = "fdivp";
- char dszFDIVR[] = "fdivr";
- char dszFDIVRP[] = "fdivrp";
- char dszFENI[] = "feni";
- char dszFFREE[] = "ffree";
- char dszFIADD[] = "fiadd";
- char dszFICOM[] = "ficom";
- char dszFICOMP[] = "ficomp";
- char dszFIDIV[] = "fidiv";
- char dszFIDIVR[] = "fidivr";
- char dszFILD[] = "fild";
- char dszFIMUL[] = "fimul";
- char dszFINCSTP[] = "fincstp";
- char dszFINIT[] = "finit";
- char dszFIST[] = "fist";
- char dszFISTP[] = "fistp";
- char dszFISUB[] = "fisub";
- char dszFISUBR[] = "fisubr";
- char dszFLD[] = "fld";
- char dszFLD1[] = "fld1";
- char dszFLDCW[] = "fldcw";
- char dszFLDENV[] = "fldenv";
- char dszFLDL2E[] = "fldl2e";
- char dszFLDL2T[] = "fldl2t";
- char dszFLDLG2[] = "fldlg2";
- char dszFLDLN2[] = "fldln2";
- char dszFLDPI[] = "fldpi";
- char dszFLDZ[] = "fldz";
- char dszFMUL[] = "fmul";
- char dszFMULP[] = "fmulp";
- char dszFNCLEX[] = "fnclex";
- char dszFNDISI[] = "fndisi";
- char dszFNENI[] = "fneni";
- char dszFNINIT[] = "fninit";
- char dszFNOP[] = "fnop";
- char dszFNSAVE[] = "fnsave";
- char dszFNSTCW[] = "fnstcw";
- char dszFNSTENV[] = "fnstenv";
- char dszFNSTSW[] = "fnstsw";
- char dszFNSTSWAX[] = "fnstswax";
- char dszFPATAN[] = "fpatan";
- char dszFPREM[] = "fprem";
- char dszFPREM1[] = "fprem1";
- char dszFPTAN[] = "fptan";
- char dszFRNDINT[] = "frndint";
- char dszFRSTOR[] = "frstor";
- char dszFSAVE[] = "fsave";
- char dszFSCALE[] = "fscale";
- char dszFSETPM[] = "fsetpm";
- char dszFSIN[] = "fsin";
- char dszFSINCOS[] = "fsincos";
- char dszFSQRT[] = "fsqrt";
- char dszFST[] = "fst";
- char dszFSTCW[] = "fstcw";
- char dszFSTENV[] = "fstenv";
- char dszFSTP[] = "fstp";
- char dszFSTSW[] = "fstsw";
- char dszFSTSWAX[] = "fstswax";
- char dszFSUB[] = "fsub";
- char dszFSUBP[] = "fsubp";
- char dszFSUBR[] = "fsubr";
- char dszFSUBRP[] = "fsubrp";
- char dszFS_[] = "fs:";
- char dszFTST[] = "ftst";
- char dszFUCOM[] = "fucom";
- char dszFUCOMP[] = "fucomp";
- char dszFUCOMPP[] = "fucompp";
- char dszFWAIT[] = "fwait";
- char dszFXAM[] = "fxam";
- char dszFXCH[] = "fxch";
- char dszFXTRACT[] = "fxtract";
- char dszFYL2X[] = "fyl2x";
- char dszFYL2XP1[] = "fyl2xp1";
- char dszGS_[] = "gs:";
- char dszHLT[] = "hlt";
- char dszIBTS[] = "ibts";
- char dszIDIV[] = "idiv";
- char dszIMUL[] = "imul";
- char dszIN[] = "in";
- char dszINC[] = "inc";
- char dszINS[] = "ins";
- char dszINSB[] = "insb";
- char dszINSD[] = "insd";
- char dszINSW[] = "insw";
- char dszINT[] = "int";
- char dszINTO[] = "into";
- char dszIRET[] = "iret";
- char dszIRETD[] = "iretd";
- char dszJA[] = "ja";
- char dszJAE[] = "jae";
- char dszJB[] = "jb";
- char dszJBE[] = "jbe";
- char dszJC[] = "jc";
- char dszJCXZ[] = "jcxz";
- char dszJE[] = "je";
- char dszJECXZ[] = "jecxz";
- char dszJG[] = "jg";
- char dszJGE[] = "jge";
- char dszJL[] = "jl";
- char dszJLE[] = "jle";
- char dszJMP[] = "jmp";
- char dszJNA[] = "jna";
- char dszJNAE[] = "jnae";
- char dszJNB[] = "jnb";
- char dszJNBE[] = "jnbe";
- char dszJNC[] = "jnc";
- char dszJNE[] = "jne";
- char dszJNG[] = "jng";
- char dszJNGE[] = "jnge";
- char dszJNL[] = "jnl";
- char dszJNLE[] = "jnle";
- char dszJNO[] = "jno";
- char dszJNP[] = "jnp";
- char dszJNS[] = "jns";
- char dszJNZ[] = "jnz";
- char dszJO[] = "jo";
- char dszJP[] = "jp";
- char dszJPE[] = "jpe";
- char dszJPO[] = "jpo";
- char dszJS[] = "js";
- char dszJZ[] = "jz";
- char dszLAHF[] = "lahf";
- char dszLAR[] = "lar";
- char dszLDS[] = "lds";
- char dszLEA[] = "lea";
- char dszLEAVE[] = "leave";
- char dszLES[] = "les";
- char dszLFS[] = "lfs";
- char dszLGDT[] = "lgdt";
- char dszLGS[] = "lgs";
- char dszLIDT[] = "lidt";
- char dszLLDT[] = "lldt";
- char dszLMSW[] = "lmsw";
- char dszLOADALL[] = "loadall";
- char dszLOCK[] = "lock";
- char dszLODS[] = "lods";
- char dszLODSB[] = "lodsb";
- char dszLODSD[] = "lodsd";
- char dszLODSW[] = "lodsw";
- char dszLOOP[] = "loop";
- char dszLOOPE[] = "loope";
- char dszLOOPNE[] = "loopne";
- char dszLOOPNZ[] = "loopnz";
- char dszLOOPZ[] = "loopz";
- char dszLSL[] = "lsl";
- char dszLSS[] = "lss";
- char dszLTR[] = "ltr";
- char dszMOV[] = "mov";
- char dszMOVS[] = "movs";
- char dszMOVSB[] = "movsb";
- char dszMOVSD[] = "movsd";
- char dszMOVSW[] = "movsw";
- char dszMOVSX[] = "movsx";
- char dszMOVZX[] = "movzx";
- char dszMUL[] = "mul";
- char dszNEG[] = "neg";
- char dszNOP[] = "nop";
- char dszNOT[] = "not";
- char dszOPPRFX[] = "";
- char dszOR[] = "or";
- char dszOUT[] = "out";
- char dszOUTS[] = "outs";
- char dszOUTSB[] = "outsb";
- char dszOUTSD[] = "outsd";
- char dszOUTSW[] = "outsw";
- char dszPOP[] = "pop";
- char dszPOPA[] = "popa";
- char dszPOPAD[] = "popad";
- char dszPOPF[] = "popf";
- char dszPOPFD[] = "popfd";
- char dszPUSH[] = "push";
- char dszPUSHA[] = "pusha";
- char dszPUSHAD[] = "pushad";
- char dszPUSHF[] = "pushf";
- char dszPUSHFD[] = "pushfd";
- char dszRCL[] = "rcl";
- char dszRCR[] = "rcr";
- char dszRDTSC[] = "rdtsc";
- char dszRDMSR[] = "rdmsr";
- char dszREP[] = "rep ";
- char dszREPE[] = "repe";
- char dszREPNE[] = "repne ";
- char dszREPNZ[] = "repnz";
- char dszREPZ[] = "repz";
- char dszRET[] = "ret";
- char dszRETF[] = "retf";
- char dszRETN[] = "retn";
- char dszROL[] = "rol";
- char dszROR[] = "ror";
- char dszRSM[] = "rsm";
- char dszSAHF[] = "sahf";
- char dszSAL[] = "sal";
- char dszSAR[] = "sar";
- char dszSBB[] = "sbb";
- char dszSCAS[] = "scas";
- char dszSCASB[] = "scasb";
- char dszSCASD[] = "scasd";
- char dszSCASW[] = "scasw";
- char dszSETA[] = "seta";
- char dszSETAE[] = "setae";
- char dszSETB[] = "setb";
- char dszSETBE[] = "setbe";
- char dszSETC[] = "setc";
- char dszSETE[] = "sete";
- char dszSETG[] = "setg";
- char dszSETGE[] = "setge";
- char dszSETL[] = "setl";
- char dszSETLE[] = "setle";
- char dszSETNA[] = "setna";
- char dszSETNAE[] = "setnae";
- char dszSETNB[] = "setnb";
- char dszSETNBE[] = "setnbe";
- char dszSETNC[] = "setnc";
- char dszSETNE[] = "setne";
- char dszSETNG[] = "setng";
- char dszSETNGE[] = "setnge";
- char dszSETNL[] = "setnl";
- char dszSETNLE[] = "setnle";
- char dszSETNO[] = "setno";
- char dszSETNP[] = "setnp";
- char dszSETNS[] = "setns";
- char dszSETNZ[] = "setnz";
- char dszSETO[] = "seto";
- char dszSETP[] = "setp";
- char dszSETPE[] = "setpe";
- char dszSETPO[] = "setpo";
- char dszSETS[] = "sets";
- char dszSETZ[] = "setz";
- char dszSGDT[] = "sgdt";
- char dszSHL[] = "shl";
- char dszSHLD[] = "shld";
- char dszSHR[] = "shr";
- char dszSHRD[] = "shrd";
- char dszSIDT[] = "sidt";
- char dszSLDT[] = "sldt";
- char dszSMSW[] = "smsw";
- char dszSS_[] = "ss:";
- char dszSTC[] = "stc";
- char dszSTD[] = "std";
- char dszSTI[] = "sti";
- char dszSTOS[] = "stos";
- char dszSTOSB[] = "stosb";
- char dszSTOSD[] = "stosd";
- char dszSTOSW[] = "stosw";
- char dszSTR[] = "str";
- char dszSUB[] = "sub";
- char dszTEST[] = "test";
- char dszVERR[] = "verr";
- char dszVERW[] = "verw";
- char dszWAIT[] = "wait";
- char dszWRMSR[] = "wrmsr";
- char dszXADD[] = "xadd";
- char dszXBTS[] = "xbts";
- char dszXCHG[] = "xchg";
- char dszXLAT[] = "xlat";
- char dszXOR[] = "xor";
- char dszRESERVED[] = "???";
- char dszMULTI[] = "";
- char dszDB[] = "db";
-
- #define MRM 0x40
- #define COM 0x80
- #define END 0xc0
-
- /* Enumeration of valid actions that can be included in the action table */
-
- enum oprtyp { ADDRP, ADR_OVR, ALSTR, ALT, AXSTR, BOREG,
- BREG, BRSTR, xBYTE, CHR, CREG, xDWORD,
- EDWORD, EGROUPT, FARPTR, GROUPP, GROUPT, IB,
- IST, IST_ST, IV, IW, LMODRM, MODRM,
- NOP, OFFS, OPC0F, OPR_OVR, QWORD, REL16,
- REL8, REP, SEG_OVR, SREG2, SREG3, ST_IST,
- STROP, TTBYTE, UBYTE, VAR, VOREG, VREG,
- xWORD, WREG, WRSTR
- };
-
- /* Enumeration of indices into the action table for instruction classes */
-
- #define O_DoDB 0
- #define O_NoOperands 0
- #define O_NoOpAlt5 O_NoOperands+1
- #define O_NoOpAlt4 O_NoOpAlt5+2
- #define O_NoOpAlt3 O_NoOpAlt4+2
- #define O_NoOpAlt1 O_NoOpAlt3+2
- #define O_NoOpAlt0 O_NoOpAlt1+2
- #define O_NoOpStrSI O_NoOpAlt0+2
- #define O_NoOpStrDI O_NoOpStrSI+2
- #define O_NoOpStrSIDI O_NoOpStrDI+2
- #define O_bModrm_Reg O_NoOpStrSIDI+2
- #define O_vModrm_Reg O_bModrm_Reg+3
- #define O_Modrm_Reg O_vModrm_Reg+3
- #define O_bReg_Modrm O_Modrm_Reg+3
- #define O_fReg_Modrm O_bReg_Modrm+3
- #define O_Reg_Modrm O_fReg_Modrm+3
- #define O_AL_Ib O_Reg_Modrm+3
- #define O_AX_Iv O_AL_Ib+2
- #define O_sReg2 O_AX_Iv+2
- #define O_oReg O_sReg2+1
- #define O_DoBound O_oReg+1
- #define O_Iv O_DoBound+3
- #define O_wModrm_Reg O_Iv+1
- #define O_Ib O_wModrm_Reg+3
- #define O_Imulb O_Ib+1
- #define O_Imul O_Imulb+4
- #define O_Rel8 O_Imul+4
- #define O_bModrm_Ib O_Rel8+1
- #define O_Modrm_Ib O_bModrm_Ib+3
- #define O_Modrm_Iv O_Modrm_Ib+3
- #define O_Modrm_sReg3 O_Modrm_Iv+3
- #define O_sReg3_Modrm O_Modrm_sReg3+3
- #define O_Modrm O_sReg3_Modrm+3
- #define O_FarPtr O_Modrm+2
- #define O_AL_Offs O_FarPtr+1
- #define O_Offs_AL O_AL_Offs+2
- #define O_AX_Offs O_Offs_AL+2
- #define O_Offs_AX O_AX_Offs+2
- #define O_oReg_Ib O_Offs_AX+2
- #define O_oReg_Iv O_oReg_Ib+2
- #define O_Iw O_oReg_Iv+2
- #define O_Enter O_Iw+1
- #define O_Ubyte_AL O_Enter+2
- #define O_Ubyte_AX O_Ubyte_AL+2
- #define O_AL_Ubyte O_Ubyte_AX+2
- #define O_AX_Ubyte O_AL_Ubyte+2
- #define O_DoInAL O_AX_Ubyte+2
- #define O_DoInAX O_DoInAL+3
- #define O_DoOutAL O_DoInAX+3
- #define O_DoOutAX O_DoOutAL+3
- #define O_Rel16 O_DoOutAX+3
- #define O_ADR_OVERRIDE O_Rel16+1
- #define O_OPR_OVERRIDE O_ADR_OVERRIDE+1
- #define O_SEG_OVERRIDE O_OPR_OVERRIDE+1
- #define O_DoInt3 O_SEG_OVERRIDE+1
-
- #if (O_DoInt3 != 115)
- #error "operand table has been modified!"
- #endif
- /* #define O_DoInt O_DoInt3+2 */
-
- #define O_DoInt 117
- #define O_OPC0F O_DoInt+1
- #define O_GROUP11 O_OPC0F+1
- #define O_GROUP13 O_GROUP11+5
- #define O_GROUP12 O_GROUP13+5
- #define O_GROUP21 O_GROUP12+5
- #define O_GROUP22 O_GROUP21+5
- #define O_GROUP23 O_GROUP22+5
- #define O_GROUP24 O_GROUP23+6
- #define O_GROUP25 O_GROUP24+6
- #define O_GROUP26 O_GROUP25+6
- #define O_GROUP4 O_GROUP26+6
- #define O_GROUP6 O_GROUP4+4
- #define O_GROUP8 O_GROUP6+4
- #define O_GROUP31 O_GROUP8+5
- #define O_GROUP32 O_GROUP31+3
- #define O_GROUP5 O_GROUP32+3
- #define O_GROUP7 O_GROUP5+3
- #define O_x87_ESC O_GROUP7+3
- #define O_bModrm O_x87_ESC+2
- #define O_wModrm O_bModrm+2
- #define O_dModrm O_wModrm+2
- #define O_fModrm O_dModrm+2
- #define O_vModrm O_fModrm+2
- #define O_vModrm_Iv O_vModrm+2
- #define O_Reg_bModrm O_vModrm_Iv+3
- #define O_Reg_wModrm O_Reg_bModrm+3
- #define O_Modrm_Reg_Ib O_Reg_wModrm+3
- #define O_Modrm_Reg_CL O_Modrm_Reg_Ib+4
- #define O_ST_iST O_Modrm_Reg_CL+5
- #define O_iST O_ST_iST+2
- #define O_iST_ST O_iST+2
- #define O_qModrm O_iST_ST+2
- #define O_tModrm O_qModrm+2
- #define O_DoRep O_tModrm+2
- #define O_Modrm_CReg O_DoRep+1
- #define O_CReg_Modrm O_Modrm_CReg+3
- #define O_AX_oReg O_CReg_Modrm+3
- #define O_length O_AX_oReg+3
-
- #if( O_length > 255 )
- #error "operand table too large!"
- #endif
-
-
- /* The action table: range of lists of actions to be taken for each possible */
- /* instruction class. */
-
- static unsigned char actiontbl[] = {
- /* NoOperands */ NOP+END,
- /* NoOpAlt5 */ ALT+END, 5,
- /* NoOpAlt4 */ ALT+END, 4,
- /* NoOpAlt3 */ ALT+END, 3,
- /* NoOpAlt1 */ ALT+END, 1,
- /* NoOpAlt0 */ ALT+END, 0,
- /* NoOpStrSI */ STROP+END, 1,
- /* NoOpStrDI */ STROP+END, 2,
- /* NoOpStrSIDI */ STROP+END, 3,
- /* bModrm_Reg */ xBYTE+MRM, MODRM+COM, BREG+END,
- /* vModrm_Reg */ VAR+MRM, LMODRM+COM, BREG+END,
- /* Modrm_Reg */ VAR+MRM, MODRM+COM, VREG+END,
- /* bReg_Modrm */ xBYTE+MRM, BREG+COM, MODRM+END,
- /* fReg_Modrm */ FARPTR+MRM,VREG+COM, MODRM+END,
- /* Reg_Modrm */ VAR+MRM, VREG+COM, MODRM+END,
- /* AL_Ib */ ALSTR+COM, IB+END,
- /* AX_Iv */ AXSTR+COM, IV+END,
- /* sReg2 */ SREG2+END,
- /* oReg */ VOREG+END,
- /* DoBound */ VAR+MRM, VREG+COM, MODRM+END,
- /* Iv */ IV+END,
- /* wModrm_Reg */ xWORD+MRM, LMODRM+COM, WREG+END,
- /* Ib */ IB+END,
- /* Imulb */ VAR+MRM, VREG+COM, MODRM+COM, IB+END,
- /* Imul */ VAR+MRM, VREG+COM, MODRM+COM, IV+END,
- /* REL8 */ REL8+END,
- /* bModrm_Ib */ xBYTE+MRM, LMODRM+COM, IB+END,
- /* Modrm_Ib */ VAR+MRM, LMODRM+COM, IB+END,
- /* Modrm_Iv */ VAR+MRM, LMODRM+COM, IV+END,
- /* Modrm_sReg3 */ xWORD+MRM, MODRM+COM, SREG3+END,
- /* sReg3_Modrm */ xWORD+MRM, SREG3+COM, MODRM+END,
- /* Modrm */ VAR+MRM, MODRM+END,
- /* FarPtr */ ADDRP+END,
- /* AL_Offs */ ALSTR+COM, OFFS+END,
- /* Offs_AL */ OFFS+COM, ALSTR+END,
- /* AX_Offs */ AXSTR+COM, OFFS+END,
- /* Offs_AX */ OFFS+COM, AXSTR+END,
- /* oReg_Ib */ BOREG+COM, IB+END,
- /* oReg_Iv */ VOREG+COM, IV+END,
- /* Iw */ IW+END,
- /* enter */ IW+COM, IB+END,
- /* Ubyte_AL */ UBYTE+COM, ALSTR+END,
- /* Ubyte_AX */ UBYTE+COM, AXSTR+END,
- /* AL_Ubyte */ ALSTR+COM, UBYTE+END,
- /* AX_Ubyte */ AXSTR+COM, UBYTE+END,
- /* DoInAL */ ALSTR+COM, WRSTR+END, 2,
- /* DoInAX */ AXSTR+COM, WRSTR+END, 2,
- /* DoOutAL */ WRSTR+COM, 2, ALSTR+END,
- /* DoOutAX */ WRSTR+COM, 2, AXSTR+END,
- /* REL16 */ REL16+END,
- /* ADR_OVERRIDE*/ ADR_OVR,
- /* OPR_OVERRIDE*/ OPR_OVR,
- /* SEG_OVERRIDE*/ SEG_OVR,
- /* DoInt3 */ CHR+END, '3',
- /* DoInt */ UBYTE+END,
- /* Opcode0F */ OPC0F,
- /* group1_1 */ xBYTE+MRM, GROUPP, 0, LMODRM+COM, IB+END,
- /* group1_3 */ VAR+MRM, GROUPP, 0, LMODRM+COM, IB+END,
- /* group1_2 */ VAR+MRM, GROUPP, 0, LMODRM+COM, IV+END,
- /* group2_1 */ xBYTE+MRM, GROUPP, 1, LMODRM+COM, IB+END,
- /* group2_2 */ VAR+MRM, GROUPP, 1, LMODRM+COM, IB+END,
- /* group2_3 */ xBYTE+MRM, GROUPP, 1, LMODRM+COM, CHR+END, '1',
- /* group2_4 */ VAR+MRM, GROUPP, 1, LMODRM+COM, CHR+END, '1',
- /* group2_5 */ xBYTE+MRM, GROUPP, 1, LMODRM+COM, BRSTR+END, 1,
- /* group2_6 */ VAR+MRM, GROUPP, 1, LMODRM+COM, BRSTR+END, 1,
- /* group4 */ xBYTE+MRM, GROUPP, 2, LMODRM+END,
- /* group6 */ xWORD+MRM, GROUPP, 3, LMODRM+END,
- /* group8 */ xWORD+MRM, GROUPP, 4, LMODRM+COM, IB+END,
- /* group3_1 */ xBYTE+MRM, GROUPT, 20,
- /* group3_2 */ VAR+MRM, GROUPT, 21,
- /* group5 */ VAR+MRM, GROUPT, 22,
- /* group7 */ NOP+MRM, GROUPT, 23,
- /* x87_ESC */ NOP+MRM, EGROUPT,
- /* bModrm */ xBYTE+MRM, LMODRM+END,
- /* wModrm */ xWORD+MRM, LMODRM+END,
- /* dModrm */ xDWORD+MRM,LMODRM+END,
- /* fModrm */ FARPTR+MRM,LMODRM+END,
- /* vModrm */ VAR+MRM, LMODRM+END,
- /* vModrm_Iv */ VAR+MRM, LMODRM+COM, IV+END,
- /* reg_bModrm */ xBYTE+MRM, VREG+COM, LMODRM+END,
- /* reg_wModrm */ xWORD+MRM, VREG+COM, LMODRM+END,
- /* Modrm_Reg_Ib*/ VAR+MRM, MODRM+COM, VREG+COM, IB+END,
- /* Modrm_Reg_CL*/ VAR+MRM, MODRM+COM, VREG+COM, BRSTR+END, 1,
- /* ST_iST */ NOP+MRM, ST_IST+END,
- /* iST */ NOP+MRM, IST+END,
- /* iST_ST */ NOP+MRM, IST_ST+END,
- /* qModrm */ QWORD+MRM, LMODRM+END,
- /* tModrm */ TTBYTE+MRM, LMODRM+END,
- /* REP */ REP,
- /* Modrm_CReg */ EDWORD+MRM,MODRM+COM, CREG+END,
- /* CReg_Modrm */ EDWORD+MRM,CREG+COM, MODRM+END,
- /* AX_oReg */ AXSTR+COM, VOREG+END
- };
-
- #if defined(_M_IX86)
- #define BUILDING_ON_X86 1
- #else
- #define BUILDING_ON_X86 0
- #endif
-
- #if BUILDING_ON_X86 == 1
- #pragma pack(1)
- #endif
-
- typedef struct Tdistbl{
- char *instruct;
- unsigned char opr;
- } Tdistbl;
-
- #if BUILDING_ON_X86 == 1
- #pragma pack()
- #endif
-
- /* List of ordered pairs for each instruction: */
- /* (pointer to string literal mnemonic, */
- /* instruction class index for action table) */
-
- static Tdistbl distbl[] = {
- dszADD, O_bModrm_Reg, /* 00 ADD mem/reg, reg (byte) */
- dszADD, O_Modrm_Reg, /* 01 ADD mem/reg, reg (word) */
- dszADD, O_bReg_Modrm, /* 02 ADD reg, mem/reg (byte) */
- dszADD, O_Reg_Modrm, /* 03 ADD reg, mem/reg (word) */
- dszADD, O_AL_Ib, /* 04 ADD AL, I */
- dszADD, O_AX_Iv, /* 05 ADD AX, I */
- dszPUSH, O_sReg2, /* 06 PUSH ES */
- dszPOP, O_sReg2, /* 07 POP ES */
- dszOR, O_bModrm_Reg, /* 08 OR mem/reg, reg (byte) */
- dszOR, O_Modrm_Reg, /* 09 OR mem/reg, reg (word) */
- dszOR, O_bReg_Modrm, /* 0A OR reg, mem/reg (byte) */
- dszOR, O_Reg_Modrm, /* 0B OR reg, mem/reg (word) */
- dszOR, O_AL_Ib, /* 0C OR AL, I */
- dszOR, O_AX_Iv, /* 0D OR AX, I */
- dszPUSH, O_sReg2, /* 0E PUSH CS */
- dszMULTI, O_OPC0F, /* 0F CLTS & protection ctl(286) */
- dszADC, O_bModrm_Reg, /* 10 ADC mem/reg, reg (byte) */
- dszADC, O_Modrm_Reg, /* 11 ADC mem/reg, reg (word) */
- dszADC, O_bReg_Modrm, /* 12 ADC reg, mem/reg (byte) */
- dszADC, O_Reg_Modrm, /* 13 ADC reg, mem/reg (word) */
- dszADC, O_AL_Ib, /* 14 ADC AL, I */
- dszADC, O_AX_Iv, /* 15 ADC AX, I */
- dszPUSH, O_sReg2, /* 16 PUSH SS */
- dszPOP, O_sReg2, /* 17 POP SS */
- dszSBB, O_bModrm_Reg, /* 18 SBB mem/reg, reg (byte) */
- dszSBB, O_Modrm_Reg, /* 19 SBB mem/reg, reg (word) */
- dszSBB, O_bReg_Modrm, /* 1A SBB reg, mem/reg (byte) */
- dszSBB, O_Reg_Modrm, /* 1B SBB reg, mem/reg (word) */
- dszSBB, O_AL_Ib, /* 1C SBB AL, I */
- dszSBB, O_AX_Iv, /* 1D SBB AX, I */
- dszPUSH, O_sReg2, /* 1E PUSH DS */
- dszPOP, O_sReg2, /* 1F POP DS */
- dszAND, O_bModrm_Reg, /* 20 AND mem/reg, reg (byte) */
- dszAND, O_Modrm_Reg, /* 21 AND mem/reg, reg (word) */
- dszAND, O_bReg_Modrm, /* 22 AND reg, mem/reg (byte) */
- dszAND, O_Reg_Modrm, /* 23 AND reg, mem/reg (word) */
- dszAND, O_AL_Ib, /* 24 AND AL, I */
- dszAND, O_AX_Iv, /* 25 AND AX, I */
- dszES_, O_SEG_OVERRIDE, /* 26 SEG ES: */
- dszDAA, O_NoOperands, /* 27 DAA */
- dszSUB, O_bModrm_Reg, /* 28 SUB mem/reg, reg (byte) */
- dszSUB, O_Modrm_Reg, /* 29 SUB mem/reg, reg (word) */
- dszSUB, O_bReg_Modrm, /* 2A SUB reg, mem/reg (byte) */
- dszSUB, O_Reg_Modrm, /* 2B SUB reg, mem/reg (word) */
- dszSUB, O_AL_Ib, /* 2C SUB AL, I */
- dszSUB, O_AX_Iv, /* 2D SUB AX, I */
- dszCS_, O_SEG_OVERRIDE, /* 2E SEG CS: */
- dszDAS, O_NoOperands, /* 2F DAS */
- dszXOR, O_bModrm_Reg, /* 30 XOR mem/reg, reg (byte) */
- dszXOR, O_Modrm_Reg, /* 31 XOR mem/reg, reg (word) */
- dszXOR, O_bReg_Modrm, /* 32 XOR reg, mem/reg (byte) */
- dszXOR, O_Reg_Modrm, /* 33 XOR reg, mem/reg (word) */
- dszXOR, O_AL_Ib, /* 34 XOR AL, I */
- dszXOR, O_AX_Iv, /* 35 XOR AX, I */
- dszSS_, O_SEG_OVERRIDE, /* 36 SEG SS: */
- dszAAA, O_NoOperands, /* 37 AAA */
- dszCMP, O_bModrm_Reg, /* 38 CMP mem/reg, reg (byte) */
- dszCMP, O_Modrm_Reg, /* 39 CMP mem/reg, reg (word) */
- dszCMP, O_bReg_Modrm, /* 3A CMP reg, mem/reg (byte) */
- dszCMP, O_Reg_Modrm, /* 3B CMP reg, mem/reg (word) */
- dszCMP, O_AL_Ib, /* 3C CMP AL, I */
- dszCMP, O_AX_Iv, /* 3D CMP AX, I */
- dszDS_, O_SEG_OVERRIDE, /* 3E SEG DS: */
- dszAAS, O_NoOperands, /* 3F AAS */
- dszINC, O_oReg, /* 40 INC AX */
- dszINC, O_oReg, /* 41 INC CX */
- dszINC, O_oReg, /* 42 INC DX */
- dszINC, O_oReg, /* 43 INC BX */
- dszINC, O_oReg, /* 44 INC SP */
- dszINC, O_oReg, /* 45 INC BP */
- dszINC, O_oReg, /* 46 INC SI */
- dszINC, O_oReg, /* 47 INC DI */
- dszDEC, O_oReg, /* 48 DEC AX */
- dszDEC, O_oReg, /* 49 DEC CX */
- dszDEC, O_oReg, /* 4A DEC DX */
- dszDEC, O_oReg, /* 4B DEC BX */
- dszDEC, O_oReg, /* 4C DEC SP */
- dszDEC, O_oReg, /* 4D DEC BP */
- dszDEC, O_oReg, /* 4E DEC SI */
- dszDEC, O_oReg, /* 4F DEC DI */
- dszPUSH, O_oReg, /* 50 PUSH AX */
- dszPUSH, O_oReg, /* 51 PUSH CX */
- dszPUSH, O_oReg, /* 52 PUSH DX */
- dszPUSH, O_oReg, /* 53 PUSH BX */
- dszPUSH, O_oReg, /* 54 PUSH SP */
- dszPUSH, O_oReg, /* 55 PUSH BP */
- dszPUSH, O_oReg, /* 56 PUSH SI */
- dszPUSH, O_oReg, /* 57 PUSH DI */
- dszPOP, O_oReg, /* 58 POP AX */
- dszPOP, O_oReg, /* 59 POP CX */
- dszPOP, O_oReg, /* 5A POP DX */
- dszPOP, O_oReg, /* 5B POP BX */
- dszPOP, O_oReg, /* 5C POP SP */
- dszPOP, O_oReg, /* 5D POP BP */
- dszPOP, O_oReg, /* 5E POP SI */
- dszPOP, O_oReg, /* 5F POP DI */
- dszPUSHA, O_NoOpAlt5, /* 60 PUSHA (286) / PUSHAD (386) */
- dszPOPA, O_NoOpAlt4, /* 61 POPA (286) / POPAD (286) */
- dszBOUND, O_DoBound, /* 62 BOUND reg, Modrm (286) */
- dszARPL, O_Modrm_Reg, /* 63 ARPL Modrm, reg (286) */
- dszFS_, O_SEG_OVERRIDE, /* 64 */
- dszGS_, O_SEG_OVERRIDE, /* 65 */
- dszOPPRFX,O_OPR_OVERRIDE, /* 66 */
- dszADDRPRFX,O_ADR_OVERRIDE, /* 67 */
- dszPUSH, O_Iv, /* 68 PUSH word (286) */
- dszIMUL, O_Imul, /* 69 IMUL (286) */
- dszPUSH, O_Ib, /* 6A PUSH byte (286) */
- dszIMUL, O_Imulb, /* 6B IMUL (286) */
- dszINSB, O_NoOperands, /* 6C INSB (286) */
- dszINSW, O_NoOpAlt3, /* 6D INSW (286) / INSD (386) */
- dszOUTSB, O_NoOperands, /* 6E OUTSB (286) */
- dszOUTSW, O_NoOpAlt4, /* 6F OUTSW (286) / OUTSD (386) */
- dszJO, O_Rel8, /* 70 JO */
- dszJNO, O_Rel8, /* 71 JNO */
- dszJB, O_Rel8, /* 72 JB or JNAE or JC */
- dszJNB, O_Rel8, /* 73 JNB or JAE or JNC */
- dszJZ, O_Rel8, /* 74 JE or JZ */
- dszJNZ, O_Rel8, /* 75 JNE or JNZ */
- dszJBE, O_Rel8, /* 76 JBE or JNA */
- dszJA, O_Rel8, /* 77 JNBE or JA */
- dszJS, O_Rel8, /* 78 JS */
- dszJNS, O_Rel8, /* 79 JNS */
- dszJPE, O_Rel8, /* 7A JP or JPE */
- dszJPO, O_Rel8, /* 7B JNP or JPO */
- dszJL, O_Rel8, /* 7C JL or JNGE */
- dszJGE, O_Rel8, /* 7D JNL or JGE */
- dszJLE, O_Rel8, /* 7E JLE or JNG */
- dszJG, O_Rel8, /* 7F JNLE or JG */
- dszMULTI, O_GROUP11, /* 80 */
- dszMULTI, O_GROUP12, /* 81 */
- dszRESERVED, O_DoDB, /* 82 */
- dszMULTI, O_GROUP13, /* 83 */
- dszTEST, O_bModrm_Reg, /* 84 TEST reg, mem/reg (byte) */
- dszTEST, O_Modrm_Reg, /* 85 TEST reg, mem/reg (word) */
- dszXCHG, O_bModrm_Reg, /* 86 XCHG reg, mem/reg (byte) */
- dszXCHG, O_Modrm_Reg, /* 87 XCHG reg, mem/reg (word) */
- dszMOV, O_bModrm_Reg, /* 88 MOV mem/reg, reg (byte) */
- dszMOV, O_Modrm_Reg, /* 89 MOV mem/reg, reg (word) */
- dszMOV, O_bReg_Modrm, /* 8A MOV reg, mem/reg (byte) */
- dszMOV, O_Reg_Modrm, /* 8B MOV reg, mem/reg (word) */
- dszMOV, O_Modrm_sReg3, /* 8C MOV mem/reg, segreg */
- dszLEA, O_Reg_Modrm, /* 8D LEA reg, mem */
- dszMOV, O_sReg3_Modrm, /* 8E MOV segreg, mem/reg */
- dszPOP, O_Modrm, /* 8F POP mem/reg */
- dszNOP, O_NoOperands, /* 90 NOP */
- dszXCHG, O_AX_oReg, /* 91 XCHG AX,CX */
- dszXCHG, O_AX_oReg, /* 92 XCHG AX,DX */
- dszXCHG, O_AX_oReg, /* 93 XCHG AX,BX */
- dszXCHG, O_AX_oReg, /* 94 XCHG AX,SP */
- dszXCHG, O_AX_oReg, /* 95 XCHG AX,BP */
- dszXCHG, O_AX_oReg, /* 96 XCHG AX,SI */
- dszXCHG, O_AX_oReg, /* 97 XCHG AX,DI */
- dszCBW, O_NoOpAlt0, /* 98 CBW / CWDE (386) */
- dszCWD, O_NoOpAlt1, /* 99 CWD / CDQ (386) */
- dszCALL, O_FarPtr, /* 9A CALL seg:off */
- dszWAIT, O_NoOperands, /* 9B WAIT */
- dszPUSHF, O_NoOpAlt5, /* 9C PUSHF / PUSHFD (386) */
- dszPOPF, O_NoOpAlt4, /* 9D POPF / POPFD (386) */
- dszSAHF, O_NoOperands, /* 9E SAHF */
- dszLAHF, O_NoOperands, /* 9F LAHF */
- dszMOV, O_AL_Offs, /* A0 MOV AL, mem */
- dszMOV, O_AX_Offs, /* A1 MOV AX, mem */
- dszMOV, O_Offs_AL, /* A2 MOV mem, AL */
- dszMOV, O_Offs_AX, /* A3 MOV mem, AX */
- dszMOVSB, O_NoOpStrSIDI, /* A4 MOVSB */
- dszMOVSW, O_NoOpStrSIDI, /* A5 MOVSW / MOVSD (386) */
- dszCMPSB, O_NoOpStrSIDI, /* A6 CMPSB */
- dszCMPSW, O_NoOpStrSIDI, /* A7 CMPSW / CMPSD (386) */
- dszTEST, O_AL_Ib, /* A8 TEST AL, I */
- dszTEST, O_AX_Iv, /* A9 TEST AX, I */
- dszSTOSB, O_NoOpStrDI, /* AA STOSB */
- dszSTOSW, O_NoOpStrDI, /* AB STOSW / STOSD (386) */
- dszLODSB, O_NoOpStrSI, /* AC LODSB */
- dszLODSW, O_NoOpStrSI, /* AD LODSW / LODSD (386) */
- dszSCASB, O_NoOpStrDI, /* AE SCASB */
- dszSCASW, O_NoOpStrDI, /* AF SCASW / SCASD (386) */
- dszMOV, O_oReg_Ib, /* B0 MOV AL, I */
- dszMOV, O_oReg_Ib, /* B1 MOV CL, I */
- dszMOV, O_oReg_Ib, /* B2 MOV DL, I */
- dszMOV, O_oReg_Ib, /* B3 MOV BL, I */
- dszMOV, O_oReg_Ib, /* B4 MOV AH, I */
- dszMOV, O_oReg_Ib, /* B5 MOV CH, I */
- dszMOV, O_oReg_Ib, /* B6 MOV DH, I */
- dszMOV, O_oReg_Ib, /* B7 MOV BH, I */
- dszMOV, O_oReg_Iv, /* B8 MOV AX, I */
- dszMOV, O_oReg_Iv, /* B9 MOV CX, I */
- dszMOV, O_oReg_Iv, /* BA MOV DX, I */
- dszMOV, O_oReg_Iv, /* BB MOV BX, I */
- dszMOV, O_oReg_Iv, /* BC MOV SP, I */
- dszMOV, O_oReg_Iv, /* BD MOV BP, I */
- dszMOV, O_oReg_Iv, /* BE MOV SI, I */
- dszMOV, O_oReg_Iv, /* BF MOV DI, I */
- dszMULTI, O_GROUP21, /* C0 shifts & rotates (286) */
- dszMULTI, O_GROUP22, /* C1 shifts & rotates (286) */
- dszRET, O_Iw, /* C2 RET Rel16 */
- dszRET, O_NoOperands, /* C3 RET */
- dszLES, O_fReg_Modrm, /* C4 LES reg, mem */
- dszLDS, O_fReg_Modrm, /* C5 LDS reg, mem */
- dszMOV, O_bModrm_Ib, /* C6 MOV mem/reg, I(byte) */
- dszMOV, O_Modrm_Iv, /* C7 MOV mem/reg, I(word) */
- dszENTER, O_Enter, /* C8 ENTER (286) */
- dszLEAVE, O_NoOperands, /* C9 LEAVE (286) */
- dszRETF, O_Iw, /* CA RETF I(word) */
- dszRETF, O_NoOperands, /* CB RETF */
- dszINT, O_DoInt3, /* CC INT 3 */
- dszINT, O_DoInt, /* CD INT */
- dszINTO, O_NoOperands, /* CE INTO */
- dszIRET, O_NoOpAlt4, /* CF IRET / IRETD (386) */
- dszMULTI, O_GROUP23, /* D0 shifts & rotates,1 (byte) */
- dszMULTI, O_GROUP24, /* D1 shifts & rotates,1 (word) */
- dszMULTI, O_GROUP25, /* D2 shifts & rotates,CL (byte) */
- dszMULTI, O_GROUP26, /* D3 shifts & rotates,CL (word) */
- dszAAM, O_Ib, /* D4 AAM */
- dszAAD, O_Ib, /* D5 AAD */
- dszRESERVED, O_DoDB, /* D6 */
- dszXLAT, O_NoOperands, /* D7 XLAT */
- dszMULTI, O_x87_ESC, /* D8 ESC */
- dszMULTI, O_x87_ESC, /* D9 ESC */
- dszMULTI, O_x87_ESC, /* DA ESC */
- dszMULTI, O_x87_ESC, /* DB ESC */
- dszMULTI, O_x87_ESC, /* DC ESC */
- dszMULTI, O_x87_ESC, /* DD ESC */
- dszMULTI, O_x87_ESC, /* DE ESC */
- dszMULTI, O_x87_ESC, /* DF ESC */
- dszLOOPNE,O_Rel8, /* E0 LOOPNE or LOOPNZ */
- dszLOOPE, O_Rel8, /* E1 LOOPE or LOOPZ */
- dszLOOP, O_Rel8, /* E2 LOOP */
- dszJCXZ, O_Rel8, /* E3 JCXZ / JECXZ (386) */
- dszIN, O_AL_Ubyte, /* E4 IN AL, I */
- dszIN, O_AX_Ubyte, /* E5 IN AX, I */
- dszOUT, O_Ubyte_AL, /* E6 OUT I, AL */
- dszOUT, O_Ubyte_AX, /* E7 OUT I, AX */
- dszCALL, O_Rel16, /* E8 CALL Rel16 */
- dszJMP, O_Rel16, /* E9 JMP Rel16 */
- dszJMP, O_FarPtr, /* EA JMP seg:off */
- dszJMP, O_Rel8, /* EB JMP Rel8 */
- dszIN, O_DoInAL, /* EC IN AL, DX */
- dszIN, O_DoInAX, /* ED IN AX, DX */
- dszOUT, O_DoOutAL, /* EE OUT DX, AL */
- dszOUT, O_DoOutAX, /* EF OUT DX, AX */
- dszLOCK, O_DoRep, /* F0 LOCK */
- dszRESERVED, O_DoDB, /* F1 */
- dszREPNE, O_DoRep, /* F2 REPNE or REPNZ */
- dszREP, O_DoRep, /* F3 REP or REPE or REPZ */
- dszHLT, O_NoOperands, /* F4 HLT */
- dszCMC, O_NoOperands, /* F5 CMC */
- dszMULTI, O_GROUP31, /* F6 TEST, NOT, NEG, MUL, IMUL, */
- dszMULTI, O_GROUP32, /* F7 DIv, IDIv F6=Byte F7=Word */
- dszCLC, O_NoOperands, /* F8 CLC */
- dszSTC, O_NoOperands, /* F9 STC */
- dszCLI, O_NoOperands, /* FA CLI */
- dszSTI, O_NoOperands, /* FB STI */
- dszCLD, O_NoOperands, /* FC CLD */
- dszSTD, O_NoOperands, /* FD STD */
- dszMULTI, O_GROUP4, /* FE INC, DEC mem/reg (byte) */
- dszMULTI, O_GROUP5, /* FF INC, DEC, CALL, JMP, PUSH */
-
- dszMULTI, O_GROUP6, /* 0 MULTI */
- dszMULTI, O_GROUP7, /* 1 MULTI */
- dszLAR, O_Reg_Modrm, /* 2 LAR */
- dszLSL, O_Reg_Modrm, /* 3 LSL */
- dszRESERVED, O_DoDB, /* 4 */
- dszLOADALL, O_NoOperands, /* 5 LOADALL */
- dszCLTS, O_NoOperands, /* 6 CLTS */
- dszMOV, O_Modrm_CReg, /* 20 MOV Rd,Cd */
- dszMOV, O_Modrm_CReg, /* 21 MOV Rd,Dd */
- dszMOV, O_CReg_Modrm, /* 22 MOV Cd,Rd */
- dszMOV, O_CReg_Modrm, /* 23 MOV Dd,Rd */
- dszMOV, O_Modrm_CReg, /* 24 MOV Rd,Td */
- dszRESERVED, O_DoDB, /* 25 */
- dszMOV, O_CReg_Modrm, /* 26 MOV Td,Rd */
-
- dszWRMSR, O_NoOperands, /* 30 WRMSR */
- dszRDTSC, O_NoOperands, /* 31 RDTSC */
- dszRDMSR, O_NoOperands, /* 32 RDMSR */
-
- dszSETNL, O_bModrm, /* 7D SETNL */
- dszRESERVED, O_DoDB, /* 7E */
- dszRESERVED, O_DoDB, /* 7F */
- dszJO, O_Rel16, /* 80 JO */
- dszJNO, O_Rel16, /* 81 JNO */
- dszJB, O_Rel16, /* 82 JB */
- dszJNB, O_Rel16, /* 83 JNB */
- dszJE, O_Rel16, /* 84 JE */
- dszJNE, O_Rel16, /* 85 JNE */
- dszJBE, O_Rel16, /* 86 JBE */
- dszJNBE, O_Rel16, /* 87 JNBE */
- dszJS, O_Rel16, /* 88 JS */
- dszJNS, O_Rel16, /* 89 JNS */
- dszJP, O_Rel16, /* 8A JP */
- dszJNP, O_Rel16, /* 8B JNP */
- dszJL, O_Rel16, /* 8C JL */
- dszJNL, O_Rel16, /* 8D JNL */
- dszJLE, O_Rel16, /* 8E JLE */
- dszJNLE, O_Rel16, /* 8F JNLE */
- dszSETO, O_bModrm, /* 90 SETO */
- dszSETNO, O_bModrm, /* 91 SETNO */
- dszSETB, O_bModrm, /* 92 SETB */
- dszSETNB, O_bModrm, /* 93 SETNB */
- dszSETE, O_bModrm, /* 94 SETE */
- dszSETNE, O_bModrm, /* 95 SETNE */
- dszSETBE, O_bModrm, /* 96 SETBE */
- dszSETA, O_bModrm, /* 97 SETNBE */
- dszSETS, O_bModrm, /* 98 SETS */
- dszSETNS, O_bModrm, /* 99 SETNS */
- dszSETP, O_bModrm, /* 9A SETP */
- dszSETNP, O_bModrm, /* 9B SETNP */
- dszSETL, O_bModrm, /* 9C SETL */
- dszSETGE, O_bModrm, /* 9D SETGE */
- dszSETLE, O_bModrm, /* 9E SETLE */
- dszSETNLE,O_bModrm, /* 9F SETNLE */
- dszPUSH, O_sReg2, /* A0 PUSH FS */
- dszPOP, O_sReg2, /* A1 POP FS */
- dszCPUID, O_NoOperands, /* A2 CPUID */
- dszBT, O_Modrm_Reg, /* A3 BT */
- dszSHLD, O_Modrm_Reg_Ib, /* A4 SHLD */
- dszSHLD, O_Modrm_Reg_CL, /* A5 SHLD */
- dszCMPXCHG,O_bModrm_Reg, /* A6 XBTS */
- dszCMPXCHG,O_Modrm_Reg, /* A7 IBTS */
- dszPUSH, O_sReg2, /* A8 PUSH GS */
- dszPOP, O_sReg2, /* A9 POP GS */
- dszRSM, O_NoOperands, /* AA RSM */
- dszBTS, O_vModrm_Reg, /* AB BTS */
- dszSHRD, O_Modrm_Reg_Ib, /* AC SHRD */
- dszSHRD, O_Modrm_Reg_CL, /* AD SHRD */
- dszRESERVED, O_DoDB, /* AE */
- dszIMUL, O_Reg_Modrm, /* AF IMUL */
- dszRESERVED, O_DoDB, /* B0 */
- dszRESERVED, O_DoDB, /* B1 */
- dszLSS, O_fReg_Modrm, /* B2 LSS */
- dszBTR, O_Modrm_Reg, /* B3 BTR */
- dszLFS, O_fReg_Modrm, /* B4 LFS */
- dszLGS, O_fReg_Modrm, /* B5 LGS */
- dszMOVZX, O_Reg_bModrm, /* B6 MOVZX */
- dszMOVZX, O_Reg_wModrm, /* B7 MOVZX */
- dszRESERVED, O_DoDB, /* B8 */
- dszRESERVED, O_DoDB, /* B9 */
- dszMULTI, O_GROUP8, /* BA MULTI */
- dszBTC, O_Modrm_Reg, /* BB BTC */
- dszBSF, O_Reg_Modrm, /* BC BSF */
- dszBSR, O_Reg_Modrm, /* BD BSR */
- dszMOVSX, O_Reg_bModrm, /* BE MOVSX */
- dszMOVSX, O_Reg_wModrm, /* BF MOVSX */
- dszXADD, O_bModrm_Reg, /* C0 XADD */
- dszXADD, O_Modrm_Reg, /* C1 XADD */
- dszRESERVED, O_DoDB, /* C2 */
- dszRESERVED, O_DoDB, /* C3 */
- dszRESERVED, O_DoDB, /* C4 */
- dszRESERVED, O_DoDB, /* C5 */
- dszRESERVED, O_DoDB, /* C6 */
- dszCMPXCHG8B, O_qModrm, /* C7 CMPXCHG8B */
- dszBSWAP, O_oReg, /* C8 BSWAP */
- dszBSWAP, O_oReg, /* C9 BSWAP */
- dszBSWAP, O_oReg, /* CA BSWAP */
- dszBSWAP, O_oReg, /* CB BSWAP */
- dszBSWAP, O_oReg, /* CC BSWAP */
- dszBSWAP, O_oReg, /* CD BSWAP */
- dszBSWAP, O_oReg, /* CE BSWAP */
- dszBSWAP, O_oReg /* CF BSWAP */
- };
-
- /* Auxilary lists of mnemonics for groups of two byte instructions: */
- /* All of the instructions within each of these groups are of the same */
- /* class, so only the mnemonic string is needed, the index into the */
- /* action table is implicit. */
-
- static char *group[][8] = {
-
- /* 00 */ {dszADD, dszOR, dszADC, dszSBB, /* group 1 */
- dszAND, dszSUB, dszXOR, dszCMP},
-
- /* 01 */ {dszROL, dszROR, dszRCL, dszRCR, /* group 2 */
- dszSHL, dszSHR, dszRESERVED, dszSAR},
-
- /* 02 */ {dszINC, dszDEC, dszRESERVED, dszRESERVED, /* group 4 */
- dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED},
-
- /* 03 */ {dszSLDT, dszSTR, dszLLDT, dszLTR, /* group 6 */
- dszVERR, dszVERW, dszRESERVED, dszRESERVED},
-
- /* 04 */ {dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED, /* group 8 */
- dszBT, dszBTS, dszBTR, dszBTC}
-
- };
-
- /* Auxilary orderd pairs for groups of two byte instructions structured */
- /* the same was as distbl above. */
-
- static Tdistbl groupt[][8] = {
-
- /* 00 00 x87-D8-1 */
- { dszFADD, O_dModrm, /* D8-0 FADD */
- dszFMUL, O_dModrm, /* D8-1 FMUL */
- dszFCOM, O_dModrm, /* D8-2 FCOM */
- dszFCOMP, O_dModrm, /* D8-3 FCOMP */
- dszFSUB, O_dModrm, /* D8-4 FSUB */
- dszFSUBR, O_dModrm, /* D8-5 FSUBR */
- dszFDIV, O_dModrm, /* D8-6 FDIV */
- dszFDIVR, O_dModrm }, /* D8-7 FDIVR */
-
- /* 01 x87-D8-2 */
- { dszFADD, O_ST_iST, /* D8-0 FADD */
- dszFMUL, O_ST_iST, /* D8-1 FMUL */
- dszFCOM, O_iST, /* D8-2 FCOM */
- dszFCOMP, O_iST, /* D8-3 FCOMP */
- dszFSUB, O_ST_iST, /* D8-4 FSUB */
- dszFSUBR, O_ST_iST, /* D8-5 FSUBR */
- dszFDIV, O_ST_iST, /* D8-6 FDIV */
- dszFDIVR, O_ST_iST }, /* D8-7 FDIVR */
-
- /* 02 01 x87-D9-1 */
- { dszFLD, O_dModrm, /* D9-0 FLD */
- dszRESERVED, O_DoDB, /* D9-1 */
- dszFST, O_dModrm, /* D9-2 FST */
- dszFSTP, O_dModrm, /* D9-3 FSTP */
- dszFLDENV, O_Modrm, /* D9-4 FLDENV */
- dszFLDCW, O_Modrm, /* D9-5 FLDCW */
- dszFSTENV, O_Modrm, /* D9-6 FSTENV */
- dszFSTCW, O_Modrm }, /* D9-7 FSTCW */
-
- /* 03 01 x87-D9-2 TTT=0,1,2,3 */
- { dszFLD, O_iST, /* D9-0 FLD */
- dszFXCH, O_iST, /* D9-1 FXCH */
- dszFNOP, O_NoOperands, /* D9-2 FNOP */
- dszFSTP, O_iST, /* D9-3 FSTP */
- dszRESERVED, O_DoDB, /* D9-4 */
- dszRESERVED, O_DoDB, /* D9-5 */
- dszRESERVED, O_DoDB, /* D9-6 */
- dszRESERVED, O_DoDB }, /* D9-7 */
-
- /* 04 02 x89-DA-1 */
- { dszFIADD, O_dModrm, /* DA-0 FIADD */
- dszFIMUL, O_dModrm, /* DA-1 FIMUL */
- dszFICOM, O_dModrm, /* DA-2 FICOM */
- dszFICOMP, O_dModrm, /* DA-3 FICOMP */
- dszFISUB, O_dModrm, /* DA-4 FISUB */
- dszFISUBR, O_dModrm, /* DA-5 FISUBR */
- dszFIDIV, O_dModrm, /* DA-6 FIDIV */
- dszFIDIVR, O_dModrm }, /* DA-7 FIDIVR */
-
- /* 05 x87-DA-2 */
- { dszRESERVED, O_DoDB, /* DA-0 */
- dszRESERVED, O_DoDB, /* DA-1 */
- dszRESERVED, O_DoDB, /* DA-2 */
- dszRESERVED, O_DoDB, /* DA-3 */
- dszRESERVED, O_DoDB, /* DA-4 */
- dszFUCOMPP, O_NoOperands, /* DA-5 */
- dszRESERVED, O_DoDB, /* DA-6 */
- dszRESERVED, O_DoDB }, /* DA-7 */
-
- /* 06 03 x87-DB-1 */
- { dszFILD, O_dModrm, /* DB-0 FILD */
- dszRESERVED, O_DoDB, /* DB-1 */
- dszFIST, O_dModrm, /* DB-2 FIST */
- dszFISTP, O_dModrm, /* DB-3 FISTP */
- dszRESERVED, O_DoDB, /* DB-4 */
- dszFLD, O_tModrm, /* DB-5 FLD */
- dszRESERVED, O_DoDB, /* DB-6 */
- dszFSTP, O_tModrm }, /* DB-7 FSTP */
-
- /* 07 x87-DB-2 ttt=4 */
- { dszFENI, O_NoOperands, /* DB-0 FENI */
- dszFDISI, O_NoOperands, /* DB-1 FDISI */
- dszFCLEX, O_NoOperands, /* DB-2 FCLEX */
- dszFINIT, O_NoOperands, /* DB-3 FINIT */
- dszFSETPM, O_DoDB, /* DB-4 FSETPM */
- dszRESERVED, O_DoDB, /* DB-5 */
- dszRESERVED, O_DoDB, /* DB-6 */
- dszRESERVED, O_DoDB }, /* DB-7 */
-
- /* 08 04 x87-DC-1 */
- { dszFADD, O_qModrm, /* DC-0 FADD */
- dszFMUL, O_qModrm, /* DC-1 FMUL */
- dszFCOM, O_qModrm, /* DC-2 FCOM */
- dszFCOMP, O_qModrm, /* DC-3 FCOMP */
- dszFSUB, O_qModrm, /* DC-4 FSUB */
- dszFSUBR, O_qModrm, /* DC-5 FSUBR */
- dszFDIV, O_qModrm, /* DC-6 FDIV */
- dszFDIVR, O_qModrm }, /* DC-7 FDIVR */
-
- /* 09 x87-DC-2 */
- { dszFADD, O_iST_ST, /* DC-0 FADD */
- dszFMUL, O_iST_ST, /* DC-1 FMUL */
- dszFCOM, O_iST, /* DC-2 FCOM */
- dszFCOMP, O_iST, /* DC-3 FCOMP */
- dszFSUB, O_iST_ST, /* DC-4 FSUB */
- dszFSUBR, O_iST_ST, /* DC-5 FSUBR */
- dszFDIV, O_iST_ST, /* DC-6 FDIVR */
- dszFDIVR, O_iST_ST }, /* DC-7 FDIV */
-
- /* 10 05 x87-DD-1 */
- { dszFLD, O_qModrm, /* DD-0 FLD */
- dszRESERVED, O_DoDB, /* DD-1 */
- dszFST, O_qModrm, /* DD-2 FST */
- dszFSTP, O_qModrm, /* DD-3 FSTP */
- dszFRSTOR, O_Modrm, /* DD-4 FRSTOR */
- dszRESERVED, O_DoDB, /* DD-5 */
- dszFSAVE, O_Modrm, /* DD-6 FSAVE */
- dszFSTSW, O_Modrm }, /* DD-7 FSTSW */
-
- /* 11 x87-DD-2 */
- { dszFFREE, O_iST, /* DD-0 FFREE */
- dszFXCH, O_iST, /* DD-1 FXCH */
- dszFST, O_iST, /* DD-2 FST */
- dszFSTP, O_iST, /* DD-3 FSTP */
- dszFUCOM, O_iST, /* DD-4 FUCOM */
- dszFUCOMP, O_iST, /* DD-5 FUCOMP */
- dszRESERVED, O_DoDB, /* DD-6 */
- dszRESERVED, O_DoDB }, /* DD-7 */
-
- /* 12 06 x87-DE-1 */
- { dszFIADD, O_wModrm, /* DE-0 FIADD */
- dszFIMUL, O_wModrm, /* DE-1 FIMUL */
- dszFICOM, O_wModrm, /* DE-2 FICOM */
- dszFICOMP, O_wModrm, /* DE-3 FICOMP */
- dszFISUB, O_wModrm, /* DE-4 FISUB */
- dszFISUBR, O_wModrm, /* DE-5 FISUBR */
- dszFIDIV, O_wModrm, /* DE-6 FIDIV */
- dszFIDIVR, O_wModrm }, /* DE-7 FIDIVR */
-
- /* 13 x87-DE-2 */
- { dszFADDP, O_iST_ST, /* DE-0 FADDP */
- dszFMULP, O_iST_ST, /* DE-1 FMULP */
- dszFCOMP, O_iST, /* DE-2 FCOMP */
- dszFCOMPP, O_NoOperands, /* DE-3 FCOMPP */
- dszFSUBP, O_iST_ST, /* DE-4 FSUBP */
- dszFSUBRP, O_iST_ST, /* DE-5 FSUBRP */
- dszFDIVP, O_iST_ST, /* DE-6 FDIVP */
- dszFDIVRP, O_iST_ST }, /* DE-7 FDIVRP */
-
- /* 14 07 x87-DF-1 */
- { dszFILD, O_wModrm, /* DF-0 FILD */
- dszRESERVED, O_DoDB, /* DF-1 */
- dszFIST, O_wModrm, /* DF-2 FIST */
- dszFISTP, O_wModrm, /* DF-3 FISTP */
- dszFBLD, O_tModrm, /* DF-4 FBLD */
- dszFILD, O_qModrm, /* DF-5 FILD */
- dszFBSTP, O_tModrm, /* DF-6 FBSTP */
- dszFISTP, O_qModrm }, /* DF-7 FISTP */
-
- /* 15 x87-DF-2 */
- { dszFFREE, O_iST, /* DF-0 FFREE */
- dszFXCH, O_iST, /* DF-1 FXCH */
- dszFST, O_iST, /* DF-2 FST */
- dszFSTP, O_iST, /* DF-3 FSTP */
- dszFSTSW, O_NoOperands, /* DF-4 FSTSW */
- dszRESERVED, O_DoDB, /* DF-5 */
- dszRESERVED, O_DoDB, /* DF-6 */
- dszRESERVED, O_DoDB }, /* DF-7 */
-
- /* 16 01 x87-D9 Mod=3 TTT=4 */
- { dszFCHS, O_NoOperands, /* D9-0 FCHS */
- dszFABS, O_NoOperands, /* D9-1 FABS */
- dszRESERVED, O_DoDB, /* D9-2 */
- dszRESERVED, O_DoDB, /* D9-3 */
- dszFTST, O_NoOperands, /* D9-4 FTST */
- dszFXAM, O_NoOperands, /* D9-5 FXAM */
- dszRESERVED, O_DoDB, /* D9-6 */
- dszRESERVED, O_DoDB }, /* D9-7 */
-
- /* 17 01 x87-D9 Mod=3 TTT=5 */
- { dszFLD1, O_NoOperands, /* D9-0 FLD1 */
- dszFLDL2T, O_NoOperands, /* D9-1 FLDL2T */
- dszFLDL2E, O_NoOperands, /* D9-2 FLDL2E */
- dszFLDPI, O_NoOperands, /* D9-3 FLDPI */
- dszFLDLG2, O_NoOperands, /* D9-4 FLDLG2 */
- dszFLDLN2, O_NoOperands, /* D9-5 FLDLN2 */
- dszFLDZ, O_NoOperands, /* D9-6 FLDZ */
- dszRESERVED, O_DoDB }, /* D9-7 */
-
- /* 18 01 x87-D9 Mod=3 TTT=6 */
- { dszF2XM1, O_NoOperands, /* D9-0 F2XM1 */
- dszFYL2X, O_NoOperands, /* D9-1 FYL2X */
- dszFPTAN, O_NoOperands, /* D9-2 FPTAN */
- dszFPATAN, O_NoOperands, /* D9-3 FPATAN */
- dszFXTRACT, O_NoOperands, /* D9-4 FXTRACT */
- dszFPREM1, O_NoOperands, /* D9-5 FPREM1 */
- dszFDECSTP, O_NoOperands, /* D9-6 FDECSTP */
- dszFINCSTP, O_NoOperands }, /* D9-7 FINCSTP */
-
- /* 19 01 x87-D9 Mod=3 TTT=7 */
- { dszFPREM, O_NoOperands, /* D9-0 FPREM */
- dszFYL2XP1, O_NoOperands, /* D9-1 FYL2XP1 */
- dszFSQRT, O_NoOperands, /* D9-2 FSQRT */
- dszFSINCOS, O_NoOperands, /* D9-3 FSINCOS */
- dszFRNDINT, O_NoOperands, /* D9-4 FRNDINT */
- dszFSCALE, O_NoOperands, /* D9-5 FSCALE */
- dszFSIN, O_NoOperands, /* D9-6 FSIN */
- dszFCOS, O_NoOperands }, /* D9-7 FCOS */
-
- /* 20 group 3 */
- { dszTEST, O_bModrm_Ib, /* F6-0 TEST */
- dszRESERVED, O_DoDB, /* F6-1 */
- dszNOT, O_bModrm, /* F6-2 NOT */
- dszNEG, O_bModrm, /* F6-3 NEG */
- dszMUL, O_bModrm, /* F6-4 MUL */
- dszIMUL, O_bModrm, /* F6-5 IMUL */
- dszDIV, O_bModrm, /* F6-6 DIV */
- dszIDIV, O_bModrm }, /* F6-7 IDIV */
-
- /* 21 group 3 */
- { dszTEST, O_vModrm_Iv, /* F7-0 TEST */
- dszRESERVED, O_DoDB, /* F7-1 */
- dszNOT, O_vModrm, /* F7-2 NOT */
- dszNEG, O_vModrm, /* F7-3 NEG */
- dszMUL, O_vModrm, /* F7-4 MUL */
- dszIMUL, O_vModrm, /* F7-5 IMUL */
- dszDIV, O_vModrm, /* F7-6 DIV */
- dszIDIV, O_vModrm }, /* F7-7 IDIV */
-
- /* 22 group 5 */
- { dszINC, O_vModrm, /* FF-0 INC */
- dszDEC, O_vModrm, /* FF-1 DEC */
- dszCALL, O_vModrm, /* FF-2 CALL */
- dszCALL, O_fModrm, /* FF-3 CALL */
- dszJMP, O_vModrm, /* FF-4 JMP */
- dszJMP, O_fModrm, /* FF-5 JMP */
- dszPUSH, O_vModrm, /* FF-6 PUSH */
- dszRESERVED, O_DoDB }, /* FF-7 */
-
- /* 23 group 7 */
- { dszSGDT, O_Modrm, /* 0F-0 SGDT */
- dszSIDT, O_Modrm, /* 0F-1 SIDT */
- dszLGDT, O_Modrm, /* 0F-2 LGDT */
- dszLIDT, O_Modrm, /* 0F-3 LIDT */
- dszSMSW, O_wModrm, /* 0F-4 MSW */
- dszRESERVED, O_DoDB, /* 0F-5 */
- dszLMSW, O_wModrm, /* 0F-6 LMSW */
- dszRESERVED, O_DoDB } /* 0F-7 */
-
- };
-