|
|
1.1 ! root 1: /********************************** module *********************************/ ! 2: /* */ ! 3: /* disasmtb */ ! 4: /* disassembler for CodeView */ ! 5: /* */ ! 6: /***************************************************************************/ ! 7: /* */ ! 8: /* @ Purpose: */ ! 9: /* */ ! 10: /* @ Functions included: */ ! 11: /* */ ! 12: /* */ ! 13: /* @ Author: Gerd Immeyer @ Version: */ ! 14: /* */ ! 15: /* @ Creation Date: 10.19.89 @ Modification Date: */ ! 16: /* */ ! 17: /***************************************************************************/ ! 18: ! 19: ! 20: ! 21: /* Strings: Operand mnemonics, Segment overrides, etc. for disasm */ ! 22: ! 23: char dszAAA[] = "aaa"; ! 24: char dszAAD[] = "aad"; ! 25: char dszAAM[] = "aam"; ! 26: char dszAAS[] = "aas"; ! 27: char dszADC[] = "adc"; ! 28: char dszADD[] = "add"; ! 29: char dszADDRPRFX[] = ""; ! 30: char dszAND[] = "and"; ! 31: char dszARPL[] = "arpl"; ! 32: char dszBOUND[] = "bound"; ! 33: char dszBSF[] = "bsf"; ! 34: char dszBSR[] = "bsr"; ! 35: char dszBST[] = "bst"; ! 36: char dszBSWAP[] = "bswap"; ! 37: char dszBT[] = "bt"; ! 38: char dszBTC[] = "btc"; ! 39: char dszBTR[] = "btr"; ! 40: char dszBTS[] = "bts"; ! 41: char dszCALL[] = "call"; ! 42: char dszCBW[] = "cbw"; ! 43: char dszCDQ[] = "cdq"; ! 44: char dszCLC[] = "clc"; ! 45: char dszCLD[] = "cld"; ! 46: char dszCLI[] = "cli"; ! 47: char dszCLTS[] = "clts"; ! 48: char dszCMC[] = "cmc"; ! 49: char dszCMP[] = "cmp"; ! 50: char dszCMPS[] = "cmps"; ! 51: char dszCMPSB[] = "cmpsb"; ! 52: char dszCMPSD[] = "cmpsd"; ! 53: char dszCMPSW[] = "cmpsw"; ! 54: char dszCMPXCHG[] = "cmpxchg"; ! 55: char dszCMPXCHG8B[] = "cmpxchg8b"; ! 56: char dszCPUID[] = "cpuid"; ! 57: char dszCS_[] = "cs:"; ! 58: char dszCWD[] = "cwd"; ! 59: char dszCWDE[] = "cwde"; ! 60: char dszDAA[] = "daa"; ! 61: char dszDAS[] = "das"; ! 62: char dszDEC[] = "dec"; ! 63: char dszDIV[] = "div"; ! 64: char dszDS_[] = "ds:"; ! 65: char dszENTER[] = "enter"; ! 66: char dszES_[] = "es:"; ! 67: char dszF2XM1[] = "f2xm1"; ! 68: char dszFABS[] = "fabs"; ! 69: char dszFADD[] = "fadd"; ! 70: char dszFADDP[] = "faddp"; ! 71: char dszFBLD[] = "fbld"; ! 72: char dszFBSTP[] = "fbstp"; ! 73: char dszFCHS[] = "fchs"; ! 74: char dszFCLEX[] = "fclex"; ! 75: char dszFCOM[] = "fcom"; ! 76: char dszFCOMP[] = "fcomp"; ! 77: char dszFCOMPP[] = "fcompp"; ! 78: char dszFCOS[] = "fcos"; ! 79: char dszFDECSTP[] = "fdecstp"; ! 80: char dszFDISI[] = "fdisi"; ! 81: char dszFDIV[] = "fdiv"; ! 82: char dszFDIVP[] = "fdivp"; ! 83: char dszFDIVR[] = "fdivr"; ! 84: char dszFDIVRP[] = "fdivrp"; ! 85: char dszFENI[] = "feni"; ! 86: char dszFFREE[] = "ffree"; ! 87: char dszFIADD[] = "fiadd"; ! 88: char dszFICOM[] = "ficom"; ! 89: char dszFICOMP[] = "ficomp"; ! 90: char dszFIDIV[] = "fidiv"; ! 91: char dszFIDIVR[] = "fidivr"; ! 92: char dszFILD[] = "fild"; ! 93: char dszFIMUL[] = "fimul"; ! 94: char dszFINCSTP[] = "fincstp"; ! 95: char dszFINIT[] = "finit"; ! 96: char dszFIST[] = "fist"; ! 97: char dszFISTP[] = "fistp"; ! 98: char dszFISUB[] = "fisub"; ! 99: char dszFISUBR[] = "fisubr"; ! 100: char dszFLD[] = "fld"; ! 101: char dszFLD1[] = "fld1"; ! 102: char dszFLDCW[] = "fldcw"; ! 103: char dszFLDENV[] = "fldenv"; ! 104: char dszFLDL2E[] = "fldl2e"; ! 105: char dszFLDL2T[] = "fldl2t"; ! 106: char dszFLDLG2[] = "fldlg2"; ! 107: char dszFLDLN2[] = "fldln2"; ! 108: char dszFLDPI[] = "fldpi"; ! 109: char dszFLDZ[] = "fldz"; ! 110: char dszFMUL[] = "fmul"; ! 111: char dszFMULP[] = "fmulp"; ! 112: char dszFNCLEX[] = "fnclex"; ! 113: char dszFNDISI[] = "fndisi"; ! 114: char dszFNENI[] = "fneni"; ! 115: char dszFNINIT[] = "fninit"; ! 116: char dszFNOP[] = "fnop"; ! 117: char dszFNSAVE[] = "fnsave"; ! 118: char dszFNSTCW[] = "fnstcw"; ! 119: char dszFNSTENV[] = "fnstenv"; ! 120: char dszFNSTSW[] = "fnstsw"; ! 121: char dszFNSTSWAX[] = "fnstswax"; ! 122: char dszFPATAN[] = "fpatan"; ! 123: char dszFPREM[] = "fprem"; ! 124: char dszFPREM1[] = "fprem1"; ! 125: char dszFPTAN[] = "fptan"; ! 126: char dszFRNDINT[] = "frndint"; ! 127: char dszFRSTOR[] = "frstor"; ! 128: char dszFSAVE[] = "fsave"; ! 129: char dszFSCALE[] = "fscale"; ! 130: char dszFSETPM[] = "fsetpm"; ! 131: char dszFSIN[] = "fsin"; ! 132: char dszFSINCOS[] = "fsincos"; ! 133: char dszFSQRT[] = "fsqrt"; ! 134: char dszFST[] = "fst"; ! 135: char dszFSTCW[] = "fstcw"; ! 136: char dszFSTENV[] = "fstenv"; ! 137: char dszFSTP[] = "fstp"; ! 138: char dszFSTSW[] = "fstsw"; ! 139: char dszFSTSWAX[] = "fstswax"; ! 140: char dszFSUB[] = "fsub"; ! 141: char dszFSUBP[] = "fsubp"; ! 142: char dszFSUBR[] = "fsubr"; ! 143: char dszFSUBRP[] = "fsubrp"; ! 144: char dszFS_[] = "fs:"; ! 145: char dszFTST[] = "ftst"; ! 146: char dszFUCOM[] = "fucom"; ! 147: char dszFUCOMP[] = "fucomp"; ! 148: char dszFUCOMPP[] = "fucompp"; ! 149: char dszFWAIT[] = "fwait"; ! 150: char dszFXAM[] = "fxam"; ! 151: char dszFXCH[] = "fxch"; ! 152: char dszFXTRACT[] = "fxtract"; ! 153: char dszFYL2X[] = "fyl2x"; ! 154: char dszFYL2XP1[] = "fyl2xp1"; ! 155: char dszGS_[] = "gs:"; ! 156: char dszHLT[] = "hlt"; ! 157: char dszIBTS[] = "ibts"; ! 158: char dszIDIV[] = "idiv"; ! 159: char dszIMUL[] = "imul"; ! 160: char dszIN[] = "in"; ! 161: char dszINC[] = "inc"; ! 162: char dszINS[] = "ins"; ! 163: char dszINSB[] = "insb"; ! 164: char dszINSD[] = "insd"; ! 165: char dszINSW[] = "insw"; ! 166: char dszINT[] = "int"; ! 167: char dszINTO[] = "into"; ! 168: char dszIRET[] = "iret"; ! 169: char dszIRETD[] = "iretd"; ! 170: char dszJA[] = "ja"; ! 171: char dszJAE[] = "jae"; ! 172: char dszJB[] = "jb"; ! 173: char dszJBE[] = "jbe"; ! 174: char dszJC[] = "jc"; ! 175: char dszJCXZ[] = "jcxz"; ! 176: char dszJE[] = "je"; ! 177: char dszJECXZ[] = "jecxz"; ! 178: char dszJG[] = "jg"; ! 179: char dszJGE[] = "jge"; ! 180: char dszJL[] = "jl"; ! 181: char dszJLE[] = "jle"; ! 182: char dszJMP[] = "jmp"; ! 183: char dszJNA[] = "jna"; ! 184: char dszJNAE[] = "jnae"; ! 185: char dszJNB[] = "jnb"; ! 186: char dszJNBE[] = "jnbe"; ! 187: char dszJNC[] = "jnc"; ! 188: char dszJNE[] = "jne"; ! 189: char dszJNG[] = "jng"; ! 190: char dszJNGE[] = "jnge"; ! 191: char dszJNL[] = "jnl"; ! 192: char dszJNLE[] = "jnle"; ! 193: char dszJNO[] = "jno"; ! 194: char dszJNP[] = "jnp"; ! 195: char dszJNS[] = "jns"; ! 196: char dszJNZ[] = "jnz"; ! 197: char dszJO[] = "jo"; ! 198: char dszJP[] = "jp"; ! 199: char dszJPE[] = "jpe"; ! 200: char dszJPO[] = "jpo"; ! 201: char dszJS[] = "js"; ! 202: char dszJZ[] = "jz"; ! 203: char dszLAHF[] = "lahf"; ! 204: char dszLAR[] = "lar"; ! 205: char dszLDS[] = "lds"; ! 206: char dszLEA[] = "lea"; ! 207: char dszLEAVE[] = "leave"; ! 208: char dszLES[] = "les"; ! 209: char dszLFS[] = "lfs"; ! 210: char dszLGDT[] = "lgdt"; ! 211: char dszLGS[] = "lgs"; ! 212: char dszLIDT[] = "lidt"; ! 213: char dszLLDT[] = "lldt"; ! 214: char dszLMSW[] = "lmsw"; ! 215: char dszLOADALL[] = "loadall"; ! 216: char dszLOCK[] = "lock"; ! 217: char dszLODS[] = "lods"; ! 218: char dszLODSB[] = "lodsb"; ! 219: char dszLODSD[] = "lodsd"; ! 220: char dszLODSW[] = "lodsw"; ! 221: char dszLOOP[] = "loop"; ! 222: char dszLOOPE[] = "loope"; ! 223: char dszLOOPNE[] = "loopne"; ! 224: char dszLOOPNZ[] = "loopnz"; ! 225: char dszLOOPZ[] = "loopz"; ! 226: char dszLSL[] = "lsl"; ! 227: char dszLSS[] = "lss"; ! 228: char dszLTR[] = "ltr"; ! 229: char dszMOV[] = "mov"; ! 230: char dszMOVS[] = "movs"; ! 231: char dszMOVSB[] = "movsb"; ! 232: char dszMOVSD[] = "movsd"; ! 233: char dszMOVSW[] = "movsw"; ! 234: char dszMOVSX[] = "movsx"; ! 235: char dszMOVZX[] = "movzx"; ! 236: char dszMUL[] = "mul"; ! 237: char dszNEG[] = "neg"; ! 238: char dszNOP[] = "nop"; ! 239: char dszNOT[] = "not"; ! 240: char dszOPPRFX[] = ""; ! 241: char dszOR[] = "or"; ! 242: char dszOUT[] = "out"; ! 243: char dszOUTS[] = "outs"; ! 244: char dszOUTSB[] = "outsb"; ! 245: char dszOUTSD[] = "outsd"; ! 246: char dszOUTSW[] = "outsw"; ! 247: char dszPOP[] = "pop"; ! 248: char dszPOPA[] = "popa"; ! 249: char dszPOPAD[] = "popad"; ! 250: char dszPOPF[] = "popf"; ! 251: char dszPOPFD[] = "popfd"; ! 252: char dszPUSH[] = "push"; ! 253: char dszPUSHA[] = "pusha"; ! 254: char dszPUSHAD[] = "pushad"; ! 255: char dszPUSHF[] = "pushf"; ! 256: char dszPUSHFD[] = "pushfd"; ! 257: char dszRCL[] = "rcl"; ! 258: char dszRCR[] = "rcr"; ! 259: char dszRDTSC[] = "rdtsc"; ! 260: char dszRDMSR[] = "rdmsr"; ! 261: char dszREP[] = "rep "; ! 262: char dszREPE[] = "repe"; ! 263: char dszREPNE[] = "repne "; ! 264: char dszREPNZ[] = "repnz"; ! 265: char dszREPZ[] = "repz"; ! 266: char dszRET[] = "ret"; ! 267: char dszRETF[] = "retf"; ! 268: char dszRETN[] = "retn"; ! 269: char dszROL[] = "rol"; ! 270: char dszROR[] = "ror"; ! 271: char dszRSM[] = "rsm"; ! 272: char dszSAHF[] = "sahf"; ! 273: char dszSAL[] = "sal"; ! 274: char dszSAR[] = "sar"; ! 275: char dszSBB[] = "sbb"; ! 276: char dszSCAS[] = "scas"; ! 277: char dszSCASB[] = "scasb"; ! 278: char dszSCASD[] = "scasd"; ! 279: char dszSCASW[] = "scasw"; ! 280: char dszSETA[] = "seta"; ! 281: char dszSETAE[] = "setae"; ! 282: char dszSETB[] = "setb"; ! 283: char dszSETBE[] = "setbe"; ! 284: char dszSETC[] = "setc"; ! 285: char dszSETE[] = "sete"; ! 286: char dszSETG[] = "setg"; ! 287: char dszSETGE[] = "setge"; ! 288: char dszSETL[] = "setl"; ! 289: char dszSETLE[] = "setle"; ! 290: char dszSETNA[] = "setna"; ! 291: char dszSETNAE[] = "setnae"; ! 292: char dszSETNB[] = "setnb"; ! 293: char dszSETNBE[] = "setnbe"; ! 294: char dszSETNC[] = "setnc"; ! 295: char dszSETNE[] = "setne"; ! 296: char dszSETNG[] = "setng"; ! 297: char dszSETNGE[] = "setnge"; ! 298: char dszSETNL[] = "setnl"; ! 299: char dszSETNLE[] = "setnle"; ! 300: char dszSETNO[] = "setno"; ! 301: char dszSETNP[] = "setnp"; ! 302: char dszSETNS[] = "setns"; ! 303: char dszSETNZ[] = "setnz"; ! 304: char dszSETO[] = "seto"; ! 305: char dszSETP[] = "setp"; ! 306: char dszSETPE[] = "setpe"; ! 307: char dszSETPO[] = "setpo"; ! 308: char dszSETS[] = "sets"; ! 309: char dszSETZ[] = "setz"; ! 310: char dszSGDT[] = "sgdt"; ! 311: char dszSHL[] = "shl"; ! 312: char dszSHLD[] = "shld"; ! 313: char dszSHR[] = "shr"; ! 314: char dszSHRD[] = "shrd"; ! 315: char dszSIDT[] = "sidt"; ! 316: char dszSLDT[] = "sldt"; ! 317: char dszSMSW[] = "smsw"; ! 318: char dszSS_[] = "ss:"; ! 319: char dszSTC[] = "stc"; ! 320: char dszSTD[] = "std"; ! 321: char dszSTI[] = "sti"; ! 322: char dszSTOS[] = "stos"; ! 323: char dszSTOSB[] = "stosb"; ! 324: char dszSTOSD[] = "stosd"; ! 325: char dszSTOSW[] = "stosw"; ! 326: char dszSTR[] = "str"; ! 327: char dszSUB[] = "sub"; ! 328: char dszTEST[] = "test"; ! 329: char dszVERR[] = "verr"; ! 330: char dszVERW[] = "verw"; ! 331: char dszWAIT[] = "wait"; ! 332: char dszWRMSR[] = "wrmsr"; ! 333: char dszXADD[] = "xadd"; ! 334: char dszXBTS[] = "xbts"; ! 335: char dszXCHG[] = "xchg"; ! 336: char dszXLAT[] = "xlat"; ! 337: char dszXOR[] = "xor"; ! 338: char dszRESERVED[] = "???"; ! 339: char dszMULTI[] = ""; ! 340: char dszDB[] = "db"; ! 341: ! 342: #define MRM 0x40 ! 343: #define COM 0x80 ! 344: #define END 0xc0 ! 345: ! 346: /* Enumeration of valid actions that can be included in the action table */ ! 347: ! 348: enum oprtyp { ADDRP, ADR_OVR, ALSTR, ALT, AXSTR, BOREG, ! 349: BREG, BRSTR, xBYTE, CHR, CREG, xDWORD, ! 350: EDWORD, EGROUPT, FARPTR, GROUP, GROUPT, IB, ! 351: IST, IST_ST, IV, IW, LMODRM, MODRM, ! 352: NOP, OFFS, OPC0F, OPR_OVR, QWORD, REL16, ! 353: REL8, REP, SEG_OVR, SREG2, SREG3, ST_IST, ! 354: STROP, TTBYTE, UBYTE, VAR, VOREG, VREG, ! 355: xWORD, WREG, WRSTR ! 356: }; ! 357: ! 358: /* Enumeration of indices into the action table for instruction classes */ ! 359: ! 360: #define O_DoDB 0 ! 361: #define O_NoOperands 0 ! 362: #define O_NoOpAlt5 O_NoOperands+1 ! 363: #define O_NoOpAlt4 O_NoOpAlt5+2 ! 364: #define O_NoOpAlt3 O_NoOpAlt4+2 ! 365: #define O_NoOpAlt1 O_NoOpAlt3+2 ! 366: #define O_NoOpAlt0 O_NoOpAlt1+2 ! 367: #define O_NoOpStrSI O_NoOpAlt0+2 ! 368: #define O_NoOpStrDI O_NoOpStrSI+2 ! 369: #define O_NoOpStrSIDI O_NoOpStrDI+2 ! 370: #define O_bModrm_Reg O_NoOpStrSIDI+2 ! 371: #define O_vModrm_Reg O_bModrm_Reg+3 ! 372: #define O_Modrm_Reg O_vModrm_Reg+3 ! 373: #define O_bReg_Modrm O_Modrm_Reg+3 ! 374: #define O_fReg_Modrm O_bReg_Modrm+3 ! 375: #define O_Reg_Modrm O_fReg_Modrm+3 ! 376: #define O_AL_Ib O_Reg_Modrm+3 ! 377: #define O_AX_Iv O_AL_Ib+2 ! 378: #define O_sReg2 O_AX_Iv+2 ! 379: #define O_oReg O_sReg2+1 ! 380: #define O_DoBound O_oReg+1 ! 381: #define O_Iv O_DoBound+3 ! 382: #define O_wModrm_Reg O_Iv+1 ! 383: #define O_Ib O_wModrm_Reg+3 ! 384: #define O_Imulb O_Ib+1 ! 385: #define O_Imul O_Imulb+4 ! 386: #define O_Rel8 O_Imul+4 ! 387: #define O_bModrm_Ib O_Rel8+1 ! 388: #define O_Modrm_Ib O_bModrm_Ib+3 ! 389: #define O_Modrm_Iv O_Modrm_Ib+3 ! 390: #define O_Modrm_sReg3 O_Modrm_Iv+3 ! 391: #define O_sReg3_Modrm O_Modrm_sReg3+3 ! 392: #define O_Modrm O_sReg3_Modrm+3 ! 393: #define O_FarPtr O_Modrm+2 ! 394: #define O_AL_Offs O_FarPtr+1 ! 395: #define O_Offs_AL O_AL_Offs+2 ! 396: #define O_AX_Offs O_Offs_AL+2 ! 397: #define O_Offs_AX O_AX_Offs+2 ! 398: #define O_oReg_Ib O_Offs_AX+2 ! 399: #define O_oReg_Iv O_oReg_Ib+2 ! 400: #define O_Iw O_oReg_Iv+2 ! 401: #define O_Enter O_Iw+1 ! 402: #define O_Ubyte_AL O_Enter+2 ! 403: #define O_Ubyte_AX O_Ubyte_AL+2 ! 404: #define O_AL_Ubyte O_Ubyte_AX+2 ! 405: #define O_AX_Ubyte O_AL_Ubyte+2 ! 406: #define O_DoInAL O_AX_Ubyte+2 ! 407: #define O_DoInAX O_DoInAL+3 ! 408: #define O_DoOutAL O_DoInAX+3 ! 409: #define O_DoOutAX O_DoOutAL+3 ! 410: #define O_Rel16 O_DoOutAX+3 ! 411: #define O_ADR_OVERRIDE O_Rel16+1 ! 412: #define O_OPR_OVERRIDE O_ADR_OVERRIDE+1 ! 413: #define O_SEG_OVERRIDE O_OPR_OVERRIDE+1 ! 414: #define O_DoInt3 O_SEG_OVERRIDE+1 ! 415: ! 416: #if (O_DoInt3 != 115) ! 417: #error "operand table has been modified!" ! 418: #endif ! 419: /* #define O_DoInt O_DoInt3+2 */ ! 420: ! 421: #define O_DoInt 117 ! 422: #define O_OPC0F O_DoInt+1 ! 423: #define O_GROUP11 O_OPC0F+1 ! 424: #define O_GROUP13 O_GROUP11+5 ! 425: #define O_GROUP12 O_GROUP13+5 ! 426: #define O_GROUP21 O_GROUP12+5 ! 427: #define O_GROUP22 O_GROUP21+5 ! 428: #define O_GROUP23 O_GROUP22+5 ! 429: #define O_GROUP24 O_GROUP23+6 ! 430: #define O_GROUP25 O_GROUP24+6 ! 431: #define O_GROUP26 O_GROUP25+6 ! 432: #define O_GROUP4 O_GROUP26+6 ! 433: #define O_GROUP6 O_GROUP4+4 ! 434: #define O_GROUP8 O_GROUP6+4 ! 435: #define O_GROUP31 O_GROUP8+5 ! 436: #define O_GROUP32 O_GROUP31+3 ! 437: #define O_GROUP5 O_GROUP32+3 ! 438: #define O_GROUP7 O_GROUP5+3 ! 439: #define O_x87_ESC O_GROUP7+3 ! 440: #define O_bModrm O_x87_ESC+2 ! 441: #define O_wModrm O_bModrm+2 ! 442: #define O_dModrm O_wModrm+2 ! 443: #define O_fModrm O_dModrm+2 ! 444: #define O_vModrm O_fModrm+2 ! 445: #define O_vModrm_Iv O_vModrm+2 ! 446: #define O_Reg_bModrm O_vModrm_Iv+3 ! 447: #define O_Reg_wModrm O_Reg_bModrm+3 ! 448: #define O_Modrm_Reg_Ib O_Reg_wModrm+3 ! 449: #define O_Modrm_Reg_CL O_Modrm_Reg_Ib+4 ! 450: #define O_ST_iST O_Modrm_Reg_CL+5 ! 451: #define O_iST O_ST_iST+2 ! 452: #define O_iST_ST O_iST+2 ! 453: #define O_qModrm O_iST_ST+2 ! 454: #define O_tModrm O_qModrm+2 ! 455: #define O_DoRep O_tModrm+2 ! 456: #define O_Modrm_CReg O_DoRep+1 ! 457: #define O_CReg_Modrm O_Modrm_CReg+3 ! 458: #define O_AX_oReg O_CReg_Modrm+3 ! 459: #define O_length O_AX_oReg+3 ! 460: ! 461: #if( O_length > 255 ) ! 462: #error "operand table too large!" ! 463: #endif ! 464: ! 465: ! 466: /* The action table: range of lists of actions to be taken for each possible */ ! 467: /* instruction class. */ ! 468: ! 469: static unsigned char actiontbl[] = { ! 470: /* NoOperands */ NOP+END, ! 471: /* NoOpAlt5 */ ALT+END, 5, ! 472: /* NoOpAlt4 */ ALT+END, 4, ! 473: /* NoOpAlt3 */ ALT+END, 3, ! 474: /* NoOpAlt1 */ ALT+END, 1, ! 475: /* NoOpAlt0 */ ALT+END, 0, ! 476: /* NoOpStrSI */ STROP+END, 1, ! 477: /* NoOpStrDI */ STROP+END, 2, ! 478: /* NoOpStrSIDI */ STROP+END, 3, ! 479: /* bModrm_Reg */ xBYTE+MRM, MODRM+COM, BREG+END, ! 480: /* vModrm_Reg */ VAR+MRM, LMODRM+COM, BREG+END, ! 481: /* Modrm_Reg */ VAR+MRM, MODRM+COM, VREG+END, ! 482: /* bReg_Modrm */ xBYTE+MRM, BREG+COM, MODRM+END, ! 483: /* fReg_Modrm */ FARPTR+MRM,VREG+COM, MODRM+END, ! 484: /* Reg_Modrm */ VAR+MRM, VREG+COM, MODRM+END, ! 485: /* AL_Ib */ ALSTR+COM, IB+END, ! 486: /* AX_Iv */ AXSTR+COM, IV+END, ! 487: /* sReg2 */ SREG2+END, ! 488: /* oReg */ VOREG+END, ! 489: /* DoBound */ VAR+MRM, VREG+COM, MODRM+END, ! 490: /* Iv */ IV+END, ! 491: /* wModrm_Reg */ xWORD+MRM, LMODRM+COM, WREG+END, ! 492: /* Ib */ IB+END, ! 493: /* Imulb */ VAR+MRM, VREG+COM, MODRM+COM, IB+END, ! 494: /* Imul */ VAR+MRM, VREG+COM, MODRM+COM, IV+END, ! 495: /* REL8 */ REL8+END, ! 496: /* bModrm_Ib */ xBYTE+MRM, LMODRM+COM, IB+END, ! 497: /* Modrm_Ib */ VAR+MRM, LMODRM+COM, IB+END, ! 498: /* Modrm_Iv */ VAR+MRM, LMODRM+COM, IV+END, ! 499: /* Modrm_sReg3 */ xWORD+MRM, MODRM+COM, SREG3+END, ! 500: /* sReg3_Modrm */ xWORD+MRM, SREG3+COM, MODRM+END, ! 501: /* Modrm */ VAR+MRM, MODRM+END, ! 502: /* FarPtr */ ADDRP+END, ! 503: /* AL_Offs */ ALSTR+COM, OFFS+END, ! 504: /* Offs_AL */ OFFS+COM, ALSTR+END, ! 505: /* AX_Offs */ AXSTR+COM, OFFS+END, ! 506: /* Offs_AX */ OFFS+COM, AXSTR+END, ! 507: /* oReg_Ib */ BOREG+COM, IB+END, ! 508: /* oReg_Iv */ VOREG+COM, IV+END, ! 509: /* Iw */ IW+END, ! 510: /* enter */ IW+COM, IB+END, ! 511: /* Ubyte_AL */ UBYTE+COM, ALSTR+END, ! 512: /* Ubyte_AX */ UBYTE+COM, AXSTR+END, ! 513: /* AL_Ubyte */ ALSTR+COM, UBYTE+END, ! 514: /* AX_Ubyte */ AXSTR+COM, UBYTE+END, ! 515: /* DoInAL */ ALSTR+COM, WRSTR+END, 2, ! 516: /* DoInAX */ AXSTR+COM, WRSTR+END, 2, ! 517: /* DoOutAL */ WRSTR+COM, 2, ALSTR+END, ! 518: /* DoOutAX */ WRSTR+COM, 2, AXSTR+END, ! 519: /* REL16 */ REL16+END, ! 520: /* ADR_OVERRIDE*/ ADR_OVR, ! 521: /* OPR_OVERRIDE*/ OPR_OVR, ! 522: /* SEG_OVERRIDE*/ SEG_OVR, ! 523: /* DoInt3 */ CHR+END, '3', ! 524: /* DoInt */ UBYTE+END, ! 525: /* Opcode0F */ OPC0F, ! 526: /* group1_1 */ xBYTE+MRM, GROUP, 0, LMODRM+COM, IB+END, ! 527: /* group1_3 */ VAR+MRM, GROUP, 0, LMODRM+COM, IB+END, ! 528: /* group1_2 */ VAR+MRM, GROUP, 0, LMODRM+COM, IV+END, ! 529: /* group2_1 */ xBYTE+MRM, GROUP, 1, LMODRM+COM, IB+END, ! 530: /* group2_2 */ VAR+MRM, GROUP, 1, LMODRM+COM, IB+END, ! 531: /* group2_3 */ xBYTE+MRM, GROUP, 1, LMODRM+COM, CHR+END, '1', ! 532: /* group2_4 */ VAR+MRM, GROUP, 1, LMODRM+COM, CHR+END, '1', ! 533: /* group2_5 */ xBYTE+MRM, GROUP, 1, LMODRM+COM, BRSTR+END, 1, ! 534: /* group2_6 */ VAR+MRM, GROUP, 1, LMODRM+COM, BRSTR+END, 1, ! 535: /* group4 */ xBYTE+MRM, GROUP, 2, LMODRM+END, ! 536: /* group6 */ xWORD+MRM, GROUP, 3, LMODRM+END, ! 537: /* group8 */ xWORD+MRM, GROUP, 4, LMODRM+COM, IB+END, ! 538: /* group3_1 */ xBYTE+MRM, GROUPT, 20, ! 539: /* group3_2 */ VAR+MRM, GROUPT, 21, ! 540: /* group5 */ VAR+MRM, GROUPT, 22, ! 541: /* group7 */ NOP+MRM, GROUPT, 23, ! 542: /* x87_ESC */ NOP+MRM, EGROUPT, ! 543: /* bModrm */ xBYTE+MRM, LMODRM+END, ! 544: /* wModrm */ xWORD+MRM, LMODRM+END, ! 545: /* dModrm */ xDWORD+MRM,LMODRM+END, ! 546: /* fModrm */ FARPTR+MRM,LMODRM+END, ! 547: /* vModrm */ VAR+MRM, LMODRM+END, ! 548: /* vModrm_Iv */ VAR+MRM, LMODRM+COM, IV+END, ! 549: /* reg_bModrm */ xBYTE+MRM, VREG+COM, LMODRM+END, ! 550: /* reg_wModrm */ xWORD+MRM, VREG+COM, LMODRM+END, ! 551: /* Modrm_Reg_Ib*/ VAR+MRM, MODRM+COM, VREG+COM, IB+END, ! 552: /* Modrm_Reg_CL*/ VAR+MRM, MODRM+COM, VREG+COM, BRSTR+END, 1, ! 553: /* ST_iST */ NOP+MRM, ST_IST+END, ! 554: /* iST */ NOP+MRM, IST+END, ! 555: /* iST_ST */ NOP+MRM, IST_ST+END, ! 556: /* qModrm */ QWORD+MRM, LMODRM+END, ! 557: /* tModrm */ TTBYTE+MRM, LMODRM+END, ! 558: /* REP */ REP, ! 559: /* Modrm_CReg */ EDWORD+MRM,MODRM+COM, CREG+END, ! 560: /* CReg_Modrm */ EDWORD+MRM,CREG+COM, MODRM+END, ! 561: /* AX_oReg */ AXSTR+COM, VOREG+END ! 562: }; ! 563: ! 564: #if defined(_M_IX86) ! 565: #define BUILDING_ON_X86 1 ! 566: #else ! 567: #define BUILDING_ON_X86 0 ! 568: #endif ! 569: ! 570: #if BUILDING_ON_X86 == 1 ! 571: #pragma pack(1) ! 572: #endif ! 573: ! 574: typedef struct Tdistbl{ ! 575: char *instruct; ! 576: unsigned char opr; ! 577: } Tdistbl; ! 578: ! 579: #if BUILDING_ON_X86 == 1 ! 580: #pragma pack() ! 581: #endif ! 582: ! 583: /* List of ordered pairs for each instruction: */ ! 584: /* (pointer to string literal mnemonic, */ ! 585: /* instruction class index for action table) */ ! 586: ! 587: static Tdistbl distbl[] = { ! 588: dszADD, O_bModrm_Reg, /* 00 ADD mem/reg, reg (byte) */ ! 589: dszADD, O_Modrm_Reg, /* 01 ADD mem/reg, reg (word) */ ! 590: dszADD, O_bReg_Modrm, /* 02 ADD reg, mem/reg (byte) */ ! 591: dszADD, O_Reg_Modrm, /* 03 ADD reg, mem/reg (word) */ ! 592: dszADD, O_AL_Ib, /* 04 ADD AL, I */ ! 593: dszADD, O_AX_Iv, /* 05 ADD AX, I */ ! 594: dszPUSH, O_sReg2, /* 06 PUSH ES */ ! 595: dszPOP, O_sReg2, /* 07 POP ES */ ! 596: dszOR, O_bModrm_Reg, /* 08 OR mem/reg, reg (byte) */ ! 597: dszOR, O_Modrm_Reg, /* 09 OR mem/reg, reg (word) */ ! 598: dszOR, O_bReg_Modrm, /* 0A OR reg, mem/reg (byte) */ ! 599: dszOR, O_Reg_Modrm, /* 0B OR reg, mem/reg (word) */ ! 600: dszOR, O_AL_Ib, /* 0C OR AL, I */ ! 601: dszOR, O_AX_Iv, /* 0D OR AX, I */ ! 602: dszPUSH, O_sReg2, /* 0E PUSH CS */ ! 603: dszMULTI, O_OPC0F, /* 0F CLTS & protection ctl(286) */ ! 604: dszADC, O_bModrm_Reg, /* 10 ADC mem/reg, reg (byte) */ ! 605: dszADC, O_Modrm_Reg, /* 11 ADC mem/reg, reg (word) */ ! 606: dszADC, O_bReg_Modrm, /* 12 ADC reg, mem/reg (byte) */ ! 607: dszADC, O_Reg_Modrm, /* 13 ADC reg, mem/reg (word) */ ! 608: dszADC, O_AL_Ib, /* 14 ADC AL, I */ ! 609: dszADC, O_AX_Iv, /* 15 ADC AX, I */ ! 610: dszPUSH, O_sReg2, /* 16 PUSH SS */ ! 611: dszPOP, O_sReg2, /* 17 POP SS */ ! 612: dszSBB, O_bModrm_Reg, /* 18 SBB mem/reg, reg (byte) */ ! 613: dszSBB, O_Modrm_Reg, /* 19 SBB mem/reg, reg (word) */ ! 614: dszSBB, O_bReg_Modrm, /* 1A SBB reg, mem/reg (byte) */ ! 615: dszSBB, O_Reg_Modrm, /* 1B SBB reg, mem/reg (word) */ ! 616: dszSBB, O_AL_Ib, /* 1C SBB AL, I */ ! 617: dszSBB, O_AX_Iv, /* 1D SBB AX, I */ ! 618: dszPUSH, O_sReg2, /* 1E PUSH DS */ ! 619: dszPOP, O_sReg2, /* 1F POP DS */ ! 620: dszAND, O_bModrm_Reg, /* 20 AND mem/reg, reg (byte) */ ! 621: dszAND, O_Modrm_Reg, /* 21 AND mem/reg, reg (word) */ ! 622: dszAND, O_bReg_Modrm, /* 22 AND reg, mem/reg (byte) */ ! 623: dszAND, O_Reg_Modrm, /* 23 AND reg, mem/reg (word) */ ! 624: dszAND, O_AL_Ib, /* 24 AND AL, I */ ! 625: dszAND, O_AX_Iv, /* 25 AND AX, I */ ! 626: dszES_, O_SEG_OVERRIDE, /* 26 SEG ES: */ ! 627: dszDAA, O_NoOperands, /* 27 DAA */ ! 628: dszSUB, O_bModrm_Reg, /* 28 SUB mem/reg, reg (byte) */ ! 629: dszSUB, O_Modrm_Reg, /* 29 SUB mem/reg, reg (word) */ ! 630: dszSUB, O_bReg_Modrm, /* 2A SUB reg, mem/reg (byte) */ ! 631: dszSUB, O_Reg_Modrm, /* 2B SUB reg, mem/reg (word) */ ! 632: dszSUB, O_AL_Ib, /* 2C SUB AL, I */ ! 633: dszSUB, O_AX_Iv, /* 2D SUB AX, I */ ! 634: dszCS_, O_SEG_OVERRIDE, /* 2E SEG CS: */ ! 635: dszDAS, O_NoOperands, /* 2F DAS */ ! 636: dszXOR, O_bModrm_Reg, /* 30 XOR mem/reg, reg (byte) */ ! 637: dszXOR, O_Modrm_Reg, /* 31 XOR mem/reg, reg (word) */ ! 638: dszXOR, O_bReg_Modrm, /* 32 XOR reg, mem/reg (byte) */ ! 639: dszXOR, O_Reg_Modrm, /* 33 XOR reg, mem/reg (word) */ ! 640: dszXOR, O_AL_Ib, /* 34 XOR AL, I */ ! 641: dszXOR, O_AX_Iv, /* 35 XOR AX, I */ ! 642: dszSS_, O_SEG_OVERRIDE, /* 36 SEG SS: */ ! 643: dszAAA, O_NoOperands, /* 37 AAA */ ! 644: dszCMP, O_bModrm_Reg, /* 38 CMP mem/reg, reg (byte) */ ! 645: dszCMP, O_Modrm_Reg, /* 39 CMP mem/reg, reg (word) */ ! 646: dszCMP, O_bReg_Modrm, /* 3A CMP reg, mem/reg (byte) */ ! 647: dszCMP, O_Reg_Modrm, /* 3B CMP reg, mem/reg (word) */ ! 648: dszCMP, O_AL_Ib, /* 3C CMP AL, I */ ! 649: dszCMP, O_AX_Iv, /* 3D CMP AX, I */ ! 650: dszDS_, O_SEG_OVERRIDE, /* 3E SEG DS: */ ! 651: dszAAS, O_NoOperands, /* 3F AAS */ ! 652: dszINC, O_oReg, /* 40 INC AX */ ! 653: dszINC, O_oReg, /* 41 INC CX */ ! 654: dszINC, O_oReg, /* 42 INC DX */ ! 655: dszINC, O_oReg, /* 43 INC BX */ ! 656: dszINC, O_oReg, /* 44 INC SP */ ! 657: dszINC, O_oReg, /* 45 INC BP */ ! 658: dszINC, O_oReg, /* 46 INC SI */ ! 659: dszINC, O_oReg, /* 47 INC DI */ ! 660: dszDEC, O_oReg, /* 48 DEC AX */ ! 661: dszDEC, O_oReg, /* 49 DEC CX */ ! 662: dszDEC, O_oReg, /* 4A DEC DX */ ! 663: dszDEC, O_oReg, /* 4B DEC BX */ ! 664: dszDEC, O_oReg, /* 4C DEC SP */ ! 665: dszDEC, O_oReg, /* 4D DEC BP */ ! 666: dszDEC, O_oReg, /* 4E DEC SI */ ! 667: dszDEC, O_oReg, /* 4F DEC DI */ ! 668: dszPUSH, O_oReg, /* 50 PUSH AX */ ! 669: dszPUSH, O_oReg, /* 51 PUSH CX */ ! 670: dszPUSH, O_oReg, /* 52 PUSH DX */ ! 671: dszPUSH, O_oReg, /* 53 PUSH BX */ ! 672: dszPUSH, O_oReg, /* 54 PUSH SP */ ! 673: dszPUSH, O_oReg, /* 55 PUSH BP */ ! 674: dszPUSH, O_oReg, /* 56 PUSH SI */ ! 675: dszPUSH, O_oReg, /* 57 PUSH DI */ ! 676: dszPOP, O_oReg, /* 58 POP AX */ ! 677: dszPOP, O_oReg, /* 59 POP CX */ ! 678: dszPOP, O_oReg, /* 5A POP DX */ ! 679: dszPOP, O_oReg, /* 5B POP BX */ ! 680: dszPOP, O_oReg, /* 5C POP SP */ ! 681: dszPOP, O_oReg, /* 5D POP BP */ ! 682: dszPOP, O_oReg, /* 5E POP SI */ ! 683: dszPOP, O_oReg, /* 5F POP DI */ ! 684: dszPUSHA, O_NoOpAlt5, /* 60 PUSHA (286) / PUSHAD (386) */ ! 685: dszPOPA, O_NoOpAlt4, /* 61 POPA (286) / POPAD (286) */ ! 686: dszBOUND, O_DoBound, /* 62 BOUND reg, Modrm (286) */ ! 687: dszARPL, O_Modrm_Reg, /* 63 ARPL Modrm, reg (286) */ ! 688: dszFS_, O_SEG_OVERRIDE, /* 64 */ ! 689: dszGS_, O_SEG_OVERRIDE, /* 65 */ ! 690: dszOPPRFX,O_OPR_OVERRIDE, /* 66 */ ! 691: dszADDRPRFX,O_ADR_OVERRIDE, /* 67 */ ! 692: dszPUSH, O_Iv, /* 68 PUSH word (286) */ ! 693: dszIMUL, O_Imul, /* 69 IMUL (286) */ ! 694: dszPUSH, O_Ib, /* 6A PUSH byte (286) */ ! 695: dszIMUL, O_Imulb, /* 6B IMUL (286) */ ! 696: dszINSB, O_NoOperands, /* 6C INSB (286) */ ! 697: dszINSW, O_NoOpAlt3, /* 6D INSW (286) / INSD (386) */ ! 698: dszOUTSB, O_NoOperands, /* 6E OUTSB (286) */ ! 699: dszOUTSW, O_NoOpAlt4, /* 6F OUTSW (286) / OUTSD (386) */ ! 700: dszJO, O_Rel8, /* 70 JO */ ! 701: dszJNO, O_Rel8, /* 71 JNO */ ! 702: dszJB, O_Rel8, /* 72 JB or JNAE or JC */ ! 703: dszJNB, O_Rel8, /* 73 JNB or JAE or JNC */ ! 704: dszJZ, O_Rel8, /* 74 JE or JZ */ ! 705: dszJNZ, O_Rel8, /* 75 JNE or JNZ */ ! 706: dszJBE, O_Rel8, /* 76 JBE or JNA */ ! 707: dszJA, O_Rel8, /* 77 JNBE or JA */ ! 708: dszJS, O_Rel8, /* 78 JS */ ! 709: dszJNS, O_Rel8, /* 79 JNS */ ! 710: dszJPE, O_Rel8, /* 7A JP or JPE */ ! 711: dszJPO, O_Rel8, /* 7B JNP or JPO */ ! 712: dszJL, O_Rel8, /* 7C JL or JNGE */ ! 713: dszJGE, O_Rel8, /* 7D JNL or JGE */ ! 714: dszJLE, O_Rel8, /* 7E JLE or JNG */ ! 715: dszJG, O_Rel8, /* 7F JNLE or JG */ ! 716: dszMULTI, O_GROUP11, /* 80 */ ! 717: dszMULTI, O_GROUP12, /* 81 */ ! 718: dszRESERVED, O_DoDB, /* 82 */ ! 719: dszMULTI, O_GROUP13, /* 83 */ ! 720: dszTEST, O_bModrm_Reg, /* 84 TEST reg, mem/reg (byte) */ ! 721: dszTEST, O_Modrm_Reg, /* 85 TEST reg, mem/reg (word) */ ! 722: dszXCHG, O_bModrm_Reg, /* 86 XCHG reg, mem/reg (byte) */ ! 723: dszXCHG, O_Modrm_Reg, /* 87 XCHG reg, mem/reg (word) */ ! 724: dszMOV, O_bModrm_Reg, /* 88 MOV mem/reg, reg (byte) */ ! 725: dszMOV, O_Modrm_Reg, /* 89 MOV mem/reg, reg (word) */ ! 726: dszMOV, O_bReg_Modrm, /* 8A MOV reg, mem/reg (byte) */ ! 727: dszMOV, O_Reg_Modrm, /* 8B MOV reg, mem/reg (word) */ ! 728: dszMOV, O_Modrm_sReg3, /* 8C MOV mem/reg, segreg */ ! 729: dszLEA, O_Reg_Modrm, /* 8D LEA reg, mem */ ! 730: dszMOV, O_sReg3_Modrm, /* 8E MOV segreg, mem/reg */ ! 731: dszPOP, O_Modrm, /* 8F POP mem/reg */ ! 732: dszNOP, O_NoOperands, /* 90 NOP */ ! 733: dszXCHG, O_AX_oReg, /* 91 XCHG AX,CX */ ! 734: dszXCHG, O_AX_oReg, /* 92 XCHG AX,DX */ ! 735: dszXCHG, O_AX_oReg, /* 93 XCHG AX,BX */ ! 736: dszXCHG, O_AX_oReg, /* 94 XCHG AX,SP */ ! 737: dszXCHG, O_AX_oReg, /* 95 XCHG AX,BP */ ! 738: dszXCHG, O_AX_oReg, /* 96 XCHG AX,SI */ ! 739: dszXCHG, O_AX_oReg, /* 97 XCHG AX,DI */ ! 740: dszCBW, O_NoOpAlt0, /* 98 CBW / CWDE (386) */ ! 741: dszCWD, O_NoOpAlt1, /* 99 CWD / CDQ (386) */ ! 742: dszCALL, O_FarPtr, /* 9A CALL seg:off */ ! 743: dszWAIT, O_NoOperands, /* 9B WAIT */ ! 744: dszPUSHF, O_NoOpAlt5, /* 9C PUSHF / PUSHFD (386) */ ! 745: dszPOPF, O_NoOpAlt4, /* 9D POPF / POPFD (386) */ ! 746: dszSAHF, O_NoOperands, /* 9E SAHF */ ! 747: dszLAHF, O_NoOperands, /* 9F LAHF */ ! 748: dszMOV, O_AL_Offs, /* A0 MOV AL, mem */ ! 749: dszMOV, O_AX_Offs, /* A1 MOV AX, mem */ ! 750: dszMOV, O_Offs_AL, /* A2 MOV mem, AL */ ! 751: dszMOV, O_Offs_AX, /* A3 MOV mem, AX */ ! 752: dszMOVSB, O_NoOpStrSIDI, /* A4 MOVSB */ ! 753: dszMOVSW, O_NoOpStrSIDI, /* A5 MOVSW / MOVSD (386) */ ! 754: dszCMPSB, O_NoOpStrSIDI, /* A6 CMPSB */ ! 755: dszCMPSW, O_NoOpStrSIDI, /* A7 CMPSW / CMPSD (386) */ ! 756: dszTEST, O_AL_Ib, /* A8 TEST AL, I */ ! 757: dszTEST, O_AX_Iv, /* A9 TEST AX, I */ ! 758: dszSTOSB, O_NoOpStrDI, /* AA STOSB */ ! 759: dszSTOSW, O_NoOpStrDI, /* AB STOSW / STOSD (386) */ ! 760: dszLODSB, O_NoOpStrSI, /* AC LODSB */ ! 761: dszLODSW, O_NoOpStrSI, /* AD LODSW / LODSD (386) */ ! 762: dszSCASB, O_NoOpStrDI, /* AE SCASB */ ! 763: dszSCASW, O_NoOpStrDI, /* AF SCASW / SCASD (386) */ ! 764: dszMOV, O_oReg_Ib, /* B0 MOV AL, I */ ! 765: dszMOV, O_oReg_Ib, /* B1 MOV CL, I */ ! 766: dszMOV, O_oReg_Ib, /* B2 MOV DL, I */ ! 767: dszMOV, O_oReg_Ib, /* B3 MOV BL, I */ ! 768: dszMOV, O_oReg_Ib, /* B4 MOV AH, I */ ! 769: dszMOV, O_oReg_Ib, /* B5 MOV CH, I */ ! 770: dszMOV, O_oReg_Ib, /* B6 MOV DH, I */ ! 771: dszMOV, O_oReg_Ib, /* B7 MOV BH, I */ ! 772: dszMOV, O_oReg_Iv, /* B8 MOV AX, I */ ! 773: dszMOV, O_oReg_Iv, /* B9 MOV CX, I */ ! 774: dszMOV, O_oReg_Iv, /* BA MOV DX, I */ ! 775: dszMOV, O_oReg_Iv, /* BB MOV BX, I */ ! 776: dszMOV, O_oReg_Iv, /* BC MOV SP, I */ ! 777: dszMOV, O_oReg_Iv, /* BD MOV BP, I */ ! 778: dszMOV, O_oReg_Iv, /* BE MOV SI, I */ ! 779: dszMOV, O_oReg_Iv, /* BF MOV DI, I */ ! 780: dszMULTI, O_GROUP21, /* C0 shifts & rotates (286) */ ! 781: dszMULTI, O_GROUP22, /* C1 shifts & rotates (286) */ ! 782: dszRET, O_Iw, /* C2 RET Rel16 */ ! 783: dszRET, O_NoOperands, /* C3 RET */ ! 784: dszLES, O_fReg_Modrm, /* C4 LES reg, mem */ ! 785: dszLDS, O_fReg_Modrm, /* C5 LDS reg, mem */ ! 786: dszMOV, O_bModrm_Ib, /* C6 MOV mem/reg, I(byte) */ ! 787: dszMOV, O_Modrm_Iv, /* C7 MOV mem/reg, I(word) */ ! 788: dszENTER, O_Enter, /* C8 ENTER (286) */ ! 789: dszLEAVE, O_NoOperands, /* C9 LEAVE (286) */ ! 790: dszRETF, O_Iw, /* CA RETF I(word) */ ! 791: dszRETF, O_NoOperands, /* CB RETF */ ! 792: dszINT, O_DoInt3, /* CC INT 3 */ ! 793: dszINT, O_DoInt, /* CD INT */ ! 794: dszINTO, O_NoOperands, /* CE INTO */ ! 795: dszIRET, O_NoOpAlt4, /* CF IRET / IRETD (386) */ ! 796: dszMULTI, O_GROUP23, /* D0 shifts & rotates,1 (byte) */ ! 797: dszMULTI, O_GROUP24, /* D1 shifts & rotates,1 (word) */ ! 798: dszMULTI, O_GROUP25, /* D2 shifts & rotates,CL (byte) */ ! 799: dszMULTI, O_GROUP26, /* D3 shifts & rotates,CL (word) */ ! 800: dszAAM, O_Ib, /* D4 AAM */ ! 801: dszAAD, O_Ib, /* D5 AAD */ ! 802: dszRESERVED, O_DoDB, /* D6 */ ! 803: dszXLAT, O_NoOperands, /* D7 XLAT */ ! 804: dszMULTI, O_x87_ESC, /* D8 ESC */ ! 805: dszMULTI, O_x87_ESC, /* D9 ESC */ ! 806: dszMULTI, O_x87_ESC, /* DA ESC */ ! 807: dszMULTI, O_x87_ESC, /* DB ESC */ ! 808: dszMULTI, O_x87_ESC, /* DC ESC */ ! 809: dszMULTI, O_x87_ESC, /* DD ESC */ ! 810: dszMULTI, O_x87_ESC, /* DE ESC */ ! 811: dszMULTI, O_x87_ESC, /* DF ESC */ ! 812: dszLOOPNE,O_Rel8, /* E0 LOOPNE or LOOPNZ */ ! 813: dszLOOPE, O_Rel8, /* E1 LOOPE or LOOPZ */ ! 814: dszLOOP, O_Rel8, /* E2 LOOP */ ! 815: dszJCXZ, O_Rel8, /* E3 JCXZ / JECXZ (386) */ ! 816: dszIN, O_AL_Ubyte, /* E4 IN AL, I */ ! 817: dszIN, O_AX_Ubyte, /* E5 IN AX, I */ ! 818: dszOUT, O_Ubyte_AL, /* E6 OUT I, AL */ ! 819: dszOUT, O_Ubyte_AX, /* E7 OUT I, AX */ ! 820: dszCALL, O_Rel16, /* E8 CALL Rel16 */ ! 821: dszJMP, O_Rel16, /* E9 JMP Rel16 */ ! 822: dszJMP, O_FarPtr, /* EA JMP seg:off */ ! 823: dszJMP, O_Rel8, /* EB JMP Rel8 */ ! 824: dszIN, O_DoInAL, /* EC IN AL, DX */ ! 825: dszIN, O_DoInAX, /* ED IN AX, DX */ ! 826: dszOUT, O_DoOutAL, /* EE OUT DX, AL */ ! 827: dszOUT, O_DoOutAX, /* EF OUT DX, AX */ ! 828: dszLOCK, O_DoRep, /* F0 LOCK */ ! 829: dszRESERVED, O_DoDB, /* F1 */ ! 830: dszREPNE, O_DoRep, /* F2 REPNE or REPNZ */ ! 831: dszREP, O_DoRep, /* F3 REP or REPE or REPZ */ ! 832: dszHLT, O_NoOperands, /* F4 HLT */ ! 833: dszCMC, O_NoOperands, /* F5 CMC */ ! 834: dszMULTI, O_GROUP31, /* F6 TEST, NOT, NEG, MUL, IMUL, */ ! 835: dszMULTI, O_GROUP32, /* F7 DIv, IDIv F6=Byte F7=Word */ ! 836: dszCLC, O_NoOperands, /* F8 CLC */ ! 837: dszSTC, O_NoOperands, /* F9 STC */ ! 838: dszCLI, O_NoOperands, /* FA CLI */ ! 839: dszSTI, O_NoOperands, /* FB STI */ ! 840: dszCLD, O_NoOperands, /* FC CLD */ ! 841: dszSTD, O_NoOperands, /* FD STD */ ! 842: dszMULTI, O_GROUP4, /* FE INC, DEC mem/reg (byte) */ ! 843: dszMULTI, O_GROUP5, /* FF INC, DEC, CALL, JMP, PUSH */ ! 844: ! 845: dszMULTI, O_GROUP6, /* 0 MULTI */ ! 846: dszMULTI, O_GROUP7, /* 1 MULTI */ ! 847: dszLAR, O_Reg_Modrm, /* 2 LAR */ ! 848: dszLSL, O_Reg_Modrm, /* 3 LSL */ ! 849: dszRESERVED, O_DoDB, /* 4 */ ! 850: dszLOADALL, O_NoOperands, /* 5 LOADALL */ ! 851: dszCLTS, O_NoOperands, /* 6 CLTS */ ! 852: dszMOV, O_Modrm_CReg, /* 20 MOV Rd,Cd */ ! 853: dszMOV, O_Modrm_CReg, /* 21 MOV Rd,Dd */ ! 854: dszMOV, O_CReg_Modrm, /* 22 MOV Cd,Rd */ ! 855: dszMOV, O_CReg_Modrm, /* 23 MOV Dd,Rd */ ! 856: dszMOV, O_Modrm_CReg, /* 24 MOV Rd,Td */ ! 857: dszRESERVED, O_DoDB, /* 25 */ ! 858: dszMOV, O_CReg_Modrm, /* 26 MOV Td,Rd */ ! 859: ! 860: dszWRMSR, O_NoOperands, /* 30 WRMSR */ ! 861: dszRDTSC, O_NoOperands, /* 31 RDTSC */ ! 862: dszRDMSR, O_NoOperands, /* 32 RDMSR */ ! 863: ! 864: dszSETNL, O_bModrm, /* 7D SETNL */ ! 865: dszRESERVED, O_DoDB, /* 7E */ ! 866: dszRESERVED, O_DoDB, /* 7F */ ! 867: dszJO, O_Rel16, /* 80 JO */ ! 868: dszJNO, O_Rel16, /* 81 JNO */ ! 869: dszJB, O_Rel16, /* 82 JB */ ! 870: dszJNB, O_Rel16, /* 83 JNB */ ! 871: dszJE, O_Rel16, /* 84 JE */ ! 872: dszJNE, O_Rel16, /* 85 JNE */ ! 873: dszJBE, O_Rel16, /* 86 JBE */ ! 874: dszJNBE, O_Rel16, /* 87 JNBE */ ! 875: dszJS, O_Rel16, /* 88 JS */ ! 876: dszJNS, O_Rel16, /* 89 JNS */ ! 877: dszJP, O_Rel16, /* 8A JP */ ! 878: dszJNP, O_Rel16, /* 8B JNP */ ! 879: dszJL, O_Rel16, /* 8C JL */ ! 880: dszJNL, O_Rel16, /* 8D JNL */ ! 881: dszJLE, O_Rel16, /* 8E JLE */ ! 882: dszJNLE, O_Rel16, /* 8F JNLE */ ! 883: dszSETO, O_bModrm, /* 90 SETO */ ! 884: dszSETNO, O_bModrm, /* 91 SETNO */ ! 885: dszSETB, O_bModrm, /* 92 SETB */ ! 886: dszSETNB, O_bModrm, /* 93 SETNB */ ! 887: dszSETE, O_bModrm, /* 94 SETE */ ! 888: dszSETNE, O_bModrm, /* 95 SETNE */ ! 889: dszSETBE, O_bModrm, /* 96 SETBE */ ! 890: dszSETA, O_bModrm, /* 97 SETNBE */ ! 891: dszSETS, O_bModrm, /* 98 SETS */ ! 892: dszSETNS, O_bModrm, /* 99 SETNS */ ! 893: dszSETP, O_bModrm, /* 9A SETP */ ! 894: dszSETNP, O_bModrm, /* 9B SETNP */ ! 895: dszSETL, O_bModrm, /* 9C SETL */ ! 896: dszSETGE, O_bModrm, /* 9D SETGE */ ! 897: dszSETLE, O_bModrm, /* 9E SETLE */ ! 898: dszSETNLE,O_bModrm, /* 9F SETNLE */ ! 899: dszPUSH, O_sReg2, /* A0 PUSH FS */ ! 900: dszPOP, O_sReg2, /* A1 POP FS */ ! 901: dszCPUID, O_NoOperands, /* A2 CPUID */ ! 902: dszBT, O_Modrm_Reg, /* A3 BT */ ! 903: dszSHLD, O_Modrm_Reg_Ib, /* A4 SHLD */ ! 904: dszSHLD, O_Modrm_Reg_CL, /* A5 SHLD */ ! 905: dszCMPXCHG,O_bModrm_Reg, /* A6 XBTS */ ! 906: dszCMPXCHG,O_Modrm_Reg, /* A7 IBTS */ ! 907: dszPUSH, O_sReg2, /* A8 PUSH GS */ ! 908: dszPOP, O_sReg2, /* A9 POP GS */ ! 909: dszRSM, O_NoOperands, /* AA RSM */ ! 910: dszBTS, O_vModrm_Reg, /* AB BTS */ ! 911: dszSHRD, O_Modrm_Reg_Ib, /* AC SHRD */ ! 912: dszSHRD, O_Modrm_Reg_CL, /* AD SHRD */ ! 913: dszRESERVED, O_DoDB, /* AE */ ! 914: dszIMUL, O_Reg_Modrm, /* AF IMUL */ ! 915: dszRESERVED, O_DoDB, /* B0 */ ! 916: dszRESERVED, O_DoDB, /* B1 */ ! 917: dszLSS, O_fReg_Modrm, /* B2 LSS */ ! 918: dszBTR, O_Modrm_Reg, /* B3 BTR */ ! 919: dszLFS, O_fReg_Modrm, /* B4 LFS */ ! 920: dszLGS, O_fReg_Modrm, /* B5 LGS */ ! 921: dszMOVZX, O_Reg_bModrm, /* B6 MOVZX */ ! 922: dszMOVZX, O_Reg_wModrm, /* B7 MOVZX */ ! 923: dszRESERVED, O_DoDB, /* B8 */ ! 924: dszRESERVED, O_DoDB, /* B9 */ ! 925: dszMULTI, O_GROUP8, /* BA MULTI */ ! 926: dszBTC, O_Modrm_Reg, /* BB BTC */ ! 927: dszBSF, O_Reg_Modrm, /* BC BSF */ ! 928: dszBSR, O_Reg_Modrm, /* BD BSR */ ! 929: dszMOVSX, O_Reg_bModrm, /* BE MOVSX */ ! 930: dszMOVSX, O_Reg_wModrm, /* BF MOVSX */ ! 931: dszXADD, O_bModrm_Reg, /* C0 XADD */ ! 932: dszXADD, O_Modrm_Reg, /* C1 XADD */ ! 933: dszRESERVED, O_DoDB, /* C2 */ ! 934: dszRESERVED, O_DoDB, /* C3 */ ! 935: dszRESERVED, O_DoDB, /* C4 */ ! 936: dszRESERVED, O_DoDB, /* C5 */ ! 937: dszRESERVED, O_DoDB, /* C6 */ ! 938: dszCMPXCHG8B, O_qModrm, /* C7 CMPXCHG8B */ ! 939: dszBSWAP, O_oReg, /* C8 BSWAP */ ! 940: dszBSWAP, O_oReg, /* C9 BSWAP */ ! 941: dszBSWAP, O_oReg, /* CA BSWAP */ ! 942: dszBSWAP, O_oReg, /* CB BSWAP */ ! 943: dszBSWAP, O_oReg, /* CC BSWAP */ ! 944: dszBSWAP, O_oReg, /* CD BSWAP */ ! 945: dszBSWAP, O_oReg, /* CE BSWAP */ ! 946: dszBSWAP, O_oReg /* CF BSWAP */ ! 947: }; ! 948: ! 949: /* Auxilary lists of mnemonics for groups of two byte instructions: */ ! 950: /* All of the instructions within each of these groups are of the same */ ! 951: /* class, so only the mnemonic string is needed, the index into the */ ! 952: /* action table is implicit. */ ! 953: ! 954: static char *group[][8] = { ! 955: ! 956: /* 00 */ {dszADD, dszOR, dszADC, dszSBB, /* group 1 */ ! 957: dszAND, dszSUB, dszXOR, dszCMP}, ! 958: ! 959: /* 01 */ {dszROL, dszROR, dszRCL, dszRCR, /* group 2 */ ! 960: dszSHL, dszSHR, dszRESERVED, dszSAR}, ! 961: ! 962: /* 02 */ {dszINC, dszDEC, dszRESERVED, dszRESERVED, /* group 4 */ ! 963: dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED}, ! 964: ! 965: /* 03 */ {dszSLDT, dszSTR, dszLLDT, dszLTR, /* group 6 */ ! 966: dszVERR, dszVERW, dszRESERVED, dszRESERVED}, ! 967: ! 968: /* 04 */ {dszRESERVED, dszRESERVED, dszRESERVED, dszRESERVED, /* group 8 */ ! 969: dszBT, dszBTS, dszBTR, dszBTC} ! 970: ! 971: }; ! 972: ! 973: /* Auxilary orderd pairs for groups of two byte instructions structured */ ! 974: /* the same was as distbl above. */ ! 975: ! 976: static Tdistbl groupt[][8] = { ! 977: ! 978: /* 00 00 x87-D8-1 */ ! 979: { dszFADD, O_dModrm, /* D8-0 FADD */ ! 980: dszFMUL, O_dModrm, /* D8-1 FMUL */ ! 981: dszFCOM, O_dModrm, /* D8-2 FCOM */ ! 982: dszFCOMP, O_dModrm, /* D8-3 FCOMP */ ! 983: dszFSUB, O_dModrm, /* D8-4 FSUB */ ! 984: dszFSUBR, O_dModrm, /* D8-5 FSUBR */ ! 985: dszFDIV, O_dModrm, /* D8-6 FDIV */ ! 986: dszFDIVR, O_dModrm }, /* D8-7 FDIVR */ ! 987: ! 988: /* 01 x87-D8-2 */ ! 989: { dszFADD, O_ST_iST, /* D8-0 FADD */ ! 990: dszFMUL, O_ST_iST, /* D8-1 FMUL */ ! 991: dszFCOM, O_iST, /* D8-2 FCOM */ ! 992: dszFCOMP, O_iST, /* D8-3 FCOMP */ ! 993: dszFSUB, O_ST_iST, /* D8-4 FSUB */ ! 994: dszFSUBR, O_ST_iST, /* D8-5 FSUBR */ ! 995: dszFDIV, O_ST_iST, /* D8-6 FDIV */ ! 996: dszFDIVR, O_ST_iST }, /* D8-7 FDIVR */ ! 997: ! 998: /* 02 01 x87-D9-1 */ ! 999: { dszFLD, O_dModrm, /* D9-0 FLD */ ! 1000: dszRESERVED, O_DoDB, /* D9-1 */ ! 1001: dszFST, O_dModrm, /* D9-2 FST */ ! 1002: dszFSTP, O_dModrm, /* D9-3 FSTP */ ! 1003: dszFLDENV, O_Modrm, /* D9-4 FLDENV */ ! 1004: dszFLDCW, O_Modrm, /* D9-5 FLDCW */ ! 1005: dszFSTENV, O_Modrm, /* D9-6 FSTENV */ ! 1006: dszFSTCW, O_Modrm }, /* D9-7 FSTCW */ ! 1007: ! 1008: /* 03 01 x87-D9-2 TTT=0,1,2,3 */ ! 1009: { dszFLD, O_iST, /* D9-0 FLD */ ! 1010: dszFXCH, O_iST, /* D9-1 FXCH */ ! 1011: dszFNOP, O_NoOperands, /* D9-2 FNOP */ ! 1012: dszFSTP, O_iST, /* D9-3 FSTP */ ! 1013: dszRESERVED, O_DoDB, /* D9-4 */ ! 1014: dszRESERVED, O_DoDB, /* D9-5 */ ! 1015: dszRESERVED, O_DoDB, /* D9-6 */ ! 1016: dszRESERVED, O_DoDB }, /* D9-7 */ ! 1017: ! 1018: /* 04 02 x89-DA-1 */ ! 1019: { dszFIADD, O_dModrm, /* DA-0 FIADD */ ! 1020: dszFIMUL, O_dModrm, /* DA-1 FIMUL */ ! 1021: dszFICOM, O_dModrm, /* DA-2 FICOM */ ! 1022: dszFICOMP, O_dModrm, /* DA-3 FICOMP */ ! 1023: dszFISUB, O_dModrm, /* DA-4 FISUB */ ! 1024: dszFISUBR, O_dModrm, /* DA-5 FISUBR */ ! 1025: dszFIDIV, O_dModrm, /* DA-6 FIDIV */ ! 1026: dszFIDIVR, O_dModrm }, /* DA-7 FIDIVR */ ! 1027: ! 1028: /* 05 x87-DA-2 */ ! 1029: { dszRESERVED, O_DoDB, /* DA-0 */ ! 1030: dszRESERVED, O_DoDB, /* DA-1 */ ! 1031: dszRESERVED, O_DoDB, /* DA-2 */ ! 1032: dszRESERVED, O_DoDB, /* DA-3 */ ! 1033: dszRESERVED, O_DoDB, /* DA-4 */ ! 1034: dszFUCOMPP, O_NoOperands, /* DA-5 */ ! 1035: dszRESERVED, O_DoDB, /* DA-6 */ ! 1036: dszRESERVED, O_DoDB }, /* DA-7 */ ! 1037: ! 1038: /* 06 03 x87-DB-1 */ ! 1039: { dszFILD, O_dModrm, /* DB-0 FILD */ ! 1040: dszRESERVED, O_DoDB, /* DB-1 */ ! 1041: dszFIST, O_dModrm, /* DB-2 FIST */ ! 1042: dszFISTP, O_dModrm, /* DB-3 FISTP */ ! 1043: dszRESERVED, O_DoDB, /* DB-4 */ ! 1044: dszFLD, O_tModrm, /* DB-5 FLD */ ! 1045: dszRESERVED, O_DoDB, /* DB-6 */ ! 1046: dszFSTP, O_tModrm }, /* DB-7 FSTP */ ! 1047: ! 1048: /* 07 x87-DB-2 ttt=4 */ ! 1049: { dszFENI, O_NoOperands, /* DB-0 FENI */ ! 1050: dszFDISI, O_NoOperands, /* DB-1 FDISI */ ! 1051: dszFCLEX, O_NoOperands, /* DB-2 FCLEX */ ! 1052: dszFINIT, O_NoOperands, /* DB-3 FINIT */ ! 1053: dszFSETPM, O_DoDB, /* DB-4 FSETPM */ ! 1054: dszRESERVED, O_DoDB, /* DB-5 */ ! 1055: dszRESERVED, O_DoDB, /* DB-6 */ ! 1056: dszRESERVED, O_DoDB }, /* DB-7 */ ! 1057: ! 1058: /* 08 04 x87-DC-1 */ ! 1059: { dszFADD, O_qModrm, /* DC-0 FADD */ ! 1060: dszFMUL, O_qModrm, /* DC-1 FMUL */ ! 1061: dszFCOM, O_qModrm, /* DC-2 FCOM */ ! 1062: dszFCOMP, O_qModrm, /* DC-3 FCOMP */ ! 1063: dszFSUB, O_qModrm, /* DC-4 FSUB */ ! 1064: dszFSUBR, O_qModrm, /* DC-5 FSUBR */ ! 1065: dszFDIV, O_qModrm, /* DC-6 FDIV */ ! 1066: dszFDIVR, O_qModrm }, /* DC-7 FDIVR */ ! 1067: ! 1068: /* 09 x87-DC-2 */ ! 1069: { dszFADD, O_iST_ST, /* DC-0 FADD */ ! 1070: dszFMUL, O_iST_ST, /* DC-1 FMUL */ ! 1071: dszFCOM, O_iST, /* DC-2 FCOM */ ! 1072: dszFCOMP, O_iST, /* DC-3 FCOMP */ ! 1073: dszFSUB, O_iST_ST, /* DC-4 FSUB */ ! 1074: dszFSUBR, O_iST_ST, /* DC-5 FSUBR */ ! 1075: dszFDIV, O_iST_ST, /* DC-6 FDIVR */ ! 1076: dszFDIVR, O_iST_ST }, /* DC-7 FDIV */ ! 1077: ! 1078: /* 10 05 x87-DD-1 */ ! 1079: { dszFLD, O_qModrm, /* DD-0 FLD */ ! 1080: dszRESERVED, O_DoDB, /* DD-1 */ ! 1081: dszFST, O_qModrm, /* DD-2 FST */ ! 1082: dszFSTP, O_qModrm, /* DD-3 FSTP */ ! 1083: dszFRSTOR, O_Modrm, /* DD-4 FRSTOR */ ! 1084: dszRESERVED, O_DoDB, /* DD-5 */ ! 1085: dszFSAVE, O_Modrm, /* DD-6 FSAVE */ ! 1086: dszFSTSW, O_Modrm }, /* DD-7 FSTSW */ ! 1087: ! 1088: /* 11 x87-DD-2 */ ! 1089: { dszFFREE, O_iST, /* DD-0 FFREE */ ! 1090: dszFXCH, O_iST, /* DD-1 FXCH */ ! 1091: dszFST, O_iST, /* DD-2 FST */ ! 1092: dszFSTP, O_iST, /* DD-3 FSTP */ ! 1093: dszFUCOM, O_iST, /* DD-4 FUCOM */ ! 1094: dszFUCOMP, O_iST, /* DD-5 FUCOMP */ ! 1095: dszRESERVED, O_DoDB, /* DD-6 */ ! 1096: dszRESERVED, O_DoDB }, /* DD-7 */ ! 1097: ! 1098: /* 12 06 x87-DE-1 */ ! 1099: { dszFIADD, O_wModrm, /* DE-0 FIADD */ ! 1100: dszFIMUL, O_wModrm, /* DE-1 FIMUL */ ! 1101: dszFICOM, O_wModrm, /* DE-2 FICOM */ ! 1102: dszFICOMP, O_wModrm, /* DE-3 FICOMP */ ! 1103: dszFISUB, O_wModrm, /* DE-4 FISUB */ ! 1104: dszFISUBR, O_wModrm, /* DE-5 FISUBR */ ! 1105: dszFIDIV, O_wModrm, /* DE-6 FIDIV */ ! 1106: dszFIDIVR, O_wModrm }, /* DE-7 FIDIVR */ ! 1107: ! 1108: /* 13 x87-DE-2 */ ! 1109: { dszFADDP, O_iST_ST, /* DE-0 FADDP */ ! 1110: dszFMULP, O_iST_ST, /* DE-1 FMULP */ ! 1111: dszFCOMP, O_iST, /* DE-2 FCOMP */ ! 1112: dszFCOMPP, O_NoOperands, /* DE-3 FCOMPP */ ! 1113: dszFSUBP, O_iST_ST, /* DE-4 FSUBP */ ! 1114: dszFSUBRP, O_iST_ST, /* DE-5 FSUBRP */ ! 1115: dszFDIVP, O_iST_ST, /* DE-6 FDIVP */ ! 1116: dszFDIVRP, O_iST_ST }, /* DE-7 FDIVRP */ ! 1117: ! 1118: /* 14 07 x87-DF-1 */ ! 1119: { dszFILD, O_wModrm, /* DF-0 FILD */ ! 1120: dszRESERVED, O_DoDB, /* DF-1 */ ! 1121: dszFIST, O_wModrm, /* DF-2 FIST */ ! 1122: dszFISTP, O_wModrm, /* DF-3 FISTP */ ! 1123: dszFBLD, O_tModrm, /* DF-4 FBLD */ ! 1124: dszFILD, O_qModrm, /* DF-5 FILD */ ! 1125: dszFBSTP, O_tModrm, /* DF-6 FBSTP */ ! 1126: dszFISTP, O_qModrm }, /* DF-7 FISTP */ ! 1127: ! 1128: /* 15 x87-DF-2 */ ! 1129: { dszFFREE, O_iST, /* DF-0 FFREE */ ! 1130: dszFXCH, O_iST, /* DF-1 FXCH */ ! 1131: dszFST, O_iST, /* DF-2 FST */ ! 1132: dszFSTP, O_iST, /* DF-3 FSTP */ ! 1133: dszFSTSW, O_NoOperands, /* DF-4 FSTSW */ ! 1134: dszRESERVED, O_DoDB, /* DF-5 */ ! 1135: dszRESERVED, O_DoDB, /* DF-6 */ ! 1136: dszRESERVED, O_DoDB }, /* DF-7 */ ! 1137: ! 1138: /* 16 01 x87-D9 Mod=3 TTT=4 */ ! 1139: { dszFCHS, O_NoOperands, /* D9-0 FCHS */ ! 1140: dszFABS, O_NoOperands, /* D9-1 FABS */ ! 1141: dszRESERVED, O_DoDB, /* D9-2 */ ! 1142: dszRESERVED, O_DoDB, /* D9-3 */ ! 1143: dszFTST, O_NoOperands, /* D9-4 FTST */ ! 1144: dszFXAM, O_NoOperands, /* D9-5 FXAM */ ! 1145: dszRESERVED, O_DoDB, /* D9-6 */ ! 1146: dszRESERVED, O_DoDB }, /* D9-7 */ ! 1147: ! 1148: /* 17 01 x87-D9 Mod=3 TTT=5 */ ! 1149: { dszFLD1, O_NoOperands, /* D9-0 FLD1 */ ! 1150: dszFLDL2T, O_NoOperands, /* D9-1 FLDL2T */ ! 1151: dszFLDL2E, O_NoOperands, /* D9-2 FLDL2E */ ! 1152: dszFLDPI, O_NoOperands, /* D9-3 FLDPI */ ! 1153: dszFLDLG2, O_NoOperands, /* D9-4 FLDLG2 */ ! 1154: dszFLDLN2, O_NoOperands, /* D9-5 FLDLN2 */ ! 1155: dszFLDZ, O_NoOperands, /* D9-6 FLDZ */ ! 1156: dszRESERVED, O_DoDB }, /* D9-7 */ ! 1157: ! 1158: /* 18 01 x87-D9 Mod=3 TTT=6 */ ! 1159: { dszF2XM1, O_NoOperands, /* D9-0 F2XM1 */ ! 1160: dszFYL2X, O_NoOperands, /* D9-1 FYL2X */ ! 1161: dszFPTAN, O_NoOperands, /* D9-2 FPTAN */ ! 1162: dszFPATAN, O_NoOperands, /* D9-3 FPATAN */ ! 1163: dszFXTRACT, O_NoOperands, /* D9-4 FXTRACT */ ! 1164: dszFPREM1, O_NoOperands, /* D9-5 FPREM1 */ ! 1165: dszFDECSTP, O_NoOperands, /* D9-6 FDECSTP */ ! 1166: dszFINCSTP, O_NoOperands }, /* D9-7 FINCSTP */ ! 1167: ! 1168: /* 19 01 x87-D9 Mod=3 TTT=7 */ ! 1169: { dszFPREM, O_NoOperands, /* D9-0 FPREM */ ! 1170: dszFYL2XP1, O_NoOperands, /* D9-1 FYL2XP1 */ ! 1171: dszFSQRT, O_NoOperands, /* D9-2 FSQRT */ ! 1172: dszFSINCOS, O_NoOperands, /* D9-3 FSINCOS */ ! 1173: dszFRNDINT, O_NoOperands, /* D9-4 FRNDINT */ ! 1174: dszFSCALE, O_NoOperands, /* D9-5 FSCALE */ ! 1175: dszFSIN, O_NoOperands, /* D9-6 FSIN */ ! 1176: dszFCOS, O_NoOperands }, /* D9-7 FCOS */ ! 1177: ! 1178: /* 20 group 3 */ ! 1179: { dszTEST, O_bModrm_Ib, /* F6-0 TEST */ ! 1180: dszRESERVED, O_DoDB, /* F6-1 */ ! 1181: dszNOT, O_bModrm, /* F6-2 NOT */ ! 1182: dszNEG, O_bModrm, /* F6-3 NEG */ ! 1183: dszMUL, O_bModrm, /* F6-4 MUL */ ! 1184: dszIMUL, O_bModrm, /* F6-5 IMUL */ ! 1185: dszDIV, O_bModrm, /* F6-6 DIV */ ! 1186: dszIDIV, O_bModrm }, /* F6-7 IDIV */ ! 1187: ! 1188: /* 21 group 3 */ ! 1189: { dszTEST, O_vModrm_Iv, /* F7-0 TEST */ ! 1190: dszRESERVED, O_DoDB, /* F7-1 */ ! 1191: dszNOT, O_vModrm, /* F7-2 NOT */ ! 1192: dszNEG, O_vModrm, /* F7-3 NEG */ ! 1193: dszMUL, O_vModrm, /* F7-4 MUL */ ! 1194: dszIMUL, O_vModrm, /* F7-5 IMUL */ ! 1195: dszDIV, O_vModrm, /* F7-6 DIV */ ! 1196: dszIDIV, O_vModrm }, /* F7-7 IDIV */ ! 1197: ! 1198: /* 22 group 5 */ ! 1199: { dszINC, O_vModrm, /* FF-0 INC */ ! 1200: dszDEC, O_vModrm, /* FF-1 DEC */ ! 1201: dszCALL, O_vModrm, /* FF-2 CALL */ ! 1202: dszCALL, O_fModrm, /* FF-3 CALL */ ! 1203: dszJMP, O_vModrm, /* FF-4 JMP */ ! 1204: dszJMP, O_fModrm, /* FF-5 JMP */ ! 1205: dszPUSH, O_vModrm, /* FF-6 PUSH */ ! 1206: dszRESERVED, O_DoDB }, /* FF-7 */ ! 1207: ! 1208: /* 23 group 7 */ ! 1209: { dszSGDT, O_Modrm, /* 0F-0 SGDT */ ! 1210: dszSIDT, O_Modrm, /* 0F-1 SIDT */ ! 1211: dszLGDT, O_Modrm, /* 0F-2 LGDT */ ! 1212: dszLIDT, O_Modrm, /* 0F-3 LIDT */ ! 1213: dszSMSW, O_wModrm, /* 0F-4 MSW */ ! 1214: dszRESERVED, O_DoDB, /* 0F-5 */ ! 1215: dszLMSW, O_wModrm, /* 0F-6 LMSW */ ! 1216: dszRESERVED, O_DoDB } /* 0F-7 */ ! 1217: ! 1218: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.