📄 opcode.c
字号:
/* MOV Dd, Rd */
{ 0, DREG|ALL_REGS|SIZE32, GPR|ALL_REGS|SIZE32, I_GPI|FS_32, 0x0f23 },
/* MOV Dq, Rq */
{ 0, DREG|ALL_REGS|SIZE64, GPR|ALL_REGS|SIZE64, I_GPI|FS_64, 0x0f23 },
/********** end flag *************/
{ 0, 0, 0, 0, 0 }
};
i_key_t LEA[] = {
/* LEA Gv,M */
{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x8d },
{ 0, 0, 0, 0, 0 }
};
i_key_t NOP[] = {
/* NOP */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x90 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CBW[] = {
/* CBW */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x98 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CWDE[] = {
/* CWDE */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0x98 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CDQE[] = {
/* CDQE */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x98 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CWD[] = {
/* CWD */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x99 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CDQ[] = {
/* CDQ */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0x99 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CQO[] = {
/* CQO */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x99 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CALL[] = {
/* CALL Ap */
{ 0, 0, MOFFSET|FAR_POINTER|SIZE32,
I_GPI|INVLD_IN_64|NO_NEED_MODRM|FS_32, 0x9a },
/* CALL Jz */
{ 0, 0, IMME|0x0f, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0xe8 },
/******************* GROUP *********************/
/* CALL Ev */
{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e,
I_GPI|GROUP|GROUPID(2), 0xff },
/* CALL Ep */
{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE32|FAR_POINTER,
I_GPI|GROUP|GROUPID(3)|FS_32, 0xff },
{ 0, 0, 0, 0, 0 }
};
i_key_t WAIT[] = {
/* WAIT */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9b },
{ 0, 0, 0, 0, 0 }
};
i_key_t FWAIT[] = {
/* FWAIT */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9b },
{ 0, 0, 0, 0, 0 }
};
i_key_t PUSHF[] = {
/* PUSHF Fv */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9c },
{ 0, 0, 0, 0, 0 }
};
i_key_t PUSHQ[] = {
/* PUSHQ Fv */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9c },
{ 0, 0, 0, 0, 0 }
};
i_key_t POPF[] = {
/* POPF Fv */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9d },
{ 0, 0, 0, 0, 0 }
};
i_key_t POPQ[] = {
/* POPQ Fv */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9d },
{ 0, 0, 0, 0, 0 }
};
i_key_t SAHF[] = {
/* SAHF */
{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x9e },
{ 0, 0, 0, 0, 0 }
};
i_key_t LAHF[] = {
/* LAHF */
{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x9f },
{ 0, 0, 0, 0, 0 }
};
i_key_t MOVSB[] = {
/* MOVSB Yb,Xb */
{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xa4 },
{ 0, 0, 0, 0, 0 }
};
i_key_t MOVSW[] = {
/* MOVSW Yv,Xv */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 },
{ 0, 0, 0, 0, 0 }
};
i_key_t MOVSD[] = {
/* MOVSD Yv,Xv */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 },
{ 0, 0, 0, 0, 0 }
};
i_key_t MOVSQ[] = {
/* MOVSQ Yv,Xv */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CMPSB[] = {
/* CMPSB Xb,Yb */
{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xa6 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CMPSW[] = {
/* CMPSW Xv,Yv */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CMPSD[] = {
/* CMPSD Xv,Yv */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CMPSQ[] = {
/* CMPSQ Xv,Yv */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 },
{ 0, 0, 0, 0, 0 }
};
i_key_t STOSB[] = {
/* STOSB Yb,AL */
{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xaa },
{ 0, 0, 0, 0, 0 }
};
i_key_t STOSW[] = {
/* STOSW Yv,rAX */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xab },
{ 0, 0, 0, 0, 0 }
};
i_key_t STOSD[] = {
/* STOSD Yv,rAX */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xab },
{ 0, 0, 0, 0, 0 }
};
i_key_t STOSQ[] = {
/* STOSQ Yv,rAX */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xab },
{ 0, 0, 0, 0, 0 }
};
i_key_t LODSB[] = {
/* LODSB AL,Xb */
{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xac },
{ 0, 0, 0, 0, 0 }
};
i_key_t LODSW[] = {
/* LODSW rAX,Xv */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xad },
{ 0, 0, 0, 0, 0 }
};
i_key_t LODSD[] = {
/* LODSD rAX,Xv */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xad },
{ 0, 0, 0, 0, 0 }
};
i_key_t LODSQ[] = {
/* LODSQ rAX,Xv */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xad },
{ 0, 0, 0, 0, 0 }
};
i_key_t SCASB[] = {
/* SCASB AL,Yb */
{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xae },
{ 0, 0, 0, 0, 0 }
};
i_key_t SCASW[] = {
/* SCASW rAX,Yv */
{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xaf },
{ 0, 0, 0, 0, 0 }
};
i_key_t SCASD[] = {
/* SCASD rAX,Yv */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xaf },
{ 0, 0, 0, 0, 0 }
};
i_key_t SCASQ[] = {
/* SCASQ rAX,Yv */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xaf },
{ 0, 0, 0, 0, 0 }
};
i_key_t RET[] = {
/* ret near */
/* RET Iw */
{ 0, 0, IMME|SIZE8|SIZE16, I_GPI|NO_NEED_MODRM|FS_16|NO_CAST, 0xc2 },
/* RET */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xc3 },
/* ret far */
/* RET Iw */
{ 0, 0, IMME|SIZE16, I_GPI|NO_NEED_MODRM|FAR_POINTER|FS_16, 0xca },
/* RET */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE|FAR_POINTER, 0xcb },
{ 0, 0, 0, 0, 0 }
};
i_key_t LES[] = {
/* LES Gz,Mp */
{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e,
I_GPI|INVLD_IN_64|FS_IN_BITS|FAR_POINTER, 0xc4 },
{ 0, 0, 0, 0, 0 }
};
i_key_t LDS[] = {
/* LDS Gz,Mp */
{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e,
I_GPI|INVLD_IN_64|FS_IN_BITS|FAR_POINTER, 0xc5 },
{ 0, 0, 0, 0, 0 }
};
i_key_t ENTER[] = {
/* ENTER Iw,Ib */
{ 0, IMME|SIZE8|SIZE16, IMME|SIZE8, I_GPI|NO_NEED_MODRM, 0xc8 },
{ 0, 0, 0, 0, 0 }
};
i_key_t LEAVE[] = {
/* LEAVE */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xc9 },
{ 0, 0, 0, 0, 0 }
};
i_key_t INT3[] = {
/* INT3 */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xcc },
{ 0, 0, 0, 0, 0 }
};
i_key_t INTN[] = {
/* INT Ib*/
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xcd },
{ 0, 0, 0, 0, 0 }
};
i_key_t INTO[] = {
/* INTO */
{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xce },
{ 0, 0, 0, 0, 0 }
};
i_key_t IRET[] = {
/* IRET */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xcf },
{ 0, 0, 0, 0, 0 }
};
i_key_t IRETD[] = {
/* IRETD */
{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xcf },
{ 0, 0, 0, 0, 0 }
};
i_key_t IRETQ[] = {
/* IRETQ */
{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xcf },
{ 0, 0, 0, 0, 0 }
};
i_key_t LOOPNZ[] = {
/* LOOPNZ Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe0 },
{ 0, 0, 0, 0, 0 }
};
i_key_t LOOPE[] = {
/* LOOPE Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe1 },
{ 0, 0, 0, 0, 0 }
};
i_key_t LOOP[] = {
/* LOOP Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe2 },
{ 0, 0, 0, 0, 0 }
};
i_key_t JCXZ[] = {
/* JCXZ Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_16, 0xe3 },
{ 0, 0, 0, 0, 0 }
};
i_key_t JECXZ[] = {
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_32, 0xe3 },
{ 0, 0, 0, 0, 0 }
};
i_key_t JRCXZ[] = {
/* JrCXZ Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|ONLY_IN_64|FS_64, 0xe3 },
{ 0, 0, 0, 0, 0 }
};
/* TODO: ****************/
i_key_t IN[] = {
/* IN AL,Ib */
{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe4 },
/* IN eAX,Ib */
{ 0, GPR|rAX|0x06, IMME|SIZE8, I_GPI|NO_NEED_MODRM, 0xe5 },
/* IN AL,DX */
{ 0, GPR|rAX|SIZE8, GPR|rDX|SIZE16, I_GPI|NO_NEED_MODRM|NO_CAST, 0xec },
/* IN eAX,DX */
{ 0, GPR|rAX|0x06, GPR|rDX|SIZE16, I_GPI|NO_NEED_MODRM, 0xed },
{ 0, 0, 0, 0, 0 }
};
i_key_t OUT[] = {
/* OUT Ib,AL */
{ 0, IMME|SIZE8, GPR|rAX|SIZE8, I_GPI|NO_NEED_MODRM, 0xe6 },
/* OUT Ib,eAX */
{ 0, IMME|SIZE8, GPR|rAX|0x06, I_GPI|NO_NEED_MODRM, 0xe7 },
/* OUT DX,AL */
{ 0, GPR|rDX|SIZE16, GPR|rAX|SIZE8, I_GPI|NO_NEED_MODRM|NO_CAST, 0xee },
/* OUT DX,eAX */
{ 0, GPR|rDX|SIZE16, GPR|rAX|0x06, I_GPI|NO_NEED_MODRM, 0xef },
{ 0, 0, 0, 0, 0 }
};
i_key_t JMP[] = {
/* JMP Ap */
{ 0, 0, MOFFSET|FAR_POINTER|SIZE32,
INVLD_IN_64|I_GPI|NO_NEED_MODRM|FS_32, 0xea },
/* JMP Jb */
{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xeb },
/* JMP Jz */
{ 0, 0, IMME|0x0f, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0xe9 },
/*********************** GROUP ***************************/
/* JMP Ev */
{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e,
I_GPI|GROUP|GROUPID(4), 0xff },
/* JMP Ep */
{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE32|FAR_POINTER,
I_GPI|GROUP|GROUPID(5)|FS_32, 0xff },
{ 0, 0, 0, 0, 0 }
};
i_key_t INT1[] = {
/* INT1 ICE Bkpt */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf1 },
{ 0, 0, 0, 0, 0 }
};
i_key_t HLT[] = {
/* HLT */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf4 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CMC[] = {
/* CMC */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf5 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CLC[] = {
/* CLC */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf8 },
{ 0, 0, 0, 0, 0 }
};
i_key_t STC[] = {
/* STC */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf9 },
{ 0, 0, 0, 0, 0 }
};
i_key_t CLI[] = {
/* CLI */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfa },
{ 0, 0, 0, 0, 0 }
};
i_key_t STI[] ={
/* STI */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfb },
{ 0, 0, 0, 0, 0 }
};
i_key_t CLD[] = {
/* CLD */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfc },
{ 0, 0, 0, 0, 0 }
};
i_key_t STD[] = {
/* STD */
{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfd },
{ 0, 0, 0, 0, 0 }
};
/************** Group instruction ***********/
i_key_t ROL[] = {
/* ROL Eb, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME|SIZE8,
I_GPI|GROUP|GROUPID(0)|FS_8, 0xc0 },
/* ROL Ev, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,
I_GPI|GROUP|GROUPID(0), 0xc1 },
/* ROL Eb, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8,
I_GPI|GROUP|GROUPID(0), 0xd0 },
/* ROL Ev, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8,
I_GPI|GROUP|GROUPID(0), 0xd1 },
/* ROL Eb, CL */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8,
I_GPI|GROUP|GROUPID(0)|FS_8, 0xd2 },
/* ROL Ev, CL */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|rCX|SIZE8,
I_GPI|GROUP|GROUPID(0), 0xd3 },
{ 0, 0, 0, 0, 0 }
};
i_key_t ROR[] = {
/* ROR Eb, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME|SIZE8,
I_GPI|GROUP|GROUPID(1)|FS_8, 0xc0 },
/* ROR Ev, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,
I_GPI|GROUP|GROUPID(1), 0xc1 },
/* ROR Eb, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8,
I_GPI|GROUP|GROUPID(1), 0xd0 },
/* ROR Ev, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8,
I_GPI|GROUP|GROUPID(1), 0xd1 },
/* ROR Eb, CL */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8,
I_GPI|GROUP|GROUPID(1)|FS_8, 0xd2 },
/* ROR Ev, CL */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,
I_GPI|GROUP|GROUPID(1), 0xd3 },
{ 0, 0, 0, 0, 0 }
};
i_key_t RCL[] = {
/* RCL Eb, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,
I_GPI|GROUP|GROUPID(2)|FS_8, 0xc0 },
/* RCL Ev, Ib */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8,
I_GPI|GROUP|GROUPID(2), 0xc1 },
/* RCL Eb, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8,
I_GPI|GROUP|GROUPID(2), 0xd0 },
/* RCL Ev, 1 */
{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -