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 + -
显示快捷键?