⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opcode.cpp

📁 Windows 图形编程 书籍
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------------------//
//              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 + -