496 lines
10 KiB
C
496 lines
10 KiB
C
|
/* asmopcod.h -- include file for microsoft 80x86 assembler
|
||
|
**
|
||
|
** microsoft (r) macro assembler
|
||
|
** copyright (c) microsoft corp 1986. all rights reserved
|
||
|
**
|
||
|
** randy nevin
|
||
|
*/
|
||
|
|
||
|
#define IMUL3 0x69 /* 3 argument integer multiply */
|
||
|
#define ARITHBASE 0xF6 /* base opcode for arithmetic opcodes */
|
||
|
|
||
|
/* base opcode for all instructions */
|
||
|
|
||
|
#define O_AAA 0x37
|
||
|
#define O_AAD 0xD5
|
||
|
#define O_AAM 0xD4
|
||
|
#define O_AAS 0x3F
|
||
|
#define O_ADC 0x10 /* ?????? */
|
||
|
#define O_ADD 0x00 /* ?????? */
|
||
|
#define O_AND 0x20 /* ?????? */
|
||
|
#define O_ARPL 0x63
|
||
|
#define O_BOUND 0x62
|
||
|
#define O_CALL 0xE8
|
||
|
#define O_CALLGATE 0xFF
|
||
|
#define O_CBW 0x98
|
||
|
#define O_CLC 0xF8
|
||
|
#define O_CLD 0xFC
|
||
|
#define O_CLI 0xFA
|
||
|
#define O_CLTS 0x0F
|
||
|
#define O_CMC 0xF5
|
||
|
#define O_CMP 0x38 /* ?????? */
|
||
|
#define O_CMPS 0xA6
|
||
|
#define O_CMPSB 0xA6
|
||
|
#define O_CMPSW 0xA7
|
||
|
#define O_CWD 0x99
|
||
|
#define O_DAA 0x27
|
||
|
#define O_DAS 0x2F
|
||
|
#define O_DEC 0x48 /* ?????? */
|
||
|
#define O_DIV 0xF6
|
||
|
#define O_ENTER 0xC8
|
||
|
#define O_ESC 0x36 /* not opcode */
|
||
|
#define O_HLT 0xF4
|
||
|
#define O_IDIV 0xF6
|
||
|
#define O_IMUL 0xF6
|
||
|
#define O_IN 0xE4
|
||
|
#define O_INC 0x40
|
||
|
#define O_INS 0x6C
|
||
|
#define O_INSB 0x6C
|
||
|
#define O_INSW 0x6D
|
||
|
#define O_INT 0xCC
|
||
|
#define O_INTO 0xCE
|
||
|
#define O_IRET 0xCF
|
||
|
#define O_JA 0x77
|
||
|
#define O_JAE 0x73
|
||
|
#define O_JB 0x72
|
||
|
#define O_JBE 0x76
|
||
|
#define O_JC 0x72
|
||
|
#define O_JCXZ 0xE3
|
||
|
#define O_JE 0x74
|
||
|
#define O_JG 0x7F
|
||
|
#define O_JGE 0x7D
|
||
|
#define O_JL 0x7C
|
||
|
#define O_JLE 0x7E
|
||
|
#define O_JMP 0xE9
|
||
|
#define O_JNA 0x76
|
||
|
#define O_JNAE 0x72
|
||
|
#define O_JNB 0x73
|
||
|
#define O_JNBE 0x77
|
||
|
#define O_JNC 0x73
|
||
|
#define O_JNE 0x75
|
||
|
#define O_JNG 0x7E
|
||
|
#define O_JNGE 0x7C
|
||
|
#define O_JNL 0x7D
|
||
|
#define O_JNLE 0x7F
|
||
|
#define O_JNO 0x71
|
||
|
#define O_JNP 0x7B
|
||
|
#define O_JNS 0x79
|
||
|
#define O_JNZ 0x75
|
||
|
#define O_JO 0x70
|
||
|
#define O_JP 0x7A
|
||
|
#define O_JPE 0x7A
|
||
|
#define O_JPO 0x7B
|
||
|
#define O_JS 0x78
|
||
|
#define O_JZ 0x74
|
||
|
#define O_LAHF 0x9F
|
||
|
#define O_LAR 0x0F
|
||
|
#define O_LDS 0xC5
|
||
|
#define O_LEA 0x8D
|
||
|
#define O_LES 0xC4
|
||
|
#define O_LEAVE 0xC9
|
||
|
#define O_LGDT 0x0F
|
||
|
#define O_LIDT 0x0F
|
||
|
#define O_LLDT 0x0F
|
||
|
#define O_LMSW 0x0F
|
||
|
#define O_LOCK 0xF0
|
||
|
#define O_LODS 0xAC
|
||
|
#define O_LODSB 0xAC
|
||
|
#define O_LODSW 0xAD
|
||
|
#define O_LOOP 0xE2
|
||
|
#define O_LOOPE 0xE1
|
||
|
#define O_LOOPNE 0xE0
|
||
|
#define O_LOOPNZ 0xE0
|
||
|
#define O_LOOPZ 0xE1
|
||
|
#define O_LSL 0x0F
|
||
|
#define O_LTR 0x0F
|
||
|
#define O_MOV 0xA2
|
||
|
#define O_MOVBOFF 0xA0
|
||
|
#define O_MOVBREA 0x88
|
||
|
#define O_MOVFSEG 0x8C
|
||
|
#define O_MOVTSEG 0x8E
|
||
|
#define O_MOVS 0xA4
|
||
|
#define O_MOVSB 0xA4
|
||
|
#define O_MOVSW 0xA5
|
||
|
#define O_MUL 0xF6
|
||
|
#define O_NEG 0xF6
|
||
|
#define O_NOP 0x90
|
||
|
#define O_NOT 0xF6
|
||
|
#define O_OR 0x08
|
||
|
#define O_OUT 0xE6
|
||
|
#define O_OUTS 0x6E
|
||
|
#define O_OUTSB 0x6E
|
||
|
#define O_OUTSW 0x6F
|
||
|
#define O_POP 0x58
|
||
|
#define O_POPA 0x61
|
||
|
#define O_POPF 0x9D
|
||
|
#define O_POPM 0x8F
|
||
|
#define O_PUSH 0x50
|
||
|
#define O_PUSHA 0x60
|
||
|
#define O_PUSHF 0x9C
|
||
|
#define O_PUSHM 0xFF
|
||
|
#define O_RCL 0xD0
|
||
|
#define O_RCR 0xD0
|
||
|
#define O_REP 0xF3
|
||
|
#define O_REPE 0xF3
|
||
|
#define O_REPNE 0xF2
|
||
|
#define O_REPNZ 0xF2
|
||
|
#define O_REPZ 0xF3
|
||
|
#define O_RET 0xC3
|
||
|
#define O_ROL 0xD0
|
||
|
#define O_ROR 0xD0
|
||
|
#define O_SAHF 0x9E
|
||
|
#define O_SAL 0xD0
|
||
|
#define O_SAR 0xD0
|
||
|
#define O_SBB 0x18
|
||
|
#define O_SCAS 0xAE
|
||
|
#define O_SCASB 0xAE
|
||
|
#define O_SCASW 0xAF
|
||
|
#define O_SGDT 0x0F
|
||
|
#define O_SHL 0xD0
|
||
|
#define O_SHR 0xD0
|
||
|
#define O_SIDT 0x0F
|
||
|
#define O_SLDT 0x0F
|
||
|
#define O_SMSW 0x0F
|
||
|
#define O_STC 0xF9
|
||
|
#define O_STD 0xFD
|
||
|
#define O_STI 0xFB
|
||
|
#define O_STOS 0xAA
|
||
|
#define O_STOSB 0xAA
|
||
|
#define O_STOSW 0xAB
|
||
|
#define O_STR 0x0F
|
||
|
#define O_SUB 0x28
|
||
|
#define O_TEST 0x84
|
||
|
#define O_VERR 0x0F
|
||
|
#define O_VERW 0x0F
|
||
|
#define O_WAIT 0x9B
|
||
|
#define O_XCHG 0x90
|
||
|
#define O_XCHGBREA 0x86
|
||
|
#define O_XCHGWRAX 0x90
|
||
|
#define O_XLAT 0xD7
|
||
|
#define O_XLATB 0xD7
|
||
|
#define O_XOR 0x30
|
||
|
|
||
|
#ifdef V386
|
||
|
#define O_MOVSX 0x0FBE
|
||
|
#define O_MOVZX 0x0FB6
|
||
|
#define O_CWDE 0x98
|
||
|
#define O_CDQ 0x99
|
||
|
#define O_LFS 0xB4
|
||
|
#define O_LGS 0xB5
|
||
|
#define O_LSS 0xB2
|
||
|
#define O_SHLD 0xA4
|
||
|
#define O_SHRD 0xAC
|
||
|
#define O_CMPSD 0xA7
|
||
|
#define O_INSD 0x6D
|
||
|
#define O_LODSD 0xAD
|
||
|
#define O_MOVSD 0xA5
|
||
|
#define O_OUTSD 0x6F
|
||
|
#define O_SCASD 0xAF
|
||
|
#define O_STOSD 0xAB
|
||
|
#define O_BSF 0x0F
|
||
|
#define O_BSR 0x0F
|
||
|
#define O_BT 0x0F
|
||
|
#define O_BTC 0x0F
|
||
|
#define O_BTR 0x0F
|
||
|
#define O_BTS 0x0F
|
||
|
#define O_IBTS 0x0F
|
||
|
#define O_XBTS 0x0F
|
||
|
#define O_JECXZ 0xE3
|
||
|
#define O_SETO 0x0F
|
||
|
#define O_SETNO 0x0F
|
||
|
#define O_SETB 0x0F
|
||
|
#define O_SETNAE 0x0F
|
||
|
#define O_SETNB 0x0F
|
||
|
#define O_SETAE 0x0F
|
||
|
#define O_SETE 0x0F
|
||
|
#define O_SETZ 0x0F
|
||
|
#define O_SETNE 0x0F
|
||
|
#define O_SETNZ 0x0F
|
||
|
#define O_SETBE 0x0F
|
||
|
#define O_SETNA 0x0F
|
||
|
#define O_SETNBE 0x0F
|
||
|
#define O_SETA 0x0F
|
||
|
#define O_SETS 0x0F
|
||
|
#define O_SETNS 0x0F
|
||
|
#define O_SETP 0x0F
|
||
|
#define O_SETPE 0x0F
|
||
|
#define O_SETNP 0x0F
|
||
|
#define O_SETPO 0x0F
|
||
|
#define O_SETL 0x0F
|
||
|
#define O_SETNGE 0x0F
|
||
|
#define O_SETC 0x0F
|
||
|
#define O_SETNC 0x0F
|
||
|
#define O_SETLE 0x0F
|
||
|
#define O_SETNG 0x0F
|
||
|
#define O_SETNL 0x0F
|
||
|
#define O_SETGE 0x0F
|
||
|
#define O_SETNLE 0x0F
|
||
|
#define O_SETG 0x0F
|
||
|
#define O_PUSHAD 0x60
|
||
|
#define O_POPAD 0x61
|
||
|
#define O_POPFD 0x9D
|
||
|
#define O_PUSHFD 0x9C
|
||
|
#define O_IRETD 0xCF
|
||
|
#endif
|
||
|
|
||
|
#define O_RETN 0xC3
|
||
|
#define O_RETF 0xCB
|
||
|
|
||
|
/* modrm bits for 8086/186/286/386 instructions */
|
||
|
|
||
|
#define R_AAD 0x0A
|
||
|
#define R_AAM 0x0A
|
||
|
#define R_CLTS 0x06
|
||
|
#define R_DIV 0x06
|
||
|
#define R_IDIV 0x07
|
||
|
#define R_IMUL 0x05
|
||
|
#define R_LAR 0x02
|
||
|
#define R_LGDT 0x02
|
||
|
#define R_LIDT 0x03
|
||
|
#define R_LLDT 0x02
|
||
|
#define R_LMSW 0x06
|
||
|
#define R_LSL 0x03
|
||
|
#define R_LTR 0x03
|
||
|
#define R_MUL 0x04
|
||
|
#define R_NEG 0x03
|
||
|
#define R_NOT 0x02
|
||
|
#define R_RCL 0x02
|
||
|
#define R_RCR 0x03
|
||
|
#define R_ROL 0x00
|
||
|
#define R_ROR 0x01
|
||
|
#define R_SAL 0x04
|
||
|
#define R_SAR 0x07
|
||
|
#define R_SGDT 0x00
|
||
|
#define R_SHL 0x04
|
||
|
#define R_SHR 0x05
|
||
|
#define R_SIDT 0x01
|
||
|
#define R_SLDT 0x00
|
||
|
#define R_SMSW 0x04
|
||
|
#define R_STR 0x01
|
||
|
#define R_VERR 0x04
|
||
|
#define R_VERW 0x05
|
||
|
#define R_BT 0x04
|
||
|
#define R_BTC 0x07
|
||
|
#define R_BTR 0x06
|
||
|
#define R_BTS 0x05
|
||
|
#define R_SETO 0x90
|
||
|
#define R_SETNO 0x91
|
||
|
#define R_SETB 0x92
|
||
|
#define R_SETNAE 0x92
|
||
|
#define R_SETNB 0x93
|
||
|
#define R_SETAE 0x93
|
||
|
#define R_SETE 0x94
|
||
|
#define R_SETZ 0x94
|
||
|
#define R_SETNE 0x95
|
||
|
#define R_SETNZ 0x95
|
||
|
#define R_SETBE 0x96
|
||
|
#define R_SETNA 0x96
|
||
|
#define R_SETNBE 0x97
|
||
|
#define R_SETA 0x97
|
||
|
#define R_SETS 0x98
|
||
|
#define R_SETNS 0x99
|
||
|
#define R_SETP 0x9A
|
||
|
#define R_SETPE 0x9A
|
||
|
#define R_SETNP 0x9B
|
||
|
#define R_SETPO 0x9B
|
||
|
#define R_SETL 0x9C
|
||
|
#define R_SETNGE 0x9C
|
||
|
#define R_SETC 0x92
|
||
|
#define R_SETNC 0x93
|
||
|
#define R_SETLE 0x9E
|
||
|
#define R_SETNG 0x9E
|
||
|
#define R_SETNL 0x9D
|
||
|
#define R_SETGE 0x9D
|
||
|
#define R_SETNLE 0x9F
|
||
|
#define R_SETG 0x9F
|
||
|
|
||
|
|
||
|
/* 8087/287 instructions */
|
||
|
|
||
|
#define O_F2XM1 0xD9
|
||
|
#define O_FABS 0xD9
|
||
|
#define O_FADD 0xD8
|
||
|
#define O_FADDP 0xDE
|
||
|
#define O_FBLD 0xDF
|
||
|
#define O_FBSTP 0xDF
|
||
|
#define O_FCHS 0xD9
|
||
|
#define O_FCLEX 0xDB
|
||
|
#define O_FCOM 0xD8
|
||
|
#define O_FCOMP 0xD8
|
||
|
#define O_FCOMPP 0xDE
|
||
|
#define O_FDECSTP 0xD9
|
||
|
#define O_FDISI 0xDB
|
||
|
#define O_FDIV 0xD8
|
||
|
#define O_FDIVP 0xDE
|
||
|
#define O_FDIVR 0xD8
|
||
|
#define O_FDIVRP 0xDE
|
||
|
#define O_FENI 0xDB
|
||
|
#define O_FFREE 0xDD
|
||
|
#define O_FIADD 0xDA
|
||
|
#define O_FICOM 0xDA
|
||
|
#define O_FICOMP 0xDA
|
||
|
#define O_FIDIV 0xDA
|
||
|
#define O_FIDIVR 0xDA
|
||
|
#define O_FILD 0xDB
|
||
|
#define O_FIMUL 0xDA
|
||
|
#define O_FINCSTP 0xD9
|
||
|
#define O_FINIT 0xDB
|
||
|
#define O_FIST 0xDB
|
||
|
#define O_FISTP 0xDB
|
||
|
#define O_FISUB 0xDA
|
||
|
#define O_FISUBR 0xDA
|
||
|
#define O_FLD 0xD9
|
||
|
#define O_FLD1 0xD9
|
||
|
#define O_FLDCW 0xD9
|
||
|
#define O_FLDENV 0xD9
|
||
|
#define O_FLDL2E 0xD9
|
||
|
#define O_FLDL2T 0xD9
|
||
|
#define O_FLDLG2 0xD9
|
||
|
#define O_FLDLN2 0xD9
|
||
|
#define O_FLDPI 0xD9
|
||
|
#define O_FLDZ 0xD9
|
||
|
#define O_FMUL 0xD8
|
||
|
#define O_FMULP 0xDE
|
||
|
#define O_FNCLEX 0xDB
|
||
|
#define O_FNDISI 0xDB
|
||
|
#define O_FNENI 0xDB
|
||
|
#define O_FNINIT 0xDB
|
||
|
#define O_FNOP 0xD9
|
||
|
#define O_FNSAVE 0xDD
|
||
|
#define O_FNSTCW 0xD9
|
||
|
#define O_FNSTENV 0xD9
|
||
|
#define O_FNSTSW 0xDD
|
||
|
#define O_FPATAN 0xD9
|
||
|
#define O_FPREM 0xD9
|
||
|
#define O_FPTAN 0xD9
|
||
|
#define O_FRNDINT 0xD9
|
||
|
#define O_FRSTOR 0xDD
|
||
|
#define O_FSAVE 0xDD
|
||
|
#define O_FSCALE 0xD9
|
||
|
#define O_FSETPM 0xDB
|
||
|
#define O_FSQRT 0xD9
|
||
|
#define O_FST 0xD9
|
||
|
#define O_FSTCW 0xD9
|
||
|
#define O_FSTENV 0xD9
|
||
|
#define O_FSTP 0xD9
|
||
|
#define O_FSTSW 0xDD
|
||
|
#define O_FSTSWAX 0xDF
|
||
|
#define O_FSUB 0xD8
|
||
|
#define O_FSUBP 0xDE
|
||
|
#define O_FSUBR 0xD8
|
||
|
#define O_FSUBRP 0xDE
|
||
|
#define O_FTST 0xD9
|
||
|
#define O_FWAIT 0xD8
|
||
|
#define O_FXAM 0xD9
|
||
|
#define O_FXCH 0xD9
|
||
|
#define O_FXTRACT 0xD9
|
||
|
#define O_FYL2X 0xD9
|
||
|
#define O_FYL2XP1 0xD9
|
||
|
#define O_FNRSTOR 0xDD
|
||
|
|
||
|
#ifdef V386
|
||
|
|
||
|
#define O_FSIN 0xD9
|
||
|
#define O_FSINCOS 0xD9
|
||
|
#define O_FCOS 0xD9
|
||
|
#define O_FPREM1 0xD9
|
||
|
#define O_FUCOM 0xDD
|
||
|
#define O_FUCOMP 0xDD
|
||
|
#define O_FUCOMPP 0xDA
|
||
|
|
||
|
#endif
|
||
|
/* 8087/287 modrm bits */
|
||
|
|
||
|
#define R_F2XM1 0xF0
|
||
|
#define R_FABS 0xE1
|
||
|
#define R_FADD 0x00
|
||
|
#define R_FADDP 0x00
|
||
|
#define R_FBLD 0x04
|
||
|
#define R_FBSTP 0x06
|
||
|
#define R_FCHS 0xE0
|
||
|
#define R_FCLEX 0xE2
|
||
|
#define R_FCOM 0x02
|
||
|
#define R_FCOMP 0x03
|
||
|
#define R_FCOMPP 0xD9
|
||
|
#define R_FDECSTP 0xF6
|
||
|
#define R_FDISI 0xE1
|
||
|
#define R_FDIV 0x06
|
||
|
#define R_FDIVP 0x07
|
||
|
#define R_FDIVR 0x07
|
||
|
#define R_FDIVRP 0x06
|
||
|
#define R_FENI 0xE0
|
||
|
#define R_FFREE 0x00
|
||
|
#define R_FIADD 0x00
|
||
|
#define R_FICOM 0x02
|
||
|
#define R_FICOMP 0x03
|
||
|
#define R_FIDIV 0x06
|
||
|
#define R_FIDIVR 0x07
|
||
|
#define R_FILD 0x00
|
||
|
#define R_FIMUL 0x01
|
||
|
#define R_FINCSTP 0xF7
|
||
|
#define R_FINIT 0xE3
|
||
|
#define R_FIST 0x02
|
||
|
#define R_FISTP 0x03
|
||
|
#define R_FISUB 0x04
|
||
|
#define R_FISUBR 0x05
|
||
|
#define R_FLD 0x00
|
||
|
#define R_FLD1 0xE8
|
||
|
#define R_FLDCW 0x05
|
||
|
#define R_FLDENV 0x04
|
||
|
#define R_FLDL2E 0xEA
|
||
|
#define R_FLDL2T 0xE9
|
||
|
#define R_FLDLG2 0xEC
|
||
|
#define R_FLDLN2 0xED
|
||
|
#define R_FLDPI 0xEB
|
||
|
#define R_FLDZ 0xEE
|
||
|
#define R_FMUL 0x01
|
||
|
#define R_FMULP 0x01
|
||
|
#define R_FNCLEX 0xE2
|
||
|
#define R_FNDISI 0xE1
|
||
|
#define R_FNENI 0xE0
|
||
|
#define R_FNINIT 0xE3
|
||
|
#define R_FNOP 0xD0
|
||
|
#define R_FNSAVE 0x06
|
||
|
#define R_FNSTCW 0x07
|
||
|
#define R_FNSTENV 0x06
|
||
|
#define R_FNSTSW 0x07
|
||
|
#define R_FPATAN 0xF3
|
||
|
#define R_FPREM 0xF8
|
||
|
#define R_FPTAN 0xF2
|
||
|
#define R_FRNDINT 0xFC
|
||
|
#define R_FRSTOR 0x04
|
||
|
#define R_FSAVE 0x06
|
||
|
#define R_FSCALE 0xFD
|
||
|
#define R_FSETPM 0xE4
|
||
|
#define R_FSQRT 0xFA
|
||
|
#define R_FST 0x02
|
||
|
#define R_FSTCW 0x07
|
||
|
#define R_FSTENV 0x06
|
||
|
#define R_FSTP 0x03
|
||
|
#define R_FSTSW 0x07
|
||
|
#define R_FSTSWAX 0x04 /* sleazy trick to make fltmodrm work */
|
||
|
#define R_FSUB 0x04
|
||
|
#define R_FSUBP 0x05
|
||
|
#define R_FSUBR 0x05
|
||
|
#define R_FSUBRP 0x04
|
||
|
#define R_FTST 0xE4
|
||
|
#define R_FWAIT 0x9B
|
||
|
#define R_FXAM 0xE5
|
||
|
#define R_FXCH 0x01
|
||
|
#define R_FXTRACT 0xF4
|
||
|
#define R_FYL2X 0xF1
|
||
|
#define R_FYL2XP1 0xF9
|
||
|
#define R_FNRSTOR 0x04
|
||
|
|
||
|
#ifdef V386
|
||
|
|
||
|
#define R_FPREM1 0xF5
|
||
|
#define R_FSIN 0xFE
|
||
|
#define R_FCOS 0xFF
|
||
|
#define R_FSINCOS 0xFB
|
||
|
#define R_FUCOM 0x04
|
||
|
#define R_FUCOMP 0x05
|
||
|
#define R_FUCOMPP 0xE9
|
||
|
|
||
|
#endif
|