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

📄 opcode.c

📁 Intel x86处理器的汇编器
💻 C
📖 第 1 页 / 共 5 页
字号:


	/* 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 + -