📄 opcode.cpp
字号:
//-----------------------------------------------------------------------------------//
// Windows Graphics Programming: Win32 GDI and DirectDraw //
// ISBN 0-13-086985-6 //
// //
// Written by Yuan, Feng www.fengyuan.com //
// Copyright (c) 2000 by Hewlett-Packard Company www.hp.com //
// Published by Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com //
// //
// FileName : opcode.cpp //
// Description: Intel instruction map //
// Version : 1.00.000, May 31, 2000 //
//-----------------------------------------------------------------------------------//
#include "OpCode.h"
// Map for the first byte of Intel instructions
const OpCode OpCodeMap[256] =
{ // 00
{ _ADD, _Eb, _Gb },
{ _ADD, _Ev, _Gv },
{ _ADD, _Gb, _Eb },
{ _ADD, _Gv, _Ev },
{ _ADD, _AL, _Ib },
{ _ADD, _eAX, _Iv },
{ _PUSH, _ES },
{ _POP, _ES },
// 08
{ _OR, _Eb, _Gb },
{ _OR, _Ev, _Gv },
{ _OR, _Gb, _Eb },
{ _OR, _Gv, _Ev },
{ _OR, _AL, _Ib },
{ _OR, _eAX, _Iv },
{ _PUSH, _CS },
{ _ESCAPE_0F },
// 10
{ _ADC, _Eb, _Gb },
{ _ADC, _Ev, _Gv },
{ _ADC, _Gb, _Eb },
{ _ADC, _Gv, _Ev },
{ _ADC, _AL, _Ib },
{ _ADC, _eAX, _Iv },
{ _PUSH, _SS },
{ _POP, _SS },
// 18
{ _SBB, _Eb, _Gb },
{ _SBB, _Ev, _Gv },
{ _SBB, _Gb, _Eb },
{ _SBB, _Gv, _Ev },
{ _SBB, _AL, _Ib },
{ _SBB, _eAX, _Iv },
{ _PUSH, _DS },
{ _POP, _DS },
// 20
{ _AND, _Eb, _Gb },
{ _AND, _Ev, _Gv },
{ _AND, _Gb, _Eb },
{ _AND, _Gv, _Ev },
{ _AND, _AL, _Ib },
{ _AND, _eAX, _Iv },
{ _SEG, _ES },
{ _DAA },
// 28
{ _SUB, _Eb, _Gb },
{ _SUB, _Ev, _Gv },
{ _SUB, _Gb, _Eb },
{ _SUB, _Gv, _Ev },
{ _SUB, _AL, _Ib },
{ _SUB, _eAX, _Iv },
{ _SEG, _CS },
{ _DAS },
// 30
{ _XOR, _Eb, _Gb },
{ _XOR, _Ev, _Gv },
{ _XOR, _Gb, _Eb },
{ _XOR, _Gv, _Ev },
{ _XOR, _AL, _Ib },
{ _XOR, _eAX, _Iv },
{ _SEG, _SS },
{ _AAA },
// 38
{ _CMP, _Eb, _Gb },
{ _CMP, _Ev, _Gv },
{ _CMP, _Gb, _Eb },
{ _CMP, _Gv, _Ev },
{ _CMP, _AL, _Ib },
{ _CMP, _eAX, _Iv },
{ _SEG, _DS },
{ _AAS },
// 40
{ _INC, _eAX },
{ _INC, _eCX },
{ _INC, _eDX },
{ _INC, _eBX },
{ _INC, _eSP },
{ _INC, _eBP },
{ _INC, _eSI },
{ _INC, _eDI },
// 48
{ _DEC, _eAX },
{ _DEC, _eCX },
{ _DEC, _eDX },
{ _DEC, _eBX },
{ _DEC, _eSP },
{ _DEC, _eBP },
{ _DEC, _eSI },
{ _DEC, _eDI },
// 50
{ _PUSH, _eAX },
{ _PUSH, _eCX },
{ _PUSH, _eDX },
{ _PUSH, _eBX },
{ _PUSH, _eSP },
{ _PUSH, _eBP },
{ _PUSH, _eSI },
{ _PUSH, _eDI },
// 58
{ _POP, _eAX },
{ _POP, _eCX },
{ _POP, _eDX },
{ _POP, _eBX },
{ _POP, _eSP },
{ _POP, _eBP },
{ _POP, _eSI },
{ _POP, _eDI },
// 60
{ _PUSHA },
{ _POPA },
{ _BOUND, _Gv, _Ma },
{ _ARPL, _Ew, _Gw },
{ _SEG, _FS },
{ _SEG, _GS },
{ _OPNDSIZE },
{ _ADDRSIZE },
// 68
{ _PUSH, _Iv },
{ _IMUL, _Gv, _Ev, _Iv },
{ _PUSH, _Ib },
{ _IMUL, _Gv, _Ev, _Iv },
{ _INSB, _Yb, _Dx },
{ _INS, _Yv, _Dx },
{ _OUTSB, _Dx, _Xb },
{ _OUT, _Dx, _Xv },
// 70
{ _JO, _Jb },
{ _JNO, _Jb },
{ _JB, _Jb },
{ _JNB, _Jb },
{ _JZ, _Jb },
{ _JNZ, _Jb },
{ _JBE, _Jb },
{ _JNBE, _Jb },
// 78
{ _JS, _Jb },
{ _JNS, _Jb },
{ _JP, _Jb },
{ _JNP, _Jb },
{ _JL, _Jb },
{ _JNL, _Jb },
{ _JLE, _Jb },
{ _JNLE, _Jb },
// 80
{ _Grp1, _Eb, _Ib },
{ _Grp1, _Ev, _Iv },
{ _Grp1, _Ev, _Ib },
{ _Grp1, _Eb, _Ib },
{ _TEST, _Eb, _Gb },
{ _TEST, _Ev, _Gv },
{ _XCHG, _Eb, _Gb },
{ _XCHG, _Ev, _Gv },
// 88
{ _MOV, _Eb, _Gb },
{ _MOV, _Ev, _Gv },
{ _MOV, _Gb, _Eb },
{ _MOV, _Gv, _Ev },
{ _MOV, _Ew, _Sw },
{ _LEA, _Gv, _M },
{ _MOV, _Sw, _Ew },
{ _POP, _Ev },
// 90
{ _NOP },
{ _XCHG, _eAX, _eCX },
{ _XCHG, _eAX, _eDX },
{ _XCHG, _eAX, _eBX },
{ _XCHG, _eAX, _eSP },
{ _XCHG, _eAX, _eBP },
{ _XCHG, _eAX, _eSI },
{ _XCHG, _eAX, _eDI },
// 98
{ _CBW },
{ _CWD },
{ _CALL, _Ap },
{ _WAIT },
{ _PUSHF, _Fv },
{ _POPF, _Fv },
{ _SAHF },
{ _LAHF },
// A0
{ _MOV, _AL, _Ob },
{ _MOV, _eAX, _Ov },
{ _MOV, _Ob, _AL },
{ _MOV, _Ov, _eAX },
{ _MOVSB, _Xb, _Yb },
{ _MOVSWD, _Xv, _Yv },
{ _CMPSB, _Xb, _Yb },
{ _CMPSWD, _Xv, _Yv },
// A8
{ _TEST, _AL, _Ib },
{ _TEST, _eAX, _Iv },
{ _STOSB, _Yb, _AL },
{ _STOSWD, _Yv, _eAX },
{ _LODSB, _AL, _Xb },
{ _LODSWD, _eAX, _Xv },
{ _SCASB, _AL, _Xb },
{ _SCASWD, _eAX, _Xv },
// B0
{ _MOV, _AL, _Ib },
{ _MOV, _CL, _Ib },
{ _MOV, _DL, _Ib },
{ _MOV, _BL, _Ib },
{ _MOV, _AH, _Ib },
{ _MOV, _CH, _Ib },
{ _MOV, _DH, _Ib },
{ _MOV, _BH, _Ib },
// B8
{ _MOV, _eAX, _Iv },
{ _MOV, _eCX, _Iv },
{ _MOV, _eDX, _Iv },
{ _MOV, _eBX, _Iv },
{ _MOV, _eSP, _Iv },
{ _MOV, _eBP, _Iv },
{ _MOV, _eSI, _Iv },
{ _MOV, _eDI, _Iv },
// C0
{ _Grp2, _Eb, _Ib },
{ _Grp2, _Ev, _Ib },
{ _RET, _Iw },
{ _RET },
{ _LES, _Gv, _Mp },
{ _LDS, _Gv, _Mp },
{ _MOV, _Eb, _Ib },
{ _MOV, _Ev, _Iv },
// C8
{ _ENTER, _Iw, _Ib },
{ _LEAVE },
{ _RETFAR, _Iw },
{ _RETFAR },
{ _INT3 },
{ _INT, _Ib },
{ _INTO },
{ _IRET },
// D0
{ _Grp2, _Eb, _1 },
{ _Grp2, _Ev, _1 },
{ _Grp2, _Eb, _CL },
{ _Grp2, _Ev, _CL },
{ _AAM },
{ _AAD },
{ _INVALID },
{ _XLAT },
// D8
{ _ESC },
{ _ESC },
{ _ESC },
{ _ESC },
{ _ESC },
{ _ESC },
{ _ESC },
{ _ESC },
// E0
{ _LOOPNE, _Jb },
{ _LOOPE, _Jb },
{ _LOOP, _Jb },
{ _JCXZ, _Jb },
{ _IN, _AL, _Ib },
{ _IN, _eAX, _Iv },
{ _OUT, _Ib, _AL },
{ _OUT, _Iv, _eAX },
// E8
{ _CALL, _Jv },
{ _JMP, _Jv },
{ _JMP, _Ap },
{ _JMP, _Jb },
{ _IN, _AL, _DX },
{ _IN, _eAX, _DX },
{ _OUT, _DX, _AL },
{ _OUT, _DX, _eAX },
// F0
{ _LOCK },
{ _INVALID },
{ _REPNE },
{ _REP },
{ _HLT },
{ _CMC },
{ _Grp3b },
{ _Grp3v },
// F8
{ _CLC },
{ _STC },
{ _CLI },
{ _STI },
{ _CLD },
{ _STD },
{ _Grp4 },
{ _Grp5 }
};
// Map for instructions start with 0x0F
const OpCode OpCodeMap_0F[256] =
{
// 0F 00
{ _Grp6 },
{ _Grp7 },
{ _LAR, _Gv, _Ew },
{ _LSL, _Gv, _Ew },
{ _INVALID },
{ _INVALID },
{ _CLTS },
{ _INVALID },
// 0F 08
{ _INVALID },
{ _WBINVD },
{ _INVALID },
{ _UD2 },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
// 0F 10
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
// 0F 18
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
// 0F 20
{ _MOV, _Rd, _Cd },
{ _MOV, _Rd, _Dd },
{ _MOV, _Cd, _Rd },
{ _MOV, _Dd, _Rd },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
// 0F 28
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
{ _INVALID },
// 0F 30
{ _WRMSR },
{ _RDTSC },
{ _RDMSR },
{ _RDPMC },
{ _INVALID },
{ _INVALID },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -