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.

3427 lines
130 KiB

  1. /*++
  2. Copyright (c) 1995 Microsoft Corporation
  3. Module Name:
  4. mod_rm.c
  5. Abstract:
  6. Mod/Rm/Reg decoder. Compiled multiple times to generate the following
  7. functions: mod_rm_reg8 - for 8-bit integer instructions
  8. mod_rm_reg16 - for 16-bit integer instructions
  9. mod_rm_reg32 - for 32-bit integer instructions
  10. mod_rm_regst - for floating-point instructions (mod=11
  11. indicates rm bits specify ST(i)).
  12. mod_rm_seg16 - for 16-bit integer instructions which
  13. specify a segment register in the remaining
  14. bits.
  15. Author:
  16. 29-Jun-1995 BarryBo
  17. Revision History:
  18. --*/
  19. // THIS FILE IS #include'd INTO FILES WHICH DEFINE THE FOLLOWING MACROS:
  20. // MOD_RM_DECODER - name of the decoder
  21. // MOD11_RM000 - the name of the thing to use when mod=11,rm=000.
  22. // MOD11_RM001 - mod=11,rm=001
  23. // ...
  24. // MOD11_RM111 - mod=11,rm=111
  25. //
  26. // REG000 - the name of the register to use when reg=000
  27. // ...
  28. // REG111 - reg=111
  29. int MOD_RM_DECODER(PDECODERSTATE State, POPERAND op1, POPERAND op2)
  30. {
  31. int cbInstr;
  32. OPERAND ScratchOperand;
  33. if (op2 == NULL) {
  34. // If caller doesn't care about operand #2, then store the results
  35. // to a scratch structure.
  36. op2 = &ScratchOperand;
  37. }
  38. op2->Type = OPND_REGREF;
  39. if (State->AdrPrefix) {
  40. // ADR: prefix specified.
  41. // mm aaa rrr
  42. // | | |
  43. // | | +--- 'rm' bits from mod/rm
  44. // | +------- reg bits
  45. // +---------- 'mod' bits from mod/rm
  46. switch (*(PBYTE)(eipTemp+1)) {
  47. case 0x00: // mod/rm = 00 000, reg=000
  48. cbInstr = 1;
  49. op1->Type = OPND_ADDRREF;
  50. op1->Reg = GP_BX;
  51. op1->IndexReg = GP_SI;
  52. op2->Reg = REG000;
  53. break;
  54. case 0x01: // mod/rm = 00 001, reg=000
  55. cbInstr = 1;
  56. op1->Type = OPND_ADDRREF;
  57. op1->Reg = GP_BX;
  58. op1->IndexReg = GP_DI;
  59. op2->Reg = REG000;
  60. break;
  61. case 0x02: // mod/rm = 00 010, reg=000
  62. cbInstr = 1;
  63. op1->Type = OPND_ADDRREF;
  64. op1->Reg = GP_BP;
  65. op1->IndexReg = GP_SI;
  66. op2->Reg = REG000;
  67. break;
  68. case 0x03: // mod/rm = 00 011, reg=000
  69. cbInstr = 1;
  70. op1->Type = OPND_ADDRREF;
  71. op1->Reg = GP_BP;
  72. op1->IndexReg = GP_DI;
  73. op2->Reg = REG000;
  74. break;
  75. case 0x04: // mod/rm = 00 100, reg=000
  76. cbInstr = 1;
  77. op1->Type = OPND_ADDRREF;
  78. op1->Reg = GP_SI;
  79. op2->Reg = REG000;
  80. break;
  81. case 0x05: // mod/rm = 00 101, reg=000
  82. cbInstr = 1;
  83. op1->Type = OPND_ADDRREF;
  84. op1->Reg = GP_DI;
  85. op2->Reg = REG000;
  86. break;
  87. case 0x06: // mod/rm = 00 110, reg=000
  88. cbInstr = 3;
  89. op1->Type = OPND_ADDRREF;
  90. op1->Immed = GET_SHORT(eipTemp+2);
  91. op2->Reg = REG000;
  92. break;
  93. case 0x07: // mod/rm = 00 111, reg=000
  94. cbInstr = 1;
  95. op1->Type = OPND_ADDRREF;
  96. op1->Reg = GP_BX;
  97. op2->Reg = REG000;
  98. break;
  99. case 0x08: // mod/rm = 00 000, reg=001
  100. cbInstr = 1;
  101. op1->Type = OPND_ADDRREF;
  102. op1->Reg = GP_BX;
  103. op1->IndexReg = GP_SI;
  104. op2->Reg = REG001;
  105. break;
  106. case 0x09: // mod/rm = 00 001, reg=001
  107. cbInstr = 1;
  108. op1->Type = OPND_ADDRREF;
  109. op1->Reg = GP_BX;
  110. op1->IndexReg = GP_DI;
  111. op2->Reg = REG001;
  112. break;
  113. case 0x0a: // mod/rm = 00 010, reg=001
  114. cbInstr = 1;
  115. op1->Type = OPND_ADDRREF;
  116. op1->Reg = GP_BP;
  117. op2->IndexReg = GP_SI;
  118. op2->Reg = REG001;
  119. break;
  120. case 0x0b: // mod/rm = 00 011, reg=001
  121. cbInstr = 1;
  122. op1->Type = OPND_ADDRREF;
  123. op1->Reg = GP_BP;
  124. op2->IndexReg = GP_DI;
  125. op2->Reg = REG001;
  126. break;
  127. case 0x0c: // mod/rm = 00 100, reg=001
  128. cbInstr = 1;
  129. op1->Type = OPND_ADDRREF;
  130. op1->Reg = GP_SI;
  131. op2->Reg = REG001;
  132. break;
  133. case 0x0d: // mod/rm = 00 101, reg=001
  134. cbInstr = 1;
  135. op1->Type = OPND_ADDRREF;
  136. op1->Reg = GP_DI;
  137. op2->Reg = REG001;
  138. break;
  139. case 0x0e: // mod/rm = 00 110, reg=001
  140. cbInstr = 3;
  141. op1->Type = OPND_ADDRREF;
  142. op1->Immed = GET_SHORT(eipTemp+2);
  143. op2->Reg = REG001;
  144. break;
  145. case 0x0f: // mod/rm = 00 111, reg=001
  146. cbInstr = 1;
  147. op1->Type = OPND_ADDRREF;
  148. op1->Reg = GP_BX;
  149. op2->Reg = REG001;
  150. break;
  151. case 0x10: // mod/rm = 00 000, reg=010
  152. cbInstr = 1;
  153. op1->Type = OPND_ADDRREF;
  154. op1->Reg = GP_BX;
  155. op1->IndexReg = GP_SI;
  156. op2->Reg = REG010;
  157. break;
  158. case 0x11: // mod/rm = 00 001, reg=010
  159. cbInstr = 1;
  160. op1->Type = OPND_ADDRREF;
  161. op1->Reg = GP_BX;
  162. op1->IndexReg = GP_DI;
  163. op2->Reg = REG010;
  164. break;
  165. case 0x12: // mod/rm = 00 010, reg=010
  166. cbInstr = 1;
  167. op1->Type = OPND_ADDRREF;
  168. op1->Reg = GP_BP;
  169. op1->IndexReg = GP_SI;
  170. op2->Reg = REG010;
  171. break;
  172. case 0x13: // mod/rm = 00 011, reg=001
  173. cbInstr = 1;
  174. op1->Type = OPND_ADDRREF;
  175. op1->Reg = GP_BP;
  176. op1->IndexReg = GP_DI;
  177. op2->Reg = REG010;
  178. break;
  179. case 0x14: // mod/rm = 00 100, reg=010
  180. cbInstr = 1;
  181. op1->Type = OPND_ADDRREF;
  182. op1->Reg = GP_SI;
  183. op2->Reg = REG010;
  184. break;
  185. case 0x15: // mod/rm = 00 101, reg=010
  186. cbInstr = 1;
  187. op1->Type = OPND_ADDRREF;
  188. op1->Reg = GP_DI;
  189. op2->Reg = REG010;
  190. break;
  191. case 0x16: // mod/rm = 00 110, reg=010
  192. cbInstr = 3;
  193. op1->Type = OPND_ADDRREF;
  194. op1->Immed = GET_SHORT(eipTemp+2);
  195. op2->Reg = REG010;
  196. break;
  197. case 0x17: // mod/rm = 00 111, reg=010
  198. cbInstr = 1;
  199. op1->Type = OPND_ADDRREF;
  200. op1->Reg = GP_BX;
  201. op2->Reg = REG010;
  202. break;
  203. case 0x18: // mod/rm = 00 000, reg=011
  204. cbInstr = 1;
  205. op1->Type = OPND_ADDRREF;
  206. op1->Reg = GP_BX;
  207. op1->IndexReg = GP_SI;
  208. op2->Reg = REG011;
  209. break;
  210. case 0x19: // mod/rm = 00 001, reg=011
  211. cbInstr = 1;
  212. op1->Type = OPND_ADDRREF;
  213. op1->Reg = GP_BX;
  214. op1->Reg = GP_DI;
  215. op2->Reg = REG011;
  216. break;
  217. case 0x1a: // mod/rm = 00 010, reg=011
  218. cbInstr = 1;
  219. op1->Type = OPND_ADDRREF;
  220. op1->Reg = GP_BP;
  221. op1->IndexReg = GP_SI;
  222. op2->Reg = REG011;
  223. break;
  224. case 0x1b: // mod/rm = 00 011, reg=011
  225. cbInstr = 1;
  226. op1->Type = OPND_ADDRREF;
  227. op1->Reg = GP_BP;
  228. op1->IndexReg = GP_DI;
  229. op2->Reg = REG011;
  230. break;
  231. case 0x1c: // mod/rm = 00 100, reg=011
  232. cbInstr = 1;
  233. op1->Type = OPND_ADDRREF;
  234. op1->Reg = GP_SI;
  235. op2->Reg = REG011;
  236. break;
  237. case 0x1d: // mod/rm = 00 101, reg=011
  238. cbInstr = 1;
  239. op1->Type = OPND_ADDRREF;
  240. op1->Reg = GP_DI;
  241. op2->Reg = REG011;
  242. break;
  243. case 0x1e: // mod/rm = 00 110, reg=011
  244. cbInstr = 3;
  245. op1->Type = OPND_ADDRREF;
  246. op1->Immed = GET_SHORT(eipTemp+2);
  247. op2->Reg = REG011;
  248. break;
  249. case 0x1f: // mod/rm = 00 111, reg=011
  250. cbInstr = 1;
  251. op1->Type = OPND_ADDRREF;
  252. op1->Reg = GP_BX;
  253. op2->Reg = REG011;
  254. break;
  255. case 0x20: // mod/rm = 00 000, reg=100
  256. cbInstr = 1;
  257. op1->Type = OPND_ADDRREF;
  258. op1->Reg = GP_BX;
  259. op1->IndexReg = GP_SI;
  260. op2->Reg = REG100;
  261. break;
  262. case 0x21: // mod/rm = 00 001, reg=100
  263. cbInstr = 1;
  264. op1->Type = OPND_ADDRREF;
  265. op1->Reg = GP_BX;
  266. op1->IndexReg = GP_DI;
  267. op2->Reg = REG100;
  268. break;
  269. case 0x22: // mod/rm = 00 010, reg=100
  270. cbInstr = 1;
  271. op1->Type = OPND_ADDRREF;
  272. op1->Reg = GP_BP;
  273. op1->IndexReg = GP_SI;
  274. op2->Reg = REG100;
  275. break;
  276. case 0x23: // mod/rm = 00 011, reg=100
  277. cbInstr = 1;
  278. op1->Type = OPND_ADDRREF;
  279. op1->Reg = GP_BP;
  280. op1->IndexReg = GP_DI;
  281. op2->Reg = REG100;
  282. break;
  283. case 0x24: // mod/rm = 00 100, reg=100
  284. cbInstr = 1;
  285. op1->Type = OPND_ADDRREF;
  286. op1->Reg = GP_SI;
  287. op2->Reg = REG100;
  288. break;
  289. case 0x25: // mod/rm = 00 101, reg=100
  290. cbInstr = 1;
  291. op1->Type = OPND_ADDRREF;
  292. op1->Reg = GP_DI;
  293. op2->Reg = REG100;
  294. break;
  295. case 0x26: // mod/rm = 00 110, reg=100
  296. cbInstr = 3;
  297. op1->Type = OPND_ADDRREF;
  298. op1->Immed = GET_SHORT(eipTemp+2);
  299. op2->Reg = REG100;
  300. break;
  301. case 0x27: // mod/rm = 00 111, reg=100
  302. cbInstr = 1;
  303. op1->Type = OPND_ADDRREF;
  304. op1->Reg = GP_BX;
  305. op2->Reg = REG100;
  306. break;
  307. case 0x28: // mod/rm = 00 000, reg=101
  308. cbInstr = 1;
  309. op1->Type = OPND_ADDRREF;
  310. op1->Reg = GP_BX;
  311. op1->IndexReg = GP_SI;
  312. op2->Reg = REG101;
  313. break;
  314. case 0x29: // mod/rm = 00 001, reg=101
  315. cbInstr = 1;
  316. op1->Type = OPND_ADDRREF;
  317. op1->Reg = GP_BX;
  318. op1->IndexReg = GP_DI;
  319. op2->Reg = REG101;
  320. break;
  321. case 0x2a: // mod/rm = 00 010, reg=101
  322. cbInstr = 1;
  323. op1->Type = OPND_ADDRREF;
  324. op1->Reg = GP_BP;
  325. op1->IndexReg = GP_SI;
  326. op2->Reg = REG101;
  327. break;
  328. case 0x2b: // mod/rm = 00 011, reg=101
  329. cbInstr = 1;
  330. op1->Type = OPND_ADDRREF;
  331. op1->Reg = GP_BP;
  332. op1->IndexReg = GP_DI;
  333. op2->Reg = REG101;
  334. break;
  335. case 0x2c: // mod/rm = 00 100, reg=101
  336. cbInstr = 1;
  337. op1->Type = OPND_ADDRREF;
  338. op1->Reg = GP_SI;
  339. op2->Reg = REG101;
  340. break;
  341. case 0x2d: // mod/rm = 00 101, reg=101
  342. cbInstr = 1;
  343. op1->Type = OPND_ADDRREF;
  344. op1->Reg = GP_DI;
  345. op2->Reg = REG101;
  346. break;
  347. case 0x2e: // mod/rm = 00 110, reg=101
  348. cbInstr = 3;
  349. op1->Type = OPND_ADDRREF;
  350. op1->Immed = GET_SHORT(eipTemp+2);
  351. op2->Reg = REG101;
  352. break;
  353. case 0x2f: // mod/rm = 00 111, reg=101
  354. cbInstr = 1;
  355. op1->Type = OPND_ADDRREF;
  356. op1->Reg = GP_BX;
  357. op2->Reg = REG101;
  358. break;
  359. case 0x30: // mod/rm = 00 000, reg=110
  360. cbInstr = 1;
  361. op1->Type = OPND_ADDRREF;
  362. op1->Reg = GP_BX;
  363. op1->IndexReg = GP_SI;
  364. op2->Reg = REG110;
  365. break;
  366. case 0x31: // mod/rm = 00 001, reg=110
  367. cbInstr = 1;
  368. op1->Type = OPND_ADDRREF;
  369. op1->Reg = GP_BX;
  370. op1->IndexReg = GP_DI;
  371. op2->Reg = REG110;
  372. break;
  373. case 0x32: // mod/rm = 00 010, reg=110
  374. cbInstr = 1;
  375. op1->Type = OPND_ADDRREF;
  376. op1->Reg = GP_BP;
  377. op1->IndexReg = GP_SI;
  378. op2->Reg = REG110;
  379. break;
  380. case 0x33: // mod/rm = 00 011, reg=110
  381. cbInstr = 1;
  382. op1->Type = OPND_ADDRREF;
  383. op1->Reg = GP_BP;
  384. op1->IndexReg = GP_DI;
  385. op2->Reg = REG110;
  386. break;
  387. case 0x34: // mod/rm = 00 100, reg=110
  388. cbInstr = 1;
  389. op1->Type = OPND_ADDRREF;
  390. op1->Reg = GP_SI;
  391. op2->Reg = REG110;
  392. break;
  393. case 0x35: // mod/rm = 00 101, reg=110
  394. cbInstr = 1;
  395. op1->Type = OPND_ADDRREF;
  396. op1->Reg = GP_DI;
  397. op2->Reg = REG110;
  398. break;
  399. case 0x36: // mod/rm = 00 110, reg=110
  400. cbInstr = 3;
  401. op1->Type = OPND_ADDRREF;
  402. op1->Immed = GET_SHORT(eipTemp+2);
  403. op2->Reg = REG110;
  404. break;
  405. case 0x37: // mod/rm = 00 111, reg=110
  406. cbInstr = 1;
  407. op1->Type = OPND_ADDRREF;
  408. op1->Reg = GP_BX;
  409. op2->Reg = REG110;
  410. break;
  411. case 0x38: // mod/rm = 00 000, reg=111
  412. cbInstr = 1;
  413. op1->Type = OPND_ADDRREF;
  414. op1->Reg = GP_BX;
  415. op1->IndexReg = GP_SI;
  416. op2->Reg = REG111;
  417. break;
  418. case 0x39: // mod/rm = 00 001, reg=111
  419. cbInstr = 1;
  420. op1->Type = OPND_ADDRREF;
  421. op1->Reg = GP_BX;
  422. op1->IndexReg = GP_DI;
  423. op2->Reg = REG111;
  424. break;
  425. case 0x3a: // mod/rm = 00 010, reg=111
  426. cbInstr = 1;
  427. op1->Type = OPND_ADDRREF;
  428. op1->Reg = GP_BP;
  429. op1->IndexReg = GP_SI;
  430. op2->Reg = REG111;
  431. break;
  432. case 0x3b: // mod/rm = 00 011, reg=111
  433. cbInstr = 1;
  434. op1->Type = OPND_ADDRREF;
  435. op1->Reg = GP_BP;
  436. op1->IndexReg = GP_DI;
  437. op2->Reg = REG111;
  438. break;
  439. case 0x3c: // mod/rm = 00 100, reg=111
  440. cbInstr = 1;
  441. op1->Type = OPND_ADDRREF;
  442. op1->Reg = GP_SI;
  443. op2->Reg = REG111;
  444. break;
  445. case 0x3d: // mod/rm = 00 101, reg=111
  446. cbInstr = 1;
  447. op1->Type = OPND_ADDRREF;
  448. op1->Reg = GP_DI;
  449. op2->Reg = REG111;
  450. break;
  451. case 0x3e: // mod/rm = 00 110, reg=111
  452. cbInstr = 3;
  453. op1->Type = OPND_ADDRREF;
  454. op1->Immed = GET_SHORT(eipTemp+2);
  455. op2->Reg = REG111;
  456. break;
  457. case 0x3f: // mod/rm = 00 111, reg=111
  458. cbInstr = 1;
  459. op1->Type = OPND_ADDRREF;
  460. op1->Reg = GP_BX;
  461. op2->Reg = REG111;
  462. break;
  463. /////////////////////////////////////////////////////////////////////
  464. case 0x40: // mod/rm = 01 000, reg=000
  465. cbInstr = 2;
  466. op1->Type = OPND_ADDRREF;
  467. op1->Reg = GP_BX;
  468. op1->IndexReg = GP_SI;
  469. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  470. op2->Reg = REG000;
  471. break;
  472. case 0x41: // mod/rm = 01 001, reg=000
  473. cbInstr = 2;
  474. op1->Type = OPND_ADDRREF;
  475. op1->Reg = GP_BX;
  476. op1->IndexReg = GP_DI;
  477. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  478. op2->Reg = REG000;
  479. break;
  480. case 0x42: // mod/rm = 01 010, reg=000
  481. cbInstr = 2;
  482. op1->Type = OPND_ADDRREF;
  483. op1->Reg = GP_BP;
  484. op1->IndexReg = GP_SI;
  485. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  486. op2->Reg = REG000;
  487. break;
  488. case 0x43: // mod/rm = 01 011, reg=000
  489. cbInstr = 2;
  490. op1->Type = OPND_ADDRREF;
  491. op1->Reg = GP_BP;
  492. op1->IndexReg = GP_DI;
  493. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  494. op2->Reg = REG000;
  495. break;
  496. case 0x44: // mod/rm = 01 100, reg=000
  497. cbInstr = 2;
  498. op1->Type = OPND_ADDRREF;
  499. op1->Reg = GP_SI;
  500. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  501. op2->Reg = REG000;
  502. break;
  503. case 0x45: // mod/rm = 01 101, reg=000
  504. cbInstr = 2;
  505. op1->Type = OPND_ADDRREF;
  506. op1->Reg = GP_DI;
  507. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  508. op2->Reg = REG000;
  509. break;
  510. case 0x46: // mod/rm = 01 110, reg=000
  511. cbInstr = 2;
  512. op1->Type = OPND_ADDRREF;
  513. op1->Reg = GP_BP;
  514. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  515. op2->Reg = REG000;
  516. break;
  517. case 0x47: // mod/rm = 01 111, reg=000
  518. cbInstr = 2;
  519. op1->Type = OPND_ADDRREF;
  520. op1->Reg = GP_BX;
  521. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  522. op2->Reg = REG000;
  523. break;
  524. case 0x48: // mod/rm = 01 000, reg=001
  525. cbInstr = 2;
  526. op1->Type = OPND_ADDRREF;
  527. op1->Reg = GP_BX;
  528. op1->IndexReg = GP_SI;
  529. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  530. op2->Reg = REG001;
  531. break;
  532. case 0x49: // mod/rm = 01 001, reg=001
  533. cbInstr = 2;
  534. op1->Type = OPND_ADDRREF;
  535. op1->Reg = GP_BX;
  536. op1->IndexReg = GP_DI;
  537. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  538. op2->Reg = REG001;
  539. break;
  540. case 0x4a: // mod/rm = 01 010, reg=001
  541. cbInstr = 2;
  542. op1->Type = OPND_ADDRREF;
  543. op1->Reg = GP_BP;
  544. op1->IndexReg = GP_SI;
  545. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  546. op2->Reg = REG001;
  547. break;
  548. case 0x4b: // mod/rm = 01 011, reg=001
  549. cbInstr = 2;
  550. op1->Type = OPND_ADDRREF;
  551. op1->Reg = GP_BP;
  552. op1->IndexReg = GP_DI;
  553. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  554. op2->Reg = REG001;
  555. break;
  556. case 0x4c: // mod/rm = 01 100, reg=001
  557. cbInstr = 2;
  558. op1->Type = OPND_ADDRREF;
  559. op1->Reg = GP_SI;
  560. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  561. op2->Reg = REG001;
  562. break;
  563. case 0x4d: // mod/rm = 01 101, reg=001
  564. cbInstr = 2;
  565. op1->Type = OPND_ADDRREF;
  566. op1->Reg = GP_DI;
  567. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  568. op2->Reg = REG001;
  569. break;
  570. case 0x4e: // mod/rm = 01 110, reg=001
  571. cbInstr = 2;
  572. op1->Type = OPND_ADDRREF;
  573. op1->Reg = GP_BP;
  574. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  575. op2->Reg = REG001;
  576. break;
  577. case 0x4f: // mod/rm = 01 111, reg=001
  578. cbInstr = 2;
  579. op1->Type = OPND_ADDRREF;
  580. op1->Reg = GP_BX;
  581. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  582. op2->Reg = REG001;
  583. break;
  584. case 0x50: // mod/rm = 01 000, reg=010
  585. cbInstr = 2;
  586. op1->Type = OPND_ADDRREF;
  587. op1->Reg = GP_BX;
  588. op1->IndexReg = GP_SI;
  589. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  590. op2->Reg = REG010;
  591. break;
  592. case 0x51: // mod/rm = 01 001, reg=010
  593. cbInstr = 2;
  594. op1->Type = OPND_ADDRREF;
  595. op1->Reg = GP_BX;
  596. op1->IndexReg = GP_DI;
  597. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  598. op2->Reg = REG010;
  599. break;
  600. case 0x52: // mod/rm = 01 010, reg=010
  601. cbInstr = 2;
  602. op1->Type = OPND_ADDRREF;
  603. op1->Reg = GP_BP;
  604. op1->IndexReg = GP_SI;
  605. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  606. op2->Reg = REG010;
  607. break;
  608. case 0x53: // mod/rm = 01 011, reg=001
  609. cbInstr = 2;
  610. op1->Type = OPND_ADDRREF;
  611. op1->Reg = GP_BP;
  612. op1->IndexReg = GP_DI;
  613. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  614. op2->Reg = REG010;
  615. break;
  616. case 0x54: // mod/rm = 01 100, reg=010
  617. cbInstr = 2;
  618. op1->Type = OPND_ADDRREF;
  619. op1->Reg = GP_SI;
  620. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  621. op2->Reg = REG010;
  622. break;
  623. case 0x55: // mod/rm = 01 101, reg=010
  624. cbInstr = 2;
  625. op1->Type = OPND_ADDRREF;
  626. op1->Reg = GP_DI;
  627. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  628. op2->Reg = REG010;
  629. break;
  630. case 0x56: // mod/rm = 01 110, reg=010
  631. cbInstr = 2;
  632. op1->Type = OPND_ADDRREF;
  633. op1->Reg = GP_BP;
  634. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  635. op2->Reg = REG010;
  636. break;
  637. case 0x57: // mod/rm = 01 111, reg=010
  638. cbInstr = 2;
  639. op1->Type = OPND_ADDRREF;
  640. op1->Reg = GP_BX;
  641. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  642. op2->Reg = REG010;
  643. break;
  644. case 0x58: // mod/rm = 01 000, reg=011
  645. cbInstr = 2;
  646. op1->Type = OPND_ADDRREF;
  647. op1->Reg = GP_BX;
  648. op1->IndexReg = GP_SI;
  649. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  650. op2->Reg = REG011;
  651. break;
  652. case 0x59: // mod/rm = 01 001, reg=011
  653. cbInstr = 2;
  654. op1->Type = OPND_ADDRREF;
  655. op1->Reg = GP_BX;
  656. op1->IndexReg = GP_DI;
  657. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  658. op2->Reg = REG011;
  659. break;
  660. case 0x5a: // mod/rm = 01 010, reg=011
  661. cbInstr = 2;
  662. op1->Type = OPND_ADDRREF;
  663. op1->Reg = GP_BP;
  664. op1->IndexReg = GP_SI;
  665. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  666. op2->Reg = REG011;
  667. break;
  668. case 0x5b: // mod/rm = 01 011, reg=011
  669. cbInstr = 2;
  670. op1->Type = OPND_ADDRREF;
  671. op1->Reg = GP_BP;
  672. op1->IndexReg = GP_DI;
  673. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  674. op2->Reg = REG011;
  675. break;
  676. case 0x5c: // mod/rm = 01 100, reg=011
  677. cbInstr = 2;
  678. op1->Type = OPND_ADDRREF;
  679. op1->Reg = GP_SI;
  680. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  681. op2->Reg = REG011;
  682. break;
  683. case 0x5d: // mod/rm = 01 101, reg=011
  684. cbInstr = 2;
  685. op1->Type = OPND_ADDRREF;
  686. op1->Reg = GP_DI;
  687. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  688. op2->Reg = REG011;
  689. break;
  690. case 0x5e: // mod/rm = 01 110, reg=011
  691. cbInstr = 2;
  692. op1->Type = OPND_ADDRREF;
  693. op1->Reg = GP_BP;
  694. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  695. op2->Reg = REG011;
  696. break;
  697. case 0x5f: // mod/rm = 01 111, reg=011
  698. cbInstr = 2;
  699. op1->Type = OPND_ADDRREF;
  700. op1->Reg = GP_BX;
  701. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  702. op2->Reg = REG011;
  703. break;
  704. case 0x60: // mod/rm = 01 000, reg=100
  705. cbInstr = 2;
  706. op1->Type = OPND_ADDRREF;
  707. op1->Reg = GP_BX;
  708. op1->IndexReg = GP_SI;
  709. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  710. op2->Reg = REG100;
  711. break;
  712. case 0x61: // mod/rm = 01 001, reg=100
  713. cbInstr = 2;
  714. op1->Type = OPND_ADDRREF;
  715. op1->Reg = GP_BX;
  716. op1->IndexReg = GP_DI;
  717. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  718. op2->Reg = REG100;
  719. break;
  720. case 0x62: // mod/rm = 01 010, reg=100
  721. cbInstr = 2;
  722. op1->Type = OPND_ADDRREF;
  723. op1->Reg = GP_BP;
  724. op1->IndexReg = GP_SI;
  725. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  726. op2->Reg = REG100;
  727. break;
  728. case 0x63: // mod/rm = 01 011, reg=100
  729. cbInstr = 2;
  730. op1->Type = OPND_ADDRREF;
  731. op1->Reg = GP_BP;
  732. op1->IndexReg = GP_DI;
  733. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  734. op2->Reg = REG100;
  735. break;
  736. case 0x64: // mod/rm = 01 100, reg=100
  737. cbInstr = 2;
  738. op1->Type = OPND_ADDRREF;
  739. op1->Reg = GP_SI;
  740. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  741. op2->Reg = REG100;
  742. break;
  743. case 0x65: // mod/rm = 01 101, reg=100
  744. cbInstr = 2;
  745. op1->Type = OPND_ADDRREF;
  746. op1->Reg = GP_DI;
  747. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  748. op2->Reg = REG100;
  749. break;
  750. case 0x66: // mod/rm = 01 110, reg=100
  751. cbInstr = 2;
  752. op1->Type = OPND_ADDRREF;
  753. op1->Reg = GP_BP;
  754. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  755. op2->Reg = REG100;
  756. break;
  757. case 0x67: // mod/rm = 01 111, reg=100
  758. cbInstr = 2;
  759. op1->Type = OPND_ADDRREF;
  760. op1->Reg = GP_BX;
  761. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  762. op2->Reg = REG100;
  763. break;
  764. case 0x68: // mod/rm = 01 000, reg=101
  765. cbInstr = 2;
  766. op1->Type = OPND_ADDRREF;
  767. op1->Reg = GP_BX;
  768. op1->IndexReg = GP_SI;
  769. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  770. op2->Reg = REG101;
  771. break;
  772. case 0x69: // mod/rm = 01 001, reg=101
  773. cbInstr = 2;
  774. op1->Type = OPND_ADDRREF;
  775. op1->Reg = GP_BX;
  776. op1->IndexReg = GP_DI;
  777. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  778. op2->Reg = REG101;
  779. break;
  780. case 0x6a: // mod/rm = 01 010, reg=101
  781. cbInstr = 2;
  782. op1->Type = OPND_ADDRREF;
  783. op1->Reg = GP_BP;
  784. op1->IndexReg = GP_SI;
  785. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  786. op2->Reg = REG101;
  787. break;
  788. case 0x6b: // mod/rm = 01 011, reg=101
  789. cbInstr = 2;
  790. op1->Type = OPND_ADDRREF;
  791. op1->Reg = GP_BP;
  792. op1->IndexReg = GP_DI;
  793. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  794. op2->Reg = REG101;
  795. break;
  796. case 0x6c: // mod/rm = 01 100, reg=101
  797. cbInstr = 2;
  798. op1->Type = OPND_ADDRREF;
  799. op1->Reg = GP_SI;
  800. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  801. op2->Reg = REG101;
  802. break;
  803. case 0x6d: // mod/rm = 01 101, reg=101
  804. cbInstr = 2;
  805. op1->Type = OPND_ADDRREF;
  806. op1->Reg = GP_DI;
  807. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  808. op2->Reg = REG101;
  809. break;
  810. case 0x6e: // mod/rm = 01 110, reg=101
  811. cbInstr = 2;
  812. op1->Type = OPND_ADDRREF;
  813. op1->Reg = GP_BP;
  814. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  815. op2->Reg = REG101;
  816. break;
  817. case 0x6f: // mod/rm = 01 111, reg=101
  818. cbInstr = 2;
  819. op1->Type = OPND_ADDRREF;
  820. op1->Reg = GP_BX;
  821. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  822. op2->Reg = REG101;
  823. break;
  824. case 0x70: // mod/rm = 01 000, reg=110
  825. cbInstr = 2;
  826. op1->Type = OPND_ADDRREF;
  827. op1->Reg = GP_BX;
  828. op1->IndexReg = GP_SI;
  829. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  830. op2->Reg = REG110;
  831. break;
  832. case 0x71: // mod/rm = 01 001, reg=110
  833. cbInstr = 2;
  834. op1->Type = OPND_ADDRREF;
  835. op1->Reg = GP_BX;
  836. op1->IndexReg = GP_DI;
  837. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  838. op2->Reg = REG110;
  839. break;
  840. case 0x72: // mod/rm = 01 010, reg=110
  841. cbInstr = 2;
  842. op1->Type = OPND_ADDRREF;
  843. op1->Reg = GP_BP;
  844. op1->IndexReg = GP_SI;
  845. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  846. op2->Reg = REG110;
  847. break;
  848. case 0x73: // mod/rm = 01 011, reg=110
  849. cbInstr = 2;
  850. op1->Type = OPND_ADDRREF;
  851. op1->Reg = GP_BP;
  852. op1->IndexReg = GP_DI;
  853. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  854. op2->Reg = REG110;
  855. break;
  856. case 0x74: // mod/rm = 01 100, reg=110
  857. cbInstr = 2;
  858. op1->Type = OPND_ADDRREF;
  859. op1->Reg = GP_SI;
  860. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  861. op2->Reg = REG110;
  862. break;
  863. case 0x75: // mod/rm = 01 101, reg=110
  864. cbInstr = 2;
  865. op1->Type = OPND_ADDRREF;
  866. op1->Reg = GP_DI;
  867. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  868. op2->Reg = REG110;
  869. break;
  870. case 0x76: // mod/rm = 01 110, reg=110
  871. cbInstr = 2;
  872. op1->Type = OPND_ADDRREF;
  873. op1->Reg = GP_BP;
  874. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  875. op2->Reg = REG110;
  876. break;
  877. case 0x77: // mod/rm = 01 111, reg=110
  878. cbInstr = 2;
  879. op1->Type = OPND_ADDRREF;
  880. op1->Reg = GP_BX;
  881. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  882. op2->Reg = REG110;
  883. break;
  884. case 0x78: // mod/rm = 01 000, reg=111
  885. cbInstr = 2;
  886. op1->Type = OPND_ADDRREF;
  887. op1->Reg = GP_BX;
  888. op1->IndexReg = GP_SI;
  889. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  890. op2->Reg = REG111;
  891. break;
  892. case 0x79: // mod/rm = 01 001, reg=111
  893. cbInstr = 2;
  894. op1->Type = OPND_ADDRREF;
  895. op1->Reg = GP_BX;
  896. op1->IndexReg = GP_DI;
  897. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  898. op2->Reg = REG111;
  899. break;
  900. case 0x7a: // mod/rm = 01 010, reg=111
  901. cbInstr = 2;
  902. op1->Type = OPND_ADDRREF;
  903. op1->Reg = GP_BP;
  904. op1->IndexReg = GP_SI;
  905. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  906. op2->Reg = REG111;
  907. break;
  908. case 0x7b: // mod/rm = 01 011, reg=111
  909. cbInstr = 2;
  910. op1->Type = OPND_ADDRREF;
  911. op1->Reg = GP_BP;
  912. op1->IndexReg = GP_DI;
  913. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  914. op2->Reg = REG111;
  915. break;
  916. case 0x7c: // mod/rm = 01 100, reg=111
  917. cbInstr = 2;
  918. op1->Type = OPND_ADDRREF;
  919. op1->Reg = GP_SI;
  920. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  921. op2->Reg = REG111;
  922. break;
  923. case 0x7d: // mod/rm = 01 101, reg=111
  924. cbInstr = 2;
  925. op1->Type = OPND_ADDRREF;
  926. op1->Reg = GP_DI;
  927. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  928. op2->Reg = REG111;
  929. break;
  930. case 0x7e: // mod/rm = 01 110, reg=111
  931. cbInstr = 2;
  932. op1->Type = OPND_ADDRREF;
  933. op1->Reg = GP_BP;
  934. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  935. op2->Reg = REG111;
  936. break;
  937. case 0x7f: // mod/rm = 01 111, reg=111
  938. cbInstr = 2;
  939. op1->Type = OPND_ADDRREF;
  940. op1->Reg = GP_BX;
  941. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  942. op2->Reg = REG111;
  943. break;
  944. /////////////////////////////////////////////////////////////////////
  945. case 0x80: // mod/rm = 10 000, reg=000
  946. cbInstr = 3;
  947. op1->Type = OPND_ADDRREF;
  948. op1->Reg = GP_BX;
  949. op1->IndexReg = GP_SI;
  950. op1->Immed = GET_SHORT(eipTemp+2);
  951. op2->Reg = REG000;
  952. break;
  953. case 0x81: // mod/rm = 10 001, reg=000
  954. cbInstr = 3;
  955. op1->Type = OPND_ADDRREF;
  956. op1->Reg = GP_BX;
  957. op1->IndexReg = GP_DI;
  958. op1->Immed = GET_SHORT(eipTemp+2);
  959. op2->Reg = REG000;
  960. break;
  961. case 0x82: // mod/rm = 10 010, reg=000
  962. cbInstr = 3;
  963. op1->Type = OPND_ADDRREF;
  964. op1->Reg = GP_BP;
  965. op1->IndexReg = GP_SI;
  966. op1->Immed = GET_SHORT(eipTemp+2);
  967. op2->Reg = REG000;
  968. break;
  969. case 0x83: // mod/rm = 10 011, reg=000
  970. cbInstr = 3;
  971. op1->Type = OPND_ADDRREF;
  972. op1->Reg = GP_BP;
  973. op1->IndexReg = GP_DI;
  974. op1->Immed = GET_SHORT(eipTemp+2);
  975. op2->Reg = REG000;
  976. break;
  977. case 0x84: // mod/rm = 10 100, reg=000
  978. cbInstr = 3;
  979. op1->Type = OPND_ADDRREF;
  980. op1->Reg = GP_SI;
  981. op1->Immed = GET_SHORT(eipTemp+2);
  982. op2->Reg = REG000;
  983. break;
  984. case 0x85: // mod/rm = 10 101, reg=000
  985. cbInstr = 3;
  986. op1->Type = OPND_ADDRREF;
  987. op1->Reg = GP_DI;
  988. op1->Immed = GET_SHORT(eipTemp+2);
  989. op2->Reg = REG000;
  990. break;
  991. case 0x86: // mod/rm = 10 110, reg=000
  992. cbInstr = 3;
  993. op1->Type = OPND_ADDRREF;
  994. op1->Reg = GP_BP;
  995. op1->Immed = GET_SHORT(eipTemp+2);
  996. op2->Reg = REG000;
  997. break;
  998. case 0x87: // mod/rm = 10 111, reg=000
  999. cbInstr = 3;
  1000. op1->Type = OPND_ADDRREF;
  1001. op1->Reg = GP_BX;
  1002. op1->Immed = GET_SHORT(eipTemp+2);
  1003. op2->Reg = REG000;
  1004. break;
  1005. case 0x88: // mod/rm = 10 000, reg=001
  1006. cbInstr = 3;
  1007. op1->Type = OPND_ADDRREF;
  1008. op1->Reg = GP_BX;
  1009. op1->IndexReg = GP_SI;
  1010. op1->Immed = GET_SHORT(eipTemp+2);
  1011. op2->Reg = REG001;
  1012. break;
  1013. case 0x89: // mod/rm = 10 001, reg=001
  1014. cbInstr = 3;
  1015. op1->Type = OPND_ADDRREF;
  1016. op1->Reg = GP_BX;
  1017. op1->IndexReg = GP_DI;
  1018. op1->Immed = GET_SHORT(eipTemp+2);
  1019. op2->Reg = REG001;
  1020. break;
  1021. case 0x8a: // mod/rm = 10 010, reg=001
  1022. cbInstr = 3;
  1023. op1->Type = OPND_ADDRREF;
  1024. op1->Reg = GP_BP;
  1025. op1->IndexReg = GP_SI;
  1026. op1->Immed = GET_SHORT(eipTemp+2);
  1027. op2->Reg = REG001;
  1028. break;
  1029. case 0x8b: // mod/rm = 10 011, reg=001
  1030. cbInstr = 3;
  1031. op1->Type = OPND_ADDRREF;
  1032. op1->Reg = GP_BP;
  1033. op1->IndexReg = GP_DI;
  1034. op1->Immed = GET_SHORT(eipTemp+2);
  1035. op2->Reg = REG001;
  1036. break;
  1037. case 0x8c: // mod/rm = 10 100, reg=001
  1038. cbInstr = 3;
  1039. op1->Type = OPND_ADDRREF;
  1040. op1->Reg = GP_SI;
  1041. op1->Immed = GET_SHORT(eipTemp+2);
  1042. op2->Reg = REG001;
  1043. break;
  1044. case 0x8d: // mod/rm = 10 101, reg=001
  1045. cbInstr = 3;
  1046. op1->Type = OPND_ADDRREF;
  1047. op1->Reg = GP_DI;
  1048. op1->Immed = GET_SHORT(eipTemp+2);
  1049. op2->Reg = REG001;
  1050. break;
  1051. case 0x8e: // mod/rm = 10 110, reg=001
  1052. cbInstr = 3;
  1053. op1->Type = OPND_ADDRREF;
  1054. op1->Reg = GP_BP;
  1055. op1->Immed = GET_SHORT(eipTemp+2);
  1056. op2->Reg = REG001;
  1057. break;
  1058. case 0x8f: // mod/rm = 10 111, reg=001
  1059. cbInstr = 3;
  1060. op1->Type = OPND_ADDRREF;
  1061. op1->Reg = GP_BX;
  1062. op1->Immed = GET_SHORT(eipTemp+2);
  1063. op2->Reg = REG001;
  1064. break;
  1065. case 0x90: // mod/rm = 10 000, reg=010
  1066. cbInstr = 3;
  1067. op1->Type = OPND_ADDRREF;
  1068. op1->Reg = GP_BX;
  1069. op1->IndexReg = GP_SI;
  1070. op1->Immed = GET_SHORT(eipTemp+2);
  1071. op2->Reg = REG010;
  1072. break;
  1073. case 0x91: // mod/rm = 10 001, reg=010
  1074. cbInstr = 3;
  1075. op1->Type = OPND_ADDRREF;
  1076. op1->Reg = GP_BX;
  1077. op1->IndexReg = GP_DI;
  1078. op1->Immed = GET_SHORT(eipTemp+2);
  1079. op2->Reg = REG010;
  1080. break;
  1081. case 0x92: // mod/rm = 10 010, reg=010
  1082. cbInstr = 3;
  1083. op1->Type = OPND_ADDRREF;
  1084. op1->Reg = GP_BP;
  1085. op1->IndexReg = GP_SI;
  1086. op1->Immed = GET_SHORT(eipTemp+2);
  1087. op2->Reg = REG010;
  1088. break;
  1089. case 0x93: // mod/rm = 10 011, reg=010
  1090. cbInstr = 3;
  1091. op1->Type = OPND_ADDRREF;
  1092. op1->Reg = GP_BP;
  1093. op1->IndexReg = GP_DI;
  1094. op1->Immed = GET_SHORT(eipTemp+2);
  1095. op2->Reg = REG010;
  1096. break;
  1097. case 0x94: // mod/rm = 10 100, reg=010
  1098. cbInstr = 3;
  1099. op1->Type = OPND_ADDRREF;
  1100. op1->Reg = GP_SI;
  1101. op1->Immed = GET_SHORT(eipTemp+2);
  1102. op2->Reg = REG010;
  1103. break;
  1104. case 0x95: // mod/rm = 10 101, reg=010
  1105. cbInstr = 3;
  1106. op1->Type = OPND_ADDRREF;
  1107. op1->Reg = GP_DI;
  1108. op1->Immed = GET_SHORT(eipTemp+2);
  1109. op2->Reg = REG010;
  1110. break;
  1111. case 0x96: // mod/rm = 10 110, reg=010
  1112. cbInstr = 3;
  1113. op1->Type = OPND_ADDRREF;
  1114. op1->Reg = GP_BP;
  1115. op1->Immed = GET_SHORT(eipTemp+2);
  1116. op2->Reg = REG010;
  1117. break;
  1118. case 0x97: // mod/rm = 10 111, reg=010
  1119. cbInstr = 3;
  1120. op1->Type = OPND_ADDRREF;
  1121. op1->Reg = GP_BX;
  1122. op1->Immed = GET_SHORT(eipTemp+2);
  1123. op2->Reg = REG010;
  1124. break;
  1125. case 0x98: // mod/rm = 10 000, reg=011
  1126. cbInstr = 3;
  1127. op1->Type = OPND_ADDRREF;
  1128. op1->Reg = GP_BX;
  1129. op1->IndexReg = GP_SI;
  1130. op1->Immed = GET_SHORT(eipTemp+2);
  1131. op2->Reg = REG011;
  1132. break;
  1133. case 0x99: // mod/rm = 10 001, reg=011
  1134. cbInstr = 3;
  1135. op1->Type = OPND_ADDRREF;
  1136. op1->Reg = GP_BX;
  1137. op1->IndexReg = GP_DI;
  1138. op1->Immed = GET_SHORT(eipTemp+2);
  1139. op2->Reg = REG011;
  1140. break;
  1141. case 0x9a: // mod/rm = 10 010, reg=011
  1142. cbInstr = 3;
  1143. op1->Type = OPND_ADDRREF;
  1144. op1->Reg = GP_BP;
  1145. op1->IndexReg = GP_SI;
  1146. op1->Immed = GET_SHORT(eipTemp+2);
  1147. op2->Reg = REG011;
  1148. break;
  1149. case 0x9b: // mod/rm = 10 011, reg=011
  1150. cbInstr = 3;
  1151. op1->Type = OPND_ADDRREF;
  1152. op1->Reg = GP_BP;
  1153. op1->IndexReg = GP_DI;
  1154. op1->Immed = GET_SHORT(eipTemp+2);
  1155. op2->Reg = REG011;
  1156. break;
  1157. case 0x9c: // mod/rm = 10 100, reg=011
  1158. cbInstr = 3;
  1159. op1->Type = OPND_ADDRREF;
  1160. op1->Reg = GP_SI;
  1161. op1->Immed = GET_SHORT(eipTemp+2);
  1162. op2->Reg = REG011;
  1163. break;
  1164. case 0x9d: // mod/rm = 10 101, reg=011
  1165. cbInstr = 3;
  1166. op1->Type = OPND_ADDRREF;
  1167. op1->Reg = GP_DI;
  1168. op1->Immed = GET_SHORT(eipTemp+2);
  1169. op2->Reg = REG011;
  1170. break;
  1171. case 0x9e: // mod/rm = 10 110, reg=011
  1172. cbInstr = 3;
  1173. op1->Type = OPND_ADDRREF;
  1174. op1->Reg = GP_BP;
  1175. op1->Immed = GET_SHORT(eipTemp+2);
  1176. op2->Reg = REG011;
  1177. break;
  1178. case 0x9f: // mod/rm = 10 111, reg=011
  1179. cbInstr = 3;
  1180. op1->Type = OPND_ADDRREF;
  1181. op1->Reg = GP_BX;
  1182. op1->Immed = GET_SHORT(eipTemp+2);
  1183. op2->Reg = REG011;
  1184. break;
  1185. case 0xa0: // mod/rm = 10 000, reg=100
  1186. cbInstr = 3;
  1187. op1->Type = OPND_ADDRREF;
  1188. op1->Reg = GP_BX;
  1189. op1->IndexReg = GP_SI;
  1190. op1->Immed = GET_SHORT(eipTemp+2);
  1191. op2->Reg = REG100;
  1192. break;
  1193. case 0xa1: // mod/rm = 10 001, reg=100
  1194. cbInstr = 3;
  1195. op1->Type = OPND_ADDRREF;
  1196. op1->Reg = GP_BX;
  1197. op1->IndexReg = GP_DI;
  1198. op1->Immed = GET_SHORT(eipTemp+2);
  1199. op2->Reg = REG100;
  1200. break;
  1201. case 0xa2: // mod/rm = 10 010, reg=100
  1202. cbInstr = 3;
  1203. op1->Type = OPND_ADDRREF;
  1204. op1->Reg = GP_BP;
  1205. op1->IndexReg = GP_SI;
  1206. op1->Immed = GET_SHORT(eipTemp+2);
  1207. op2->Reg = REG100;
  1208. break;
  1209. case 0xa3: // mod/rm = 10 011, reg=100
  1210. cbInstr = 3;
  1211. op1->Type = OPND_ADDRREF;
  1212. op1->Reg = GP_BP;
  1213. op1->IndexReg = GP_DI;
  1214. op1->Immed = GET_SHORT(eipTemp+2);
  1215. op2->Reg = REG100;
  1216. break;
  1217. case 0xa4: // mod/rm = 10 100, reg=100
  1218. cbInstr = 3;
  1219. op1->Type = OPND_ADDRREF;
  1220. op1->Reg = GP_SI;
  1221. op1->Immed = GET_SHORT(eipTemp+2);
  1222. op2->Reg = REG100;
  1223. break;
  1224. case 0xa5: // mod/rm = 10 101, reg=100
  1225. cbInstr = 3;
  1226. op1->Type = OPND_ADDRREF;
  1227. op1->Reg = GP_DI;
  1228. op1->Immed = GET_SHORT(eipTemp+2);
  1229. op2->Reg = REG100;
  1230. break;
  1231. case 0xa6: // mod/rm = 10 110, reg=100
  1232. cbInstr = 3;
  1233. op1->Type = OPND_ADDRREF;
  1234. op1->Reg = GP_BP;
  1235. op1->Immed = GET_SHORT(eipTemp+2);
  1236. op2->Reg = REG100;
  1237. break;
  1238. case 0xa7: // mod/rm = 10 111, reg=100
  1239. cbInstr = 3;
  1240. op1->Type = OPND_ADDRREF;
  1241. op1->Reg = GP_BX;
  1242. op1->Immed = GET_SHORT(eipTemp+2);
  1243. op2->Reg = REG100;
  1244. break;
  1245. case 0xa8: // mod/rm = 10 000, reg=101
  1246. cbInstr = 3;
  1247. op1->Type = OPND_ADDRREF;
  1248. op1->Reg = GP_BX;
  1249. op1->IndexReg = GP_SI;
  1250. op1->Immed = GET_SHORT(eipTemp+2);
  1251. op2->Reg = REG101;
  1252. break;
  1253. case 0xa9: // mod/rm = 10 001, reg=101
  1254. cbInstr = 3;
  1255. op1->Type = OPND_ADDRREF;
  1256. op1->Reg = GP_BX;
  1257. op1->IndexReg = GP_DI;
  1258. op1->Immed = GET_SHORT(eipTemp+2);
  1259. op2->Reg = REG101;
  1260. break;
  1261. case 0xaa: // mod/rm = 10 010, reg=101
  1262. cbInstr = 3;
  1263. op1->Type = OPND_ADDRREF;
  1264. op1->Reg = GP_BP;
  1265. op1->IndexReg = GP_SI;
  1266. op1->Immed = GET_SHORT(eipTemp+2);
  1267. op2->Reg = REG101;
  1268. break;
  1269. case 0xab: // mod/rm = 10 011, reg=101
  1270. cbInstr = 3;
  1271. op1->Type = OPND_ADDRREF;
  1272. op1->Reg = GP_BP;
  1273. op1->IndexReg = GP_DI;
  1274. op1->Immed = GET_SHORT(eipTemp+2);
  1275. op2->Reg = REG101;
  1276. break;
  1277. case 0xac: // mod/rm = 10 100, reg=101
  1278. cbInstr = 3;
  1279. op1->Type = OPND_ADDRREF;
  1280. op1->Reg = GP_SI;
  1281. op1->Immed = GET_SHORT(eipTemp+2);
  1282. op2->Reg = REG101;
  1283. break;
  1284. case 0xad: // mod/rm = 10 101, reg=101
  1285. cbInstr = 3;
  1286. op1->Type = OPND_ADDRREF;
  1287. op1->Reg = GP_DI;
  1288. op1->Immed = GET_SHORT(eipTemp+2);
  1289. op2->Reg = REG101;
  1290. break;
  1291. case 0xae: // mod/rm = 10 110, reg=101
  1292. cbInstr = 3;
  1293. op1->Type = OPND_ADDRREF;
  1294. op1->Reg = GP_BP;
  1295. op1->Immed = GET_SHORT(eipTemp+2);
  1296. op2->Reg = REG101;
  1297. break;
  1298. case 0xaf: // mod/rm = 10 111, reg=101
  1299. cbInstr = 3;
  1300. op1->Type = OPND_ADDRREF;
  1301. op1->Reg = GP_BX;
  1302. op1->Immed = GET_SHORT(eipTemp+2);
  1303. op2->Reg = REG101;
  1304. break;
  1305. case 0xb0: // mod/rm = 10 000, reg=110
  1306. cbInstr = 3;
  1307. op1->Type = OPND_ADDRREF;
  1308. op1->Reg = GP_BX;
  1309. op1->IndexReg = GP_SI;
  1310. op1->Immed = GET_SHORT(eipTemp+2);
  1311. op2->Reg = REG110;
  1312. break;
  1313. case 0xb1: // mod/rm = 10 001, reg=110
  1314. cbInstr = 3;
  1315. op1->Type = OPND_ADDRREF;
  1316. op1->Reg = GP_BX;
  1317. op1->IndexReg = GP_DI;
  1318. op1->Immed = GET_SHORT(eipTemp+2);
  1319. op2->Reg = REG110;
  1320. break;
  1321. case 0xb2: // mod/rm = 10 010, reg=110
  1322. cbInstr = 3;
  1323. op1->Type = OPND_ADDRREF;
  1324. op1->Reg = GP_BP;
  1325. op1->IndexReg = GP_SI;
  1326. op1->Immed = GET_SHORT(eipTemp+2);
  1327. op2->Reg = REG110;
  1328. break;
  1329. case 0xb3: // mod/rm = 10 011, reg=110
  1330. cbInstr = 3;
  1331. op1->Type = OPND_ADDRREF;
  1332. op1->Reg = GP_BP;
  1333. op1->IndexReg = GP_DI;
  1334. op1->Immed = GET_SHORT(eipTemp+2);
  1335. op2->Reg = REG110;
  1336. break;
  1337. case 0xb4: // mod/rm = 10 100, reg=110
  1338. cbInstr = 3;
  1339. op1->Type = OPND_ADDRREF;
  1340. op1->Reg = GP_SI;
  1341. op1->Immed = GET_SHORT(eipTemp+2);
  1342. op2->Reg = REG110;
  1343. break;
  1344. case 0xb5: // mod/rm = 10 101, reg=110
  1345. cbInstr = 3;
  1346. op1->Type = OPND_ADDRREF;
  1347. op1->Reg = GP_DI;
  1348. op1->Immed = GET_SHORT(eipTemp+2);
  1349. op2->Reg = REG110;
  1350. break;
  1351. case 0xb6: // mod/rm = 10 110, reg=110
  1352. cbInstr = 3;
  1353. op1->Type = OPND_ADDRREF;
  1354. op1->Reg = GP_BP;
  1355. op1->Immed = GET_SHORT(eipTemp+2);
  1356. op2->Reg = REG110;
  1357. break;
  1358. case 0xb7: // mod/rm = 10 111, reg=110
  1359. cbInstr = 3;
  1360. op1->Type = OPND_ADDRREF;
  1361. op1->Reg = GP_BX;
  1362. op1->Immed = GET_SHORT(eipTemp+2);
  1363. op2->Reg = REG110;
  1364. break;
  1365. case 0xb8: // mod/rm = 10 000, reg=111
  1366. cbInstr = 3;
  1367. op1->Type = OPND_ADDRREF;
  1368. op1->Reg = GP_BX;
  1369. op1->IndexReg = GP_SI;
  1370. op1->Immed = GET_SHORT(eipTemp+2);
  1371. op2->Reg = REG111;
  1372. break;
  1373. case 0xb9: // mod/rm = 10 001, reg=111
  1374. cbInstr = 3;
  1375. op1->Type = OPND_ADDRREF;
  1376. op1->Reg = GP_BX;
  1377. op1->IndexReg = GP_DI;
  1378. op1->Immed = GET_SHORT(eipTemp+2);
  1379. op2->Reg = REG111;
  1380. break;
  1381. case 0xba: // mod/rm = 10 010, reg=111
  1382. cbInstr = 3;
  1383. op1->Type = OPND_ADDRREF;
  1384. op1->Reg = GP_BP;
  1385. op1->IndexReg = GP_SI;
  1386. op1->Immed = GET_SHORT(eipTemp+2);
  1387. op2->Reg = REG111;
  1388. break;
  1389. case 0xbb: // mod/rm = 10 011, reg=111
  1390. cbInstr = 3;
  1391. op1->Type = OPND_ADDRREF;
  1392. op1->Reg = GP_BP;
  1393. op1->IndexReg = GP_DI;
  1394. op1->Immed = GET_SHORT(eipTemp+2);
  1395. op2->Reg = REG111;
  1396. break;
  1397. case 0xbc: // mod/rm = 10 100, reg=111
  1398. cbInstr = 3;
  1399. op1->Type = OPND_ADDRREF;
  1400. op1->Reg = GP_SI;
  1401. op1->Immed = GET_SHORT(eipTemp+2);
  1402. op2->Reg = REG111;
  1403. break;
  1404. case 0xbd: // mod/rm = 10 101, reg=111
  1405. cbInstr = 3;
  1406. op1->Type = OPND_ADDRREF;
  1407. op1->Reg = GP_DI;
  1408. op1->Immed = GET_SHORT(eipTemp+2);
  1409. op2->Reg = REG111;
  1410. break;
  1411. case 0xbe: // mod/rm = 10 110, reg=111
  1412. cbInstr = 3;
  1413. op1->Type = OPND_ADDRREF;
  1414. op1->Reg = GP_BP;
  1415. op1->Immed = GET_SHORT(eipTemp+2);
  1416. op2->Reg = REG111;
  1417. break;
  1418. case 0xbf: // mod/rm = 10 111, reg=111
  1419. cbInstr = 3;
  1420. op1->Type = OPND_ADDRREF;
  1421. op1->Reg = GP_BX;
  1422. op1->Immed = GET_SHORT(eipTemp+2);
  1423. op2->Reg = REG111;
  1424. break;
  1425. /////////////////////////////////////////////////////////////////////
  1426. case 0xc0: // mod/rm = 11 000, reg=000
  1427. cbInstr = 1;
  1428. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1429. op2->Reg = REG000;
  1430. break;
  1431. case 0xc1: // mod/rm = 11 001, reg=000
  1432. cbInstr = 1;
  1433. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1434. op2->Reg = REG000;
  1435. break;
  1436. case 0xc2: // mod/rm = 11 010, reg=000
  1437. cbInstr = 1;
  1438. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1439. op2->Reg = REG000;
  1440. break;
  1441. case 0xc3: // mod/rm = 11 011, reg=000
  1442. cbInstr = 1;
  1443. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1444. op2->Reg = REG000;
  1445. break;
  1446. case 0xc4: // mod/rm = 11 100, reg=000
  1447. cbInstr = 1;
  1448. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1449. op2->Reg = REG000;
  1450. break;
  1451. case 0xc5: // mod/rm = 11 101, reg=000
  1452. cbInstr = 1;
  1453. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1454. op2->Reg = REG000;
  1455. break;
  1456. case 0xc6: // mod/rm = 11 110, reg=000
  1457. cbInstr = 1;
  1458. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1459. op2->Reg = REG000;
  1460. break;
  1461. case 0xc7: // mod/rm = 11 111, reg=000
  1462. cbInstr = 1;
  1463. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1464. op2->Reg = REG000;
  1465. break;
  1466. case 0xc8: // mod/rm = 11 000, reg=001
  1467. cbInstr = 1;
  1468. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1469. op2->Reg = REG001;
  1470. break;
  1471. case 0xc9: // mod/rm = 11 001, reg=001
  1472. cbInstr = 1;
  1473. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1474. op2->Reg = REG001;
  1475. break;
  1476. case 0xca: // mod/rm = 11 010, reg=001
  1477. cbInstr = 1;
  1478. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1479. op2->Reg = REG001;
  1480. break;
  1481. case 0xcb: // mod/rm = 11 011, reg=001
  1482. cbInstr = 1;
  1483. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1484. op2->Reg = REG001;
  1485. break;
  1486. case 0xcc: // mod/rm = 11 100, reg=001
  1487. cbInstr = 1;
  1488. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1489. op2->Reg = REG001;
  1490. break;
  1491. case 0xcd: // mod/rm = 11 101, reg=001
  1492. cbInstr = 1;
  1493. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1494. op2->Reg = REG001;
  1495. break;
  1496. case 0xce: // mod/rm = 11 110, reg=001
  1497. cbInstr = 1;
  1498. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1499. op2->Reg = REG001;
  1500. break;
  1501. case 0xcf: // mod/rm = 11 111, reg=001
  1502. cbInstr = 1;
  1503. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1504. op2->Reg = REG001;
  1505. break;
  1506. case 0xd0: // mod/rm = 11 000, reg=010
  1507. cbInstr = 1;
  1508. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1509. op2->Reg = REG010;
  1510. break;
  1511. case 0xd1: // mod/rm = 11 001, reg=010
  1512. cbInstr = 1;
  1513. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1514. op2->Reg = REG010;
  1515. break;
  1516. case 0xd2: // mod/rm = 11 010, reg=010
  1517. cbInstr = 1;
  1518. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1519. op2->Reg = REG010;
  1520. break;
  1521. case 0xd3: // mod/rm = 11 011, reg=001
  1522. cbInstr = 1;
  1523. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1524. op2->Reg = REG010;
  1525. break;
  1526. case 0xd4: // mod/rm = 11 100, reg=010
  1527. cbInstr = 1;
  1528. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1529. op2->Reg = REG010;
  1530. break;
  1531. case 0xd5: // mod/rm = 11 101, reg=010
  1532. cbInstr = 1;
  1533. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1534. op2->Reg = REG010;
  1535. break;
  1536. case 0xd6: // mod/rm = 11 110, reg=010
  1537. cbInstr = 1;
  1538. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1539. op2->Reg = REG010;
  1540. break;
  1541. case 0xd7: // mod/rm = 11 111, reg=010
  1542. cbInstr = 1;
  1543. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1544. op2->Reg = REG010;
  1545. break;
  1546. case 0xd8: // mod/rm = 11 000, reg=011
  1547. cbInstr = 1;
  1548. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1549. op2->Reg = REG011;
  1550. break;
  1551. case 0xd9: // mod/rm = 11 001, reg=011
  1552. cbInstr = 1;
  1553. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1554. op2->Reg = REG011;
  1555. break;
  1556. case 0xda: // mod/rm = 11 010, reg=011
  1557. cbInstr = 1;
  1558. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1559. op2->Reg = REG011;
  1560. break;
  1561. case 0xdb: // mod/rm = 11 011, reg=011
  1562. cbInstr = 1;
  1563. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1564. op2->Reg = REG011;
  1565. break;
  1566. case 0xdc: // mod/rm = 11 100, reg=011
  1567. cbInstr = 1;
  1568. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1569. op2->Reg = REG011;
  1570. break;
  1571. case 0xdd: // mod/rm = 11 101, reg=011
  1572. cbInstr = 1;
  1573. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1574. op2->Reg = REG011;
  1575. break;
  1576. case 0xde: // mod/rm = 11 110, reg=011
  1577. cbInstr = 1;
  1578. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1579. op2->Reg = REG011;
  1580. break;
  1581. case 0xdf: // mod/rm = 11 111, reg=011
  1582. cbInstr = 1;
  1583. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1584. op2->Reg = REG011;
  1585. break;
  1586. case 0xe0: // mod/rm = 11 000, reg=100
  1587. cbInstr = 1;
  1588. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1589. op2->Reg = REG100;
  1590. break;
  1591. case 0xe1: // mod/rm = 11 001, reg=100
  1592. cbInstr = 1;
  1593. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1594. op2->Reg = REG100;
  1595. break;
  1596. case 0xe2: // mod/rm = 11 010, reg=100
  1597. cbInstr = 1;
  1598. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1599. op2->Reg = REG100;
  1600. break;
  1601. case 0xe3: // mod/rm = 11 011, reg=100
  1602. cbInstr = 1;
  1603. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1604. op2->Reg = REG100;
  1605. break;
  1606. case 0xe4: // mod/rm = 11 100, reg=100
  1607. cbInstr = 1;
  1608. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1609. op2->Reg = REG100;
  1610. break;
  1611. case 0xe5: // mod/rm = 11 101, reg=100
  1612. cbInstr = 1;
  1613. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1614. op2->Reg = REG100;
  1615. break;
  1616. case 0xe6: // mod/rm = 11 110, reg=100
  1617. cbInstr = 1;
  1618. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1619. op2->Reg = REG100;
  1620. break;
  1621. case 0xe7: // mod/rm = 11 111, reg=100
  1622. cbInstr = 1;
  1623. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1624. op2->Reg = REG100;
  1625. break;
  1626. case 0xe8: // mod/rm = 11 000, reg=101
  1627. cbInstr = 1;
  1628. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1629. op2->Reg = REG101;
  1630. break;
  1631. case 0xe9: // mod/rm = 11 001, reg=101
  1632. cbInstr = 1;
  1633. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1634. op2->Reg = REG101;
  1635. break;
  1636. case 0xea: // mod/rm = 11 010, reg=101
  1637. cbInstr = 1;
  1638. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1639. op2->Reg = REG101;
  1640. break;
  1641. case 0xeb: // mod/rm = 11 011, reg=101
  1642. cbInstr = 1;
  1643. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1644. op2->Reg = REG101;
  1645. break;
  1646. case 0xec: // mod/rm = 11 100, reg=101
  1647. cbInstr = 1;
  1648. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1649. op2->Reg = REG101;
  1650. break;
  1651. case 0xed: // mod/rm = 11 101, reg=101
  1652. cbInstr = 1;
  1653. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1654. op2->Reg = REG101;
  1655. break;
  1656. case 0xee: // mod/rm = 11 110, reg=101
  1657. cbInstr = 1;
  1658. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1659. op2->Reg = REG101;
  1660. break;
  1661. case 0xef: // mod/rm = 11 111, reg=101
  1662. cbInstr = 1;
  1663. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1664. op2->Reg = REG101;
  1665. break;
  1666. case 0xf0: // mod/rm = 11 000, reg=110
  1667. cbInstr = 1;
  1668. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1669. op2->Reg = REG110;
  1670. break;
  1671. case 0xf1: // mod/rm = 11 001, reg=110
  1672. cbInstr = 1;
  1673. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1674. op2->Reg = REG110;
  1675. break;
  1676. case 0xf2: // mod/rm = 11 010, reg=110
  1677. cbInstr = 1;
  1678. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1679. op2->Reg = REG110;
  1680. break;
  1681. case 0xf3: // mod/rm = 11 011, reg=110
  1682. cbInstr = 1;
  1683. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1684. op2->Reg = REG110;
  1685. break;
  1686. case 0xf4: // mod/rm = 11 100, reg=110
  1687. cbInstr = 1;
  1688. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1689. op2->Reg = REG110;
  1690. break;
  1691. case 0xf5: // mod/rm = 11 101, reg=110
  1692. cbInstr = 1;
  1693. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1694. op2->Reg = REG110;
  1695. break;
  1696. case 0xf6: // mod/rm = 11 110, reg=110
  1697. cbInstr = 1;
  1698. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1699. op2->Reg = REG110;
  1700. break;
  1701. case 0xf7: // mod/rm = 11 111, reg=110
  1702. cbInstr = 1;
  1703. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1704. op2->Reg = REG110;
  1705. break;
  1706. case 0xf8: // mod/rm = 11 000, reg=111
  1707. cbInstr = 1;
  1708. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  1709. op2->Reg = REG111;
  1710. break;
  1711. case 0xf9: // mod/rm = 11 001, reg=111
  1712. cbInstr = 1;
  1713. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  1714. op2->Reg = REG111;
  1715. break;
  1716. case 0xfa: // mod/rm = 11 010, reg=111
  1717. cbInstr = 1;
  1718. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  1719. op2->Reg = REG111;
  1720. break;
  1721. case 0xfb: // mod/rm = 11 011, reg=111
  1722. cbInstr = 1;
  1723. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  1724. op2->Reg = REG111;
  1725. break;
  1726. case 0xfc: // mod/rm = 11 100, reg=111
  1727. cbInstr = 1;
  1728. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  1729. op2->Reg = REG111;
  1730. break;
  1731. case 0xfd: // mod/rm = 11 101, reg=111
  1732. cbInstr = 1;
  1733. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  1734. op2->Reg = REG111;
  1735. break;
  1736. case 0xfe: // mod/rm = 11 110, reg=111
  1737. cbInstr = 1;
  1738. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  1739. op2->Reg = REG111;
  1740. break;
  1741. default:
  1742. case 0xff: // mod/rm = 11 111, reg=111
  1743. cbInstr = 1;
  1744. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  1745. op2->Reg = REG111;
  1746. break;
  1747. }
  1748. #if DBG
  1749. State->AdrPrefix = FALSE;
  1750. #endif
  1751. return cbInstr;
  1752. }
  1753. // else no ADR: prefix found...
  1754. // mm aaa rrr
  1755. // | | |
  1756. // | | +--- 'rm' bits from mod/rm
  1757. // | +------- reg bits
  1758. // +---------- 'mod' bits from mod/rm
  1759. switch (*(PBYTE)(eipTemp+1)) {
  1760. case 0x00: // mod/rm = 00 000, reg=000
  1761. cbInstr = 1;
  1762. op1->Type = OPND_ADDRREF;
  1763. op1->Reg = GP_EAX;
  1764. op2->Reg = REG000;
  1765. break;
  1766. case 0x01: // mod/rm = 00 001, reg=000
  1767. cbInstr = 1;
  1768. op1->Type = OPND_ADDRREF;
  1769. op1->Reg = GP_ECX;
  1770. op2->Reg = REG000;
  1771. break;
  1772. case 0x02: // mod/rm = 00 010, reg=000
  1773. cbInstr = 1;
  1774. op1->Type = OPND_ADDRREF;
  1775. op1->Reg = GP_EDX;
  1776. op2->Reg = REG000;
  1777. break;
  1778. case 0x03: // mod/rm = 00 011, reg=000
  1779. cbInstr = 1;
  1780. op1->Type = OPND_ADDRREF;
  1781. op1->Reg = GP_EBX;
  1782. op2->Reg = REG000;
  1783. break;
  1784. case 0x04: // mod/rm = 00 100, reg=000
  1785. // s-i-b present
  1786. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  1787. op2->Reg = REG000;
  1788. break;
  1789. case 0x05: // mod/rm = 00 101, reg=000
  1790. cbInstr = 5;
  1791. op1->Type = OPND_ADDRREF;
  1792. op1->Immed = GET_LONG(eipTemp+2);
  1793. op2->Reg = REG000;
  1794. break;
  1795. case 0x06: // mod/rm = 00 110, reg=000
  1796. cbInstr = 1;
  1797. op1->Type = OPND_ADDRREF;
  1798. op1->Reg = GP_ESI;
  1799. op2->Reg = REG000;
  1800. break;
  1801. case 0x07: // mod/rm = 00 111, reg=000
  1802. cbInstr = 1;
  1803. op1->Type = OPND_ADDRREF;
  1804. op1->Reg = GP_EDI;
  1805. op2->Reg = REG000;
  1806. break;
  1807. case 0x08: // mod/rm = 00 000, reg=001
  1808. cbInstr = 1;
  1809. op1->Type = OPND_ADDRREF;
  1810. op1->Reg = GP_EAX;
  1811. op2->Reg = REG001;
  1812. break;
  1813. case 0x09: // mod/rm = 00 001, reg=001
  1814. cbInstr = 1;
  1815. op1->Type = OPND_ADDRREF;
  1816. op1->Reg = GP_ECX;
  1817. op2->Reg = REG001;
  1818. break;
  1819. case 0x0a: // mod/rm = 00 010, reg=001
  1820. cbInstr = 1;
  1821. op1->Type = OPND_ADDRREF;
  1822. op1->Reg = GP_EDX;
  1823. op2->Reg = REG001;
  1824. break;
  1825. case 0x0b: // mod/rm = 00 011, reg=001
  1826. cbInstr = 1;
  1827. op1->Type = OPND_ADDRREF;
  1828. op1->Reg = GP_EBX;
  1829. op2->Reg = REG001;
  1830. break;
  1831. case 0x0c: // mod/rm = 00 100, reg=001
  1832. // s-i-b present
  1833. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  1834. op2->Reg = REG001;
  1835. break;
  1836. case 0x0d: // mod/rm = 00 101, reg=001
  1837. cbInstr = 5;
  1838. op1->Type = OPND_ADDRREF;
  1839. op1->Immed = GET_LONG(eipTemp+2);
  1840. op2->Reg = REG001;
  1841. break;
  1842. case 0x0e: // mod/rm = 00 110, reg=001
  1843. cbInstr = 1;
  1844. op1->Type = OPND_ADDRREF;
  1845. op1->Reg = GP_ESI;
  1846. op2->Reg = REG001;
  1847. break;
  1848. case 0x0f: // mod/rm = 00 111, reg=001
  1849. cbInstr = 1;
  1850. op1->Type = OPND_ADDRREF;
  1851. op1->Reg = GP_EDI;
  1852. op2->Reg = REG001;
  1853. break;
  1854. case 0x10: // mod/rm = 00 000, reg=010
  1855. cbInstr = 1;
  1856. op1->Type = OPND_ADDRREF;
  1857. op1->Reg = GP_EAX;
  1858. op2->Reg = REG010;
  1859. break;
  1860. case 0x11: // mod/rm = 00 001, reg=010
  1861. cbInstr = 1;
  1862. op1->Type = OPND_ADDRREF;
  1863. op1->Reg = GP_ECX;
  1864. op2->Reg = REG010;
  1865. break;
  1866. case 0x12: // mod/rm = 00 010, reg=010
  1867. cbInstr = 1;
  1868. op1->Type = OPND_ADDRREF;
  1869. op1->Reg = GP_EDX;
  1870. op2->Reg = REG010;
  1871. break;
  1872. case 0x13: // mod/rm = 00 011, reg=001
  1873. cbInstr = 1;
  1874. op1->Type = OPND_ADDRREF;
  1875. op1->Reg = GP_EBX;
  1876. op2->Reg = REG010;
  1877. break;
  1878. case 0x14: // mod/rm = 00 100, reg=010
  1879. // s-i-b present
  1880. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  1881. op2->Reg = REG010;
  1882. break;
  1883. case 0x15: // mod/rm = 00 101, reg=010
  1884. cbInstr = 5;
  1885. op1->Type = OPND_ADDRREF;
  1886. op1->Immed = GET_LONG(eipTemp+2);
  1887. op2->Reg = REG010;
  1888. break;
  1889. case 0x16: // mod/rm = 00 110, reg=010
  1890. cbInstr = 1;
  1891. op1->Type = OPND_ADDRREF;
  1892. op1->Reg = GP_ESI;
  1893. op2->Reg = REG010;
  1894. break;
  1895. case 0x17: // mod/rm = 00 111, reg=010
  1896. cbInstr = 1;
  1897. op1->Type = OPND_ADDRREF;
  1898. op1->Reg = GP_EDI;
  1899. op2->Reg = REG010;
  1900. break;
  1901. case 0x18: // mod/rm = 00 000, reg=011
  1902. cbInstr = 1;
  1903. op1->Type = OPND_ADDRREF;
  1904. op1->Reg = GP_EAX;
  1905. op2->Reg = REG011;
  1906. break;
  1907. case 0x19: // mod/rm = 00 001, reg=011
  1908. cbInstr = 1;
  1909. op1->Type = OPND_ADDRREF;
  1910. op1->Reg = GP_ECX;
  1911. op2->Reg = REG011;
  1912. break;
  1913. case 0x1a: // mod/rm = 00 010, reg=011
  1914. cbInstr = 1;
  1915. op1->Type = OPND_ADDRREF;
  1916. op1->Reg = GP_EDX;
  1917. op2->Reg = REG011;
  1918. break;
  1919. case 0x1b: // mod/rm = 00 011, reg=011
  1920. cbInstr = 1;
  1921. op1->Type = OPND_ADDRREF;
  1922. op1->Reg = GP_EBX;
  1923. op2->Reg = REG011;
  1924. break;
  1925. case 0x1c: // mod/rm = 00 100, reg=011
  1926. // s-i-b present
  1927. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  1928. op2->Reg = REG011;
  1929. break;
  1930. case 0x1d: // mod/rm = 00 101, reg=011
  1931. cbInstr = 5;
  1932. op1->Type = OPND_ADDRREF;
  1933. op1->Immed = GET_LONG(eipTemp+2);
  1934. op2->Reg = REG011;
  1935. break;
  1936. case 0x1e: // mod/rm = 00 110, reg=011
  1937. cbInstr = 1;
  1938. op1->Type = OPND_ADDRREF;
  1939. op1->Reg = GP_ESI;
  1940. op2->Reg = REG011;
  1941. break;
  1942. case 0x1f: // mod/rm = 00 111, reg=011
  1943. cbInstr = 1;
  1944. op1->Type = OPND_ADDRREF;
  1945. op1->Reg = GP_EDI;
  1946. op2->Reg = REG011;
  1947. break;
  1948. case 0x20: // mod/rm = 00 000, reg=100
  1949. cbInstr = 1;
  1950. op1->Type = OPND_ADDRREF;
  1951. op1->Reg = GP_EAX;
  1952. op2->Reg = REG100;
  1953. break;
  1954. case 0x21: // mod/rm = 00 001, reg=100
  1955. cbInstr = 1;
  1956. op1->Type = OPND_ADDRREF;
  1957. op1->Reg = GP_ECX;
  1958. op2->Reg = REG100;
  1959. break;
  1960. case 0x22: // mod/rm = 00 010, reg=100
  1961. cbInstr = 1;
  1962. op1->Type = OPND_ADDRREF;
  1963. op1->Reg = GP_EDX;
  1964. op2->Reg = REG100;
  1965. break;
  1966. case 0x23: // mod/rm = 00 011, reg=100
  1967. cbInstr = 1;
  1968. op1->Type = OPND_ADDRREF;
  1969. op1->Reg = GP_EBX;
  1970. op2->Reg = REG100;
  1971. break;
  1972. case 0x24: // mod/rm = 00 100, reg=100
  1973. // s-i-b present
  1974. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  1975. op2->Reg = REG100;
  1976. break;
  1977. case 0x25: // mod/rm = 00 101, reg=100
  1978. cbInstr = 5;
  1979. op1->Type = OPND_ADDRREF;
  1980. op1->Immed = GET_LONG(eipTemp+2);
  1981. op2->Reg = REG100;
  1982. break;
  1983. case 0x26: // mod/rm = 00 110, reg=100
  1984. cbInstr = 1;
  1985. op1->Type = OPND_ADDRREF;
  1986. op1->Reg = GP_ESI;
  1987. op2->Reg = REG100;
  1988. break;
  1989. case 0x27: // mod/rm = 00 111, reg=100
  1990. cbInstr = 1;
  1991. op1->Type = OPND_ADDRREF;
  1992. op1->Reg = GP_EDI;
  1993. op2->Reg = REG100;
  1994. break;
  1995. case 0x28: // mod/rm = 00 000, reg=101
  1996. cbInstr = 1;
  1997. op1->Type = OPND_ADDRREF;
  1998. op1->Reg = GP_EAX;
  1999. op2->Reg = REG101;
  2000. break;
  2001. case 0x29: // mod/rm = 00 001, reg=101
  2002. cbInstr = 1;
  2003. op1->Type = OPND_ADDRREF;
  2004. op1->Reg = GP_ECX;
  2005. op2->Reg = REG101;
  2006. break;
  2007. case 0x2a: // mod/rm = 00 010, reg=101
  2008. cbInstr = 1;
  2009. op1->Type = OPND_ADDRREF;
  2010. op1->Reg = GP_EDX;
  2011. op2->Reg = REG101;
  2012. break;
  2013. case 0x2b: // mod/rm = 00 011, reg=101
  2014. cbInstr = 1;
  2015. op1->Type = OPND_ADDRREF;
  2016. op1->Reg = GP_EBX;
  2017. op2->Reg = REG101;
  2018. break;
  2019. case 0x2c: // mod/rm = 00 100, reg=101
  2020. // s-i-b present
  2021. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  2022. op2->Reg = REG101;
  2023. break;
  2024. case 0x2d: // mod/rm = 00 101, reg=101
  2025. cbInstr = 5;
  2026. op1->Type = OPND_ADDRREF;
  2027. op1->Immed = GET_LONG(eipTemp+2);
  2028. op2->Reg = REG101;
  2029. break;
  2030. case 0x2e: // mod/rm = 00 110, reg=101
  2031. cbInstr = 1;
  2032. op1->Type = OPND_ADDRREF;
  2033. op1->Reg = GP_ESI;
  2034. op2->Reg = REG101;
  2035. break;
  2036. case 0x2f: // mod/rm = 00 111, reg=101
  2037. cbInstr = 1;
  2038. op1->Type = OPND_ADDRREF;
  2039. op1->Reg = GP_EDI;
  2040. op2->Reg = REG101;
  2041. break;
  2042. case 0x30: // mod/rm = 00 000, reg=110
  2043. cbInstr = 1;
  2044. op1->Type = OPND_ADDRREF;
  2045. op1->Reg = GP_EAX;
  2046. op2->Reg = REG110;
  2047. break;
  2048. case 0x31: // mod/rm = 00 001, reg=110
  2049. cbInstr = 1;
  2050. op1->Type = OPND_ADDRREF;
  2051. op1->Reg = GP_ECX;
  2052. op2->Reg = REG110;
  2053. break;
  2054. case 0x32: // mod/rm = 00 010, reg=110
  2055. cbInstr = 1;
  2056. op1->Type = OPND_ADDRREF;
  2057. op1->Reg = GP_EDX;
  2058. op2->Reg = REG110;
  2059. break;
  2060. case 0x33: // mod/rm = 00 011, reg=110
  2061. cbInstr = 1;
  2062. op1->Type = OPND_ADDRREF;
  2063. op1->Reg = GP_EBX;
  2064. op2->Reg = REG110;
  2065. break;
  2066. case 0x34: // mod/rm = 00 100, reg=110
  2067. // s-i-b present
  2068. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  2069. op2->Reg = REG110;
  2070. break;
  2071. case 0x35: // mod/rm = 00 101, reg=110
  2072. cbInstr = 5;
  2073. op1->Type = OPND_ADDRREF;
  2074. op1->Immed = GET_LONG(eipTemp+2);
  2075. op2->Reg = REG110;
  2076. break;
  2077. case 0x36: // mod/rm = 00 110, reg=110
  2078. cbInstr = 1;
  2079. op1->Type = OPND_ADDRREF;
  2080. op1->Reg = GP_ESI;
  2081. op2->Reg = REG110;
  2082. break;
  2083. case 0x37: // mod/rm = 00 111, reg=110
  2084. cbInstr = 1;
  2085. op1->Type = OPND_ADDRREF;
  2086. op1->Reg = GP_EDI;
  2087. op2->Reg = REG110;
  2088. break;
  2089. case 0x38: // mod/rm = 00 000, reg=111
  2090. cbInstr = 1;
  2091. op1->Type = OPND_ADDRREF;
  2092. op1->Reg = GP_EAX;
  2093. op2->Reg = REG111;
  2094. break;
  2095. case 0x39: // mod/rm = 00 001, reg=111
  2096. cbInstr = 1;
  2097. op1->Type = OPND_ADDRREF;
  2098. op1->Reg = GP_ECX;
  2099. op2->Reg = REG111;
  2100. break;
  2101. case 0x3a: // mod/rm = 00 010, reg=111
  2102. cbInstr = 1;
  2103. op1->Type = OPND_ADDRREF;
  2104. op1->Reg = GP_EDX;
  2105. op2->Reg = REG111;
  2106. break;
  2107. case 0x3b: // mod/rm = 00 011, reg=111
  2108. cbInstr = 1;
  2109. op1->Type = OPND_ADDRREF;
  2110. op1->Reg = GP_EBX;
  2111. op2->Reg = REG111;
  2112. break;
  2113. case 0x3c: // mod/rm = 00 100, reg=111
  2114. // s-i-b present
  2115. cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
  2116. op2->Reg = REG111;
  2117. break;
  2118. case 0x3d: // mod/rm = 00 101, reg=111
  2119. cbInstr = 5;
  2120. op1->Type = OPND_ADDRREF;
  2121. op1->Immed = GET_LONG(eipTemp+2);
  2122. op2->Reg = REG111;
  2123. break;
  2124. case 0x3e: // mod/rm = 00 110, reg=111
  2125. cbInstr = 1;
  2126. op1->Type = OPND_ADDRREF;
  2127. op1->Reg = GP_ESI;
  2128. op2->Reg = REG111;
  2129. break;
  2130. case 0x3f: // mod/rm = 00 111, reg=111
  2131. cbInstr = 1;
  2132. op1->Type = OPND_ADDRREF;
  2133. op1->Reg = GP_EDI;
  2134. op2->Reg = REG111;
  2135. break;
  2136. /////////////////////////////////////////////////////////////////////
  2137. case 0x40: // mod/rm = 01 000, reg=000
  2138. cbInstr = 2;
  2139. op1->Type = OPND_ADDRREF;
  2140. op1->Reg = GP_EAX;
  2141. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2142. op2->Reg = REG000;
  2143. break;
  2144. case 0x41: // mod/rm = 01 001, reg=000
  2145. cbInstr = 2;
  2146. op1->Type = OPND_ADDRREF;
  2147. op1->Reg = GP_ECX;
  2148. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2149. op2->Reg = REG000;
  2150. break;
  2151. case 0x42: // mod/rm = 01 010, reg=000
  2152. cbInstr = 2;
  2153. op1->Type = OPND_ADDRREF;
  2154. op1->Reg = GP_EDX;
  2155. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2156. op2->Reg = REG000;
  2157. break;
  2158. case 0x43: // mod/rm = 01 011, reg=000
  2159. cbInstr = 2;
  2160. op1->Type = OPND_ADDRREF;
  2161. op1->Reg = GP_EBX;
  2162. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2163. op2->Reg = REG000;
  2164. break;
  2165. case 0x44: // mod/rm = 01 100, reg=000
  2166. // s-i-b present
  2167. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2168. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2169. op2->Reg = REG000;
  2170. break;
  2171. case 0x45: // mod/rm = 01 101, reg=000
  2172. cbInstr = 2;
  2173. op1->Type = OPND_ADDRREF;
  2174. op1->Reg = GP_EBP;
  2175. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2176. op2->Reg = REG000;
  2177. break;
  2178. case 0x46: // mod/rm = 01 110, reg=000
  2179. cbInstr = 2;
  2180. op1->Type = OPND_ADDRREF;
  2181. op1->Reg = GP_ESI;
  2182. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2183. op2->Reg = REG000;
  2184. break;
  2185. case 0x47: // mod/rm = 01 111, reg=000
  2186. cbInstr = 2;
  2187. op1->Type = OPND_ADDRREF;
  2188. op1->Reg = GP_EDI;
  2189. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2190. op2->Reg = REG000;
  2191. break;
  2192. case 0x48: // mod/rm = 01 000, reg=001
  2193. cbInstr = 2;
  2194. op1->Type = OPND_ADDRREF;
  2195. op1->Reg = GP_EAX;
  2196. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2197. op2->Reg = REG001;
  2198. break;
  2199. case 0x49: // mod/rm = 01 001, reg=001
  2200. cbInstr = 2;
  2201. op1->Type = OPND_ADDRREF;
  2202. op1->Reg = GP_ECX;
  2203. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2204. op2->Reg = REG001;
  2205. break;
  2206. case 0x4a: // mod/rm = 01 010, reg=001
  2207. cbInstr = 2;
  2208. op1->Type = OPND_ADDRREF;
  2209. op1->Reg = GP_EDX;
  2210. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2211. op2->Reg = REG001;
  2212. break;
  2213. case 0x4b: // mod/rm = 01 011, reg=001
  2214. cbInstr = 2;
  2215. op1->Type = OPND_ADDRREF;
  2216. op1->Reg = GP_EBX;
  2217. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2218. op2->Reg = REG001;
  2219. break;
  2220. case 0x4c: // mod/rm = 01 100, reg=001
  2221. // s-i-b present
  2222. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2223. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2224. op2->Reg = REG001;
  2225. break;
  2226. case 0x4d: // mod/rm = 01 101, reg=001
  2227. cbInstr = 2;
  2228. op1->Type = OPND_ADDRREF;
  2229. op1->Reg = GP_EBP;
  2230. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2231. op2->Reg = REG001;
  2232. break;
  2233. case 0x4e: // mod/rm = 01 110, reg=001
  2234. cbInstr = 2;
  2235. op1->Type = OPND_ADDRREF;
  2236. op1->Reg = GP_ESI;
  2237. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2238. op2->Reg = REG001;
  2239. break;
  2240. case 0x4f: // mod/rm = 01 111, reg=001
  2241. cbInstr = 2;
  2242. op1->Type = OPND_ADDRREF;
  2243. op1->Reg = GP_EDI;
  2244. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2245. op2->Reg = REG001;
  2246. break;
  2247. case 0x50: // mod/rm = 01 000, reg=010
  2248. cbInstr = 2;
  2249. op1->Type = OPND_ADDRREF;
  2250. op1->Reg = GP_EAX;
  2251. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2252. op2->Reg = REG010;
  2253. break;
  2254. case 0x51: // mod/rm = 01 001, reg=010
  2255. cbInstr = 2;
  2256. op1->Type = OPND_ADDRREF;
  2257. op1->Reg = GP_ECX;
  2258. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2259. op2->Reg = REG010;
  2260. break;
  2261. case 0x52: // mod/rm = 01 010, reg=010
  2262. cbInstr = 2;
  2263. op1->Type = OPND_ADDRREF;
  2264. op1->Reg = GP_EDX;
  2265. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2266. op2->Reg = REG010;
  2267. break;
  2268. case 0x53: // mod/rm = 01 011, reg=001
  2269. cbInstr = 2;
  2270. op1->Type = OPND_ADDRREF;
  2271. op1->Reg = GP_EBX;
  2272. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2273. op2->Reg = REG010;
  2274. break;
  2275. case 0x54: // mod/rm = 01 100, reg=010
  2276. // s-i-b present
  2277. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2278. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2279. op2->Reg = REG010;
  2280. break;
  2281. case 0x55: // mod/rm = 01 101, reg=010
  2282. cbInstr = 2;
  2283. op1->Type = OPND_ADDRREF;
  2284. op1->Reg = GP_EBP;
  2285. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2286. op2->Reg = REG010;
  2287. break;
  2288. case 0x56: // mod/rm = 01 110, reg=010
  2289. cbInstr = 2;
  2290. op1->Type = OPND_ADDRREF;
  2291. op1->Reg = GP_ESI;
  2292. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2293. op2->Reg = REG010;
  2294. break;
  2295. case 0x57: // mod/rm = 01 111, reg=010
  2296. cbInstr = 2;
  2297. op1->Type = OPND_ADDRREF;
  2298. op1->Reg = GP_EDI;
  2299. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2300. op2->Reg = REG010;
  2301. break;
  2302. case 0x58: // mod/rm = 01 000, reg=011
  2303. cbInstr = 2;
  2304. op1->Type = OPND_ADDRREF;
  2305. op1->Reg = GP_EAX;
  2306. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2307. op2->Reg = REG011;
  2308. break;
  2309. case 0x59: // mod/rm = 01 001, reg=011
  2310. cbInstr = 2;
  2311. op1->Type = OPND_ADDRREF;
  2312. op1->Reg = GP_ECX;
  2313. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2314. op2->Reg = REG011;
  2315. break;
  2316. case 0x5a: // mod/rm = 01 010, reg=011
  2317. cbInstr = 2;
  2318. op1->Type = OPND_ADDRREF;
  2319. op1->Reg = GP_EDX;
  2320. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2321. op2->Reg = REG011;
  2322. break;
  2323. case 0x5b: // mod/rm = 01 011, reg=011
  2324. cbInstr = 2;
  2325. op1->Type = OPND_ADDRREF;
  2326. op1->Reg = GP_EBX;
  2327. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2328. op2->Reg = REG011;
  2329. break;
  2330. case 0x5c: // mod/rm = 01 100, reg=011
  2331. // s-i-b present
  2332. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2333. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2334. op2->Reg = REG011;
  2335. break;
  2336. case 0x5d: // mod/rm = 01 101, reg=011
  2337. cbInstr = 2;
  2338. op1->Type = OPND_ADDRREF;
  2339. op1->Reg = GP_EBP;
  2340. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2341. op2->Reg = REG011;
  2342. break;
  2343. case 0x5e: // mod/rm = 01 110, reg=011
  2344. cbInstr = 2;
  2345. op1->Type = OPND_ADDRREF;
  2346. op1->Reg = GP_ESI;
  2347. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2348. op2->Reg = REG011;
  2349. break;
  2350. case 0x5f: // mod/rm = 01 111, reg=011
  2351. cbInstr = 2;
  2352. op1->Type = OPND_ADDRREF;
  2353. op1->Reg = GP_EDI;
  2354. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2355. op2->Reg = REG011;
  2356. break;
  2357. case 0x60: // mod/rm = 01 000, reg=100
  2358. cbInstr = 2;
  2359. op1->Type = OPND_ADDRREF;
  2360. op1->Reg = GP_EAX;
  2361. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2362. op2->Reg = REG100;
  2363. break;
  2364. case 0x61: // mod/rm = 01 001, reg=100
  2365. cbInstr = 2;
  2366. op1->Type = OPND_ADDRREF;
  2367. op1->Reg = GP_ECX;
  2368. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2369. op2->Reg = REG100;
  2370. break;
  2371. case 0x62: // mod/rm = 01 010, reg=100
  2372. cbInstr = 2;
  2373. op1->Type = OPND_ADDRREF;
  2374. op1->Reg = GP_EDX;
  2375. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2376. op2->Reg = REG100;
  2377. break;
  2378. case 0x63: // mod/rm = 01 011, reg=100
  2379. cbInstr = 2;
  2380. op1->Type = OPND_ADDRREF;
  2381. op1->Reg = GP_EBX;
  2382. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2383. op2->Reg = REG100;
  2384. break;
  2385. case 0x64: // mod/rm = 01 100, reg=100
  2386. // s-i-b present
  2387. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2388. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2389. op2->Reg = REG100;
  2390. break;
  2391. case 0x65: // mod/rm = 01 101, reg=100
  2392. cbInstr = 2;
  2393. op1->Type = OPND_ADDRREF;
  2394. op1->Reg = GP_EBP;
  2395. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2396. op2->Reg = REG100;
  2397. break;
  2398. case 0x66: // mod/rm = 01 110, reg=100
  2399. cbInstr = 2;
  2400. op1->Type = OPND_ADDRREF;
  2401. op1->Reg = GP_ESI;
  2402. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2403. op2->Reg = REG100;
  2404. break;
  2405. case 0x67: // mod/rm = 01 111, reg=100
  2406. cbInstr = 2;
  2407. op1->Type = OPND_ADDRREF;
  2408. op1->Reg = GP_EDI;
  2409. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2410. op2->Reg = REG100;
  2411. break;
  2412. case 0x68: // mod/rm = 01 000, reg=101
  2413. cbInstr = 2;
  2414. op1->Type = OPND_ADDRREF;
  2415. op1->Reg = GP_EAX;
  2416. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2417. op2->Reg = REG101;
  2418. break;
  2419. case 0x69: // mod/rm = 01 001, reg=101
  2420. cbInstr = 2;
  2421. op1->Type = OPND_ADDRREF;
  2422. op1->Reg = GP_ECX;
  2423. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2424. op2->Reg = REG101;
  2425. break;
  2426. case 0x6a: // mod/rm = 01 010, reg=101
  2427. cbInstr = 2;
  2428. op1->Type = OPND_ADDRREF;
  2429. op1->Reg = GP_EDX;
  2430. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2431. op2->Reg = REG101;
  2432. break;
  2433. case 0x6b: // mod/rm = 01 011, reg=101
  2434. cbInstr = 2;
  2435. op1->Type = OPND_ADDRREF;
  2436. op1->Reg = GP_EBX;
  2437. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2438. op2->Reg = REG101;
  2439. break;
  2440. case 0x6c: // mod/rm = 01 100, reg=101
  2441. // s-i-b present
  2442. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2443. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2444. op2->Reg = REG101;
  2445. break;
  2446. case 0x6d: // mod/rm = 01 101, reg=101
  2447. cbInstr = 2;
  2448. op1->Type = OPND_ADDRREF;
  2449. op1->Reg = GP_EBP;
  2450. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2451. op2->Reg = REG101;
  2452. break;
  2453. case 0x6e: // mod/rm = 01 110, reg=101
  2454. cbInstr = 2;
  2455. op1->Type = OPND_ADDRREF;
  2456. op1->Reg = GP_ESI;
  2457. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2458. op2->Reg = REG101;
  2459. break;
  2460. case 0x6f: // mod/rm = 01 111, reg=101
  2461. cbInstr = 2;
  2462. op1->Type = OPND_ADDRREF;
  2463. op1->Reg = GP_EDI;
  2464. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2465. op2->Reg = REG101;
  2466. break;
  2467. case 0x70: // mod/rm = 01 000, reg=110
  2468. cbInstr = 2;
  2469. op1->Type = OPND_ADDRREF;
  2470. op1->Reg = GP_EAX;
  2471. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2472. op2->Reg = REG110;
  2473. break;
  2474. case 0x71: // mod/rm = 01 001, reg=110
  2475. cbInstr = 2;
  2476. op1->Type = OPND_ADDRREF;
  2477. op1->Reg = GP_ECX;
  2478. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2479. op2->Reg = REG110;
  2480. break;
  2481. case 0x72: // mod/rm = 01 010, reg=110
  2482. cbInstr = 2;
  2483. op1->Type = OPND_ADDRREF;
  2484. op1->Reg = GP_EDX;
  2485. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2486. op2->Reg = REG110;
  2487. break;
  2488. case 0x73: // mod/rm = 01 011, reg=110
  2489. cbInstr = 2;
  2490. op1->Type = OPND_ADDRREF;
  2491. op1->Reg = GP_EBX;
  2492. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2493. op2->Reg = REG110;
  2494. break;
  2495. case 0x74: // mod/rm = 01 100, reg=110
  2496. // s-i-b present
  2497. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2498. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2499. op2->Reg = REG110;
  2500. break;
  2501. case 0x75: // mod/rm = 01 101, reg=110
  2502. cbInstr = 2;
  2503. op1->Type = OPND_ADDRREF;
  2504. op1->Reg = GP_EBP;
  2505. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2506. op2->Reg = REG110;
  2507. break;
  2508. case 0x76: // mod/rm = 01 110, reg=110
  2509. cbInstr = 2;
  2510. op1->Type = OPND_ADDRREF;
  2511. op1->Reg = GP_ESI;
  2512. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2513. op2->Reg = REG110;
  2514. break;
  2515. case 0x77: // mod/rm = 01 111, reg=110
  2516. cbInstr = 2;
  2517. op1->Type = OPND_ADDRREF;
  2518. op1->Reg = GP_EDI;
  2519. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2520. op2->Reg = REG110;
  2521. break;
  2522. case 0x78: // mod/rm = 01 000, reg=111
  2523. cbInstr = 2;
  2524. op1->Type = OPND_ADDRREF;
  2525. op1->Reg = GP_EAX;
  2526. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2527. op2->Reg = REG111;
  2528. break;
  2529. case 0x79: // mod/rm = 01 001, reg=111
  2530. cbInstr = 2;
  2531. op1->Type = OPND_ADDRREF;
  2532. op1->Reg = GP_ECX;
  2533. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2534. op2->Reg = REG111;
  2535. break;
  2536. case 0x7a: // mod/rm = 01 010, reg=111
  2537. cbInstr = 2;
  2538. op1->Type = OPND_ADDRREF;
  2539. op1->Reg = GP_EDX;
  2540. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2541. op2->Reg = REG111;
  2542. break;
  2543. case 0x7b: // mod/rm = 01 011, reg=111
  2544. cbInstr = 2;
  2545. op1->Type = OPND_ADDRREF;
  2546. op1->Reg = GP_EBX;
  2547. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2548. op2->Reg = REG111;
  2549. break;
  2550. case 0x7c: // mod/rm = 01 100, reg=111
  2551. // s-i-b present
  2552. cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
  2553. op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
  2554. op2->Reg = REG111;
  2555. break;
  2556. case 0x7d: // mod/rm = 01 101, reg=111
  2557. cbInstr = 2;
  2558. op1->Type = OPND_ADDRREF;
  2559. op1->Reg = GP_EBP;
  2560. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2561. op2->Reg = REG111;
  2562. break;
  2563. case 0x7e: // mod/rm = 01 110, reg=111
  2564. cbInstr = 2;
  2565. op1->Type = OPND_ADDRREF;
  2566. op1->Reg = GP_ESI;
  2567. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2568. op2->Reg = REG111;
  2569. break;
  2570. case 0x7f: // mod/rm = 01 111, reg=111
  2571. cbInstr = 2;
  2572. op1->Type = OPND_ADDRREF;
  2573. op1->Reg = GP_EDI;
  2574. op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
  2575. op2->Reg = REG111;
  2576. break;
  2577. /////////////////////////////////////////////////////////////////////
  2578. case 0x80: // mod/rm = 10 000, reg=000
  2579. cbInstr = 5;
  2580. op1->Type = OPND_ADDRREF;
  2581. op1->Reg = GP_EAX;
  2582. op1->Immed = GET_LONG(eipTemp+2);
  2583. op2->Reg = REG000;
  2584. break;
  2585. case 0x81: // mod/rm = 10 001, reg=000
  2586. cbInstr = 5;
  2587. op1->Type = OPND_ADDRREF;
  2588. op1->Reg = GP_ECX;
  2589. op1->Immed = GET_LONG(eipTemp+2);
  2590. op2->Reg = REG000;
  2591. break;
  2592. case 0x82: // mod/rm = 10 010, reg=000
  2593. cbInstr = 5;
  2594. op1->Type = OPND_ADDRREF;
  2595. op1->Reg = GP_EDX;
  2596. op1->Immed = GET_LONG(eipTemp+2);
  2597. op2->Reg = REG000;
  2598. break;
  2599. case 0x83: // mod/rm = 10 011, reg=000
  2600. cbInstr = 5;
  2601. op1->Type = OPND_ADDRREF;
  2602. op1->Reg = GP_EBX;
  2603. op1->Immed = GET_LONG(eipTemp+2);
  2604. op2->Reg = REG000;
  2605. break;
  2606. case 0x84: // mod/rm = 10 100, reg=000
  2607. // s-i-b present
  2608. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2609. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2610. op2->Reg = REG000;
  2611. break;
  2612. case 0x85: // mod/rm = 10 101, reg=000
  2613. cbInstr = 5;
  2614. op1->Type = OPND_ADDRREF;
  2615. op1->Reg = GP_EBP;
  2616. op1->Immed = GET_LONG(eipTemp+2);
  2617. op2->Reg = REG000;
  2618. break;
  2619. case 0x86: // mod/rm = 10 110, reg=000
  2620. cbInstr = 5;
  2621. op1->Type = OPND_ADDRREF;
  2622. op1->Reg = GP_ESI;
  2623. op1->Immed = GET_LONG(eipTemp+2);
  2624. op2->Reg = REG000;
  2625. break;
  2626. case 0x87: // mod/rm = 10 111, reg=000
  2627. cbInstr = 5;
  2628. op1->Type = OPND_ADDRREF;
  2629. op1->Reg = GP_EDI;
  2630. op1->Immed = GET_LONG(eipTemp+2);
  2631. op2->Reg = REG000;
  2632. break;
  2633. case 0x88: // mod/rm = 10 000, reg=001
  2634. cbInstr = 5;
  2635. op1->Type = OPND_ADDRREF;
  2636. op1->Reg = GP_EAX;
  2637. op1->Immed = GET_LONG(eipTemp+2);
  2638. op2->Reg = REG001;
  2639. break;
  2640. case 0x89: // mod/rm = 10 001, reg=001
  2641. cbInstr = 5;
  2642. op1->Type = OPND_ADDRREF;
  2643. op1->Reg = GP_ECX;
  2644. op1->Immed = GET_LONG(eipTemp+2);
  2645. op2->Reg = REG001;
  2646. break;
  2647. case 0x8a: // mod/rm = 10 010, reg=001
  2648. cbInstr = 5;
  2649. op1->Type = OPND_ADDRREF;
  2650. op1->Reg = GP_EDX;
  2651. op1->Immed = GET_LONG(eipTemp+2);
  2652. op2->Reg = REG001;
  2653. break;
  2654. case 0x8b: // mod/rm = 10 011, reg=001
  2655. cbInstr = 5;
  2656. op1->Type = OPND_ADDRREF;
  2657. op1->Reg = GP_EBX;
  2658. op1->Immed = GET_LONG(eipTemp+2);
  2659. op2->Reg = REG001;
  2660. break;
  2661. case 0x8c: // mod/rm = 10 100, reg=001
  2662. // s-i-b present
  2663. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2664. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2665. op2->Reg = REG001;
  2666. break;
  2667. case 0x8d: // mod/rm = 10 101, reg=001
  2668. cbInstr = 5;
  2669. op1->Type = OPND_ADDRREF;
  2670. op1->Reg = GP_EBP;
  2671. op1->Immed = GET_LONG(eipTemp+2);
  2672. op2->Reg = REG001;
  2673. break;
  2674. case 0x8e: // mod/rm = 10 110, reg=001
  2675. cbInstr = 5;
  2676. op1->Type = OPND_ADDRREF;
  2677. op1->Reg = GP_ESI;
  2678. op1->Immed = GET_LONG(eipTemp+2);
  2679. op2->Reg = REG001;
  2680. break;
  2681. case 0x8f: // mod/rm = 10 111, reg=001
  2682. cbInstr = 5;
  2683. op1->Type = OPND_ADDRREF;
  2684. op1->Reg = GP_EDI;
  2685. op1->Immed = GET_LONG(eipTemp+2);
  2686. op2->Reg = REG001;
  2687. break;
  2688. case 0x90: // mod/rm = 10 000, reg=010
  2689. cbInstr = 5;
  2690. op1->Type = OPND_ADDRREF;
  2691. op1->Reg = GP_EAX;
  2692. op1->Immed = GET_LONG(eipTemp+2);
  2693. op2->Reg = REG010;
  2694. break;
  2695. case 0x91: // mod/rm = 10 001, reg=010
  2696. cbInstr = 5;
  2697. op1->Type = OPND_ADDRREF;
  2698. op1->Reg = GP_ECX;
  2699. op1->Immed = GET_LONG(eipTemp+2);
  2700. op2->Reg = REG010;
  2701. break;
  2702. case 0x92: // mod/rm = 10 010, reg=010
  2703. cbInstr = 5;
  2704. op1->Type = OPND_ADDRREF;
  2705. op1->Reg = GP_EDX;
  2706. op1->Immed = GET_LONG(eipTemp+2);
  2707. op2->Reg = REG010;
  2708. break;
  2709. case 0x93: // mod/rm = 10 011, reg=010
  2710. cbInstr = 5;
  2711. op1->Type = OPND_ADDRREF;
  2712. op1->Reg = GP_EBX;
  2713. op1->Immed = GET_LONG(eipTemp+2);
  2714. op2->Reg = REG010;
  2715. break;
  2716. case 0x94: // mod/rm = 10 100, reg=010
  2717. // s-i-b present
  2718. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2719. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2720. op2->Reg = REG010;
  2721. break;
  2722. case 0x95: // mod/rm = 10 101, reg=010
  2723. cbInstr = 5;
  2724. op1->Type = OPND_ADDRREF;
  2725. op1->Reg = GP_EBP;
  2726. op1->Immed = GET_LONG(eipTemp+2);
  2727. op2->Reg = REG010;
  2728. break;
  2729. case 0x96: // mod/rm = 10 110, reg=010
  2730. cbInstr = 5;
  2731. op1->Type = OPND_ADDRREF;
  2732. op1->Reg = GP_ESI;
  2733. op1->Immed = GET_LONG(eipTemp+2);
  2734. op2->Reg = REG010;
  2735. break;
  2736. case 0x97: // mod/rm = 10 111, reg=010
  2737. cbInstr = 5;
  2738. op1->Type = OPND_ADDRREF;
  2739. op1->Reg = GP_EDI;
  2740. op1->Immed = GET_LONG(eipTemp+2);
  2741. op2->Reg = REG010;
  2742. break;
  2743. case 0x98: // mod/rm = 10 000, reg=011
  2744. cbInstr = 5;
  2745. op1->Type = OPND_ADDRREF;
  2746. op1->Reg = GP_EAX;
  2747. op1->Immed = GET_LONG(eipTemp+2);
  2748. op2->Reg = REG011;
  2749. break;
  2750. case 0x99: // mod/rm = 10 001, reg=011
  2751. cbInstr = 5;
  2752. op1->Type = OPND_ADDRREF;
  2753. op1->Reg = GP_ECX;
  2754. op1->Immed = GET_LONG(eipTemp+2);
  2755. op2->Reg = REG011;
  2756. break;
  2757. case 0x9a: // mod/rm = 10 010, reg=011
  2758. cbInstr = 5;
  2759. op1->Type = OPND_ADDRREF;
  2760. op1->Reg = GP_EDX;
  2761. op1->Immed = GET_LONG(eipTemp+2);
  2762. op2->Reg = REG011;
  2763. break;
  2764. case 0x9b: // mod/rm = 10 011, reg=011
  2765. cbInstr = 5;
  2766. op1->Type = OPND_ADDRREF;
  2767. op1->Reg = GP_EBX;
  2768. op1->Immed = GET_LONG(eipTemp+2);
  2769. op2->Reg = REG011;
  2770. break;
  2771. case 0x9c: // mod/rm = 10 100, reg=011
  2772. // s-i-b present
  2773. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2774. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2775. op2->Reg = REG011;
  2776. break;
  2777. case 0x9d: // mod/rm = 10 101, reg=011
  2778. cbInstr = 5;
  2779. op1->Type = OPND_ADDRREF;
  2780. op1->Reg = GP_EBP;
  2781. op1->Immed = GET_LONG(eipTemp+2);
  2782. op2->Reg = REG011;
  2783. break;
  2784. case 0x9e: // mod/rm = 10 110, reg=011
  2785. cbInstr = 5;
  2786. op1->Type = OPND_ADDRREF;
  2787. op1->Reg = GP_ESI;
  2788. op1->Immed = GET_LONG(eipTemp+2);
  2789. op2->Reg = REG011;
  2790. break;
  2791. case 0x9f: // mod/rm = 10 111, reg=011
  2792. cbInstr = 5;
  2793. op1->Type = OPND_ADDRREF;
  2794. op1->Reg = GP_EDI;
  2795. op1->Immed = GET_LONG(eipTemp+2);
  2796. op2->Reg = REG011;
  2797. break;
  2798. case 0xa0: // mod/rm = 10 000, reg=100
  2799. cbInstr = 5;
  2800. op1->Type = OPND_ADDRREF;
  2801. op1->Reg = GP_EAX;
  2802. op1->Immed = GET_LONG(eipTemp+2);
  2803. op2->Reg = REG100;
  2804. break;
  2805. case 0xa1: // mod/rm = 10 001, reg=100
  2806. cbInstr = 5;
  2807. op1->Type = OPND_ADDRREF;
  2808. op1->Reg = GP_ECX;
  2809. op1->Immed = GET_LONG(eipTemp+2);
  2810. op2->Reg = REG100;
  2811. break;
  2812. case 0xa2: // mod/rm = 10 010, reg=100
  2813. cbInstr = 5;
  2814. op1->Type = OPND_ADDRREF;
  2815. op1->Reg = GP_EDX;
  2816. op1->Immed = GET_LONG(eipTemp+2);
  2817. op2->Reg = REG100;
  2818. break;
  2819. case 0xa3: // mod/rm = 10 011, reg=100
  2820. cbInstr = 5;
  2821. op1->Type = OPND_ADDRREF;
  2822. op1->Reg = GP_EBX;
  2823. op1->Immed = GET_LONG(eipTemp+2);
  2824. op2->Reg = REG100;
  2825. break;
  2826. case 0xa4: // mod/rm = 10 100, reg=100
  2827. // s-i-b present
  2828. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2829. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2830. op2->Reg = REG100;
  2831. break;
  2832. case 0xa5: // mod/rm = 10 101, reg=100
  2833. cbInstr = 5;
  2834. op1->Type = OPND_ADDRREF;
  2835. op1->Reg = GP_EBP;
  2836. op1->Immed = GET_LONG(eipTemp+2);
  2837. op2->Reg = REG100;
  2838. break;
  2839. case 0xa6: // mod/rm = 10 110, reg=100
  2840. cbInstr = 5;
  2841. op1->Type = OPND_ADDRREF;
  2842. op1->Reg = GP_ESI;
  2843. op1->Immed = GET_LONG(eipTemp+2);
  2844. op2->Reg = REG100;
  2845. break;
  2846. case 0xa7: // mod/rm = 10 111, reg=100
  2847. cbInstr = 5;
  2848. op1->Type = OPND_ADDRREF;
  2849. op1->Reg = GP_EDI;
  2850. op1->Immed = GET_LONG(eipTemp+2);
  2851. op2->Reg = REG100;
  2852. break;
  2853. case 0xa8: // mod/rm = 10 000, reg=101
  2854. cbInstr = 5;
  2855. op1->Type = OPND_ADDRREF;
  2856. op1->Reg = GP_EAX;
  2857. op1->Immed = GET_LONG(eipTemp+2);
  2858. op2->Reg = REG101;
  2859. break;
  2860. case 0xa9: // mod/rm = 10 001, reg=101
  2861. cbInstr = 5;
  2862. op1->Type = OPND_ADDRREF;
  2863. op1->Reg = GP_ECX;
  2864. op1->Immed = GET_LONG(eipTemp+2);
  2865. op2->Reg = REG101;
  2866. break;
  2867. case 0xaa: // mod/rm = 10 010, reg=101
  2868. cbInstr = 5;
  2869. op1->Type = OPND_ADDRREF;
  2870. op1->Reg = GP_EDX;
  2871. op1->Immed = GET_LONG(eipTemp+2);
  2872. op2->Reg = REG101;
  2873. break;
  2874. case 0xab: // mod/rm = 10 011, reg=101
  2875. cbInstr = 5;
  2876. op1->Type = OPND_ADDRREF;
  2877. op1->Reg = GP_EBX;
  2878. op1->Immed = GET_LONG(eipTemp+2);
  2879. op2->Reg = REG101;
  2880. break;
  2881. case 0xac: // mod/rm = 10 100, reg=101
  2882. // s-i-b present
  2883. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2884. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2885. op2->Reg = REG101;
  2886. break;
  2887. case 0xad: // mod/rm = 10 101, reg=101
  2888. cbInstr = 5;
  2889. op1->Type = OPND_ADDRREF;
  2890. op1->Reg = GP_EBP;
  2891. op1->Immed = GET_LONG(eipTemp+2);
  2892. op2->Reg = REG101;
  2893. break;
  2894. case 0xae: // mod/rm = 10 110, reg=101
  2895. cbInstr = 5;
  2896. op1->Type = OPND_ADDRREF;
  2897. op1->Reg = GP_ESI;
  2898. op1->Immed = GET_LONG(eipTemp+2);
  2899. op2->Reg = REG101;
  2900. break;
  2901. case 0xaf: // mod/rm = 10 111, reg=101
  2902. cbInstr = 5;
  2903. op1->Type = OPND_ADDRREF;
  2904. op1->Reg = GP_EDI;
  2905. op1->Immed = GET_LONG(eipTemp+2);
  2906. op2->Reg = REG101;
  2907. break;
  2908. case 0xb0: // mod/rm = 10 000, reg=110
  2909. cbInstr = 5;
  2910. op1->Type = OPND_ADDRREF;
  2911. op1->Reg = GP_EAX;
  2912. op1->Immed = GET_LONG(eipTemp+2);
  2913. op2->Reg = REG110;
  2914. break;
  2915. case 0xb1: // mod/rm = 10 001, reg=110
  2916. cbInstr = 5;
  2917. op1->Type = OPND_ADDRREF;
  2918. op1->Reg = GP_ECX;
  2919. op1->Immed = GET_LONG(eipTemp+2);
  2920. op2->Reg = REG110;
  2921. break;
  2922. case 0xb2: // mod/rm = 10 010, reg=110
  2923. cbInstr = 5;
  2924. op1->Type = OPND_ADDRREF;
  2925. op1->Reg = GP_EDX;
  2926. op1->Immed = GET_LONG(eipTemp+2);
  2927. op2->Reg = REG110;
  2928. break;
  2929. case 0xb3: // mod/rm = 10 011, reg=110
  2930. cbInstr = 5;
  2931. op1->Type = OPND_ADDRREF;
  2932. op1->Reg = GP_EBX;
  2933. op1->Immed = GET_LONG(eipTemp+2);
  2934. op2->Reg = REG110;
  2935. break;
  2936. case 0xb4: // mod/rm = 10 100, reg=110
  2937. // s-i-b present
  2938. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2939. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2940. op2->Reg = REG110;
  2941. break;
  2942. case 0xb5: // mod/rm = 10 101, reg=110
  2943. cbInstr = 5;
  2944. op1->Type = OPND_ADDRREF;
  2945. op1->Reg = GP_EBP;
  2946. op1->Immed = GET_LONG(eipTemp+2);
  2947. op2->Reg = REG110;
  2948. break;
  2949. case 0xb6: // mod/rm = 10 110, reg=110
  2950. cbInstr = 5;
  2951. op1->Type = OPND_ADDRREF;
  2952. op1->Reg = GP_ESI;
  2953. op1->Immed = GET_LONG(eipTemp+2);
  2954. op2->Reg = REG110;
  2955. break;
  2956. case 0xb7: // mod/rm = 10 111, reg=110
  2957. cbInstr = 5;
  2958. op1->Type = OPND_ADDRREF;
  2959. op1->Reg = GP_EDI;
  2960. op1->Immed = GET_LONG(eipTemp+2);
  2961. op2->Reg = REG110;
  2962. break;
  2963. case 0xb8: // mod/rm = 10 000, reg=111
  2964. cbInstr = 5;
  2965. op1->Type = OPND_ADDRREF;
  2966. op1->Reg = GP_EAX;
  2967. op1->Immed = GET_LONG(eipTemp+2);
  2968. op2->Reg = REG111;
  2969. break;
  2970. case 0xb9: // mod/rm = 10 001, reg=111
  2971. cbInstr = 5;
  2972. op1->Type = OPND_ADDRREF;
  2973. op1->Reg = GP_ECX;
  2974. op1->Immed = GET_LONG(eipTemp+2);
  2975. op2->Reg = REG111;
  2976. break;
  2977. case 0xba: // mod/rm = 10 010, reg=111
  2978. cbInstr = 5;
  2979. op1->Type = OPND_ADDRREF;
  2980. op1->Reg = GP_EDX;
  2981. op1->Immed = GET_LONG(eipTemp+2);
  2982. op2->Reg = REG111;
  2983. break;
  2984. case 0xbb: // mod/rm = 10 011, reg=111
  2985. cbInstr = 5;
  2986. op1->Type = OPND_ADDRREF;
  2987. op1->Reg = GP_EBX;
  2988. op1->Immed = GET_LONG(eipTemp+2);
  2989. op2->Reg = REG111;
  2990. break;
  2991. case 0xbc: // mod/rm = 10 100, reg=111
  2992. // s-i-b present
  2993. cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
  2994. op1->Immed = GET_LONG(eipTemp+cbInstr-3);
  2995. op2->Reg = REG111;
  2996. break;
  2997. case 0xbd: // mod/rm = 10 101, reg=111
  2998. cbInstr = 5;
  2999. op1->Type = OPND_ADDRREF;
  3000. op1->Reg = GP_EBP;
  3001. op1->Immed = GET_LONG(eipTemp+2);
  3002. op2->Reg = REG111;
  3003. break;
  3004. case 0xbe: // mod/rm = 10 110, reg=111
  3005. cbInstr = 5;
  3006. op1->Type = OPND_ADDRREF;
  3007. op1->Reg = GP_ESI;
  3008. op1->Immed = GET_LONG(eipTemp+2);
  3009. op2->Reg = REG111;
  3010. break;
  3011. case 0xbf: // mod/rm = 10 111, reg=111
  3012. cbInstr = 5;
  3013. op1->Type = OPND_ADDRREF;
  3014. op1->Reg = GP_EDI;
  3015. op1->Immed = GET_LONG(eipTemp+2);
  3016. op2->Reg = REG111;
  3017. break;
  3018. /////////////////////////////////////////////////////////////////////
  3019. case 0xc0: // mod/rm = 11 000, reg=000
  3020. cbInstr = 1;
  3021. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3022. op2->Reg = REG000;
  3023. break;
  3024. case 0xc1: // mod/rm = 11 001, reg=000
  3025. cbInstr = 1;
  3026. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3027. op2->Reg = REG000;
  3028. break;
  3029. case 0xc2: // mod/rm = 11 010, reg=000
  3030. cbInstr = 1;
  3031. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3032. op2->Reg = REG000;
  3033. break;
  3034. case 0xc3: // mod/rm = 11 011, reg=000
  3035. cbInstr = 1;
  3036. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3037. op2->Reg = REG000;
  3038. break;
  3039. case 0xc4: // mod/rm = 11 100, reg=000
  3040. cbInstr = 1;
  3041. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3042. op2->Reg = REG000;
  3043. break;
  3044. case 0xc5: // mod/rm = 11 101, reg=000
  3045. cbInstr = 1;
  3046. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3047. op2->Reg = REG000;
  3048. break;
  3049. case 0xc6: // mod/rm = 11 110, reg=000
  3050. cbInstr = 1;
  3051. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3052. op2->Reg = REG000;
  3053. break;
  3054. case 0xc7: // mod/rm = 11 111, reg=000
  3055. cbInstr = 1;
  3056. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3057. op2->Reg = REG000;
  3058. break;
  3059. case 0xc8: // mod/rm = 11 000, reg=001
  3060. cbInstr = 1;
  3061. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3062. op2->Reg = REG001;
  3063. break;
  3064. case 0xc9: // mod/rm = 11 001, reg=001
  3065. cbInstr = 1;
  3066. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3067. op2->Reg = REG001;
  3068. break;
  3069. case 0xca: // mod/rm = 11 010, reg=001
  3070. cbInstr = 1;
  3071. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3072. op2->Reg = REG001;
  3073. break;
  3074. case 0xcb: // mod/rm = 11 011, reg=001
  3075. cbInstr = 1;
  3076. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3077. op2->Reg = REG001;
  3078. break;
  3079. case 0xcc: // mod/rm = 11 100, reg=001
  3080. cbInstr = 1;
  3081. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3082. op2->Reg = REG001;
  3083. break;
  3084. case 0xcd: // mod/rm = 11 101, reg=001
  3085. cbInstr = 1;
  3086. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3087. op2->Reg = REG001;
  3088. break;
  3089. case 0xce: // mod/rm = 11 110, reg=001
  3090. cbInstr = 1;
  3091. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3092. op2->Reg = REG001;
  3093. break;
  3094. case 0xcf: // mod/rm = 11 111, reg=001
  3095. cbInstr = 1;
  3096. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3097. op2->Reg = REG001;
  3098. break;
  3099. case 0xd0: // mod/rm = 11 000, reg=010
  3100. cbInstr = 1;
  3101. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3102. op2->Reg = REG010;
  3103. break;
  3104. case 0xd1: // mod/rm = 11 001, reg=010
  3105. cbInstr = 1;
  3106. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3107. op2->Reg = REG010;
  3108. break;
  3109. case 0xd2: // mod/rm = 11 010, reg=010
  3110. cbInstr = 1;
  3111. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3112. op2->Reg = REG010;
  3113. break;
  3114. case 0xd3: // mod/rm = 11 011, reg=001
  3115. cbInstr = 1;
  3116. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3117. op2->Reg = REG010;
  3118. break;
  3119. case 0xd4: // mod/rm = 11 100, reg=010
  3120. cbInstr = 1;
  3121. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3122. op2->Reg = REG010;
  3123. break;
  3124. case 0xd5: // mod/rm = 11 101, reg=010
  3125. cbInstr = 1;
  3126. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3127. op2->Reg = REG010;
  3128. break;
  3129. case 0xd6: // mod/rm = 11 110, reg=010
  3130. cbInstr = 1;
  3131. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3132. op2->Reg = REG010;
  3133. break;
  3134. case 0xd7: // mod/rm = 11 111, reg=010
  3135. cbInstr = 1;
  3136. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3137. op2->Reg = REG010;
  3138. break;
  3139. case 0xd8: // mod/rm = 11 000, reg=011
  3140. cbInstr = 1;
  3141. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3142. op2->Reg = REG011;
  3143. break;
  3144. case 0xd9: // mod/rm = 11 001, reg=011
  3145. cbInstr = 1;
  3146. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3147. op2->Reg = REG011;
  3148. break;
  3149. case 0xda: // mod/rm = 11 010, reg=011
  3150. cbInstr = 1;
  3151. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3152. op2->Reg = REG011;
  3153. break;
  3154. case 0xdb: // mod/rm = 11 011, reg=011
  3155. cbInstr = 1;
  3156. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3157. op2->Reg = REG011;
  3158. break;
  3159. case 0xdc: // mod/rm = 11 100, reg=011
  3160. cbInstr = 1;
  3161. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3162. op2->Reg = REG011;
  3163. break;
  3164. case 0xdd: // mod/rm = 11 101, reg=011
  3165. cbInstr = 1;
  3166. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3167. op2->Reg = REG011;
  3168. break;
  3169. case 0xde: // mod/rm = 11 110, reg=011
  3170. cbInstr = 1;
  3171. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3172. op2->Reg = REG011;
  3173. break;
  3174. case 0xdf: // mod/rm = 11 111, reg=011
  3175. cbInstr = 1;
  3176. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3177. op2->Reg = REG011;
  3178. break;
  3179. case 0xe0: // mod/rm = 11 000, reg=100
  3180. cbInstr = 1;
  3181. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3182. op2->Reg = REG100;
  3183. break;
  3184. case 0xe1: // mod/rm = 11 001, reg=100
  3185. cbInstr = 1;
  3186. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3187. op2->Reg = REG100;
  3188. break;
  3189. case 0xe2: // mod/rm = 11 010, reg=100
  3190. cbInstr = 1;
  3191. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3192. op2->Reg = REG100;
  3193. break;
  3194. case 0xe3: // mod/rm = 11 011, reg=100
  3195. cbInstr = 1;
  3196. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3197. op2->Reg = REG100;
  3198. break;
  3199. case 0xe4: // mod/rm = 11 100, reg=100
  3200. cbInstr = 1;
  3201. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3202. op2->Reg = REG100;
  3203. break;
  3204. case 0xe5: // mod/rm = 11 101, reg=100
  3205. cbInstr = 1;
  3206. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3207. op2->Reg = REG100;
  3208. break;
  3209. case 0xe6: // mod/rm = 11 110, reg=100
  3210. cbInstr = 1;
  3211. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3212. op2->Reg = REG100;
  3213. break;
  3214. case 0xe7: // mod/rm = 11 111, reg=100
  3215. cbInstr = 1;
  3216. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3217. op2->Reg = REG100;
  3218. break;
  3219. case 0xe8: // mod/rm = 11 000, reg=101
  3220. cbInstr = 1;
  3221. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3222. op2->Reg = REG101;
  3223. break;
  3224. case 0xe9: // mod/rm = 11 001, reg=101
  3225. cbInstr = 1;
  3226. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3227. op2->Reg = REG101;
  3228. break;
  3229. case 0xea: // mod/rm = 11 010, reg=101
  3230. cbInstr = 1;
  3231. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3232. op2->Reg = REG101;
  3233. break;
  3234. case 0xeb: // mod/rm = 11 011, reg=101
  3235. cbInstr = 1;
  3236. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3237. op2->Reg = REG101;
  3238. break;
  3239. case 0xec: // mod/rm = 11 100, reg=101
  3240. cbInstr = 1;
  3241. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3242. op2->Reg = REG101;
  3243. break;
  3244. case 0xed: // mod/rm = 11 101, reg=101
  3245. cbInstr = 1;
  3246. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3247. op2->Reg = REG101;
  3248. break;
  3249. case 0xee: // mod/rm = 11 110, reg=101
  3250. cbInstr = 1;
  3251. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3252. op2->Reg = REG101;
  3253. break;
  3254. case 0xef: // mod/rm = 11 111, reg=101
  3255. cbInstr = 1;
  3256. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3257. op2->Reg = REG101;
  3258. break;
  3259. case 0xf0: // mod/rm = 11 000, reg=110
  3260. cbInstr = 1;
  3261. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3262. op2->Reg = REG110;
  3263. break;
  3264. case 0xf1: // mod/rm = 11 001, reg=110
  3265. cbInstr = 1;
  3266. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3267. op2->Reg = REG110;
  3268. break;
  3269. case 0xf2: // mod/rm = 11 010, reg=110
  3270. cbInstr = 1;
  3271. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3272. op2->Reg = REG110;
  3273. break;
  3274. case 0xf3: // mod/rm = 11 011, reg=110
  3275. cbInstr = 1;
  3276. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3277. op2->Reg = REG110;
  3278. break;
  3279. case 0xf4: // mod/rm = 11 100, reg=110
  3280. cbInstr = 1;
  3281. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3282. op2->Reg = REG110;
  3283. break;
  3284. case 0xf5: // mod/rm = 11 101, reg=110
  3285. cbInstr = 1;
  3286. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3287. op2->Reg = REG110;
  3288. break;
  3289. case 0xf6: // mod/rm = 11 110, reg=110
  3290. cbInstr = 1;
  3291. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3292. op2->Reg = REG110;
  3293. break;
  3294. case 0xf7: // mod/rm = 11 111, reg=110
  3295. cbInstr = 1;
  3296. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3297. op2->Reg = REG110;
  3298. break;
  3299. case 0xf8: // mod/rm = 11 000, reg=111
  3300. cbInstr = 1;
  3301. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
  3302. op2->Reg = REG111;
  3303. break;
  3304. case 0xf9: // mod/rm = 11 001, reg=111
  3305. cbInstr = 1;
  3306. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
  3307. op2->Reg = REG111;
  3308. break;
  3309. case 0xfa: // mod/rm = 11 010, reg=111
  3310. cbInstr = 1;
  3311. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
  3312. op2->Reg = REG111;
  3313. break;
  3314. case 0xfb: // mod/rm = 11 011, reg=111
  3315. cbInstr = 1;
  3316. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
  3317. op2->Reg = REG111;
  3318. break;
  3319. case 0xfc: // mod/rm = 11 100, reg=111
  3320. cbInstr = 1;
  3321. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
  3322. op2->Reg = REG111;
  3323. break;
  3324. case 0xfd: // mod/rm = 11 101, reg=111
  3325. cbInstr = 1;
  3326. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
  3327. op2->Reg = REG111;
  3328. break;
  3329. case 0xfe: // mod/rm = 11 110, reg=111
  3330. cbInstr = 1;
  3331. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
  3332. op2->Reg = REG111;
  3333. break;
  3334. default:
  3335. case 0xff: // mod/rm = 11 111, reg=111
  3336. cbInstr = 1;
  3337. op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
  3338. op2->Reg = REG111;
  3339. break;
  3340. }
  3341. return cbInstr;
  3342. }