mirror of
https://github.com/reactos/reactos.git
synced 2025-02-28 11:25:13 +00:00
515 lines
18 KiB
C
515 lines
18 KiB
C
/******************************************************************************
|
|
* *
|
|
* Module: disassemblerdefines.h *
|
|
* *
|
|
* Revision: 1.00 *
|
|
* *
|
|
* Date: 3/17/2000 *
|
|
* *
|
|
* Copyright (c) 2000 Goran Devic *
|
|
* *
|
|
* Author: Goran Devic *
|
|
* *
|
|
*******************************************************************************
|
|
|
|
Module Description:
|
|
|
|
This is a header file containing the disassembler defines that are
|
|
used in DisassemblerData.h
|
|
|
|
*******************************************************************************
|
|
* *
|
|
* Changes: *
|
|
* *
|
|
* DATE DESCRIPTION OF CHANGES AUTHOR *
|
|
* -------- --------------------------------------------------- ----------- *
|
|
* 4/28/2000 Original Goran Devic *
|
|
* 11/4/2000 Modified for LinIce Goran Devic *
|
|
* -------- --------------------------------------------------- ----------- *
|
|
*******************************************************************************
|
|
* Important Defines *
|
|
******************************************************************************/
|
|
#ifndef _DDEF_H_
|
|
#define _DDEF_H_
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Groups and special codes in place of name index
|
|
*
|
|
******************************************************************************/
|
|
#define _NDEF 0x00 // Udefined/reserved opcode
|
|
#define _2BESC 0x01 // 2 byte escape code
|
|
#define _S_ES 0x02 // Segment ES override | these defines
|
|
#define _S_CS 0x03 // Segment CS override | must have
|
|
#define _S_SS 0x04 // Segment SS override | consecutive
|
|
#define _S_DS 0x05 // Segment DS override | enumeration
|
|
#define _S_FS 0x06 // Segment FS override | numbers.
|
|
#define _S_GS 0x07 // Segment GS override |
|
|
#define _OPSIZ 0x08 // Operand size override
|
|
#define _ADSIZ 0x09 // Address size override
|
|
#define _REPNE 0x0A // REPNE/REPNZ prefix
|
|
#define _REP 0x0B // REP/REPE/REPZ prefix
|
|
#define _EscD8 0x0C // Escape to coprocessor set: prefix D8
|
|
#define _EscD9 0x0D // Escape to coprocessor set: prefix D9
|
|
#define _EscDA 0x0E // Escape to coprocessor set: prefix DA
|
|
#define _EscDB 0x0F // Escape to coprocessor set: prefix DB
|
|
#define _EscDC 0x10 // Escape to coprocessor set: prefix DC
|
|
#define _EscDD 0x11 // Escape to coprocessor set: prefix DD
|
|
#define _EscDE 0x12 // Escape to coprocessor set: prefix DE
|
|
#define _EscDF 0x13 // Escape to coprocessor set: prefix DF
|
|
#define _GRP1a 0x14 // Group 1a extended opcode
|
|
#define _GRP1b 0x15 // Group 1b extended opcode
|
|
#define _GRP1c 0x16 // Group 1c extended opcode
|
|
#define _GRP2a 0x17 // Group 2a extended opcode
|
|
#define _GRP2b 0x18 // Group 2b extended opcode
|
|
#define _GRP2c 0x19 // Group 2c extended opcode
|
|
#define _GRP2d 0x1A // Group 2d extended opcode
|
|
#define _GRP2e 0x1B // Group 2e extended opcode
|
|
#define _GRP2f 0x1C // Group 2f extended opcode
|
|
#define _GRP3a 0x1D // Group 3a extended opcode
|
|
#define _GRP3b 0x1E // Group 3b extended opcode
|
|
#define _GRP4 0x1F // Group 4 extended opcode
|
|
#define _GRP5 0x20 // Group 5 extended opcode
|
|
#define _GRP6 0x21 // Group 6 extended opcode
|
|
#define _GRP7 0x22 // Group 7 extended opcode
|
|
#define _GRP8 0x23 // Group 8 extended opcode
|
|
#define _GRP9 0x24 // Group 9 extended opcode
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Addressing modes argument definiton for the opcodes in a table
|
|
*
|
|
******************************************************************************/
|
|
#define _O 0x01
|
|
|
|
#define _Ib 0x03
|
|
#define _Iv 0x04
|
|
#define _Iw 0x05
|
|
#define _Yb 0x06
|
|
#define _Yv 0x07
|
|
#define _Xb 0x08
|
|
#define _Xv 0x09
|
|
#define _Jb 0x0A
|
|
#define _Jv 0x0B
|
|
#define _Ap 0x0C
|
|
#define _1 0x10
|
|
#define _3 0x11
|
|
#define _DX 0x12
|
|
#define _AL 0x13
|
|
#define _AH 0x14
|
|
#define _BL 0x15
|
|
#define _BH 0x16
|
|
#define _CL 0x17
|
|
#define _CH 0x18
|
|
#define _DL 0x19
|
|
#define _DH 0x1A
|
|
#define _CS 0x1B
|
|
#define _DS 0x1C
|
|
#define _ES 0x1D
|
|
#define _SS 0x1E
|
|
#define _FS 0x1F
|
|
#define _GS 0x20
|
|
#define _eAX 0x21
|
|
#define _eCX 0x22
|
|
#define _eDX 0x23
|
|
#define _eBX 0x24
|
|
#define _eSP 0x25
|
|
#define _eBP 0x26
|
|
#define _eSI 0x27
|
|
#define _eDI 0x28
|
|
#define _Eb 0x2F
|
|
#define _Ev 0x30
|
|
#define _Ew 0x31
|
|
#define _Ep 0x32
|
|
#define _Gb 0x33
|
|
#define _Gv 0x34
|
|
#define _M 0x35
|
|
#define _Ma 0x36
|
|
#define _Mp 0x37
|
|
#define _Ms 0x38
|
|
#define _Mq 0x39
|
|
#define _Rd 0x3A
|
|
#define _Rw 0x3B
|
|
#define _Sw 0x3C
|
|
#define _Cd 0x3D
|
|
#define _Dd 0x3E
|
|
#define _Td 0x3F
|
|
#define _ST 0x40
|
|
#define _ST0 0x41
|
|
#define _ST1 0x42
|
|
#define _ST2 0x43
|
|
#define _ST3 0x44
|
|
#define _ST4 0x45
|
|
#define _ST5 0x46
|
|
#define _ST6 0x47
|
|
#define _ST7 0x48
|
|
#define _AX 0x49
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Define holding structure for opcode
|
|
*
|
|
******************************************************************************/
|
|
|
|
typedef struct
|
|
{
|
|
UCHAR name; // Index into the opcode name table
|
|
UCHAR args; // Number of addressing codes that follow
|
|
UCHAR dest; // Destination operand addressing code
|
|
UCHAR src; // Source operand addressing code
|
|
UCHAR thrid; // Third operand addressing code
|
|
UCHAR v_instruction; // Virtual instruction index
|
|
UCHAR access; // Instruction data access type
|
|
UCHAR flags; // Miscellaneous flags
|
|
} TOpcodeData;
|
|
|
|
// `access' field:
|
|
// Data access flags are used with memory access instructions
|
|
|
|
#define INSTR_READ 0x80 // Faulting instruction reads memory
|
|
#define INSTR_WRITE 0x40 // Faulting instruction writes to memory
|
|
#define INSTR_READ_WRITE 0x20 // Faulting instruction is read-modify-write
|
|
|
|
// Low nibble contains the data length code - do not change these values as
|
|
// they represent the data width value as well
|
|
|
|
#define INSTR_BYTE 0x01 // Byte access instruction
|
|
#define INSTR_WORD 0x02 // Word access instruction
|
|
#define INSTR_WORD_DWORD 0x03 // Word or dword, depending on operand size
|
|
#define INSTR_DWORD 0x04 // Dword access instruction
|
|
|
|
// `flags' field:
|
|
// Disassembler flags; bottom 4 bits are used by the scanner flags
|
|
|
|
#define DIS_SPECIAL 0x80 // Special opcode
|
|
#define DIS_NAME_FLAG 0x40 // Name changes
|
|
#define DIS_GETNAMEFLAG(flags) (((flags)>>6)&1)
|
|
#define DIS_COPROC 0x20 // Coprocessor instruction
|
|
#define DIS_MODRM 0x10 // Use additional Mod R/M byte
|
|
|
|
// Scanner enums: 4 bits wide
|
|
|
|
#define SCAN_NATIVE 0x0 // Native instruction are default 0
|
|
#define SCAN_JUMP 0x1 // Evaluate new path
|
|
#define SCAN_COND_JUMP 0x2 // Evaluate both paths
|
|
#define SCAN_TERMINATING 0x3 // Terminating instruction needs virtualization
|
|
#define SCAN_TERM_PMODE 0x4 // Terminating instruction in protected mode only
|
|
#define SCAN_SINGLE_STEP 0x5 // Single-step instruction
|
|
|
|
// Define values stored in meta pages (bits [7:4])
|
|
|
|
#define META_NATIVE 0x0 // Native instruction are default 0
|
|
#define META_UNDEF 0x1 // Undefined/illegal instruction
|
|
#define META_TERMINATING 0x2 // Terminating instruction
|
|
#define META_SINGLE_STEP 0x3 // Execute natively single step
|
|
|
|
/******************************************************************************
|
|
* *
|
|
* Define opcode values for the main table *
|
|
* *
|
|
******************************************************************************/
|
|
#define _aaa 0x001
|
|
#define _aad 0x002
|
|
#define _aam 0x003
|
|
#define _aas 0x004
|
|
#define _adc 0x005
|
|
#define _add 0x006
|
|
#define _and 0x007
|
|
#define _arpl 0x008
|
|
#define _bound 0x009
|
|
#define _bsf 0x00a
|
|
#define _bsr 0x00b
|
|
#define _bt 0x00c
|
|
#define _btc 0x00d
|
|
#define _btr 0x00e
|
|
#define _bts 0x00f
|
|
#define _call 0x010
|
|
#define _cbw 0x011
|
|
#define _cwde 0x012
|
|
#define _clc 0x013
|
|
#define _cld 0x014
|
|
#define _cli 0x015
|
|
#define _clts 0x016
|
|
#define _cmc 0x017
|
|
#define _cmp 0x018
|
|
#define _cmps 0x019
|
|
#define _cmpsb 0x01a
|
|
#define _cmpsw 0x01b
|
|
#define _cmpsd 0x01c
|
|
#define _cwd 0x01d
|
|
#define _cdq 0x01e
|
|
#define _daa 0x01f
|
|
#define _das 0x020
|
|
#define _dec 0x021
|
|
#define _div 0x022
|
|
#define _enter 0x023
|
|
#define _hlt 0x024
|
|
#define _idiv 0x025
|
|
#define _imul 0x026
|
|
#define _in 0x027
|
|
#define _inc 0x028
|
|
#define _ins 0x029
|
|
#define _insb 0x02a
|
|
#define _insw 0x02b
|
|
#define _insd 0x02c
|
|
#define _int 0x02d
|
|
#define _into 0x02e
|
|
#define _iret 0x02f
|
|
#define _iretd 0x030
|
|
#define _jo 0x031
|
|
#define _jno 0x032
|
|
#define _jb 0x033
|
|
#define _jnb 0x034
|
|
#define _jz 0x035
|
|
#define _jnz 0x036
|
|
#define _jbe 0x037
|
|
#define _jnbe 0x038
|
|
#define _js 0x039
|
|
#define _jns 0x03a
|
|
#define _jp 0x03b
|
|
#define _jnp 0x03c
|
|
#define _jl 0x03d
|
|
#define _jnl 0x03e
|
|
#define _jle 0x03f
|
|
#define _jnle 0x040
|
|
#define _jmp 0x041
|
|
#define _lahf 0x042
|
|
#define _lar 0x043
|
|
#define _lea 0x044
|
|
#define _leave 0x045
|
|
#define _lgdt 0x046
|
|
#define _lidt 0x047
|
|
#define _lgs 0x048
|
|
#define _lss 0x049
|
|
#define _lds 0x04a
|
|
#define _les 0x04b
|
|
#define _lfs 0x04c
|
|
#define _lldt 0x04d
|
|
#define _lmsw 0x04e
|
|
#define _lock 0x04f
|
|
#define _lods 0x050
|
|
#define _lodsb 0x051
|
|
#define _lodsw 0x052
|
|
#define _lodsd 0x053
|
|
#define _loop 0x054
|
|
#define _loope 0x055
|
|
#define _loopz 0x056
|
|
#define _loopne 0x057
|
|
#define _loopnz 0x058
|
|
#define _lsl 0x059
|
|
#define _ltr 0x05a
|
|
#define _mov 0x05b
|
|
#define _movs 0x05c
|
|
#define _movsb 0x05d
|
|
#define _movsw 0x05e
|
|
#define _movsd 0x05f
|
|
#define _movsx 0x060
|
|
#define _movzx 0x061
|
|
#define _mul 0x062
|
|
#define _neg 0x063
|
|
#define _nop 0x064
|
|
#define _not 0x065
|
|
#define _or 0x066
|
|
#define _out 0x067
|
|
#define _outs 0x068
|
|
#define _outsb 0x069
|
|
#define _outsw 0x06a
|
|
#define _outsd 0x06b
|
|
#define _pop 0x06c
|
|
#define _popa 0x06d
|
|
#define _popad 0x06e
|
|
#define _popf 0x06f
|
|
#define _popfd 0x070
|
|
#define _push 0x071
|
|
#define _pusha 0x072
|
|
#define _pushad 0x073
|
|
#define _pushf 0x074
|
|
#define _pushfd 0x075
|
|
#define _rcl 0x076
|
|
#define _rcr 0x077
|
|
#define _rol 0x078
|
|
#define _ror 0x079
|
|
#define _rep 0x07a
|
|
#define _repe 0x07b
|
|
#define _repz 0x07c
|
|
#define _repne 0x07d
|
|
#define _repnz 0x07e
|
|
#define _ret 0x07f
|
|
#define _sahf 0x080
|
|
#define _sal 0x081
|
|
#define _sar 0x082
|
|
#define _shl 0x083
|
|
#define _shr 0x084
|
|
#define _sbb 0x085
|
|
#define _scas 0x086
|
|
#define _scasb 0x087
|
|
#define _scasw 0x088
|
|
#define _scasd 0x089
|
|
#define _set 0x08a
|
|
#define _sgdt 0x08b
|
|
#define _sidt 0x08c
|
|
#define _shld 0x08d
|
|
#define _shrd 0x08e
|
|
#define _sldt 0x08f
|
|
#define _smsw 0x090
|
|
#define _stc 0x091
|
|
#define _std 0x092
|
|
#define _sti 0x093
|
|
#define _stos 0x094
|
|
#define _stosb 0x095
|
|
#define _stosw 0x096
|
|
#define _stosd 0x097
|
|
#define _str 0x098
|
|
#define _sub 0x099
|
|
#define _test 0x09a
|
|
#define _verr 0x09b
|
|
#define _verw 0x09c
|
|
#define _wait 0x09d
|
|
#define _xchg 0x09e
|
|
#define _xlat 0x09f
|
|
#define _xlatb 0x0a0
|
|
#define _xor 0x0a1
|
|
#define _jcxz 0x0a2
|
|
#define _loadall 0x0a3
|
|
#define _invd 0x0a4
|
|
#define _wbinv 0x0a5
|
|
#define _seto 0x0a6
|
|
#define _setno 0x0a7
|
|
#define _setb 0x0a8
|
|
#define _setnb 0x0a9
|
|
#define _setz 0x0aa
|
|
#define _setnz 0x0ab
|
|
#define _setbe 0x0ac
|
|
#define _setnbe 0x0ad
|
|
#define _sets 0x0ae
|
|
#define _setns 0x0af
|
|
#define _setp 0x0b0
|
|
#define _setnp 0x0b1
|
|
#define _setl 0x0b2
|
|
#define _setnl 0x0b3
|
|
#define _setle 0x0b4
|
|
#define _setnle 0x0b5
|
|
#define _wrmsr 0x0b6
|
|
#define _rdtsc 0x0b7
|
|
#define _rdmsr 0x0b8
|
|
#define _cpuid 0x0b9
|
|
#define _rsm 0x0ba
|
|
#define _cmpx 0x0bb
|
|
#define _xadd 0x0bc
|
|
#define _bswap 0x0bd
|
|
#define _invpg 0x0be
|
|
#define _cmpx8 0x0bf
|
|
#define _jmpf 0x0c0
|
|
#define _retf 0x0c1
|
|
#define _rdpmc 0x0c2
|
|
|
|
#define _f2xm1 0x001
|
|
#define _fabs 0x002
|
|
#define _fadd 0x003
|
|
#define _faddp 0x004
|
|
#define _fbld 0x005
|
|
#define _fbstp 0x006
|
|
#define _fchs 0x007
|
|
#define _fclex 0x008
|
|
#define _fcom 0x009
|
|
#define _fcomp 0x00a
|
|
#define _fcompp 0x00b
|
|
#define _fcos 0x00c
|
|
#define _fdecstp 0x00d
|
|
#define _fdiv 0x00e
|
|
#define _fdivp 0x00f
|
|
#define _fdivr 0x010
|
|
#define _fdivrp 0x011
|
|
#define _ffree 0x012
|
|
#define _fiadd 0x013
|
|
#define _ficom 0x014
|
|
#define _ficomp 0x015
|
|
#define _fidiv 0x016
|
|
#define _fidivr 0x017
|
|
#define _fild 0x018
|
|
#define _fimul 0x019
|
|
#define _fincstp 0x01a
|
|
#define _finit 0x01b
|
|
#define _fist 0x01c
|
|
#define _fistp 0x01d
|
|
#define _fisub 0x01e
|
|
#define _fisubr 0x01f
|
|
#define _fld 0x020
|
|
#define _fld1 0x021
|
|
#define _fldcw 0x022
|
|
#define _fldenv 0x023
|
|
#define _fldl2e 0x024
|
|
#define _fldl2t 0x025
|
|
#define _fldlg2 0x026
|
|
#define _fldln2 0x027
|
|
#define _fldpi 0x028
|
|
#define _fldz 0x029
|
|
#define _fmul 0x02a
|
|
#define _fmulp 0x02b
|
|
#define _fnop 0x02c
|
|
#define _fpatan 0x02d
|
|
#define _fprem 0x02e
|
|
#define _fprem1 0x02f
|
|
#define _fptan 0x030
|
|
#define _frndint 0x031
|
|
#define _frstor 0x032
|
|
#define _fsave 0x033
|
|
#define _fscale 0x034
|
|
#define _fsin 0x035
|
|
#define _fsincos 0x036
|
|
#define _fsqrt 0x037
|
|
#define _fst 0x038
|
|
#define _fstcw 0x039
|
|
#define _fstenv 0x03a
|
|
#define _fstp 0x03b
|
|
#define _fstsw 0x03c
|
|
#define _fsub 0x03d
|
|
#define _fsubp 0x03e
|
|
#define _fsubr 0x03f
|
|
#define _fsubrp 0x040
|
|
#define _ftst 0x041
|
|
#define _fucom 0x042
|
|
#define _fucomp 0x043
|
|
#define _fucompp 0x044
|
|
#define _fxam 0x045
|
|
#define _fxch 0x046
|
|
#define _fxtract 0x047
|
|
#define _fyl2x 0x048
|
|
#define _fyl2xp1 0x049
|
|
|
|
/******************************************************************************
|
|
*
|
|
* External data and strings
|
|
*
|
|
******************************************************************************/
|
|
extern char* sNames[];
|
|
extern char* sCoprocNames[];
|
|
extern TOpcodeData Op1[ 256 ];
|
|
extern TOpcodeData Op2[ 256 ];
|
|
extern TOpcodeData Groups[ 17 ][ 8 ];
|
|
extern TOpcodeData Coproc1[ 8 ][ 8 ];
|
|
extern TOpcodeData Coproc2[ 8 ][ 16 * 4 ];
|
|
extern char *sBytePtr;
|
|
extern char *sWordPtr;
|
|
extern char *sDwordPtr;
|
|
extern char *sFwordPtr;
|
|
extern char *sQwordPtr;
|
|
extern char *sGenReg16_32[ 2 ][ 8 ];
|
|
extern char *sSeg[ 8 ];
|
|
extern char *sSegOverride[ 8 ];
|
|
extern char *sSegOverrideDefaultES[ 8 ];
|
|
extern char *sSegOverrideDefaultDS[ 8 ];
|
|
extern char *sScale[ 4 ];
|
|
extern char *sAdr1[ 2 ][ 8 ];
|
|
extern char *sRegs1[ 2 ][ 2 ][ 8 ];
|
|
extern char *sRegs2[];
|
|
extern char *sControl[ 8 ];
|
|
extern char *sDebug[ 8 ];
|
|
extern char *sTest[ 8 ];
|
|
extern char *sYptr[ 2 ];
|
|
extern char *sXptr[ 2 ];
|
|
extern char *sRep[ 4 ];
|
|
extern char *sST[ 9 ];
|
|
|
|
|
|
#endif // _DDEF_H_
|