Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

495 lines
11 KiB

  1. /* asmopcod.h -- include file for microsoft 80x86 assembler
  2. **
  3. ** microsoft (r) macro assembler
  4. ** copyright (c) microsoft corp 1986. all rights reserved
  5. **
  6. ** randy nevin
  7. */
  8. #define IMUL3 0x69 /* 3 argument integer multiply */
  9. #define ARITHBASE 0xF6 /* base opcode for arithmetic opcodes */
  10. /* base opcode for all instructions */
  11. #define O_AAA 0x37
  12. #define O_AAD 0xD5
  13. #define O_AAM 0xD4
  14. #define O_AAS 0x3F
  15. #define O_ADC 0x10 /* ?????? */
  16. #define O_ADD 0x00 /* ?????? */
  17. #define O_AND 0x20 /* ?????? */
  18. #define O_ARPL 0x63
  19. #define O_BOUND 0x62
  20. #define O_CALL 0xE8
  21. #define O_CALLGATE 0xFF
  22. #define O_CBW 0x98
  23. #define O_CLC 0xF8
  24. #define O_CLD 0xFC
  25. #define O_CLI 0xFA
  26. #define O_CLTS 0x0F
  27. #define O_CMC 0xF5
  28. #define O_CMP 0x38 /* ?????? */
  29. #define O_CMPS 0xA6
  30. #define O_CMPSB 0xA6
  31. #define O_CMPSW 0xA7
  32. #define O_CWD 0x99
  33. #define O_DAA 0x27
  34. #define O_DAS 0x2F
  35. #define O_DEC 0x48 /* ?????? */
  36. #define O_DIV 0xF6
  37. #define O_ENTER 0xC8
  38. #define O_ESC 0x36 /* not opcode */
  39. #define O_HLT 0xF4
  40. #define O_IDIV 0xF6
  41. #define O_IMUL 0xF6
  42. #define O_IN 0xE4
  43. #define O_INC 0x40
  44. #define O_INS 0x6C
  45. #define O_INSB 0x6C
  46. #define O_INSW 0x6D
  47. #define O_INT 0xCC
  48. #define O_INTO 0xCE
  49. #define O_IRET 0xCF
  50. #define O_JA 0x77
  51. #define O_JAE 0x73
  52. #define O_JB 0x72
  53. #define O_JBE 0x76
  54. #define O_JC 0x72
  55. #define O_JCXZ 0xE3
  56. #define O_JE 0x74
  57. #define O_JG 0x7F
  58. #define O_JGE 0x7D
  59. #define O_JL 0x7C
  60. #define O_JLE 0x7E
  61. #define O_JMP 0xE9
  62. #define O_JNA 0x76
  63. #define O_JNAE 0x72
  64. #define O_JNB 0x73
  65. #define O_JNBE 0x77
  66. #define O_JNC 0x73
  67. #define O_JNE 0x75
  68. #define O_JNG 0x7E
  69. #define O_JNGE 0x7C
  70. #define O_JNL 0x7D
  71. #define O_JNLE 0x7F
  72. #define O_JNO 0x71
  73. #define O_JNP 0x7B
  74. #define O_JNS 0x79
  75. #define O_JNZ 0x75
  76. #define O_JO 0x70
  77. #define O_JP 0x7A
  78. #define O_JPE 0x7A
  79. #define O_JPO 0x7B
  80. #define O_JS 0x78
  81. #define O_JZ 0x74
  82. #define O_LAHF 0x9F
  83. #define O_LAR 0x0F
  84. #define O_LDS 0xC5
  85. #define O_LEA 0x8D
  86. #define O_LES 0xC4
  87. #define O_LEAVE 0xC9
  88. #define O_LGDT 0x0F
  89. #define O_LIDT 0x0F
  90. #define O_LLDT 0x0F
  91. #define O_LMSW 0x0F
  92. #define O_LOCK 0xF0
  93. #define O_LODS 0xAC
  94. #define O_LODSB 0xAC
  95. #define O_LODSW 0xAD
  96. #define O_LOOP 0xE2
  97. #define O_LOOPE 0xE1
  98. #define O_LOOPNE 0xE0
  99. #define O_LOOPNZ 0xE0
  100. #define O_LOOPZ 0xE1
  101. #define O_LSL 0x0F
  102. #define O_LTR 0x0F
  103. #define O_MOV 0xA2
  104. #define O_MOVBOFF 0xA0
  105. #define O_MOVBREA 0x88
  106. #define O_MOVFSEG 0x8C
  107. #define O_MOVTSEG 0x8E
  108. #define O_MOVS 0xA4
  109. #define O_MOVSB 0xA4
  110. #define O_MOVSW 0xA5
  111. #define O_MUL 0xF6
  112. #define O_NEG 0xF6
  113. #define O_NOP 0x90
  114. #define O_NOT 0xF6
  115. #define O_OR 0x08
  116. #define O_OUT 0xE6
  117. #define O_OUTS 0x6E
  118. #define O_OUTSB 0x6E
  119. #define O_OUTSW 0x6F
  120. #define O_POP 0x58
  121. #define O_POPA 0x61
  122. #define O_POPF 0x9D
  123. #define O_POPM 0x8F
  124. #define O_PUSH 0x50
  125. #define O_PUSHA 0x60
  126. #define O_PUSHF 0x9C
  127. #define O_PUSHM 0xFF
  128. #define O_RCL 0xD0
  129. #define O_RCR 0xD0
  130. #define O_REP 0xF3
  131. #define O_REPE 0xF3
  132. #define O_REPNE 0xF2
  133. #define O_REPNZ 0xF2
  134. #define O_REPZ 0xF3
  135. #define O_RET 0xC3
  136. #define O_ROL 0xD0
  137. #define O_ROR 0xD0
  138. #define O_SAHF 0x9E
  139. #define O_SAL 0xD0
  140. #define O_SAR 0xD0
  141. #define O_SBB 0x18
  142. #define O_SCAS 0xAE
  143. #define O_SCASB 0xAE
  144. #define O_SCASW 0xAF
  145. #define O_SGDT 0x0F
  146. #define O_SHL 0xD0
  147. #define O_SHR 0xD0
  148. #define O_SIDT 0x0F
  149. #define O_SLDT 0x0F
  150. #define O_SMSW 0x0F
  151. #define O_STC 0xF9
  152. #define O_STD 0xFD
  153. #define O_STI 0xFB
  154. #define O_STOS 0xAA
  155. #define O_STOSB 0xAA
  156. #define O_STOSW 0xAB
  157. #define O_STR 0x0F
  158. #define O_SUB 0x28
  159. #define O_TEST 0x84
  160. #define O_VERR 0x0F
  161. #define O_VERW 0x0F
  162. #define O_WAIT 0x9B
  163. #define O_XCHG 0x90
  164. #define O_XCHGBREA 0x86
  165. #define O_XCHGWRAX 0x90
  166. #define O_XLAT 0xD7
  167. #define O_XLATB 0xD7
  168. #define O_XOR 0x30
  169. #ifdef V386
  170. #define O_MOVSX 0x0FBE
  171. #define O_MOVZX 0x0FB6
  172. #define O_CWDE 0x98
  173. #define O_CDQ 0x99
  174. #define O_LFS 0xB4
  175. #define O_LGS 0xB5
  176. #define O_LSS 0xB2
  177. #define O_SHLD 0xA4
  178. #define O_SHRD 0xAC
  179. #define O_CMPSD 0xA7
  180. #define O_INSD 0x6D
  181. #define O_LODSD 0xAD
  182. #define O_MOVSD 0xA5
  183. #define O_OUTSD 0x6F
  184. #define O_SCASD 0xAF
  185. #define O_STOSD 0xAB
  186. #define O_BSF 0x0F
  187. #define O_BSR 0x0F
  188. #define O_BT 0x0F
  189. #define O_BTC 0x0F
  190. #define O_BTR 0x0F
  191. #define O_BTS 0x0F
  192. #define O_IBTS 0x0F
  193. #define O_XBTS 0x0F
  194. #define O_JECXZ 0xE3
  195. #define O_SETO 0x0F
  196. #define O_SETNO 0x0F
  197. #define O_SETB 0x0F
  198. #define O_SETNAE 0x0F
  199. #define O_SETNB 0x0F
  200. #define O_SETAE 0x0F
  201. #define O_SETE 0x0F
  202. #define O_SETZ 0x0F
  203. #define O_SETNE 0x0F
  204. #define O_SETNZ 0x0F
  205. #define O_SETBE 0x0F
  206. #define O_SETNA 0x0F
  207. #define O_SETNBE 0x0F
  208. #define O_SETA 0x0F
  209. #define O_SETS 0x0F
  210. #define O_SETNS 0x0F
  211. #define O_SETP 0x0F
  212. #define O_SETPE 0x0F
  213. #define O_SETNP 0x0F
  214. #define O_SETPO 0x0F
  215. #define O_SETL 0x0F
  216. #define O_SETNGE 0x0F
  217. #define O_SETC 0x0F
  218. #define O_SETNC 0x0F
  219. #define O_SETLE 0x0F
  220. #define O_SETNG 0x0F
  221. #define O_SETNL 0x0F
  222. #define O_SETGE 0x0F
  223. #define O_SETNLE 0x0F
  224. #define O_SETG 0x0F
  225. #define O_PUSHAD 0x60
  226. #define O_POPAD 0x61
  227. #define O_POPFD 0x9D
  228. #define O_PUSHFD 0x9C
  229. #define O_IRETD 0xCF
  230. #endif
  231. #define O_RETN 0xC3
  232. #define O_RETF 0xCB
  233. /* modrm bits for 8086/186/286/386 instructions */
  234. #define R_AAD 0x0A
  235. #define R_AAM 0x0A
  236. #define R_CLTS 0x06
  237. #define R_DIV 0x06
  238. #define R_IDIV 0x07
  239. #define R_IMUL 0x05
  240. #define R_LAR 0x02
  241. #define R_LGDT 0x02
  242. #define R_LIDT 0x03
  243. #define R_LLDT 0x02
  244. #define R_LMSW 0x06
  245. #define R_LSL 0x03
  246. #define R_LTR 0x03
  247. #define R_MUL 0x04
  248. #define R_NEG 0x03
  249. #define R_NOT 0x02
  250. #define R_RCL 0x02
  251. #define R_RCR 0x03
  252. #define R_ROL 0x00
  253. #define R_ROR 0x01
  254. #define R_SAL 0x04
  255. #define R_SAR 0x07
  256. #define R_SGDT 0x00
  257. #define R_SHL 0x04
  258. #define R_SHR 0x05
  259. #define R_SIDT 0x01
  260. #define R_SLDT 0x00
  261. #define R_SMSW 0x04
  262. #define R_STR 0x01
  263. #define R_VERR 0x04
  264. #define R_VERW 0x05
  265. #define R_BT 0x04
  266. #define R_BTC 0x07
  267. #define R_BTR 0x06
  268. #define R_BTS 0x05
  269. #define R_SETO 0x90
  270. #define R_SETNO 0x91
  271. #define R_SETB 0x92
  272. #define R_SETNAE 0x92
  273. #define R_SETNB 0x93
  274. #define R_SETAE 0x93
  275. #define R_SETE 0x94
  276. #define R_SETZ 0x94
  277. #define R_SETNE 0x95
  278. #define R_SETNZ 0x95
  279. #define R_SETBE 0x96
  280. #define R_SETNA 0x96
  281. #define R_SETNBE 0x97
  282. #define R_SETA 0x97
  283. #define R_SETS 0x98
  284. #define R_SETNS 0x99
  285. #define R_SETP 0x9A
  286. #define R_SETPE 0x9A
  287. #define R_SETNP 0x9B
  288. #define R_SETPO 0x9B
  289. #define R_SETL 0x9C
  290. #define R_SETNGE 0x9C
  291. #define R_SETC 0x92
  292. #define R_SETNC 0x93
  293. #define R_SETLE 0x9E
  294. #define R_SETNG 0x9E
  295. #define R_SETNL 0x9D
  296. #define R_SETGE 0x9D
  297. #define R_SETNLE 0x9F
  298. #define R_SETG 0x9F
  299. /* 8087/287 instructions */
  300. #define O_F2XM1 0xD9
  301. #define O_FABS 0xD9
  302. #define O_FADD 0xD8
  303. #define O_FADDP 0xDE
  304. #define O_FBLD 0xDF
  305. #define O_FBSTP 0xDF
  306. #define O_FCHS 0xD9
  307. #define O_FCLEX 0xDB
  308. #define O_FCOM 0xD8
  309. #define O_FCOMP 0xD8
  310. #define O_FCOMPP 0xDE
  311. #define O_FDECSTP 0xD9
  312. #define O_FDISI 0xDB
  313. #define O_FDIV 0xD8
  314. #define O_FDIVP 0xDE
  315. #define O_FDIVR 0xD8
  316. #define O_FDIVRP 0xDE
  317. #define O_FENI 0xDB
  318. #define O_FFREE 0xDD
  319. #define O_FIADD 0xDA
  320. #define O_FICOM 0xDA
  321. #define O_FICOMP 0xDA
  322. #define O_FIDIV 0xDA
  323. #define O_FIDIVR 0xDA
  324. #define O_FILD 0xDB
  325. #define O_FIMUL 0xDA
  326. #define O_FINCSTP 0xD9
  327. #define O_FINIT 0xDB
  328. #define O_FIST 0xDB
  329. #define O_FISTP 0xDB
  330. #define O_FISUB 0xDA
  331. #define O_FISUBR 0xDA
  332. #define O_FLD 0xD9
  333. #define O_FLD1 0xD9
  334. #define O_FLDCW 0xD9
  335. #define O_FLDENV 0xD9
  336. #define O_FLDL2E 0xD9
  337. #define O_FLDL2T 0xD9
  338. #define O_FLDLG2 0xD9
  339. #define O_FLDLN2 0xD9
  340. #define O_FLDPI 0xD9
  341. #define O_FLDZ 0xD9
  342. #define O_FMUL 0xD8
  343. #define O_FMULP 0xDE
  344. #define O_FNCLEX 0xDB
  345. #define O_FNDISI 0xDB
  346. #define O_FNENI 0xDB
  347. #define O_FNINIT 0xDB
  348. #define O_FNOP 0xD9
  349. #define O_FNSAVE 0xDD
  350. #define O_FNSTCW 0xD9
  351. #define O_FNSTENV 0xD9
  352. #define O_FNSTSW 0xDD
  353. #define O_FPATAN 0xD9
  354. #define O_FPREM 0xD9
  355. #define O_FPTAN 0xD9
  356. #define O_FRNDINT 0xD9
  357. #define O_FRSTOR 0xDD
  358. #define O_FSAVE 0xDD
  359. #define O_FSCALE 0xD9
  360. #define O_FSETPM 0xDB
  361. #define O_FSQRT 0xD9
  362. #define O_FST 0xD9
  363. #define O_FSTCW 0xD9
  364. #define O_FSTENV 0xD9
  365. #define O_FSTP 0xD9
  366. #define O_FSTSW 0xDD
  367. #define O_FSTSWAX 0xDF
  368. #define O_FSUB 0xD8
  369. #define O_FSUBP 0xDE
  370. #define O_FSUBR 0xD8
  371. #define O_FSUBRP 0xDE
  372. #define O_FTST 0xD9
  373. #define O_FWAIT 0xD8
  374. #define O_FXAM 0xD9
  375. #define O_FXCH 0xD9
  376. #define O_FXTRACT 0xD9
  377. #define O_FYL2X 0xD9
  378. #define O_FYL2XP1 0xD9
  379. #define O_FNRSTOR 0xDD
  380. #ifdef V386
  381. #define O_FSIN 0xD9
  382. #define O_FSINCOS 0xD9
  383. #define O_FCOS 0xD9
  384. #define O_FPREM1 0xD9
  385. #define O_FUCOM 0xDD
  386. #define O_FUCOMP 0xDD
  387. #define O_FUCOMPP 0xDA
  388. #endif
  389. /* 8087/287 modrm bits */
  390. #define R_F2XM1 0xF0
  391. #define R_FABS 0xE1
  392. #define R_FADD 0x00
  393. #define R_FADDP 0x00
  394. #define R_FBLD 0x04
  395. #define R_FBSTP 0x06
  396. #define R_FCHS 0xE0
  397. #define R_FCLEX 0xE2
  398. #define R_FCOM 0x02
  399. #define R_FCOMP 0x03
  400. #define R_FCOMPP 0xD9
  401. #define R_FDECSTP 0xF6
  402. #define R_FDISI 0xE1
  403. #define R_FDIV 0x06
  404. #define R_FDIVP 0x07
  405. #define R_FDIVR 0x07
  406. #define R_FDIVRP 0x06
  407. #define R_FENI 0xE0
  408. #define R_FFREE 0x00
  409. #define R_FIADD 0x00
  410. #define R_FICOM 0x02
  411. #define R_FICOMP 0x03
  412. #define R_FIDIV 0x06
  413. #define R_FIDIVR 0x07
  414. #define R_FILD 0x00
  415. #define R_FIMUL 0x01
  416. #define R_FINCSTP 0xF7
  417. #define R_FINIT 0xE3
  418. #define R_FIST 0x02
  419. #define R_FISTP 0x03
  420. #define R_FISUB 0x04
  421. #define R_FISUBR 0x05
  422. #define R_FLD 0x00
  423. #define R_FLD1 0xE8
  424. #define R_FLDCW 0x05
  425. #define R_FLDENV 0x04
  426. #define R_FLDL2E 0xEA
  427. #define R_FLDL2T 0xE9
  428. #define R_FLDLG2 0xEC
  429. #define R_FLDLN2 0xED
  430. #define R_FLDPI 0xEB
  431. #define R_FLDZ 0xEE
  432. #define R_FMUL 0x01
  433. #define R_FMULP 0x01
  434. #define R_FNCLEX 0xE2
  435. #define R_FNDISI 0xE1
  436. #define R_FNENI 0xE0
  437. #define R_FNINIT 0xE3
  438. #define R_FNOP 0xD0
  439. #define R_FNSAVE 0x06
  440. #define R_FNSTCW 0x07
  441. #define R_FNSTENV 0x06
  442. #define R_FNSTSW 0x07
  443. #define R_FPATAN 0xF3
  444. #define R_FPREM 0xF8
  445. #define R_FPTAN 0xF2
  446. #define R_FRNDINT 0xFC
  447. #define R_FRSTOR 0x04
  448. #define R_FSAVE 0x06
  449. #define R_FSCALE 0xFD
  450. #define R_FSETPM 0xE4
  451. #define R_FSQRT 0xFA
  452. #define R_FST 0x02
  453. #define R_FSTCW 0x07
  454. #define R_FSTENV 0x06
  455. #define R_FSTP 0x03
  456. #define R_FSTSW 0x07
  457. #define R_FSTSWAX 0x04 /* sleazy trick to make fltmodrm work */
  458. #define R_FSUB 0x04
  459. #define R_FSUBP 0x05
  460. #define R_FSUBR 0x05
  461. #define R_FSUBRP 0x04
  462. #define R_FTST 0xE4
  463. #define R_FWAIT 0x9B
  464. #define R_FXAM 0xE5
  465. #define R_FXCH 0x01
  466. #define R_FXTRACT 0xF4
  467. #define R_FYL2X 0xF1
  468. #define R_FYL2XP1 0xF9
  469. #define R_FNRSTOR 0x04
  470. #ifdef V386
  471. #define R_FPREM1 0xF5
  472. #define R_FSIN 0xFE
  473. #define R_FCOS 0xFF
  474. #define R_FSINCOS 0xFB
  475. #define R_FUCOM 0x04
  476. #define R_FUCOMP 0x05
  477. #define R_FUCOMPP 0xE9
  478. #endif