i386-dis.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,329 行 · 第 1/5 页

C
2,329
字号
  { "orS",	Ev, Gv, XX },  { "orB",	Gb, Eb, XX },  { "orS",	Gv, Ev, XX },  { "orB",	AL, Ib, XX },  { "orS",	eAX, Iv, XX },  { "pushI",	cs, XX, XX },  { "(bad)",	XX, XX, XX },	/* 0x0f extended opcode escape */  /* 10 */  { "adcB",	Eb, Gb, XX },  { "adcS",	Ev, Gv, XX },  { "adcB",	Gb, Eb, XX },  { "adcS",	Gv, Ev, XX },  { "adcB",	AL, Ib, XX },  { "adcS",	eAX, Iv, XX },  { "pushI",	ss, XX, XX },  { "popI",	ss, XX, XX },  /* 18 */  { "sbbB",	Eb, Gb, XX },  { "sbbS",	Ev, Gv, XX },  { "sbbB",	Gb, Eb, XX },  { "sbbS",	Gv, Ev, XX },  { "sbbB",	AL, Ib, XX },  { "sbbS",	eAX, Iv, XX },  { "pushI",	ds, XX, XX },  { "popI",	ds, XX, XX },  /* 20 */  { "andB",	Eb, Gb, XX },  { "andS",	Ev, Gv, XX },  { "andB",	Gb, Eb, XX },  { "andS",	Gv, Ev, XX },  { "andB",	AL, Ib, XX },  { "andS",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG ES prefix */  { "daa",	XX, XX, XX },  /* 28 */  { "subB",	Eb, Gb, XX },  { "subS",	Ev, Gv, XX },  { "subB",	Gb, Eb, XX },  { "subS",	Gv, Ev, XX },  { "subB",	AL, Ib, XX },  { "subS",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG CS prefix */  { "das",	XX, XX, XX },  /* 30 */  { "xorB",	Eb, Gb, XX },  { "xorS",	Ev, Gv, XX },  { "xorB",	Gb, Eb, XX },  { "xorS",	Gv, Ev, XX },  { "xorB",	AL, Ib, XX },  { "xorS",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG SS prefix */  { "aaa",	XX, XX, XX },  /* 38 */  { "cmpB",	Eb, Gb, XX },  { "cmpS",	Ev, Gv, XX },  { "cmpB",	Gb, Eb, XX },  { "cmpS",	Gv, Ev, XX },  { "cmpB",	AL, Ib, XX },  { "cmpS",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG DS prefix */  { "aas",	XX, XX, XX },  /* 40 */  { "incS",	RMeAX, XX, XX },  { "incS",	RMeCX, XX, XX },  { "incS",	RMeDX, XX, XX },  { "incS",	RMeBX, XX, XX },  { "incS",	RMeSP, XX, XX },  { "incS",	RMeBP, XX, XX },  { "incS",	RMeSI, XX, XX },  { "incS",	RMeDI, XX, XX },  /* 48 */  { "decS",	RMeAX, XX, XX },  { "decS",	RMeCX, XX, XX },  { "decS",	RMeDX, XX, XX },  { "decS",	RMeBX, XX, XX },  { "decS",	RMeSP, XX, XX },  { "decS",	RMeBP, XX, XX },  { "decS",	RMeSI, XX, XX },  { "decS",	RMeDI, XX, XX },  /* 50 */  { "pushS",	RMeAX, XX, XX },  { "pushS",	RMeCX, XX, XX },  { "pushS",	RMeDX, XX, XX },  { "pushS",	RMeBX, XX, XX },  { "pushS",	RMeSP, XX, XX },  { "pushS",	RMeBP, XX, XX },  { "pushS",	RMeSI, XX, XX },  { "pushS",	RMeDI, XX, XX },  /* 58 */  { "popS",	RMeAX, XX, XX },  { "popS",	RMeCX, XX, XX },  { "popS",	RMeDX, XX, XX },  { "popS",	RMeBX, XX, XX },  { "popS",	RMeSP, XX, XX },  { "popS",	RMeBP, XX, XX },  { "popS",	RMeSI, XX, XX },  { "popS",	RMeDI, XX, XX },  /* 60 */  { "pushaP",	XX, XX, XX },  { "popaP",	XX, XX, XX },  { "boundS",	Gv, Ma, XX },  { "arpl",	Ew, Gw, XX },  { "(bad)",	XX, XX, XX },			/* seg fs */  { "(bad)",	XX, XX, XX },			/* seg gs */  { "(bad)",	XX, XX, XX },			/* op size prefix */  { "(bad)",	XX, XX, XX },			/* adr size prefix */  /* 68 */  { "pushI",	Iv, XX, XX },		/* 386 book wrong */  { "imulS",	Gv, Ev, Iv },  { "pushI",	sIb, XX, XX },	/* push of byte really pushes 2 or 4 bytes */  { "imulS",	Gv, Ev, sIb },  { "insb",	Yb, indirDX, XX },  { "insR",	Yv, indirDX, XX },  { "outsb",	indirDX, Xb, XX },  { "outsR",	indirDX, Xv, XX },  /* 70 */  { "jo",	Jb, cond_jump_flag, XX },  { "jno",	Jb, cond_jump_flag, XX },  { "jb",	Jb, cond_jump_flag, XX },  { "jae",	Jb, cond_jump_flag, XX },  { "je",	Jb, cond_jump_flag, XX },  { "jne",	Jb, cond_jump_flag, XX },  { "jbe",	Jb, cond_jump_flag, XX },  { "ja",	Jb, cond_jump_flag, XX },  /* 78 */  { "js",	Jb, cond_jump_flag, XX },  { "jns",	Jb, cond_jump_flag, XX },  { "jp",	Jb, cond_jump_flag, XX },  { "jnp",	Jb, cond_jump_flag, XX },  { "jl",	Jb, cond_jump_flag, XX },  { "jge",	Jb, cond_jump_flag, XX },  { "jle",	Jb, cond_jump_flag, XX },  { "jg",	Jb, cond_jump_flag, XX },  /* 80 */  { GRP1b },  { GRP1S },  { "(bad)",	XX, XX, XX },  { GRP1Ss },  { "testB",	Eb, Gb, XX },  { "testS",	Ev, Gv, XX },  { "xchgB",	Eb, Gb, XX },  { "xchgS",	Ev, Gv, XX },  /* 88 */  { "movB",	Eb, Gb, XX },  { "movS",	Ev, Gv, XX },  { "movB",	Gb, Eb, XX },  { "movS",	Gv, Ev, XX },  { "movQ",	Ev, Sw, XX },  { "leaS",	Gv, M, XX },  { "movQ",	Sw, Ev, XX },  { "popT",	Ev, XX, XX },  /* 90 */  { "nop",	XX, XX, XX },  /* FIXME: NOP with REPz prefix is called PAUSE.  */  { "xchgS",	RMeCX, eAX, XX },  { "xchgS",	RMeDX, eAX, XX },  { "xchgS",	RMeBX, eAX, XX },  { "xchgS",	RMeSP, eAX, XX },  { "xchgS",	RMeBP, eAX, XX },  { "xchgS",	RMeSI, eAX, XX },  { "xchgS",	RMeDI, eAX, XX },  /* 98 */  { "cWtR",	XX, XX, XX },  { "cRtO",	XX, XX, XX },  { "lcallI",	Ap, XX, XX },  { "(bad)",	XX, XX, XX },		/* fwait */  { "pushfI",	XX, XX, XX },  { "popfI",	XX, XX, XX },  { "sahf",	XX, XX, XX },  { "lahf",	XX, XX, XX },  /* a0 */  { "movB",	AL, Ob, XX },  { "movS",	eAX, Ov, XX },  { "movB",	Ob, AL, XX },  { "movS",	Ov, eAX, XX },  { "movsb",	Yb, Xb, XX },  { "movsR",	Yv, Xv, XX },  { "cmpsb",	Xb, Yb, XX },  { "cmpsR",	Xv, Yv, XX },  /* a8 */  { "testB",	AL, Ib, XX },  { "testS",	eAX, Iv, XX },  { "stosB",	Yb, AL, XX },  { "stosS",	Yv, eAX, XX },  { "lodsB",	AL, Xb, XX },  { "lodsS",	eAX, Xv, XX },  { "scasB",	AL, Yb, XX },  { "scasS",	eAX, Yv, XX },  /* b0 */  { "movB",	RMAL, Ib, XX },  { "movB",	RMCL, Ib, XX },  { "movB",	RMDL, Ib, XX },  { "movB",	RMBL, Ib, XX },  { "movB",	RMAH, Ib, XX },  { "movB",	RMCH, Ib, XX },  { "movB",	RMDH, Ib, XX },  { "movB",	RMBH, Ib, XX },  /* b8 */  { "movS",	RMeAX, Iv, XX },  { "movS",	RMeCX, Iv, XX },  { "movS",	RMeDX, Iv, XX },  { "movS",	RMeBX, Iv, XX },  { "movS",	RMeSP, Iv, XX },  { "movS",	RMeBP, Iv, XX },  { "movS",	RMeSI, Iv, XX },  { "movS",	RMeDI, Iv, XX },  /* c0 */  { GRP2b },  { GRP2S },  { "retI",	Iw, XX, XX },  { "retI",	XX, XX, XX },  { "lesS",	Gv, Mp, XX },  { "ldsS",	Gv, Mp, XX },  { "movA",	Eb, Ib, XX },  { "movQ",	Ev, Iv, XX },  /* c8 */  { "enterI",	Iw, Ib, XX },  { "leaveI",	XX, XX, XX },  { "lretP",	Iw, XX, XX },  { "lretP",	XX, XX, XX },  { "int3",	XX, XX, XX },  { "int",	Ib, XX, XX },  { "into",	XX, XX, XX},  { "iretP",	XX, XX, XX },  /* d0 */  { GRP2b_one },  { GRP2S_one },  { GRP2b_cl },  { GRP2S_cl },  { "aam",	sIb, XX, XX },  { "aad",	sIb, XX, XX },  { "(bad)",	XX, XX, XX },  { "xlat",	DSBX, XX, XX },  /* d8 */  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  /* e0 */  { "loopneF",	Jb, loop_jcxz_flag, XX },  { "loopeF",	Jb, loop_jcxz_flag, XX },  { "loopF",	Jb, loop_jcxz_flag, XX },  { "jEcxz",	Jb, loop_jcxz_flag, XX },  { "inB",	AL, Ib, XX },  { "inS",	eAX, Ib, XX },  { "outB",	Ib, AL, XX },  { "outS",	Ib, eAX, XX },  /* e8 */  { "callI",	Jv, XX, XX },  { "jmpI",	Jv, XX, XX },  { "ljmpI",	Ap, XX, XX },  { "jmp",	Jb, XX, XX },  { "inB",	AL, indirDX, XX },  { "inS",	eAX, indirDX, XX },  { "outB",	indirDX, AL, XX },  { "outS",	indirDX, eAX, XX },  /* f0 */  { "(bad)",	XX, XX, XX },			/* lock prefix */  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },			/* repne */  { "(bad)",	XX, XX, XX },			/* repz */  { "hlt",	XX, XX, XX },  { "cmc",	XX, XX, XX },  { GRP3b },  { GRP3S },  /* f8 */  { "clc",	XX, XX, XX },  { "stc",	XX, XX, XX },  { "cli",	XX, XX, XX },  { "sti",	XX, XX, XX },  { "cld",	XX, XX, XX },  { "std",	XX, XX, XX },  { GRP4 },  { GRP5 },};static const struct dis386 dis386_intel[] = {  /* 00 */  { "add",	Eb, Gb, XX },  { "add",	Ev, Gv, XX },  { "add",	Gb, Eb, XX },  { "add",	Gv, Ev, XX },  { "add",	AL, Ib, XX },  { "add",	eAX, Iv, XX },  { "push",	es, XX, XX },  { "pop",	es, XX, XX },  /* 08 */  { "or",	Eb, Gb, XX },  { "or",	Ev, Gv, XX },  { "or",	Gb, Eb, XX },  { "or",	Gv, Ev, XX },  { "or",	AL, Ib, XX },  { "or",	eAX, Iv, XX },  { "push",	cs, XX, XX },  { "(bad)",	XX, XX, XX },	/* 0x0f extended opcode escape */  /* 10 */  { "adc",	Eb, Gb, XX },  { "adc",	Ev, Gv, XX },  { "adc",	Gb, Eb, XX },  { "adc",	Gv, Ev, XX },  { "adc",	AL, Ib, XX },  { "adc",	eAX, Iv, XX },  { "push",	ss, XX, XX },  { "pop",	ss, XX, XX },  /* 18 */  { "sbb",	Eb, Gb, XX },  { "sbb",	Ev, Gv, XX },  { "sbb",	Gb, Eb, XX },  { "sbb",	Gv, Ev, XX },  { "sbb",	AL, Ib, XX },  { "sbb",	eAX, Iv, XX },  { "push",	ds, XX, XX },  { "pop",	ds, XX, XX },  /* 20 */  { "and",	Eb, Gb, XX },  { "and",	Ev, Gv, XX },  { "and",	Gb, Eb, XX },  { "and",	Gv, Ev, XX },  { "and",	AL, Ib, XX },  { "and",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG ES prefix */  { "daa",	XX, XX, XX },  /* 28 */  { "sub",	Eb, Gb, XX },  { "sub",	Ev, Gv, XX },  { "sub",	Gb, Eb, XX },  { "sub",	Gv, Ev, XX },  { "sub",	AL, Ib, XX },  { "sub",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG CS prefix */  { "das",	XX, XX, XX },  /* 30 */  { "xor",	Eb, Gb, XX },  { "xor",	Ev, Gv, XX },  { "xor",	Gb, Eb, XX },  { "xor",	Gv, Ev, XX },  { "xor",	AL, Ib, XX },  { "xor",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG SS prefix */  { "aaa",	XX, XX, XX },  /* 38 */  { "cmp",	Eb, Gb, XX },  { "cmp",	Ev, Gv, XX },  { "cmp",	Gb, Eb, XX },  { "cmp",	Gv, Ev, XX },  { "cmp",	AL, Ib, XX },  { "cmp",	eAX, Iv, XX },  { "(bad)",	XX, XX, XX },			/* SEG DS prefix */  { "aas",	XX, XX, XX },  /* 40 */  { "inc",	RMeAX, XX, XX },  { "inc",	RMeCX, XX, XX },  { "inc",	RMeDX, XX, XX },  { "inc",	RMeBX, XX, XX },  { "inc",	RMeSP, XX, XX },  { "inc",	RMeBP, XX, XX },  { "inc",	RMeSI, XX, XX },  { "inc",	RMeDI, XX, XX },  /* 48 */  { "dec",	RMeAX, XX, XX },  { "dec",	RMeCX, XX, XX },  { "dec",	RMeDX, XX, XX },  { "dec",	RMeBX, XX, XX },  { "dec",	RMeSP, XX, XX },  { "dec",	RMeBP, XX, XX },  { "dec",	RMeSI, XX, XX },  { "dec",	RMeDI, XX, XX },  /* 50 */  { "push",	RMeAX, XX, XX },  { "push",	RMeCX, XX, XX },  { "push",	RMeDX, XX, XX },  { "push",	RMeBX, XX, XX },  { "push",	RMeSP, XX, XX },  { "push",	RMeBP, XX, XX },  { "push",	RMeSI, XX, XX },  { "push",	RMeDI, XX, XX },  /* 58 */  { "pop",	RMeAX, XX, XX },  { "pop",	RMeCX, XX, XX },  { "pop",	RMeDX, XX, XX },  { "pop",	RMeBX, XX, XX },  { "pop",	RMeSP, XX, XX },  { "pop",	RMeBP, XX, XX },  { "pop",	RMeSI, XX, XX },  { "pop",	RMeDI, XX, XX },  /* 60 */  { "pusha",	XX, XX, XX },  { "popa",	XX, XX, XX },  { "bound",	Gv, Ma, XX },  { "arpl",	Ew, Gw, XX },  { "(bad)",	XX, XX, XX },			/* seg fs */  { "(bad)",	XX, XX, XX },			/* seg gs */  { "(bad)",	XX, XX, XX },			/* op size prefix */  { "(bad)",	XX, XX, XX },			/* adr size prefix */  /* 68 */  { "push",	Iv, XX, XX },		/* 386 book wrong */  { "imul",	Gv, Ev, Iv },  { "push",	sIb, XX, XX },	/* push of byte really pushes 2 or 4 bytes */  { "imul",	Gv, Ev, sIb },  { "ins",	Yb, indirDX, XX },  { "ins",	Yv, indirDX, XX },  { "outs",	indirDX, Xb, XX },  { "outs",	indirDX, Xv, XX },  /* 70 */  { "jo",	Jb, XX, XX },  { "jno",	Jb, XX, XX },  { "jb",	Jb, XX, XX },  { "jae",	Jb, XX, XX },  { "je",	Jb, XX, XX },  { "jne",	Jb, XX, XX },  { "jbe",	Jb, XX, XX },  { "ja",	Jb, XX, XX },  /* 78 */  { "js",	Jb, XX, XX },  { "jns",	Jb, XX, XX },  { "jp",	Jb, XX, XX },  { "jnp",	Jb, XX, XX },  { "jl",	Jb, XX, XX },  { "jge",	Jb, XX, XX },  { "jle",	Jb, XX, XX },  { "jg",	Jb, XX, XX },  /* 80 */  { GRP1b },  { GRP1S },  { "(bad)",	XX, XX, XX },  { GRP1Ss },  { "test",	Eb, Gb, XX },  { "test",	Ev, Gv, XX },  { "xchg",	Eb, Gb, XX },  { "xchg",	Ev, Gv, XX },  /* 88 */  { "mov",	Eb, Gb, XX },  { "mov",	Ev, Gv, XX },  { "mov",	Gb, Eb, XX },  { "mov",	Gv, Ev, XX },  { "mov",	Ev, Sw, XX },  { "lea",	Gv, M, XX },  { "mov",	Sw, Ev, XX },  { "pop",	Ev, XX, XX },  /* 90 */  { "nop",	XX, XX, XX },  /* FIXME: NOP with REPz prefix is called PAUSE.  */  { "xchg",	RMeCX, eAX, XX },  { "xchg",	RMeDX, eAX, XX },  { "xchg",	RMeBX, eAX, XX },  { "xchg",	RMeSP, eAX, XX },  { "xchg",	RMeBP, eAX, XX },  { "xchg",	RMeSI, eAX, XX },  { "xchg",	RMeDI, eAX, XX },  /* 98 */  { "cW",	XX, XX, XX },		/* cwde and cbw */  { "cR",	XX, XX, XX },		/* cdq and cwd */  { "lcall",	Ap, XX, XX },  { "(bad)",	XX, XX, XX },		/* fwait */  { "pushf",	XX, XX, XX },  { "popf",	XX, XX, XX },  { "sahf",	XX, XX, XX },  { "lahf",	XX, XX, XX },  /* a0 */  { "mov",	AL, Ob, XX },  { "mov",	eAX, Ov, XX },  { "mov",	Ob, AL, XX },

⌨️ 快捷键说明

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