home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / image / drwatson / disasm.h < prev    next >
Text File  |  1996-07-29  |  63KB  |  1,220 lines

  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,  GROUPP,  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, GROUPP,      0,         LMODRM+COM, IB+END,
  527. /* group1_3    */ VAR+MRM,   GROUPP,      0,         LMODRM+COM, IB+END,
  528. /* group1_2    */ VAR+MRM,   GROUPP,      0,         LMODRM+COM, IV+END,
  529. /* group2_1    */ xBYTE+MRM, GROUPP,      1,         LMODRM+COM, IB+END,
  530. /* group2_2    */ VAR+MRM,   GROUPP,      1,         LMODRM+COM, IB+END,
  531. /* group2_3    */ xBYTE+MRM, GROUPP,      1,         LMODRM+COM, CHR+END, '1',
  532. /* group2_4    */ VAR+MRM,   GROUPP,      1,         LMODRM+COM, CHR+END, '1',
  533. /* group2_5    */ xBYTE+MRM, GROUPP,      1,         LMODRM+COM, BRSTR+END, 1,
  534. /* group2_6    */ VAR+MRM,   GROUPP,      1,         LMODRM+COM, BRSTR+END, 1,
  535. /* group4      */ xBYTE+MRM, GROUPP,      2,         LMODRM+END,
  536. /* group6      */ xWORD+MRM, GROUPP,      3,         LMODRM+END,
  537. /* group8      */ xWORD+MRM, GROUPP,      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.             };
  1219. 
  1220.