Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1375 lines
51 KiB

  1. /*++
  2. Copyright (c) 1994 Microsoft Corporation
  3. Module Name:
  4. data.c
  5. Abstract:
  6. This module contains global data for the x86 bios emulator.
  7. Author:
  8. David N. Cutler (davec) 10-Sep-1994
  9. Environment:
  10. Kernel mode only.
  11. Revision History:
  12. --*/
  13. #include "nthal.h"
  14. #include "emulate.h"
  15. //
  16. // Define emulator initialized variable.
  17. //
  18. BOOLEAN XmEmulatorInitialized = FALSE;
  19. //
  20. // Define emulator context structure.
  21. //
  22. XM_CONTEXT XmContext;
  23. //
  24. // Define operand decode table.
  25. //
  26. // This table contains the execution routine for each of the operand types.
  27. //
  28. // N.B. There is a cross indexing between the operand decode field of the
  29. // opcode control array and the decode table.
  30. //
  31. const POPERAND_DECODE XmOperandDecodeTable[] = {
  32. XmPushPopSegment,
  33. XmPushPopSegment,
  34. XmPushPopSegment,
  35. XmPushPopSegment,
  36. XmPushPopSegment,
  37. XmPushPopSegment,
  38. XmLoadSegment,
  39. XmLoadSegment,
  40. XmLoadSegment,
  41. XmLoadSegment,
  42. XmLoadSegment,
  43. XmLoadSegment,
  44. XmGroup1General,
  45. XmGroup1Immediate,
  46. XmGroup2By1,
  47. XmGroup2ByCL,
  48. XmGroup2ByByte,
  49. XmGroup3General,
  50. XmGroup45General,
  51. XmGroup45General,
  52. XmGroup8BitOffset,
  53. XmOpcodeRegister,
  54. XmLongJump,
  55. XmShortJump,
  56. XmSetccByte,
  57. XmAccumImmediate,
  58. XmAccumRegister,
  59. XmMoveGeneral,
  60. XmMoveImmediate,
  61. XmMoveRegImmediate,
  62. XmSegmentOffset,
  63. XmMoveSegment,
  64. XmMoveXxGeneral,
  65. XmFlagsRegister,
  66. XmPushImmediate,
  67. XmPopGeneral,
  68. XmImulImmediate,
  69. XmStringOperands,
  70. XmEffectiveOffset,
  71. XmImmediateJump,
  72. XmImmediateEnter,
  73. XmGeneralBitOffset,
  74. XmShiftDouble,
  75. XmPortImmediate,
  76. XmPortDX,
  77. XmBitScanGeneral,
  78. XmByteImmediate,
  79. XmXlatOpcode,
  80. XmGeneralRegister,
  81. XmNoOperands,
  82. XmOpcodeEscape,
  83. XmPrefixOpcode
  84. };
  85. //
  86. // Define opcode function table.
  87. //
  88. // This table contains the execution routine for each opcode.
  89. //
  90. // N.B. There is cross indexing between the function index field of the
  91. // opcode control array and the function table. The function index
  92. // in the opcode control array may be the index of the execution
  93. // function, the base index of the execution function, or a switch
  94. // value to be used in selecting the function (i.e., prefix opcodes).
  95. //
  96. const POPCODE_FUNCTION XmOpcodeFunctionTable[] = {
  97. //
  98. // ASCII operators.
  99. //
  100. XmAaaOp,
  101. XmAadOp,
  102. XmAamOp,
  103. XmAasOp,
  104. XmDaaOp,
  105. XmDasOp,
  106. //
  107. // Group 1 operators.
  108. //
  109. XmAddOp,
  110. XmOrOp,
  111. XmAdcOp,
  112. XmSbbOp,
  113. XmAndOp,
  114. XmSubOp,
  115. XmXorOp,
  116. XmCmpOp,
  117. //
  118. // Group 2 operators.
  119. //
  120. XmRolOp,
  121. XmRorOp,
  122. XmRclOp,
  123. XmRcrOp,
  124. XmShlOp,
  125. XmShrOp,
  126. XmIllOp,
  127. XmSarOp,
  128. //
  129. // Group 3 operators.
  130. //
  131. XmTestOp,
  132. XmIllOp,
  133. XmNotOp,
  134. XmNegOp,
  135. XmMulOp,
  136. XmImulxOp,
  137. XmDivOp,
  138. XmIdivOp,
  139. //
  140. // Group 4 and 5 operators.
  141. //
  142. XmIncOp,
  143. XmDecOp,
  144. XmCallOp,
  145. XmCallOp,
  146. XmJmpOp,
  147. XmJmpOp,
  148. XmPushOp,
  149. XmIllOp,
  150. //
  151. // Group 8 operators.
  152. //
  153. XmBtOp,
  154. XmBtsOp,
  155. XmBtrOp,
  156. XmBtcOp,
  157. //
  158. // Stack push and pop operators.
  159. //
  160. XmPopOp,
  161. XmPushaOp,
  162. XmPopaOp,
  163. //
  164. // Conditional jump operators.
  165. //
  166. XmJxxOp,
  167. XmLoopOp,
  168. XmJcxzOp,
  169. //
  170. // Control operators.
  171. //
  172. XmEnterOp,
  173. XmHltOp,
  174. XmIntOp,
  175. XmIretOp,
  176. XmLeaveOp,
  177. XmRetOp,
  178. //
  179. // Set boolean byte value based on condition.
  180. //
  181. XmSxxOp,
  182. //
  183. // Condition code operators.
  184. //
  185. XmCmcOp,
  186. XmClcOp,
  187. XmStcOp,
  188. XmCliOp,
  189. XmStiOp,
  190. XmCldOp,
  191. XmStdOp,
  192. XmLahfOp,
  193. XmSahfOp,
  194. //
  195. // General move operators.
  196. //
  197. XmMovOp,
  198. XmXchgOp,
  199. //
  200. // Convert operators.
  201. //
  202. XmCbwOp,
  203. XmCwdOp,
  204. //
  205. // Single multiply operator.
  206. //
  207. XmImulOp,
  208. //
  209. // String operators.
  210. //
  211. XmCmpsOp,
  212. XmInsOp,
  213. XmLodsOp,
  214. XmMovsOp,
  215. XmOutsOp,
  216. XmScasOp,
  217. XmStosOp,
  218. //
  219. // Effective address operators.
  220. //
  221. XmBoundOp,
  222. XmMovOp,
  223. //
  224. // Double Shift operators.
  225. //
  226. XmShldOp,
  227. XmShrdOp,
  228. //
  229. // I/O operators.
  230. //
  231. XmInOp,
  232. XmOutOp,
  233. //
  234. // Bit scan operators.
  235. //
  236. XmBsfOp,
  237. XmBsrOp,
  238. //
  239. // Byte swap operators.
  240. //
  241. XmBswapOp,
  242. //
  243. // Add/Compare exchange operators.
  244. //
  245. XmXaddOp,
  246. XmCmpxchgOp,
  247. //
  248. // No operation.
  249. //
  250. XmNopOp,
  251. //
  252. // Illegal opcode.
  253. //
  254. XmIllOp
  255. };
  256. //
  257. // Define opcode control table.
  258. //
  259. // There are two opcode tables which control the emulation of each x86
  260. // opcode. One table is for single byte opcodes and the other is for
  261. // two byte opcodes.
  262. //
  263. const OPCODE_CONTROL XmOpcodeControlTable1[] = {
  264. {X86_ADD_OP, FormatGroup1General}, // 0x00 - add Eb,Gb
  265. {X86_ADD_OP, FormatGroup1General}, // 0x01 - add Ev,Gv
  266. {X86_ADD_OP, FormatGroup1General}, // 0x02 - add Gb,Eb
  267. {X86_ADD_OP, FormatGroup1General}, // 0x03 - add Gv,Ev
  268. {X86_ADD_OP, FormatAccumImmediate}, // 0x04 - add AL,Ib
  269. {X86_ADD_OP, FormatAccumImmediate}, // 0x05 - add eAX,Iv
  270. {X86_PUSH_OP, FormatSegmentES}, // 0x06 - push ES
  271. {X86_POP_OP, FormatSegmentES}, // 0x07 - pop ES
  272. {X86_OR_OP, FormatGroup1General}, // 0x08 - or Eb,Gb
  273. {X86_OR_OP, FormatGroup1General}, // 0x09 - or Ev,Gv
  274. {X86_OR_OP, FormatGroup1General}, // 0x0a - or Gb,Eb
  275. {X86_OR_OP, FormatGroup1General}, // 0x0b - or Gv,Ev
  276. {X86_OR_OP, FormatAccumImmediate}, // 0x0c - or AL,Ib
  277. {X86_OR_OP, FormatAccumImmediate}, // 0x0d - or eAX,Iv
  278. {X86_PUSH_OP, FormatSegmentCS}, // 0x0e - push CS
  279. {0, FormatOpcodeEscape}, // 0x0f - escape:
  280. {X86_ADC_OP, FormatGroup1General}, // 0x10 - adc Eb,Gb
  281. {X86_ADC_OP, FormatGroup1General}, // 0x11 - adc Ev,Gv
  282. {X86_ADC_OP, FormatGroup1General}, // 0x12 - adc Gb,Eb
  283. {X86_ADC_OP, FormatGroup1General}, // 0x13 - adc Gv,Ev
  284. {X86_ADC_OP, FormatAccumImmediate}, // 0x14 - adc AL,Ib
  285. {X86_ADC_OP, FormatAccumImmediate}, // 0x15 - adc eAX,Iv
  286. {X86_PUSH_OP, FormatSegmentSS}, // 0x16 - push SS
  287. {X86_POP_OP, FormatSegmentSS}, // 0x17 - pop SS
  288. {X86_SBB_OP, FormatGroup1General}, // 0x18 - sbb Eb,Gb
  289. {X86_SBB_OP, FormatGroup1General}, // 0x19 - sbb Ev,Gv
  290. {X86_SBB_OP, FormatGroup1General}, // 0x1a - sbb Gb,Eb
  291. {X86_SBB_OP, FormatGroup1General}, // 0x1b - sbb Gv,Ev
  292. {X86_SBB_OP, FormatAccumImmediate}, // 0x1c - sbb AL,Ib
  293. {X86_SBB_OP, FormatAccumImmediate}, // 0x1d - sbb eAX,Iv
  294. {X86_PUSH_OP, FormatSegmentDS}, // 0x1e - push DS
  295. {X86_POP_OP, FormatSegmentDS}, // 0x1f - pop DS
  296. {X86_AND_OP, FormatGroup1General}, // 0x20 - and Eb,Gb
  297. {X86_AND_OP, FormatGroup1General}, // 0x21 - and Ev,Gv
  298. {X86_AND_OP, FormatGroup1General}, // 0x22 - and Gb,Eb
  299. {X86_AND_OP, FormatGroup1General}, // 0x23 - and Gv,Ev
  300. {X86_AND_OP, FormatAccumImmediate}, // 0x24 - and AL,Ib
  301. {X86_AND_OP, FormatAccumImmediate}, // 0x25 - and eAX,Iv
  302. {X86_ES_OP, FormatPrefixOpcode}, // 0x26 - ES:
  303. {X86_DAA_OP, FormatNoOperands}, // 0x27 - daa
  304. {X86_SUB_OP, FormatGroup1General}, // 0x28 - sub Eb,Gb
  305. {X86_SUB_OP, FormatGroup1General}, // 0x29 - sub Ev,Gv
  306. {X86_SUB_OP, FormatGroup1General}, // 0x2a - sub Gb,Eb
  307. {X86_SUB_OP, FormatGroup1General}, // 0x2b - sub Gv,Ev
  308. {X86_SUB_OP, FormatAccumImmediate}, // 0x2c - sub AL,Ib
  309. {X86_SUB_OP, FormatAccumImmediate}, // 0x2d - sub eAX,Iv
  310. {X86_CS_OP, FormatPrefixOpcode}, // 0x2e - CS:
  311. {X86_DAS_OP, FormatNoOperands}, // 0x2f - das
  312. {X86_XOR_OP, FormatGroup1General}, // 0x30 - xor Eb,Gb
  313. {X86_XOR_OP, FormatGroup1General}, // 0x31 - xor Ev,Gv
  314. {X86_XOR_OP, FormatGroup1General}, // 0x32 - xor Gb,Eb
  315. {X86_XOR_OP, FormatGroup1General}, // 0x33 - xor Gv,Ev
  316. {X86_XOR_OP, FormatAccumImmediate}, // 0x34 - xor AL,Ib
  317. {X86_XOR_OP, FormatAccumImmediate}, // 0x35 - xor eAX,Iv
  318. {X86_SS_OP, FormatPrefixOpcode}, // 0x36 - SS:
  319. {X86_AAA_OP, FormatNoOperands}, // 0x37 - aaa
  320. {X86_CMP_OP, FormatGroup1General}, // 0x38 - cmp Eb,Gb
  321. {X86_CMP_OP, FormatGroup1General}, // 0x39 - cmp Ev,Gv
  322. {X86_CMP_OP, FormatGroup1General}, // 0x3a - cmp Gb,Eb
  323. {X86_CMP_OP, FormatGroup1General}, // 0x3b - cmp Gv,Ev
  324. {X86_CMP_OP, FormatAccumImmediate}, // 0x3c - cmp AL,Ib
  325. {X86_CMP_OP, FormatAccumImmediate}, // 0x3d - cmp eAX,Iv
  326. {X86_DS_OP, FormatPrefixOpcode}, // 0x3e - DS:
  327. {X86_AAS_OP, FormatNoOperands}, // 0x3f - aas
  328. {X86_INC_OP, FormatOpcodeRegister}, // 0x40 - inc eAX
  329. {X86_INC_OP, FormatOpcodeRegister}, // 0x41 - inc eCX
  330. {X86_INC_OP, FormatOpcodeRegister}, // 0x42 - inc eDX
  331. {X86_INC_OP, FormatOpcodeRegister}, // 0x43 - inc eBX
  332. {X86_INC_OP, FormatOpcodeRegister}, // 0x44 - inc eSP
  333. {X86_INC_OP, FormatOpcodeRegister}, // 0x45 - inc eBP
  334. {X86_INC_OP, FormatOpcodeRegister}, // 0x46 - inc eSI
  335. {X86_INC_OP, FormatOpcodeRegister}, // 0x47 - inc eDI
  336. {X86_DEC_OP, FormatOpcodeRegister}, // 0x48 - dec eAX
  337. {X86_DEC_OP, FormatOpcodeRegister}, // 0x49 - dec eCX
  338. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4a - dec eDX
  339. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4b - dec eBX
  340. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4c - dec eSP
  341. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4d - dec eBP
  342. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4e - dec eSI
  343. {X86_DEC_OP, FormatOpcodeRegister}, // 0x4f - dec eDI
  344. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x50 - push eAX
  345. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x51 - push eCX
  346. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x52 - push eDX
  347. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x53 - push eBX
  348. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x54 - push eSP
  349. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x55 - push eBP
  350. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x56 - push eSI
  351. {X86_PUSH_OP, FormatOpcodeRegister}, // 0x57 - push eDI
  352. {X86_POP_OP, FormatOpcodeRegister}, // 0x58 - pop eAX
  353. {X86_POP_OP, FormatOpcodeRegister}, // 0x59 - pop eCX
  354. {X86_POP_OP, FormatOpcodeRegister}, // 0x5a - pop eDX
  355. {X86_POP_OP, FormatOpcodeRegister}, // 0x5b - pop eBX
  356. {X86_POP_OP, FormatOpcodeRegister}, // 0x5c - pop eSP
  357. {X86_POP_OP, FormatOpcodeRegister}, // 0x5d - pop eBP
  358. {X86_POP_OP, FormatOpcodeRegister}, // 0x5e - pop eSI
  359. {X86_POP_OP, FormatOpcodeRegister}, // 0x5f - pop eDI
  360. {X86_PUSHA_OP, FormatNoOperands}, // 0x60 - pusha
  361. {X86_POPA_OP, FormatNoOperands}, // 0x61 - popa
  362. {X86_BOUND_OP, FormatEffectiveOffset}, // 0x62 - bound Gv,Ma
  363. {X86_ILL_OP, FormatNoOperands}, // 0x63 - arpl Ew,Rw
  364. {X86_FS_OP, FormatPrefixOpcode}, // 0x64 - FS:
  365. {X86_GS_OP, FormatPrefixOpcode}, // 0x65 - GS:
  366. {X86_OPSZ_OP, FormatPrefixOpcode}, // 0x66 - opsize
  367. {X86_ADSZ_OP, FormatPrefixOpcode}, // 0x67 - opaddr
  368. {X86_PUSH_OP, FormatPushImmediate}, // 0x68 - push iv
  369. {X86_IMUL_OP, FormatImulImmediate}, // 0x69 - imul
  370. {X86_PUSH_OP, FormatPushImmediate}, // 0x6a - push ib
  371. {X86_IMUL_OP, FormatImulImmediate}, // 0x6b - imul
  372. {X86_INS_OP, FormatPortDX}, // 0x6c - insb
  373. {X86_INS_OP, FormatPortDX}, // 0x6d - insw/d
  374. {X86_OUTS_OP, FormatPortDX}, // 0x6e - outsb
  375. {X86_OUTS_OP, FormatPortDX}, // 0x6f - outsw/d
  376. {X86_JXX_OP, FormatShortJump}, // 0x70 - jo jb
  377. {X86_JXX_OP, FormatShortJump}, // 0x71 - jno jb
  378. {X86_JXX_OP, FormatShortJump}, // 0x72 - jb jb
  379. {X86_JXX_OP, FormatShortJump}, // 0x73 - jnb jb
  380. {X86_JXX_OP, FormatShortJump}, // 0x74 - jz jb
  381. {X86_JXX_OP, FormatShortJump}, // 0x75 - jnz jb
  382. {X86_JXX_OP, FormatShortJump}, // 0x76 - jbe jb
  383. {X86_JXX_OP, FormatShortJump}, // 0x77 - jnbe jb
  384. {X86_JXX_OP, FormatShortJump}, // 0x78 - js jb
  385. {X86_JXX_OP, FormatShortJump}, // 0x79 - jns jb
  386. {X86_JXX_OP, FormatShortJump}, // 0x7a - jp jb
  387. {X86_JXX_OP, FormatShortJump}, // 0x7b - jnp jb
  388. {X86_JXX_OP, FormatShortJump}, // 0x7c - jl jb
  389. {X86_JXX_OP, FormatShortJump}, // 0x7d - jnl jb
  390. {X86_JXX_OP, FormatShortJump}, // 0x7e - jle jb
  391. {X86_JXX_OP, FormatShortJump}, // 0x7f - jnle jb
  392. {X86_ADD_OP, FormatGroup1Immediate}, // 0x80 - group1 Eb,Ib
  393. {X86_ADD_OP, FormatGroup1Immediate}, // 0x81 - group1 Ev,Iv
  394. {X86_ILL_OP, FormatNoOperands}, // 0x82 - illegal
  395. {X86_ADD_OP, FormatGroup1Immediate}, // 0x83 - group1 Ev,Ib
  396. {X86_TEST_OP, FormatGroup1General}, // 0x84 - test Eb,Gb
  397. {X86_TEST_OP, FormatGroup1General}, // 0x85 - test Ev,Gv
  398. {X86_XCHG_OP, FormatGroup1General}, // 0x86 - xchg Eb,Gb
  399. {X86_XCHG_OP, FormatGroup1General}, // 0x87 = xchg Ev,Gv
  400. {X86_MOV_OP, FormatMoveGeneral}, // 0x88 - mov Eb,Gb
  401. {X86_MOV_OP, FormatMoveGeneral}, // 0x89 - mov Ev,Gv
  402. {X86_MOV_OP, FormatMoveGeneral}, // 0x8a - mov Gb,Eb
  403. {X86_MOV_OP, FormatMoveGeneral}, // 0x8b - mov Gv,Ev
  404. {X86_MOV_OP, FormatMoveSegment}, // 0x8c - mov Ew,Sw
  405. {X86_LEA_OP, FormatEffectiveOffset}, // 0x8d - lea Gv,Ma
  406. {X86_MOV_OP, FormatMoveSegment}, // 0x8e - mov Sw,Ew
  407. {X86_POP_OP, FormatPopGeneral}, // 0x8f - pop Ev
  408. {X86_NOP_OP, FormatNoOperands}, // 0x90 - nop
  409. {X86_XCHG_OP, FormatAccumRegister}, // 0x91 - xchg eCX,eAX
  410. {X86_XCHG_OP, FormatAccumRegister}, // 0x92 - xchg eDX,eAX
  411. {X86_XCHG_OP, FormatAccumRegister}, // 0x93 - xchg eBX,eAX
  412. {X86_XCHG_OP, FormatAccumRegister}, // 0x94 - xchg eSP,eAX
  413. {X86_XCHG_OP, FormatAccumRegister}, // 0x95 - xchg eBP,eAX
  414. {X86_XCHG_OP, FormatAccumRegister}, // 0x96 - xchg eSI,eAX
  415. {X86_XCHG_OP, FormatAccumRegister}, // 0x97 - xchg eDI,eAX
  416. {X86_CBW_OP, FormatNoOperands}, // 0x98 - cbw
  417. {X86_CWD_OP, FormatNoOperands}, // 0x99 - cwd
  418. {X86_CALL_OP, FormatImmediateJump}, // 0x9a - call Ap
  419. {X86_NOP_OP, FormatNoOperands}, // 0x9b - wait
  420. {X86_PUSH_OP, FormatFlagsRegister}, // 0x9c - pushf
  421. {X86_POP_OP, FormatFlagsRegister}, // 0x9d - popf
  422. {X86_SAHF_OP, FormatNoOperands}, // 0x9e - sahf
  423. {X86_LAHF_OP, FormatNoOperands}, // 0x9f - lahf
  424. {X86_MOV_OP, FormatSegmentOffset}, // 0xa0 - mov AL,Ob
  425. {X86_MOV_OP, FormatSegmentOffset}, // 0xa1 - mov eAX,Ov
  426. {X86_MOV_OP, FormatSegmentOffset}, // 0xa2 - mov Ob,AL
  427. {X86_MOV_OP, FormatSegmentOffset}, // 0xa3 - mov Ov,eAX
  428. {X86_MOVS_OP, FormatStringOperands}, // 0xa4 - movsb
  429. {X86_MOVS_OP, FormatStringOperands}, // 0xa5 - movsw/d
  430. {X86_CMPS_OP, FormatStringOperands}, // 0xa6 - cmpsb
  431. {X86_CMPS_OP, FormatStringOperands}, // 0xa7 - cmpsw/d
  432. {X86_TEST_OP, FormatAccumImmediate}, // 0xa8 - test AL,Ib
  433. {X86_TEST_OP, FormatAccumImmediate}, // 0xa9 - test eAX,Iv
  434. {X86_STOS_OP, FormatStringOperands}, // 0xaa - stosb
  435. {X86_STOS_OP, FormatStringOperands}, // 0xab - stosw/d
  436. {X86_LODS_OP, FormatStringOperands}, // 0xac - lodsb
  437. {X86_LODS_OP, FormatStringOperands}, // 0xad - lodsw.d
  438. {X86_SCAS_OP, FormatStringOperands}, // 0xae - scasb
  439. {X86_SCAS_OP, FormatStringOperands}, // 0xaf - scasw/d
  440. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb0 mov AL,Ib
  441. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb1 mov Cl,Ib
  442. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb2 mov DL,Ib
  443. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb3 mov BL,Ib
  444. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb4 mov AH,Ib
  445. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb5 mov CH,Ib
  446. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb6 mov DH,Ib
  447. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb7 mov BH,Ib
  448. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb8 mov eAX,Iv
  449. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xb9 mov eCX,Iv
  450. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xba mov eDX,Iv
  451. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xbb mov eBX,Iv
  452. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xbc mov eSP,Iv
  453. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xbd mov eBP,Iv
  454. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xbe mov eSI,Iv
  455. {X86_MOV_OP, FormatMoveRegImmediate}, // 0xbf mov eDI,Iv
  456. {X86_ROL_OP, FormatGroup2ByByte}, // 0xc0 - group2 Eb,Ib
  457. {X86_ROL_OP, FormatGroup2ByByte}, // 0xc1 - group2 Ev,Ib
  458. {X86_RET_OP, FormatNoOperands}, // 0xc2 - ret Iw (near)
  459. {X86_RET_OP, FormatNoOperands}, // 0xc3 - ret (near)
  460. {X86_MOV_OP, FormatLoadSegmentES}, // 0xc4 - les Gv,Mp
  461. {X86_MOV_OP, FormatLoadSegmentDS}, // 0xc5 - lds Gv,Mp
  462. {X86_MOV_OP, FormatMoveImmediate}, // 0xc6 - mov Eb,Ib
  463. {X86_MOV_OP, FormatMoveImmediate}, // 0xc7 - mov Ev,Iv
  464. {X86_ENTER_OP, FormatImmediateEnter}, // 0xc8 - enter Iw,Ib
  465. {X86_LEAVE_OP, FormatNoOperands}, // 0xc9 - leave
  466. {X86_RET_OP, FormatNoOperands}, // 0xca - ret Iw (far)
  467. {X86_RET_OP, FormatNoOperands}, // 0xcb - ret (far)
  468. {X86_INT_OP, FormatNoOperands}, // 0xcc - int 3
  469. {X86_INT_OP, FormatByteImmediate}, // 0xcd - int Ib
  470. {X86_INT_OP, FormatNoOperands}, // 0xce - into
  471. {X86_IRET_OP, FormatNoOperands}, // 0xcf - iret
  472. {X86_ROL_OP, FormatGroup2By1}, // 0xd0 - group2 Eb,1
  473. {X86_ROL_OP, FormatGroup2By1}, // 0xd1 - group2 Ev,1
  474. {X86_ROL_OP, FormatGroup2ByCL}, // 0xd2 - group2 Eb,CL
  475. {X86_ROL_OP, FormatGroup2ByCL}, // 0xd3 - group2 Ev,CL
  476. {X86_AAM_OP, FormatByteImmediate}, // 0xd4 - aam
  477. {X86_AAD_OP, FormatByteImmediate}, // 0xd5 - aad
  478. {X86_ILL_OP, FormatNoOperands}, // 0xd6 - illegal
  479. {X86_MOV_OP, FormatXlatOpcode}, // 0xd7 - xlat
  480. {X86_ILL_OP, FormatNoOperands}, // 0xd8 - esc0
  481. {X86_ILL_OP, FormatNoOperands}, // 0xd9 - esc1
  482. {X86_ILL_OP, FormatNoOperands}, // 0xda - esc2
  483. {X86_ILL_OP, FormatNoOperands}, // 0xdb - esc3
  484. {X86_ILL_OP, FormatNoOperands}, // 0xdc - esc4
  485. {X86_ILL_OP, FormatNoOperands}, // 0xdd - esc5
  486. {X86_ILL_OP, FormatNoOperands}, // 0xde - esc6
  487. {X86_ILL_OP, FormatNoOperands}, // 0xdf - esc7
  488. {X86_LOOP_OP, FormatShortJump}, // 0xe0 - loopnz
  489. {X86_LOOP_OP, FormatShortJump}, // 0xe1 - loopz
  490. {X86_LOOP_OP, FormatShortJump}, // 0xe2 - loop
  491. {X86_JCXZ_OP, FormatShortJump}, // 0xe3 - jcxz
  492. {X86_IN_OP, FormatPortImmediate}, // 0xe4 - inb AL,Ib
  493. {X86_IN_OP, FormatPortImmediate}, // 0xe5 - inw/d eAX,Ib
  494. {X86_OUT_OP, FormatPortImmediate}, // 0xe6 - outb Ib,AL
  495. {X86_OUT_OP, FormatPortImmediate}, // 0xe7 - outw/d Ib,eAX
  496. {X86_CALL_OP, FormatLongJump}, // 0xe8 - call Jv
  497. {X86_JMP_OP, FormatLongJump}, // 0xe9 - jmp Jv
  498. {X86_JMP_OP, FormatImmediateJump}, // 0xea - jmp Ap
  499. {X86_JMP_OP, FormatShortJump}, // 0xeb - jmp Jb
  500. {X86_IN_OP, FormatPortDX}, // 0xec - inb AL,DX
  501. {X86_IN_OP, FormatPortDX}, // 0xed - inw/d eAX,DX
  502. {X86_OUT_OP, FormatPortDX}, // 0xee - outb Ib,DX
  503. {X86_OUT_OP, FormatPortDX}, // 0xef - outw/d eAX,DX
  504. {X86_LOCK_OP, FormatPrefixOpcode}, // 0xf0 - lock
  505. {X86_ILL_OP, FormatNoOperands}, // 0xf1 - illegal
  506. {X86_REPNZ_OP, FormatPrefixOpcode}, // 0xf2 - repnz
  507. {X86_REPZ_OP, FormatPrefixOpcode}, // 0xf3 - repz
  508. {X86_HLT_OP, FormatNoOperands}, // 0xf4 - hlt
  509. {X86_CMC_OP, FormatNoOperands}, // 0xf5 - cmc
  510. {X86_TEST_OP, FormatGroup3General}, // 0xf6 - group3 Eb,?
  511. {X86_TEST_OP, FormatGroup3General}, // 0xf7 - group3 Ev,?
  512. {X86_CLC_OP, FormatNoOperands}, // 0xf8 - clc
  513. {X86_STC_OP, FormatNoOperands}, // 0xf9 - stc
  514. {X86_CLI_OP, FormatNoOperands}, // 0xfa - cli
  515. {X86_STI_OP, FormatNoOperands}, // 0xfb - sti
  516. {X86_CLD_OP, FormatNoOperands}, // 0xfc - cld
  517. {X86_STD_OP, FormatNoOperands}, // 0xfd - std
  518. {X86_INC_OP, FormatGroup4General}, // 0xfe - group4 Eb
  519. {X86_INC_OP, FormatGroup5General}, // 0xff - group5 Ev
  520. };
  521. const OPCODE_CONTROL XmOpcodeControlTable2[] = {
  522. {X86_ILL_OP, FormatNoOperands}, // 0x00 - group6
  523. {X86_ILL_OP, FormatNoOperands}, // 0x01 - group7
  524. {X86_ILL_OP, FormatNoOperands}, // 0x02 - lar
  525. {X86_ILL_OP, FormatNoOperands}, // 0x03 - lsl
  526. {X86_ILL_OP, FormatNoOperands}, // 0x04 - illegal
  527. {X86_ILL_OP, FormatNoOperands}, // 0x05 - illegal
  528. {X86_ILL_OP, FormatNoOperands}, // 0x06 - clts
  529. {X86_ILL_OP, FormatNoOperands}, // 0x07 - illegal
  530. {X86_ILL_OP, FormatNoOperands}, // 0x08 - illegal
  531. {X86_ILL_OP, FormatNoOperands}, // 0x09 - illegal
  532. {X86_ILL_OP, FormatNoOperands}, // 0x0a - illegal
  533. {X86_ILL_OP, FormatNoOperands}, // 0x0b - illegal
  534. {X86_ILL_OP, FormatNoOperands}, // 0x0c - illegal
  535. {X86_ILL_OP, FormatNoOperands}, // 0x0d - illegal
  536. {X86_ILL_OP, FormatNoOperands}, // 0x0e - illegal
  537. {X86_ILL_OP, FormatNoOperands}, // 0x0f - illegal
  538. {X86_ILL_OP, FormatNoOperands}, // 0x10 - illegal
  539. {X86_ILL_OP, FormatNoOperands}, // 0x11 - illegal
  540. {X86_ILL_OP, FormatNoOperands}, // 0x12 - illegal
  541. {X86_ILL_OP, FormatNoOperands}, // 0x13 - illegal
  542. {X86_ILL_OP, FormatNoOperands}, // 0x14 - illegal
  543. {X86_ILL_OP, FormatNoOperands}, // 0x15 - illegal
  544. {X86_ILL_OP, FormatNoOperands}, // 0x16 - illegal
  545. {X86_ILL_OP, FormatNoOperands}, // 0x17 - illegal
  546. {X86_ILL_OP, FormatNoOperands}, // 0x18 - illegal
  547. {X86_ILL_OP, FormatNoOperands}, // 0x19 - illegal
  548. {X86_ILL_OP, FormatNoOperands}, // 0x1a - illegal
  549. {X86_ILL_OP, FormatNoOperands}, // 0x1b - illegal
  550. {X86_ILL_OP, FormatNoOperands}, // 0x1c - illegal
  551. {X86_ILL_OP, FormatNoOperands}, // 0x1d - illegal
  552. {X86_ILL_OP, FormatNoOperands}, // 0x1e - illegal
  553. {X86_ILL_OP, FormatNoOperands}, // 0x1f - illegal
  554. {X86_ILL_OP, FormatNoOperands}, // 0x20 - illegal
  555. {X86_ILL_OP, FormatNoOperands}, // 0x21 - illegal
  556. {X86_ILL_OP, FormatNoOperands}, // 0x22 - illegal
  557. {X86_ILL_OP, FormatNoOperands}, // 0x23 - illegal
  558. {X86_ILL_OP, FormatNoOperands}, // 0x34 - illegal
  559. {X86_ILL_OP, FormatNoOperands}, // 0x25 - illegal
  560. {X86_ILL_OP, FormatNoOperands}, // 0x26 - illegal
  561. {X86_ILL_OP, FormatNoOperands}, // 0x27 - illegal
  562. {X86_ILL_OP, FormatNoOperands}, // 0x28 - illegal
  563. {X86_ILL_OP, FormatNoOperands}, // 0x29 - illegal
  564. {X86_ILL_OP, FormatNoOperands}, // 0x2a - illegal
  565. {X86_ILL_OP, FormatNoOperands}, // 0x2b - illegal
  566. {X86_ILL_OP, FormatNoOperands}, // 0x2c - illegal
  567. {X86_ILL_OP, FormatNoOperands}, // 0x2d - illegal
  568. {X86_ILL_OP, FormatNoOperands}, // 0x2e - illegal
  569. {X86_ILL_OP, FormatNoOperands}, // 0x2f - illegal
  570. {X86_ILL_OP, FormatNoOperands}, // 0x30 - illegal
  571. {X86_ILL_OP, FormatNoOperands}, // 0x31 - illegal
  572. {X86_ILL_OP, FormatNoOperands}, // 0x32 - illegal
  573. {X86_ILL_OP, FormatNoOperands}, // 0x33 - illegal
  574. {X86_ILL_OP, FormatNoOperands}, // 0x34 - illegal
  575. {X86_ILL_OP, FormatNoOperands}, // 0x35 - illegal
  576. {X86_ILL_OP, FormatNoOperands}, // 0x36 - illegal
  577. {X86_ILL_OP, FormatNoOperands}, // 0x37 - illegal
  578. {X86_ILL_OP, FormatNoOperands}, // 0x38 - illegal
  579. {X86_ILL_OP, FormatNoOperands}, // 0x39 - illegal
  580. {X86_ILL_OP, FormatNoOperands}, // 0x3a - illegal
  581. {X86_ILL_OP, FormatNoOperands}, // 0x3b - illegal
  582. {X86_ILL_OP, FormatNoOperands}, // 0x3c - illegal
  583. {X86_ILL_OP, FormatNoOperands}, // 0x3d - illegal
  584. {X86_ILL_OP, FormatNoOperands}, // 0x3e - illegal
  585. {X86_ILL_OP, FormatNoOperands}, // 0x3f - illegal
  586. {X86_ILL_OP, FormatNoOperands}, // 0x40 - illegal
  587. {X86_ILL_OP, FormatNoOperands}, // 0x41 - illegal
  588. {X86_ILL_OP, FormatNoOperands}, // 0x42 - illegal
  589. {X86_ILL_OP, FormatNoOperands}, // 0x43 - illegal
  590. {X86_ILL_OP, FormatNoOperands}, // 0x44 - illegal
  591. {X86_ILL_OP, FormatNoOperands}, // 0x45 - illegal
  592. {X86_ILL_OP, FormatNoOperands}, // 0x46 - illegal
  593. {X86_ILL_OP, FormatNoOperands}, // 0x47 - illegal
  594. {X86_ILL_OP, FormatNoOperands}, // 0x48 - illegal
  595. {X86_ILL_OP, FormatNoOperands}, // 0x49 - illegal
  596. {X86_ILL_OP, FormatNoOperands}, // 0x4a - illegal
  597. {X86_ILL_OP, FormatNoOperands}, // 0x4b - illegal
  598. {X86_ILL_OP, FormatNoOperands}, // 0x4c - illegal
  599. {X86_ILL_OP, FormatNoOperands}, // 0x4d - illegal
  600. {X86_ILL_OP, FormatNoOperands}, // 0x4e - illegal
  601. {X86_ILL_OP, FormatNoOperands}, // 0x4f - illegal
  602. {X86_ILL_OP, FormatNoOperands}, // 0x50 - illegal
  603. {X86_ILL_OP, FormatNoOperands}, // 0x51 - illegal
  604. {X86_ILL_OP, FormatNoOperands}, // 0x52 - illegal
  605. {X86_ILL_OP, FormatNoOperands}, // 0x53 - illegal
  606. {X86_ILL_OP, FormatNoOperands}, // 0x54 - illegal
  607. {X86_ILL_OP, FormatNoOperands}, // 0x55 - illegal
  608. {X86_ILL_OP, FormatNoOperands}, // 0x56 - illegal
  609. {X86_ILL_OP, FormatNoOperands}, // 0x57 - illegal
  610. {X86_ILL_OP, FormatNoOperands}, // 0x58 - illegal
  611. {X86_ILL_OP, FormatNoOperands}, // 0x59 - illegal
  612. {X86_ILL_OP, FormatNoOperands}, // 0x5a - illegal
  613. {X86_ILL_OP, FormatNoOperands}, // 0x5b - illegal
  614. {X86_ILL_OP, FormatNoOperands}, // 0x5c - illegal
  615. {X86_ILL_OP, FormatNoOperands}, // 0x5d - illegal
  616. {X86_ILL_OP, FormatNoOperands}, // 0x5e - illegal
  617. {X86_ILL_OP, FormatNoOperands}, // 0x5f - illegal
  618. {X86_ILL_OP, FormatNoOperands}, // 0x60 - illegal
  619. {X86_ILL_OP, FormatNoOperands}, // 0x61 - illegal
  620. {X86_ILL_OP, FormatNoOperands}, // 0x62 - illegal
  621. {X86_ILL_OP, FormatNoOperands}, // 0x63 - illegal
  622. {X86_ILL_OP, FormatNoOperands}, // 0x64 - illegal
  623. {X86_ILL_OP, FormatNoOperands}, // 0x65 - illegal
  624. {X86_ILL_OP, FormatNoOperands}, // 0x66 - illegal
  625. {X86_ILL_OP, FormatNoOperands}, // 0x67 - illegal
  626. {X86_ILL_OP, FormatNoOperands}, // 0x68 - illegal
  627. {X86_ILL_OP, FormatNoOperands}, // 0x69 - illegal
  628. {X86_ILL_OP, FormatNoOperands}, // 0x6a - illegal
  629. {X86_ILL_OP, FormatNoOperands}, // 0x6b - illegal
  630. {X86_ILL_OP, FormatNoOperands}, // 0x6c - illegal
  631. {X86_ILL_OP, FormatNoOperands}, // 0x6d - illegal
  632. {X86_ILL_OP, FormatNoOperands}, // 0x6e - illegal
  633. {X86_ILL_OP, FormatNoOperands}, // 0x6f - illegal
  634. {X86_ILL_OP, FormatNoOperands}, // 0x70 - illegal
  635. {X86_ILL_OP, FormatNoOperands}, // 0x71 - illegal
  636. {X86_ILL_OP, FormatNoOperands}, // 0x72 - illegal
  637. {X86_ILL_OP, FormatNoOperands}, // 0x73 - illegal
  638. {X86_ILL_OP, FormatNoOperands}, // 0x74 - illegal
  639. {X86_ILL_OP, FormatNoOperands}, // 0x75 - illegal
  640. {X86_ILL_OP, FormatNoOperands}, // 0x76 - illegal
  641. {X86_ILL_OP, FormatNoOperands}, // 0x77 - illegal
  642. {X86_ILL_OP, FormatNoOperands}, // 0x78 - illegal
  643. {X86_ILL_OP, FormatNoOperands}, // 0x79 - illegal
  644. {X86_ILL_OP, FormatNoOperands}, // 0x7a - illegal
  645. {X86_ILL_OP, FormatNoOperands}, // 0x7b - illegal
  646. {X86_ILL_OP, FormatNoOperands}, // 0x7c - illegal
  647. {X86_ILL_OP, FormatNoOperands}, // 0x7d - illegal
  648. {X86_ILL_OP, FormatNoOperands}, // 0x7e - illegal
  649. {X86_ILL_OP, FormatNoOperands}, // 0x7f - illegal
  650. {X86_JXX_OP, FormatLongJump}, // 0x80 - jo jv
  651. {X86_JXX_OP, FormatLongJump}, // 0x81 - jno jv
  652. {X86_JXX_OP, FormatLongJump}, // 0x82 - jb jv
  653. {X86_JXX_OP, FormatLongJump}, // 0x83 - jnb jv
  654. {X86_JXX_OP, FormatLongJump}, // 0x84 - jz jv
  655. {X86_JXX_OP, FormatLongJump}, // 0x85 - jnz jv
  656. {X86_JXX_OP, FormatLongJump}, // 0x86 - jbe jv
  657. {X86_JXX_OP, FormatLongJump}, // 0x87 - jnbe jv
  658. {X86_JXX_OP, FormatLongJump}, // 0x88 - js jv
  659. {X86_JXX_OP, FormatLongJump}, // 0x89 - jns jv
  660. {X86_JXX_OP, FormatLongJump}, // 0x8a - jp jv
  661. {X86_JXX_OP, FormatLongJump}, // 0x8b - jnp jv
  662. {X86_JXX_OP, FormatLongJump}, // 0x8c - jl jv
  663. {X86_JXX_OP, FormatLongJump}, // 0x8d - jnl jv
  664. {X86_JXX_OP, FormatLongJump}, // 0x8e - jle jv
  665. {X86_JXX_OP, FormatLongJump}, // 0x8f - jnle jv
  666. {X86_SXX_OP, FormatSetccByte}, // 0x90 - seto Eb
  667. {X86_SXX_OP, FormatSetccByte}, // 0x91 - setno Eb
  668. {X86_SXX_OP, FormatSetccByte}, // 0x92 - setb Eb
  669. {X86_SXX_OP, FormatSetccByte}, // 0x93 - setnb Eb
  670. {X86_SXX_OP, FormatSetccByte}, // 0x94 - setz Eb
  671. {X86_SXX_OP, FormatSetccByte}, // 0x95 - setnz Eb
  672. {X86_SXX_OP, FormatSetccByte}, // 0x96 - setbe Eb
  673. {X86_SXX_OP, FormatSetccByte}, // 0x97 - setnbe Eb
  674. {X86_SXX_OP, FormatSetccByte}, // 0x98 - sets Eb
  675. {X86_SXX_OP, FormatSetccByte}, // 0x99 - setns Eb
  676. {X86_SXX_OP, FormatSetccByte}, // 0x9a - setp Eb
  677. {X86_SXX_OP, FormatSetccByte}, // 0x9b - setnp Eb
  678. {X86_SXX_OP, FormatSetccByte}, // 0x9c - setl Eb
  679. {X86_SXX_OP, FormatSetccByte}, // 0x9d - setnl Eb
  680. {X86_SXX_OP, FormatSetccByte}, // 0x9e - setle Eb
  681. {X86_SXX_OP, FormatSetccByte}, // 0x9f - setnle Eb
  682. {X86_PUSH_OP, FormatSegmentFS}, // 0xa0 - push FS
  683. {X86_POP_OP, FormatSegmentFS}, // 0xa1 - pop FS
  684. {X86_ILL_OP, FormatNoOperands}, // 0xa2 - illegal
  685. {X86_BT_OP, FormatGeneralBitOffset}, // 0xa3 - bt Ev,Gv
  686. {X86_SHLD_OP, FormatShiftDouble}, // 0xa4 - shld Ev,Gv,Ib
  687. {X86_SHLD_OP, FormatShiftDouble}, // 0xa5 - shld Ev,Gv,cl
  688. {X86_ILL_OP, FormatNoOperands}, // 0xa6 - illegal
  689. {X86_ILL_OP, FormatNoOperands}, // 0xa6 - illegal
  690. {X86_PUSH_OP, FormatSegmentGS}, // 0xa8 - push GS
  691. {X86_POP_OP, FormatSegmentGS}, // 0xa9 - pop GS
  692. {X86_ILL_OP, FormatNoOperands}, // 0xaa - illegal
  693. {X86_BTS_OP, FormatGeneralBitOffset}, // 0xab - bts Ev,Gv
  694. {X86_SHRD_OP, FormatShiftDouble}, // 0xac - shdr Ev,Gv,Ib
  695. {X86_SHRD_OP, FormatShiftDouble}, // 0xad - shdr Rv,Gv,cl
  696. {X86_ILL_OP, FormatNoOperands}, // 0xae - illegal
  697. {X86_IMUL_OP, FormatGroup1General}, // 0xaf - imul Gv,Ev
  698. {X86_CMPXCHG_OP, FormatGroup1General}, // 0xb0 - cmpxchg Eb,Gb
  699. {X86_CMPXCHG_OP, FormatGroup1General}, // 0xb1 - cmpxchg Ev,Gv
  700. {X86_MOV_OP, FormatLoadSegmentSS}, // 0xb2 - lss Gv,Mp
  701. {X86_BTR_OP, FormatGeneralBitOffset}, // 0xb3 - btr Ev,Gv
  702. {X86_MOV_OP, FormatLoadSegmentFS}, // 0xb4 - lfs Gv,Mp
  703. {X86_MOV_OP, FormatLoadSegmentGS}, // 0xb5 - lgd Gv,Mp
  704. {X86_MOV_OP, FormatMoveXxGeneral}, // 0xb6 - movzb Gv,Eb
  705. {X86_MOV_OP, FormatMoveXxGeneral}, // 0xb7 - movsw Gv,Ew
  706. {X86_ILL_OP, FormatNoOperands}, // 0xb8 - illegal
  707. {X86_ILL_OP, FormatNoOperands}, // 0xb9 - illegal
  708. {X86_BT_OP, FormatGroup8BitOffset}, // 0xba - group8 Ev,Ib
  709. {X86_BTC_OP, FormatGeneralBitOffset}, // 0xbb - btc Ev,Gv
  710. {X86_BSF_OP, FormatBitScanGeneral}, // 0xbc - bsf Gv,Ev
  711. {X86_BSR_OP, FormatBitScanGeneral}, // 0xbd - bsr Gv,Ev
  712. {X86_MOV_OP, FormatMoveXxGeneral}, // 0xbe - movsb Gv,Eb
  713. {X86_MOV_OP, FormatMoveXxGeneral}, // 0xbf - movsw Gv,Ew
  714. {X86_XADD_OP, FormatGroup1General}, // 0xc0 - xadd Eb,Gb
  715. {X86_XADD_OP, FormatGroup1General}, // 0xc1 - xadd Ev,Gv
  716. {X86_ILL_OP, FormatNoOperands}, // 0xc2 - illegal
  717. {X86_ILL_OP, FormatNoOperands}, // 0xc3 - illegal
  718. {X86_ILL_OP, FormatNoOperands}, // 0xc4 - illegal
  719. {X86_ILL_OP, FormatNoOperands}, // 0xc5 - illegal
  720. {X86_ILL_OP, FormatNoOperands}, // 0xc6 - illegal
  721. {X86_ILL_OP, FormatNoOperands}, // 0xc7 - illegal
  722. {X86_BSWAP_OP, FormatGeneralRegister}, // 0xc8 - bswap Gv
  723. {X86_ILL_OP, FormatNoOperands}, // 0xc9 - illegal
  724. {X86_ILL_OP, FormatNoOperands}, // 0xca - illegal
  725. {X86_ILL_OP, FormatNoOperands}, // 0xcb - illegal
  726. {X86_ILL_OP, FormatNoOperands}, // 0xcc - illegal
  727. {X86_ILL_OP, FormatNoOperands}, // 0xcd - illegal
  728. {X86_ILL_OP, FormatNoOperands}, // 0xce - illegal
  729. {X86_ILL_OP, FormatNoOperands}, // 0xcf - illegal
  730. {X86_ILL_OP, FormatNoOperands}, // 0xd0 - illegal
  731. {X86_ILL_OP, FormatNoOperands}, // 0xd1 - illegal
  732. {X86_ILL_OP, FormatNoOperands}, // 0xd2 - illegal
  733. {X86_ILL_OP, FormatNoOperands}, // 0xd3 - illegal
  734. {X86_ILL_OP, FormatNoOperands}, // 0xd4 - illegal
  735. {X86_ILL_OP, FormatNoOperands}, // 0xd5 - illegal
  736. {X86_ILL_OP, FormatNoOperands}, // 0xd6 - illegal
  737. {X86_ILL_OP, FormatNoOperands}, // 0xd7 - illegal
  738. {X86_ILL_OP, FormatNoOperands}, // 0xd8 - illegal
  739. {X86_ILL_OP, FormatNoOperands}, // 0xd9 - illegal
  740. {X86_ILL_OP, FormatNoOperands}, // 0xda - illegal
  741. {X86_ILL_OP, FormatNoOperands}, // 0xdb - illegal
  742. {X86_ILL_OP, FormatNoOperands}, // 0xdc - illegal
  743. {X86_ILL_OP, FormatNoOperands}, // 0xdd - illegal
  744. {X86_ILL_OP, FormatNoOperands}, // 0xde - illegal
  745. {X86_ILL_OP, FormatNoOperands}, // 0xdf - illegal
  746. {X86_ILL_OP, FormatNoOperands}, // 0xe0 - illegal
  747. {X86_ILL_OP, FormatNoOperands}, // 0xe1 - illegal
  748. {X86_ILL_OP, FormatNoOperands}, // 0xe2 - illegal
  749. {X86_ILL_OP, FormatNoOperands}, // 0xe3 - illegal
  750. {X86_ILL_OP, FormatNoOperands}, // 0xe4 - illegal
  751. {X86_ILL_OP, FormatNoOperands}, // 0xe5 - illegal
  752. {X86_ILL_OP, FormatNoOperands}, // 0xe6 - illegal
  753. {X86_ILL_OP, FormatNoOperands}, // 0xe7 - illegal
  754. {X86_ILL_OP, FormatNoOperands}, // 0xe8 - illegal
  755. {X86_ILL_OP, FormatNoOperands}, // 0xe9 - illegal
  756. {X86_ILL_OP, FormatNoOperands}, // 0xea - illegal
  757. {X86_ILL_OP, FormatNoOperands}, // 0xeb - illegal
  758. {X86_ILL_OP, FormatNoOperands}, // 0xec - illegal
  759. {X86_ILL_OP, FormatNoOperands}, // 0xed - illegal
  760. {X86_ILL_OP, FormatNoOperands}, // 0xee - illegal
  761. {X86_ILL_OP, FormatNoOperands}, // 0xef - illegal
  762. {X86_ILL_OP, FormatNoOperands}, // 0xf0 - illegal
  763. {X86_ILL_OP, FormatNoOperands}, // 0xf1 - illegal
  764. {X86_ILL_OP, FormatNoOperands}, // 0xf2 - illegal
  765. {X86_ILL_OP, FormatNoOperands}, // 0xf3 - illegal
  766. {X86_ILL_OP, FormatNoOperands}, // 0xf4 - illegal
  767. {X86_ILL_OP, FormatNoOperands}, // 0xf5 - illegal
  768. {X86_ILL_OP, FormatNoOperands}, // 0xf6 - illegal
  769. {X86_ILL_OP, FormatNoOperands}, // 0xf7 - illegal
  770. {X86_ILL_OP, FormatNoOperands}, // 0xf8 - illegal
  771. {X86_ILL_OP, FormatNoOperands}, // 0xf9 - illegal
  772. {X86_ILL_OP, FormatNoOperands}, // 0xfa - illegal
  773. {X86_ILL_OP, FormatNoOperands}, // 0xfb - illegal
  774. {X86_ILL_OP, FormatNoOperands}, // 0xfc - illegal
  775. {X86_ILL_OP, FormatNoOperands}, // 0xfd - illegal
  776. {X86_ILL_OP, FormatNoOperands}, // 0xfe - illegal
  777. {X86_ILL_OP, FormatNoOperands} // 0xff - illegal
  778. };
  779. //
  780. // Define opcode name tables.
  781. //
  782. #if defined(XM_DEBUG)
  783. const PCHAR XmOpcodeNameTable1[] = {
  784. "add Eb,Gb ", // 0x00
  785. "add Ev,Gv ", // 0x01
  786. "add Gb,Eb ", // 0x02
  787. "add Gv,Ev ", // 0x03
  788. "add AL,Ib ", // 0x04
  789. "add eAX,Iv ", // 0x05
  790. "push ES ", // 0x06
  791. "pop ES ", // 0x07
  792. "or Eb,Gb ", // 0x08
  793. "or Ev,Gv ", // 0x09
  794. "or Gb,Eb ", // 0x0a
  795. "or Gv,Ev ", // 0x0b
  796. "or AL,Ib ", // 0x0c
  797. "or eAX,Iv ", // 0x0d
  798. "push CS ", // 0x0e
  799. "escape: ", // 0x0f
  800. "adc Eb,Gb ", // 0x10
  801. "adc Ev,Gv ", // 0x11
  802. "adc Gb,Eb ", // 0x12
  803. "adc Gv,Ev ", // 0x13
  804. "adc AL,Ib ", // 0x14
  805. "adc eAX,Iv ", // 0x15
  806. "push SS ", // 0x16
  807. "pop SS ", // 0x17
  808. "sbb Eb,Gb ", // 0x18
  809. "sbb Ev,Gv ", // 0x19
  810. "sbb Gb,Eb ", // 0x1a
  811. "sbb Gv,Ev ", // 0x1b
  812. "sbb AL,Ib ", // 0x1c
  813. "sbb eAX,Iv ", // 0x1d
  814. "push DS ", // 0x1e
  815. "pop DS ", // 0x1f
  816. "and Eb,Gb ", // 0x20
  817. "and Ev,Gv ", // 0x21
  818. "and Gb,Eb ", // 0x22
  819. "and Gv,Ev ", // 0x23
  820. "and AL,Ib ", // 0x24
  821. "and eAX,Iv ", // 0x25
  822. "ES: ", // 0x26
  823. "daa ", // 0x27
  824. "sub Eb,Gb ", // 0x28
  825. "sub Ev,Gv ", // 0x29
  826. "sub Gb,Eb ", // 0x2a
  827. "sub Gv,Ev ", // 0x2b
  828. "sub AL,Ib ", // 0x2c
  829. "sub eAX,Iv ", // 0x2d
  830. "CS: ", // 0x2e
  831. "das ", // 0x2f
  832. "xor Eb,Gb ", // 0x30
  833. "xor Ev,Gv ", // 0x31
  834. "xor Gb,Eb ", // 0x32
  835. "xor Gv,Ev ", // 0x33
  836. "xor AL,Ib ", // 0x34
  837. "xor eAX,Iv ", // 0x35
  838. "SS: ", // 0x36
  839. "aaa ", // 0x37
  840. "cmp Eb,Gb ", // 0x38
  841. "cmp Ev,Gv ", // 0x39
  842. "cmp Gb,Eb ", // 0x3a
  843. "cmp Gv,Ev ", // 0x3b
  844. "cmp AL,Ib ", // 0x3c
  845. "cmp eAX,Iv ", // 0x3d
  846. "DS: ", // 0x3e
  847. "aas ", // 0x3f
  848. "inc eAX ", // 0x40
  849. "inc eCX ", // 0x41
  850. "inc eDX ", // 0x42
  851. "inc eBX ", // 0x43
  852. "inc eSP ", // 0x44
  853. "inc eBP ", // 0x45
  854. "inc eSI ", // 0x46
  855. "inc eDI ", // 0x47
  856. "dec eAX ", // 0x48
  857. "dec eCX ", // 0x49
  858. "dec eDX ", // 0x4a
  859. "dec eBX ", // 0x4b
  860. "dec eSP ", // 0x4c
  861. "dec eBP ", // 0x4d
  862. "dec eSI ", // 0x4e
  863. "dec eDI ", // 0x4f
  864. "push eAX ", // 0x50
  865. "push eCX ", // 0x51
  866. "push eDX ", // 0x52
  867. "push eBX ", // 0x53
  868. "push eSP ", // 0x54
  869. "push eBP ", // 0x55
  870. "push eSI ", // 0x56
  871. "push eDI ", // 0x57
  872. "pop eAX ", // 0x58
  873. "pop eCX ", // 0x59
  874. "pop eDX ", // 0x5a
  875. "pop eBX ", // 0x5b
  876. "pop eSP ", // 0x5c
  877. "pop eBP ", // 0x5d
  878. "pop eSI ", // 0x5e
  879. "pop eDI ", // 0x5f
  880. "pusha ", // 0x60
  881. "popa ", // 0x61
  882. "bound Gv,Ma ", // 0x62
  883. "arpl Ew,Rw ", // 0x63
  884. "FS: ", // 0x64
  885. "GS: ", // 0x65
  886. "opsize: ", // 0x66
  887. "opaddr: ", // 0x67
  888. "push Iv ", // 0x68
  889. "imul Gv,Ev,Iv ", // 0x69
  890. "push Ib ", // 0x6a
  891. "imul Gv,Ev,Ib ", // 0x6b
  892. "insb ", // 0x6c
  893. "insw/d ", // 0x6d
  894. "outsb ", // 0x6e
  895. "outsw/d ", // 0x6f
  896. "jo Jb ", // 0x70
  897. "jno Jb ", // 0x71
  898. "jb Jb ", // 0x72
  899. "jnb Jb ", // 0x73
  900. "jz Jb ", // 0x74
  901. "jnz Jb ", // 0x75
  902. "jbe Jb ", // 0x76
  903. "jnbe Jb ", // 0x77
  904. "js Jb ", // 0x78
  905. "jns Jb ", // 0x79
  906. "jp Jb ", // 0x7a
  907. "jnp Jb ", // 0x7b
  908. "jl Jb ", // 0x7c
  909. "jnl Jb ", // 0x7d
  910. "jle Jb ", // 0x7e
  911. "jnle Jb ", // 0x7f
  912. "group1 Eb,Ib ", // 0x80
  913. "group1 Ev,Ib ", // 0x81
  914. "illegal ", // 0x82
  915. "group1 Ev,Ib ", // 0x83
  916. "test Eb,Gb ", // 0x84
  917. "test Ev,Gv ", // 0x85
  918. "xchg Eb,Gb ", // 0x86
  919. "xchg Ev,Gv ", // 0x87
  920. "mov Eb,Gb ", // 0x88
  921. "mov Ev,Gv ", // 0x89
  922. "mov Gb,Eb ", // 0x8a
  923. "mov Gv,Ev ", // 0x8b
  924. "mov Ew,Sw ", // 0x8c
  925. "lea Gv,Ma ", // 0x8d
  926. "mov Sw,Ew ", // 0x8e
  927. "pop Ev ", // 0x8f
  928. "nop ", // 0x90
  929. "xchg eCX,eAX ", // 0x91
  930. "xchg eDX,eAX ", // 0x92
  931. "xchg eBX,eAX ", // 0x93
  932. "xchg eSP,eAX ", // 0x94
  933. "xchg eBP,eAX ", // 0x95
  934. "xchg eSI,eAX ", // 0x96
  935. "xchg eDI,eAX ", // 0x97
  936. "cbw ", // 0x98
  937. "cwd ", // 0x99
  938. "call Ap ", // 0x9a
  939. "wait ", // 0x9b
  940. "pushf ", // 0x9c
  941. "popf ", // 0x9d
  942. "sahf ", // 0x9e
  943. "lahf ", // 0x9f
  944. "mov AL,Ob ", // 0xa0
  945. "mov eAX,Ov ", // 0xa1
  946. "mov Ob,AL ", // 0xa2
  947. "mov Ov,eAX ", // 0xa3
  948. "movsb ", // 0xa4
  949. "movsw/d ", // 0xa5
  950. "cmpsb ", // 0xa6
  951. "cmpsw/d ", // 0xa7
  952. "test AL,Ib ", // 0xa8
  953. "test eAX,Iv ", // 0xa9
  954. "stosb ", // 0xaa
  955. "stosw/d ", // 0xab
  956. "lodsb ", // 0xac
  957. "lodsw/d ", // 0xad
  958. "scasb ", // 0xae
  959. "scasw/d ", // 0xaf
  960. "mov AL,Ib ", // 0xb0
  961. "mov Cl,Ib ", // 0xb1
  962. "mov DL,Ib ", // 0xb2
  963. "mov BL,Ib ", // 0xb3
  964. "mov AH,Ib ", // 0xb4
  965. "mov CH,Ib ", // 0xb5
  966. "mov DH,Ib ", // 0xb6
  967. "mov BH,Ib ", // 0xb7
  968. "mov eAX,Iv ", // 0xb8
  969. "mov eCX,Iv ", // 0xb9
  970. "mov eDX,Iv ", // 0xba
  971. "mov eBX,Iv ", // 0xbb
  972. "mov eSP,Iv ", // 0xbc
  973. "mov eBP,Iv ", // 0xbd
  974. "mov eSI,Iv ", // 0xbe
  975. "mov eDI,Iv ", // 0xbf
  976. "group2 Eb,Ib ", // 0xc0
  977. "group2 Ev,Ib ", // 0xc1
  978. "ret Iw near ", // 0xc2
  979. "ret near ", // 0xc3
  980. "les Gv,Mp ", // 0xc4
  981. "lds Gv,Mp ", // 0xc5
  982. "mov Eb,Ib ", // 0xc6
  983. "mov Ev,Iv ", // 0xc7
  984. "enter Iw,Ib ", // 0xc8
  985. "leave ", // 0xc9
  986. "ret Iw far ", // 0xca
  987. "ret far ", // 0xcb
  988. "int 3 ", // 0xcc
  989. "int Ib ", // 0xcd
  990. "into ", // 0xce
  991. "iret ", // 0xcf
  992. "group2 Eb,1 ", // 0xd0
  993. "group2 Ev,1 ", // 0xd1
  994. "group2 Eb,CL ", // 0xd2
  995. "group2 Ev,Cl ", // 0xd3
  996. "aam ", // 0xd4
  997. "aad ", // 0xd5
  998. "illegal ", // 0xd6
  999. "xlat ", // 0xd7
  1000. "illegal ", // 0xd8
  1001. "illegal ", // 0xd9
  1002. "illegal ", // 0xda
  1003. "illegal ", // 0xdb
  1004. "illegal ", // 0xdc
  1005. "illegal ", // 0xdd
  1006. "illegal ", // 0xde
  1007. "illegal ", // 0xdf
  1008. "loopnz ", // 0xe0
  1009. "loopz ", // 0xe1
  1010. "loop ", // 0xe2
  1011. "jcxz ", // 0xe3
  1012. "inb AL,Ib ", // 0xe4
  1013. "inw/d eAX,Ib ", // 0xe5
  1014. "outb Ib,AL ", // 0xe6
  1015. "outw/d Ib,eAX ", // 0xe7
  1016. "call Jv ", // 0xe8
  1017. "jmp Jv ", // 0xe9
  1018. "jmp Ap ", // 0xea
  1019. "jmp Jb ", // 0xeb
  1020. "inb AL,DX ", // 0xec
  1021. "inw/d Ib,DX ", // 0xed
  1022. "outb DX,AL ", // 0xee
  1023. "outw/d DX,eAX ", // 0xef
  1024. "lock: ", // 0xf0
  1025. "illegal ", // 0xf1
  1026. "repnz: ", // 0xf2
  1027. "repz: ", // 0xf3
  1028. "hlt ", // 0xf4
  1029. "cmc ", // 0xf5
  1030. "group3 Eb,? ", // 0xf6
  1031. "group3 Ev,? ", // 0xf7
  1032. "clc ", // 0xf8
  1033. "stc ", // 0xf9
  1034. "cli ", // 0xfa
  1035. "sti ", // 0xfb
  1036. "cld ", // 0xfc
  1037. "std ", // 0xfd
  1038. "group4 Eb ", // 0xfe
  1039. "group5 Ev " // 0xff
  1040. };
  1041. const PCHAR XmOpcodeNameTable2[] = {
  1042. "group6 ", // 0x00
  1043. "group7 ", // 0x01
  1044. "lar ", // 0x02
  1045. "lsl ", // 0x03
  1046. "illegal ", // 0x04
  1047. "illegal ", // 0x05
  1048. "clts ", // 0x06
  1049. "illegal ", // 0x07
  1050. "illegal ", // 0x08
  1051. "illegal ", // 0x09
  1052. "illegal ", // 0x0a
  1053. "illegal ", // 0x0b
  1054. "illegal ", // 0x0c
  1055. "illegal ", // 0x0d
  1056. "illegal ", // 0x0e
  1057. "illegal ", // 0x0f
  1058. "illegal ", // 0x10
  1059. "illegal ", // 0x11
  1060. "illegal ", // 0x12
  1061. "illegal ", // 0x13
  1062. "illegal ", // 0x14
  1063. "illegal ", // 0x15
  1064. "illegal ", // 0x16
  1065. "illegal ", // 0x17
  1066. "illegal ", // 0x18
  1067. "illegal ", // 0x19
  1068. "illegal ", // 0x1a
  1069. "illegal ", // 0x1b
  1070. "illegal ", // 0x1c
  1071. "illegal ", // 0x1d
  1072. "illegal ", // 0x1e
  1073. "illegal ", // 0x1f
  1074. "mov Cd,Rd ", // 0x20
  1075. "mov Dd,Rd ", // 0x21
  1076. "mov Rd,Cd ", // 0x22
  1077. "mov Rd,Dd ", // 0x23
  1078. "mov Td,Rd ", // 0x24
  1079. "illegal ", // 0x25
  1080. "mov Rd,Td ", // 0x26
  1081. "illegal ", // 0x27
  1082. "illegal ", // 0x28
  1083. "illegal ", // 0x29
  1084. "illegal ", // 0x2a
  1085. "illegal ", // 0x2b
  1086. "illegal ", // 0x2c
  1087. "illegal ", // 0x2d
  1088. "illegal ", // 0x2e
  1089. "illegal ", // 0x2f
  1090. "illegal ", // 0x30
  1091. "illegal ", // 0x31
  1092. "illegal ", // 0x32
  1093. "illegal ", // 0x33
  1094. "illegal ", // 0x34
  1095. "illegal ", // 0x35
  1096. "illegal ", // 0x36
  1097. "illegal ", // 0x37
  1098. "illegal ", // 0x38
  1099. "illegal ", // 0x39
  1100. "illegal ", // 0x3a
  1101. "illegal ", // 0x3b
  1102. "illegal ", // 0x3c
  1103. "illegal ", // 0x3d
  1104. "illegal ", // 0x3e
  1105. "illegal ", // 0x3f
  1106. "illegal ", // 0x40
  1107. "illegal ", // 0x41
  1108. "illegal ", // 0x42
  1109. "illegal ", // 0x43
  1110. "illegal ", // 0x44
  1111. "illegal ", // 0x45
  1112. "illegal ", // 0x46
  1113. "illegal ", // 0x47
  1114. "illegal ", // 0x48
  1115. "illegal ", // 0x49
  1116. "illegal ", // 0x4a
  1117. "illegal ", // 0x4b
  1118. "illegal ", // 0x4c
  1119. "illegal ", // 0x4d
  1120. "illegal ", // 0x4e
  1121. "illegal ", // 0x4f
  1122. "illegal ", // 0x50
  1123. "illegal ", // 0x51
  1124. "illegal ", // 0x52
  1125. "illegal ", // 0x53
  1126. "illegal ", // 0x54
  1127. "illegal ", // 0x55
  1128. "illegal ", // 0x56
  1129. "illegal ", // 0x57
  1130. "illegal ", // 0x58
  1131. "illegal ", // 0x59
  1132. "illegal ", // 0x5a
  1133. "illegal ", // 0x5b
  1134. "illegal ", // 0x5c
  1135. "illegal ", // 0x5d
  1136. "illegal ", // 0x5e
  1137. "illegal ", // 0x5f
  1138. "illegal ", // 0x60
  1139. "illegal ", // 0x61
  1140. "illegal ", // 0x62
  1141. "illegal ", // 0x63
  1142. "illegal ", // 0x64
  1143. "illegal ", // 0x65
  1144. "illegal ", // 0x66
  1145. "illegal ", // 0x67
  1146. "illegal ", // 0x68
  1147. "illegal ", // 0x69
  1148. "illegal ", // 0x6a
  1149. "illegal ", // 0x6b
  1150. "illegal ", // 0x6c
  1151. "illegal ", // 0x6d
  1152. "illegal ", // 0x6e
  1153. "illegal ", // 0x6f
  1154. "illegal ", // 0x70
  1155. "illegal ", // 0x71
  1156. "illegal ", // 0x72
  1157. "illegal ", // 0x73
  1158. "illegal ", // 0x74
  1159. "illegal ", // 0x75
  1160. "illegal ", // 0x76
  1161. "illegal ", // 0x77
  1162. "illegal ", // 0x78
  1163. "illegal ", // 0x79
  1164. "illegal ", // 0x7a
  1165. "illegal ", // 0x7b
  1166. "illegal ", // 0x7c
  1167. "illegal ", // 0x7d
  1168. "illegal ", // 0x7e
  1169. "illegal ", // 0x7f
  1170. "jo Jv ", // 0x80
  1171. "jno Jv ", // 0x81
  1172. "jb Jv ", // 0x82
  1173. "jnb Jv ", // 0x83
  1174. "jz Jv ", // 0x84
  1175. "jnz Jv ", // 0x85
  1176. "jbe Jv ", // 0x86
  1177. "jnbe Jv ", // 0x87
  1178. "js Jv ", // 0x88
  1179. "jns Jv ", // 0x89
  1180. "jp Jv ", // 0x8a
  1181. "jnp Jv ", // 0x8b
  1182. "jl Jv ", // 0x8c
  1183. "jnl Jv ", // 0x8d
  1184. "jle Jv ", // 0x8e
  1185. "jnle Jv ", // 0x8f
  1186. "seto ", // 0x90
  1187. "setno ", // 0x91
  1188. "setb ", // 0x92
  1189. "setnb ", // 0x93
  1190. "setz ", // 0x94
  1191. "setnz ", // 0x95
  1192. "setbe ", // 0x96
  1193. "setnbe ", // 0x97
  1194. "sets ", // 0x98
  1195. "setns ", // 0x99
  1196. "setp ", // 0x9a
  1197. "setnp ", // 0x9b
  1198. "setl ", // 0x9c
  1199. "setnl ", // 0x9d
  1200. "setle ", // 0x9e
  1201. "setnle ", // 0x9f
  1202. "push FS ", // 0xa0
  1203. "pop FS ", // 0xa1
  1204. "illegal ", // 0xa2
  1205. "bt Ev,Gv ", // 0xa3
  1206. "shld Ev,Gv,Ib ", // 0xa4
  1207. "Shld Ev,Gv,vl ", // 0xa5
  1208. "illegal ", // 0xa6
  1209. "illegal ", // 0xa7
  1210. "push GS ", // 0xa8
  1211. "pop GS ", // 0xa9
  1212. "illegal ", // 0xaa
  1213. "bts Ev,Gv ", // 0xab
  1214. "shrd Ev,Gv,Ib ", // 0xac
  1215. "shrd Ev,Gv,cl ", // 0xad
  1216. "illegal ", // 0xae
  1217. "imul Gv,Ev ", // 0xaf
  1218. "cmpxchg Eb,Gv ", // 0xb0
  1219. "cmpxchg Ev,Gv ", // 0xb1
  1220. "lss Gv,Mp ", // 0xb2
  1221. "btr Ev,Gv ", // 0xb3
  1222. "lfs Gv,Mp ", // 0xb4
  1223. "lgs Gv,Mp ", // 0xb5
  1224. "movzb Gv,Eb ", // 0xb6
  1225. "movzw Gv,Ew ", // 0xb7
  1226. "illegal ", // 0xb8
  1227. "illegal ", // 0xb9
  1228. "group8 Ev,Ib ", // 0xba
  1229. "btc Ev,Gv ", // 0xbb
  1230. "bsf Gv,Ev ", // 0xbc
  1231. "bsr Gv,Ev ", // 0xbd
  1232. "movsb Gv,Eb ", // 0xbe
  1233. "movsw Gv,Ew ", // 0xbf
  1234. "xadd Eb,Gb ", // 0xc0
  1235. "xadd Ev,Gv ", // 0xc1
  1236. "illegal ", // 0xc2
  1237. "illegal ", // 0xc3
  1238. "illegal ", // 0xc4
  1239. "illegal ", // 0xc5
  1240. "illegal ", // 0xc6
  1241. "illegal ", // 0xc7
  1242. "bswap Gv ", // 0xc8
  1243. "illegal ", // 0xc9
  1244. "illegal ", // 0xca
  1245. "illegal ", // 0xcb
  1246. "illegal ", // 0xcc
  1247. "illegal ", // 0xcd
  1248. "illegal ", // 0xce
  1249. "illegal ", // 0xcf
  1250. "illegal ", // 0xd0
  1251. "illegal ", // 0xd1
  1252. "illegal ", // 0xd2
  1253. "illegal ", // 0xd3
  1254. "illegal ", // 0xd4
  1255. "illegal ", // 0xd5
  1256. "illegal ", // 0xd6
  1257. "illegal ", // 0xd7
  1258. "illegal ", // 0xd8
  1259. "illegal ", // 0xd9
  1260. "illegal ", // 0xda
  1261. "illegal ", // 0xdb
  1262. "illegal ", // 0xdc
  1263. "illegal ", // 0xdd
  1264. "illegal ", // 0xde
  1265. "illegal ", // 0xdf
  1266. "illegal ", // 0xe0
  1267. "illegal ", // 0xe1
  1268. "illegal ", // 0xe2
  1269. "illegal ", // 0xe3
  1270. "illegal ", // 0xe4
  1271. "illegal ", // 0xe5
  1272. "illegal ", // 0xe6
  1273. "illegal ", // 0xe7
  1274. "illegal ", // 0xe8
  1275. "illegal ", // 0xe9
  1276. "illegal ", // 0xea
  1277. "illegal ", // 0xeb
  1278. "illegal ", // 0xec
  1279. "illegal ", // 0xed
  1280. "illegal ", // 0xee
  1281. "illegal ", // 0xef
  1282. "illegal ", // 0xf0
  1283. "illegal ", // 0xf1
  1284. "illegal ", // 0xf2
  1285. "illegal ", // 0xf3
  1286. "illegal ", // 0xf4
  1287. "illegal ", // 0xf5
  1288. "illegal ", // 0xf6
  1289. "illegal ", // 0xf7
  1290. "illegal ", // 0xf8
  1291. "illegal ", // 0xf9
  1292. "illegal ", // 0xfa
  1293. "illegal ", // 0xfb
  1294. "illegal ", // 0xfc
  1295. "illegal ", // 0xfd
  1296. "illegal ", // 0xfe
  1297. "illegal " // 0xff
  1298. };
  1299. ULONG XmDebugFlags = 0x00; //0x7f;
  1300. #endif