i386-dis.c

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

C
2,329
字号
  { "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 */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  /* 40 */  { "(bad)",	XX, XX, XX },			/* REX prefix area.  */  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  /* 48 */  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  { "(bad)",	XX, XX, XX },  /* 50 */  { "push",	RMrAX, XX, XX },  { "push",	RMrCX, XX, XX },  { "push",	RMrDX, XX, XX },  { "push",	RMrBX, XX, XX },  { "push",	RMrSP, XX, XX },  { "push",	RMrBP, XX, XX },  { "push",	RMrSI, XX, XX },  { "push",	RMrDI, XX, XX },  /* 58 */  { "pop",	RMrAX, XX, XX },  { "pop",	RMrCX, XX, XX },  { "pop",	RMrDX, XX, XX },  { "pop",	RMrBX, XX, XX },  { "pop",	RMrSP, XX, XX },  { "pop",	RMrBP, XX, XX },  { "pop",	RMrSI, XX, XX },  { "pop",	RMrDI, XX, XX },  /* 60 */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "movsx",	Gv, Ed, 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",	Iq, 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 */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },		/* fwait */  { "pushf",	XX, XX, XX },  { "popf",	XX, XX, XX },  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  /* a0 */  { "mov",	AL, Ob, XX },  { "mov",	eAX, Ov, XX },  { "mov",	Ob, AL, XX },  { "mov",	Ov, eAX, XX },  { "movs",	Yb, Xb, XX },  { "movs",	Yv, Xv, XX },  { "cmps",	Xb, Yb, XX },  { "cmps",	Xv, Yv, XX },  /* a8 */  { "test",	AL, Ib, XX },  { "test",	eAX, Iv, XX },  { "stos",	Yb, AL, XX },  { "stos",	Yv, eAX, XX },  { "lods",	AL, Xb, XX },  { "lods",	eAX, Xv, XX },  { "scas",	AL, Yb, XX },  { "scas",	eAX, Yv, XX },  /* b0 */  { "mov",	RMAL, Ib, XX },  { "mov",	RMCL, Ib, XX },  { "mov",	RMDL, Ib, XX },  { "mov",	RMBL, Ib, XX },  { "mov",	RMAH, Ib, XX },  { "mov",	RMCH, Ib, XX },  { "mov",	RMDH, Ib, XX },  { "mov",	RMBH, Ib, XX },  /* b8 */  { "mov",	RMeAX, Iv, XX },  { "mov",	RMeCX, Iv, XX },  { "mov",	RMeDX, Iv, XX },  { "mov",	RMeBX, Iv, XX },  { "mov",	RMeSP, Iv, XX },  { "mov",	RMeBP, Iv, XX },  { "mov",	RMeSI, Iv, XX },  { "mov",	RMeDI, Iv, XX },  /* c0 */  { GRP2b },  { GRP2S },  { "ret",	Iw, XX, XX },  { "ret",	XX, XX, XX },  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "lds",	Gv, Mp, XX },  { "mov",	Eb, Ib, XX },  { "mov",	Ev, Iv, XX },  /* c8 */  { "enter",	Iw, Ib, XX },  { "leave",	XX, XX, XX },  { "lret",	Iw, XX, XX },  { "lret",	XX, XX, XX },  { "int3",	XX, XX, XX },  { "int",	Ib, XX, XX },  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "iret",	XX, XX, XX },  /* d0 */  { GRP2b_one },  { GRP2S_one },  { GRP2b_cl },  { GRP2S_cl },  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "xlat",	DSBX, XX, XX },  /* d8 */  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  /* e0 */  { "loopne",	Jb, XX, XX },  { "loope",	Jb, XX, XX },  { "loop",	Jb, XX, XX },  { "jEcxz",	Jb, XX, XX },  { "in",	AL, Ib, XX },  { "in",	eAX, Ib, XX },  { "out",	Ib, AL, XX },  { "out",	Ib, eAX, XX },  /* e8 */  { "call",	Jv, XX, XX },  { "jmp",	Jv, XX, XX },  { "(bad)",	XX, XX, XX },   /* Reserved.  */  { "jmp",	Jb, XX, XX },  { "in",	AL, indirDX, XX },  { "in",	eAX, indirDX, XX },  { "out",	indirDX, AL, XX },  { "out",	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_twobyte_att[] = {  /* 00 */  { GRP6 },  { GRP7 },  { "larS", Gv, Ew, XX },  { "lslS", Gv, Ew, XX },  { "(bad)", XX, XX, XX },  { "syscall", XX, XX, XX },  { "clts", XX, XX, XX },  { "sysretP", XX, XX, XX },  /* 08 */  { "invd", XX, XX, XX },  { "wbinvd", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "ud2a", XX, XX, XX },  { "(bad)", XX, XX, XX },  { GRPAMD },  { "femms", XX, XX, XX },  { "", MX, EM, OPSUF }, /* See OP_3DNowSuffix */  /* 10 */  { PREGRP8 },  { PREGRP9 },  { "movlpX", XM, EX, SIMD_Fixup, 'h' },  /* really only 2 operands */  { "movlpX", EX, XM, SIMD_Fixup, 'h' },  { "unpcklpX", XM, EX, XX },  { "unpckhpX", XM, EX, XX },  { "movhpX", XM, EX, SIMD_Fixup, 'l' },  { "movhpX", EX, XM, SIMD_Fixup, 'l' },  /* 18 */  { GRP14 },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  /* 20 */  /* these are all backward in appendix A of the intel book */  { "movL", Rm, Cm, XX },  { "movL", Rm, Dm, XX },  { "movL", Cm, Rm, XX },  { "movL", Dm, Rm, XX },  { "movL", Rd, Td, XX },  { "(bad)", XX, XX, XX },  { "movL", Td, Rd, XX },  { "(bad)", XX, XX, XX },  /* 28 */  { "movapX", XM, EX, XX },  { "movapX", EX, XM, XX },  { PREGRP2 },  { "movntpX", Ev, XM, XX },  { PREGRP4 },  { PREGRP3 },  { "ucomisX", XM,EX, XX },  { "comisX", XM,EX, XX },  /* 30 */  { "wrmsr", XX, XX, XX },  { "rdtsc", XX, XX, XX },  { "rdmsr", XX, XX, XX },  { "rdpmc", XX, XX, XX },  { "sysenter", XX, XX, XX },  { "sysexit", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  /* 38 */  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  /* 40 */  { "cmovo", Gv, Ev, XX },  { "cmovno", Gv, Ev, XX },  { "cmovb", Gv, Ev, XX },  { "cmovae", Gv, Ev, XX },  { "cmove", Gv, Ev, XX },  { "cmovne", Gv, Ev, XX },  { "cmovbe", Gv, Ev, XX },  { "cmova", Gv, Ev, XX },  /* 48 */  { "cmovs", Gv, Ev, XX },  { "cmovns", Gv, Ev, XX },  { "cmovp", Gv, Ev, XX },  { "cmovnp", Gv, Ev, XX },  { "cmovl", Gv, Ev, XX },  { "cmovge", Gv, Ev, XX },  { "cmovle", Gv, Ev, XX },  { "cmovg", Gv, Ev, XX },  /* 50 */  { "movmskpX", Gd, XS, XX },  { PREGRP13 },  { PREGRP12 },  { PREGRP11 },  { "andpX", XM, EX, XX },  { "andnpX", XM, EX, XX },  { "orpX", XM, EX, XX },  { "xorpX", XM, EX, XX },  /* 58 */  { PREGRP0 },  { PREGRP10 },  { PREGRP17 },  { PREGRP16 },  { PREGRP14 },  { PREGRP7 },  { PREGRP5 },  { PREGRP6 },  /* 60 */  { "punpcklbw", MX, EM, XX },  { "punpcklwd", MX, EM, XX },  { "punpckldq", MX, EM, XX },  { "packsswb", MX, EM, XX },  { "pcmpgtb", MX, EM, XX },  { "pcmpgtw", MX, EM, XX },  { "pcmpgtd", MX, EM, XX },  { "packuswb", MX, EM, XX },  /* 68 */  { "punpckhbw", MX, EM, XX },  { "punpckhwd", MX, EM, XX },  { "punpckhdq", MX, EM, XX },  { "packssdw", MX, EM, XX },  { PREGRP26 },  { PREGRP24 },  { "movd", MX, Ed, XX },  { PREGRP19 },  /* 70 */  { PREGRP22 },  { GRP10 },  { GRP11 },  { GRP12 },  { "pcmpeqb", MX, EM, XX },  { "pcmpeqw", MX, EM, XX },  { "pcmpeqd", MX, EM, XX },  { "emms", XX, XX, XX },  /* 78 */  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  { PREGRP23 },  { PREGRP20 },  /* 80 */  { "jo",  Jv, cond_jump_flag, XX },  { "jno", Jv, cond_jump_flag, XX },  { "jb",  Jv, cond_jump_flag, XX },  { "jae", Jv, cond_jump_flag, XX },  { "je",  Jv, cond_jump_flag, XX },  { "jne", Jv, cond_jump_flag, XX },  { "jbe", Jv, cond_jump_flag, XX },  { "ja",  Jv, cond_jump_flag, XX },  /* 88 */  { "js",  Jv, cond_jump_flag, XX },  { "jns", Jv, cond_jump_flag, XX },  { "jp",  Jv, cond_jump_flag, XX },  { "jnp", Jv, cond_jump_flag, XX },  { "jl",  Jv, cond_jump_flag, XX },  { "jge", Jv, cond_jump_flag, XX },  { "jle", Jv, cond_jump_flag, XX },  { "jg",  Jv, cond_jump_flag, XX },  /* 90 */  { "seto", Eb, XX, XX },  { "setno", Eb, XX, XX },  { "setb", Eb, XX, XX },  { "setae", Eb, XX, XX },  { "sete", Eb, XX, XX },  { "setne", Eb, XX, XX },  { "setbe", Eb, XX, XX },  { "seta", Eb, XX, XX },  /* 98 */  { "sets", Eb, XX, XX },  { "setns", Eb, XX, XX },  { "setp", Eb, XX, XX },  { "setnp", Eb, XX, XX },  { "setl", Eb, XX, XX },  { "setge", Eb, XX, XX },  { "setle", Eb, XX, XX },  { "setg", Eb, XX, XX },  /* a0 */  { "pushI", fs, XX, XX },  { "popI", fs, XX, XX },  { "cpuid", XX, XX, XX },  { "btS", Ev, Gv, XX },  { "shldS", Ev, Gv, Ib },  { "shldS", Ev, Gv, CL },  { "(bad)", XX, XX, XX },  { "(bad)", XX, XX, XX },  /* a8 */  { "pushI", gs, XX, XX },  { "popI", gs, XX, XX },  { "rsm", XX, XX, XX },  { "btsS", Ev, Gv, XX },  { "shrdS", Ev, Gv, Ib },  { "shrdS", Ev, Gv, CL },  { GRP13 },  { "imulS", Gv, Ev, XX },  /* b0 */  { "cmpxchgB", Eb, Gb, XX },  { "cmpxchgS", Ev, Gv, XX },  { "lssS", Gv, Mp, XX },  { "btrS", Ev, Gv, XX },  { "lfsS", Gv, Mp, XX },  { "lgsS", Gv, Mp, XX },  { "movzbR", Gv, Eb, XX },  { "movzwR", Gv, Ew, XX }, /* yes, there really is movzww ! */  /* b8 */  { "(bad)", XX, XX, XX },  { "ud2b", XX, XX, XX },  { GRP8 },  { "btcS", Ev, Gv, XX },  { "bsfS", Gv, Ev, XX },  { "bsrS", Gv, Ev, XX },  { "movsbR", Gv, Eb, XX },  { "movswR", Gv, Ew, XX }, /* yes, there really is movsww ! */  /* c0 */  { "xaddB", Eb, Gb, XX },  { "xaddS", Ev, Gv, XX },  { PREGRP1 },  { "movntiS", Ev, Gv, XX },  { "pinsrw", MX, Ed, Ib },  { "pextrw", Gd, MS, Ib },  { "shufpX", XM, EX, Ib },  { GRP9 },  /* c8 */  { "bswap", RMeAX, XX, XX },	/* bswap doesn't support 16 bit regs */  { "bswap", RMeCX, XX, XX },  { "bswap", RMeDX, XX, XX },  { "bswap", RMeBX, XX, XX },  { "bswap", RMeSP, XX, XX },  { "bswap", RMeBP, XX, XX },  { "bswap", RMeSI, XX, XX },  { "bswap", RMeDI, XX, XX },  /* d0 */  { "(bad)", XX, XX, XX },  { "psrlw", MX, EM, XX },  { "psrld", MX, EM, XX },

⌨️ 快捷键说明

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