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

📄 db_disasm.cxx

📁 C++ 编写的EROS RTOS
💻 CXX
📖 第 1 页 / 共 3 页
字号:
	"sbb",	"and",	"sub",	"xor",	"cmp"};char *	db_Grp2[] = {	"rol",	"ror",	"rcl",	"rcr",	"shl",	"shr",	"shl",	"sar"};struct inst db_Grp3[] = {	{ "test",  true, NONE, op2(I,E), 0 },	{ "test",  true, NONE, op2(I,E), 0 },	{ "not",   true, NONE, op1(E),   0 },	{ "neg",   true, NONE, op1(E),   0 },	{ "mul",   true, NONE, op2(E,A), 0 },	{ "imul",  true, NONE, op2(E,A), 0 },	{ "div",   true, NONE, op2(E,A), 0 },	{ "idiv",  true, NONE, op2(E,A), 0 },};struct inst	db_Grp4[] = {	{ "inc",   true, BYTE, op1(E),   0 },	{ "dec",   true, BYTE, op1(E),   0 },	{ "",      true, NONE, 0,	 0 },	{ "",      true, NONE, 0,	 0 },	{ "",      true, NONE, 0,	 0 },	{ "",      true, NONE, 0,	 0 },	{ "",      true, NONE, 0,	 0 },	{ "",      true, NONE, 0,	 0 }};struct inst	db_Grp5[] = {	{ "inc",   true, LONG, op1(E),   0 },	{ "dec",   true, LONG, op1(E),   0 },	{ "call",  true, NONE, op1(Eind),0 },	{ "lcall", true, NONE, op1(Eind),0 },	{ "jmp",   true, NONE, op1(Eind),0 },	{ "ljmp",  true, NONE, op1(Eind),0 },	{ "push",  true, LONG, op1(E),   0 },	{ "",      true, NONE, 0,	 0 }};struct inst db_inst_table[256] = {/*00*/	{ "add",   true,  BYTE,  op2(R, E),  0 },/*01*/	{ "add",   true,  LONG,  op2(R, E),  0 },/*02*/	{ "add",   true,  BYTE,  op2(E, R),  0 },/*03*/	{ "add",   true,  LONG,  op2(E, R),  0 },/*04*/	{ "add",   false, BYTE,  op2(Is, A), 0 },/*05*/	{ "add",   false, LONG,  op2(Is, A), 0 },/*06*/	{ "push",  false, NONE,  op1(Si),    0 },/*07*/	{ "pop",   false, NONE,  op1(Si),    0 },/*08*/	{ "or",    true,  BYTE,  op2(R, E),  0 },/*09*/	{ "or",    true,  LONG,  op2(R, E),  0 },/*0a*/	{ "or",    true,  BYTE,  op2(E, R),  0 },/*0b*/	{ "or",    true,  LONG,  op2(E, R),  0 },/*0c*/	{ "or",    false, BYTE,  op2(I, A),  0 },/*0d*/	{ "or",    false, LONG,  op2(I, A),  0 },/*0e*/	{ "push",  false, NONE,  op1(Si),    0 },/*0f*/	{ "",      false, NONE,  0,	     0 },/*10*/	{ "adc",   true,  BYTE,  op2(R, E),  0 },/*11*/	{ "adc",   true,  LONG,  op2(R, E),  0 },/*12*/	{ "adc",   true,  BYTE,  op2(E, R),  0 },/*13*/	{ "adc",   true,  LONG,  op2(E, R),  0 },/*14*/	{ "adc",   false, BYTE,  op2(Is, A), 0 },/*15*/	{ "adc",   false, LONG,  op2(Is, A), 0 },/*16*/	{ "push",  false, NONE,  op1(Si),    0 },/*17*/	{ "pop",   false, NONE,  op1(Si),    0 },/*18*/	{ "sbb",   true,  BYTE,  op2(R, E),  0 },/*19*/	{ "sbb",   true,  LONG,  op2(R, E),  0 },/*1a*/	{ "sbb",   true,  BYTE,  op2(E, R),  0 },/*1b*/	{ "sbb",   true,  LONG,  op2(E, R),  0 },/*1c*/	{ "sbb",   false, BYTE,  op2(Is, A), 0 },/*1d*/	{ "sbb",   false, LONG,  op2(Is, A), 0 },/*1e*/	{ "push",  false, NONE,  op1(Si),    0 },/*1f*/	{ "pop",   false, NONE,  op1(Si),    0 },/*20*/	{ "and",   true,  BYTE,  op2(R, E),  0 },/*21*/	{ "and",   true,  LONG,  op2(R, E),  0 },/*22*/	{ "and",   true,  BYTE,  op2(E, R),  0 },/*23*/	{ "and",   true,  LONG,  op2(E, R),  0 },/*24*/	{ "and",   false, BYTE,  op2(I, A),  0 },/*25*/	{ "and",   false, LONG,  op2(I, A),  0 },/*26*/	{ "",      false, NONE,  0,	     0 },/*27*/	{ "aaa",   false, NONE,  0,	     0 },/*28*/	{ "sub",   true,  BYTE,  op2(R, E),  0 },/*29*/	{ "sub",   true,  LONG,  op2(R, E),  0 },/*2a*/	{ "sub",   true,  BYTE,  op2(E, R),  0 },/*2b*/	{ "sub",   true,  LONG,  op2(E, R),  0 },/*2c*/	{ "sub",   false, BYTE,  op2(Is, A), 0 },/*2d*/	{ "sub",   false, LONG,  op2(Is, A), 0 },/*2e*/	{ "",      false, NONE,  0,	     0 },/*2f*/	{ "das",   false, NONE,  0,	     0 },/*30*/	{ "xor",   true,  BYTE,  op2(R, E),  0 },/*31*/	{ "xor",   true,  LONG,  op2(R, E),  0 },/*32*/	{ "xor",   true,  BYTE,  op2(E, R),  0 },/*33*/	{ "xor",   true,  LONG,  op2(E, R),  0 },/*34*/	{ "xor",   false, BYTE,  op2(I, A),  0 },/*35*/	{ "xor",   false, LONG,  op2(I, A),  0 },/*36*/	{ "",      false, NONE,  0,	     0 },/*37*/	{ "daa",   false, NONE,  0,	     0 },/*38*/	{ "cmp",   true,  BYTE,  op2(R, E),  0 },/*39*/	{ "cmp",   true,  LONG,  op2(R, E),  0 },/*3a*/	{ "cmp",   true,  BYTE,  op2(E, R),  0 },/*3b*/	{ "cmp",   true,  LONG,  op2(E, R),  0 },/*3c*/	{ "cmp",   false, BYTE,  op2(Is, A), 0 },/*3d*/	{ "cmp",   false, LONG,  op2(Is, A), 0 },/*3e*/	{ "",      false, NONE,  0,	     0 },/*3f*/	{ "aas",   false, NONE,  0,	     0 },/*40*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*41*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*42*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*43*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*44*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*45*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*46*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*47*/	{ "inc",   false, LONG,  op1(Ri),    0 },/*48*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*49*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4a*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4b*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4c*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4d*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4e*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*4f*/	{ "dec",   false, LONG,  op1(Ri),    0 },/*50*/	{ "push",  false, LONG,  op1(Ri),    0 },/*51*/	{ "push",  false, LONG,  op1(Ri),    0 },/*52*/	{ "push",  false, LONG,  op1(Ri),    0 },/*53*/	{ "push",  false, LONG,  op1(Ri),    0 },/*54*/	{ "push",  false, LONG,  op1(Ri),    0 },/*55*/	{ "push",  false, LONG,  op1(Ri),    0 },/*56*/	{ "push",  false, LONG,  op1(Ri),    0 },/*57*/	{ "push",  false, LONG,  op1(Ri),    0 },/*58*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*59*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5a*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5b*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5c*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5d*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5e*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*5f*/	{ "pop",   false, LONG,  op1(Ri),    0 },/*60*/	{ "pusha", false, LONG,  0,	     0 },/*61*/	{ "popa",  false, LONG,  0,	     0 },/*62*/  { "bound", true,  LONG,  op2(E, R),  0 },/*63*/	{ "arpl",  true,  NONE,  op2(Ew,Rw), 0 },/*64*/	{ "",      false, NONE,  0,	     0 },/*65*/	{ "",      false, NONE,  0,	     0 },/*66*/	{ "",      false, NONE,  0,	     0 },/*67*/	{ "",      false, NONE,  0,	     0 },/*68*/	{ "push",  false, LONG,  op1(I),     0 },/*69*/  { "imul",  true,  LONG,  op3(I,E,R), 0 },/*6a*/	{ "push",  false, LONG,  op1(Ib),    0 },/*6b*/  { "imul",  true,  LONG,  op3(Ibs,E,R),0 },/*6c*/	{ "ins",   false, BYTE,  op2(DX, DI), 0 },/*6d*/	{ "ins",   false, LONG,  op2(DX, DI), 0 },/*6e*/	{ "outs",  false, BYTE,  op2(SI, DX), 0 },/*6f*/	{ "outs",  false, LONG,  op2(SI, DX), 0 },/*70*/	{ "jo",    false, NONE,  op1(Db),     0 },/*71*/	{ "jno",   false, NONE,  op1(Db),     0 },/*72*/	{ "jb",    false, NONE,  op1(Db),     0 },/*73*/	{ "jnb",   false, NONE,  op1(Db),     0 },/*74*/	{ "jz",    false, NONE,  op1(Db),     0 },/*75*/	{ "jnz",   false, NONE,  op1(Db),     0 },/*76*/	{ "jbe",   false, NONE,  op1(Db),     0 },/*77*/	{ "jnbe",  false, NONE,  op1(Db),     0 },/*78*/	{ "js",    false, NONE,  op1(Db),     0 },/*79*/	{ "jns",   false, NONE,  op1(Db),     0 },/*7a*/	{ "jp",    false, NONE,  op1(Db),     0 },/*7b*/	{ "jnp",   false, NONE,  op1(Db),     0 },/*7c*/	{ "jl",    false, NONE,  op1(Db),     0 },/*7d*/	{ "jnl",   false, NONE,  op1(Db),     0 },/*7e*/	{ "jle",   false, NONE,  op1(Db),     0 },/*7f*/	{ "jnle",  false, NONE,  op1(Db),     0 },/*80*/  { "",	   true,  BYTE,  op2(I, E),   (char *)db_Grp1 },/*81*/  { "",	   true,  LONG,  op2(I, E),   (char *)db_Grp1 },/*82*/  { "",	   true,  BYTE,  op2(Is,E),   (char *)db_Grp1 },/*83*/  { "",	   true,  LONG,  op2(Ibs,E),  (char *)db_Grp1 },/*84*/	{ "test",  true,  BYTE,  op2(R, E),   0 },/*85*/	{ "test",  true,  LONG,  op2(R, E),   0 },/*86*/	{ "xchg",  true,  BYTE,  op2(R, E),   0 },/*87*/	{ "xchg",  true,  LONG,  op2(R, E),   0 },/*88*/	{ "mov",   true,  BYTE,  op2(R, E),   0 },/*89*/	{ "mov",   true,  LONG,  op2(R, E),   0 },/*8a*/	{ "mov",   true,  BYTE,  op2(E, R),   0 },/*8b*/	{ "mov",   true,  LONG,  op2(E, R),   0 },/*8c*/  { "mov",   true,  NONE,  op2(S, Ew),  0 },/*8d*/	{ "lea",   true,  LONG,  op2(E, R),   0 },/*8e*/	{ "mov",   true,  NONE,  op2(Ew, S),  0 },/*8f*/	{ "pop",   true,  LONG,  op1(E),      0 },/*90*/	{ "nop",   false, NONE,  0,	      0 },/*91*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*92*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*93*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*94*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*95*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*96*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*97*/	{ "xchg",  false, LONG,  op2(A, Ri),  0 },/*98*/	{ "cbw",   false, SDEP,  0,	      "cwde" },	/* cbw/cwde *//*99*/	{ "cwd",   false, SDEP,  0,	      "cdq"  },	/* cwd/cdq *//*9a*/	{ "lcall", false, NONE,  op1(OS),     0 },/*9b*/	{ "wait",  false, NONE,  0,	      0 },/*9c*/	{ "pushf", false, LONG,  0,	      0 },/*9d*/	{ "popf",  false, LONG,  0,	      0 },/*9e*/	{ "sahf",  false, NONE,  0,	      0 },/*9f*/	{ "lahf",  false, NONE,  0,	      0 },/*a0*/	{ "mov",   false, BYTE,  op2(O, A),   0 },/*a1*/	{ "mov",   false, LONG,  op2(O, A),   0 },/*a2*/	{ "mov",   false, BYTE,  op2(A, O),   0 },/*a3*/	{ "mov",   false, LONG,  op2(A, O),   0 },/*a4*/	{ "movs",  false, BYTE,  op2(SI,DI),  0 },/*a5*/	{ "movs",  false, LONG,  op2(SI,DI),  0 },/*a6*/	{ "cmps",  false, BYTE,  op2(SI,DI),  0 },/*a7*/	{ "cmps",  false, LONG,  op2(SI,DI),  0 },/*a8*/	{ "test",  false, BYTE,  op2(I, A),   0 },/*a9*/	{ "test",  false, LONG,  op2(I, A),   0 },/*aa*/	{ "stos",  false, BYTE,  op1(DI),     0 },/*ab*/	{ "stos",  false, LONG,  op1(DI),     0 },/*ac*/	{ "lods",  false, BYTE,  op1(SI),     0 },/*ad*/	{ "lods",  false, LONG,  op1(SI),     0 },/*ae*/	{ "scas",  false, BYTE,  op1(SI),     0 },/*af*/	{ "scas",  false, LONG,  op1(SI),     0 },/*b0*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b1*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b2*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b3*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b4*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b5*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b6*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b7*/	{ "mov",   false, BYTE,  op2(I, Ri),  0 },/*b8*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*b9*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*ba*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*bb*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*bc*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*bd*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*be*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*bf*/	{ "mov",   false, LONG,  op2(I, Ri),  0 },/*c0*/	{ "",	   true,  BYTE,  op2(Ib, E),  (char *)db_Grp2 },/*c1*/	{ "",	   true,  LONG,  op2(Ib, E),  (char *)db_Grp2 },/*c2*/	{ "ret",   false, NONE,  op1(Iw),     0 },/*c3*/	{ "ret",   false, NONE,  0,	      0 },/*c4*/	{ "les",   true,  LONG,  op2(E, R),   0 },/*c5*/	{ "lds",   true,  LONG,  op2(E, R),   0 },/*c6*/	{ "mov",   true,  BYTE,  op2(I, E),   0 },/*c7*/	{ "mov",   true,  LONG,  op2(I, E),   0 },/*c8*/	{ "enter", false, NONE,  op2(Ib, Iw), 0 },/*c9*/	{ "leave", false, NONE,  0,           0 },/*ca*/	{ "lret",  false, NONE,  op1(Iw),     0 },/*cb*/	{ "lret",  false, NONE,  0,	      0 },/*cc*/	{ "int",   false, NONE,  op1(o3),     0 },/*cd*/	{ "int",   false, NONE,  op1(Ib),     0 },/*ce*/	{ "into",  false, NONE,  0,	      0 },/*cf*/	{ "iret",  false, NONE,  0,	      0 },/*d0*/	{ "",	   true,  BYTE,  op2(o1, E),  (char *)db_Grp2 },/*d1*/	{ "",	   true,  LONG,  op2(o1, E),  (char *)db_Grp2 },/*d2*/	{ "",	   true,  BYTE,  op2(CL, E),  (char *)db_Grp2 },/*d3*/	{ "",	   true,  LONG,  op2(CL, E),  (char *)db_Grp2 },/*d4*/	{ "aam",   true,  NONE,  0,	      0 },/*d5*/	{ "aad",   true,  NONE,  0,	      0 },/*d6*/	{ "",      false, NONE,  0,	      0 },/*d7*/	{ "xlat",  false, BYTE,  op1(BX),     0 },/*d8*/  { "",      true,  NONE,  0,	      (char *)db_Esc8 },/*d9*/  { "",      true,  NONE,  0,	      (char *)db_Esc9 },/*da*/  { "",      true,  NONE,  0,	      (char *)db_Esca },/*db*/  { "",      true,  NONE,  0,	      (char *)db_Escb },/*dc*/  { "",      true,  NONE,  0,	      (char *)db_Escc },/*dd*/  { "",      true,  NONE,  0,	      (char *)db_Escd },/*de*/  { "",      true,  NONE,  0,	      (char *)db_Esce },/*df*/  { "",      true,  NONE,  0,	      (char *)db_Escf },/*e0*/	{ "loopne",false, NONE,  op1(Db),     0 },/*e1*/	{ "loope", false, NONE,  op1(Db),     0 },/*e2*/	{ "loop",  false, NONE,  op1(Db),     0 },/*e3*/	{ "jcxz",  false, SDEP,  op1(Db),     "jecxz" },/*e4*/	{ "in",    false, BYTE,  op2(Ib, A),  0 },/*e5*/	{ "in",    false, LONG,  op2(Ib, A) , 0 },/*e6*/	{ "out",   false, BYTE,  op2(A, Ib),  0 },/*e7*/	{ "out",   false, LONG,  op2(A, Ib) , 0 },/*e8*/	{ "call",  false, NONE,  op1(Dl),     0 },/*e9*/	{ "jmp",   false, NONE,  op1(Dl),     0 },/*ea*/	{ "ljmp",  false, NONE,  op1(OS),     0 },/*eb*/	{ "jmp",   false, NONE,  op1(Db),     0 },/*ec*/	{ "in",    false, BYTE,  op2(DX, A),  0 },/*ed*/	{ "in",    false, LONG,  op2(DX, A) , 0 },/*ee*/	{ "out",   false, BYTE,  op2(A, DX),  0 },/*ef*/	{ "out",   false, LONG,  op2(A, DX) , 0 },/*f0*/	{ "",      false, NONE,  0,	     0 },/*f1*/	{ "",      false, NONE,  0,	     0 },/*f2*/	{ "",      false, NONE,  0,	     0 },/*f3*/	{ "",      false, NONE,  0,	     0 },/*f4*/	{ "hlt",   false, NONE,  0,	     0 },/*f5*/	{ "cmc",   false, NONE,  0,	     0 },/*f6*/	{ "",      true,  BYTE,  0,	     (char *)db_Grp3 },/*f7*/	{ "",	   true,  LONG,  0,	     (char *)db_Grp3 },/*f8*/	{ "clc",   false, NONE,  0,	     0 },/*f9*/	{ "stc",   false, NONE,  0,	     0 },/*fa*/	{ "cli",   false, NONE,  0,	     0 },/*fb*/	{ "sti",   false, NONE,  0,	     0 },/*fc*/	{ "cld",   false, NONE,  0,	     0 },/*fd*/	{ "std",   false, NONE,  0,	     0 },/*fe*/	{ "",	   true,  NONE,  0,	     (char *)db_Grp4 },/*ff*/	{ "",	   true,  NONE,  0,	     (char *)db_Grp5 },};struct inst	db_bad_inst =	{ "???",   false, NONE,  0,	      0 };#define	f_mod(byte)	((byte)>>6)#define	f_reg(byte)	(((byte)>>3)&0x7)#define	f_rm(byte)	((byte)&0x7)#define	sib_ss(byte)	((byte)>>6)#define	sib_index(byte)	(((byte)>>3)&0x7)#define	sib_base(byte)	((byte)&0x7)struct i_addr {	int		is_reg;	/* if reg, reg number is in 'disp' */	int		disp;	char *		base;	char *		index;	int		ss;};char *	db_index_reg_16[8] = {	"%bx,%si",	"%bx,%di",	"%bp,%si",	"%bp,%di",	"%si",	"%di",	"%bp",	"%bx"};char *	db_reg[3][8] = {	{ "%al",  "%cl",  "%dl",  "%bl",  "%ah",  "%ch",  "%dh",  "%bh" },	{ "%ax",  "%cx",  "%dx",  "%bx",  "%sp",  "%bp",  "%si",  "%di" },	{ "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi" }};char *	db_seg_reg[8] = {	"%es", "%cs", "%ss", "%ds", "%fs", "%gs", "", ""};/* * lengths for size attributes */int db_lengths[] = {	1,	/* BYTE */	2,	/* WORD */	4,	/* LONG */	8,	/* QUAD */	4,	/* SNGL */	8,	/* DBLR */	10,	/* EXTR */};#define	get_value_inc(result, loc, size, is_signed) \	do { \		result = db_get_value((loc), (size), (is_signed)); \		(loc) += (size); \	} while (0)/* * Read address at location and return updated location. */db_addr_tdb_read_address(db_addr_t loc, int short_addr, int regmodrm,		i_addr *addrp)	/* OUT */{#if 0	int		ss;#endif	int		mod, rm, sib, index, disp;	mod = f_mod(regmodrm);	rm  = f_rm(regmodrm);	if (mod == 3) {		addrp->is_reg = true;		addrp->disp = rm;		return (loc);	}	addrp->is_reg = false;	addrp->index = 0;	if (short_addr) {		addrp->index = 0;		addrp->ss = 0;		switch (mod) {		    case 0:			if (rm == 6) {				get_value_inc(disp, loc, 2, true);				addrp->disp = disp;				addrp->base = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -