PageRenderTime 42ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/ehsvc/beaengine/Includes/Routines_ModRM.c

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