i386-dis.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,329 行 · 第 1/5 页
C
2,329 行
{ "psrlq", MX, EM, XX }, { "paddq", MX, EM, XX }, { "pmullw", MX, EM, XX }, { PREGRP21 }, { "pmovmskb", Gd, MS, XX }, /* d8 */ { "psubusb", MX, EM, XX }, { "psubusw", MX, EM, XX }, { "pminub", MX, EM, XX }, { "pand", MX, EM, XX }, { "paddusb", MX, EM, XX }, { "paddusw", MX, EM, XX }, { "pmaxub", MX, EM, XX }, { "pandn", MX, EM, XX }, /* e0 */ { "pavgb", MX, EM, XX }, { "psraw", MX, EM, XX }, { "psrad", MX, EM, XX }, { "pavgw", MX, EM, XX }, { "pmulhuw", MX, EM, XX }, { "pmulhw", MX, EM, XX }, { PREGRP15 }, { PREGRP25 }, /* e8 */ { "psubsb", MX, EM, XX }, { "psubsw", MX, EM, XX }, { "pminsw", MX, EM, XX }, { "por", MX, EM, XX }, { "paddsb", MX, EM, XX }, { "paddsw", MX, EM, XX }, { "pmaxsw", MX, EM, XX }, { "pxor", MX, EM, XX }, /* f0 */ { "(bad)", XX, XX, XX }, { "psllw", MX, EM, XX }, { "pslld", MX, EM, XX }, { "psllq", MX, EM, XX }, { "pmuludq", MX, EM, XX }, { "pmaddwd", MX, EM, XX }, { "psadbw", MX, EM, XX }, { PREGRP18 }, /* f8 */ { "psubb", MX, EM, XX }, { "psubw", MX, EM, XX }, { "psubd", MX, EM, XX }, { "psubq", MX, EM, XX }, { "paddb", MX, EM, XX }, { "paddw", MX, EM, XX }, { "paddd", MX, EM, XX }, { "(bad)", XX, XX, XX }};static const struct dis386 dis386_twobyte_intel[] = { /* 00 */ { GRP6 }, { GRP7 }, { "lar", Gv, Ew, XX }, { "lsl", 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 */ { "mov", Rm, Cm, XX }, { "mov", Rm, Dm, XX }, { "mov", Cm, Rm, XX }, { "mov", Dm, Rm, XX }, { "mov", Rd, Td, XX }, { "(bad)", XX, XX, XX }, { "mov", 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, XX, XX }, { "jno", Jv, XX, XX }, { "jb", Jv, XX, XX }, { "jae", Jv, XX, XX }, { "je", Jv, XX, XX }, { "jne", Jv, XX, XX }, { "jbe", Jv, XX, XX }, { "ja", Jv, XX, XX }, /* 88 */ { "js", Jv, XX, XX }, { "jns", Jv, XX, XX }, { "jp", Jv, XX, XX }, { "jnp", Jv, XX, XX }, { "jl", Jv, XX, XX }, { "jge", Jv, XX, XX }, { "jle", Jv, XX, XX }, { "jg", Jv, XX, 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 */ { "push", fs, XX, XX }, { "pop", fs, XX, XX }, { "cpuid", XX, XX, XX }, { "bt", Ev, Gv, XX }, { "shld", Ev, Gv, Ib }, { "shld", Ev, Gv, CL }, { "(bad)", XX, XX, XX }, { "(bad)", XX, XX, XX }, /* a8 */ { "push", gs, XX, XX }, { "pop", gs, XX, XX }, { "rsm" , XX, XX, XX}, { "bts", Ev, Gv, XX }, { "shrd", Ev, Gv, Ib }, { "shrd", Ev, Gv, CL }, { GRP13 }, { "imul", Gv, Ev, XX }, /* b0 */ { "cmpxchg", Eb, Gb, XX }, { "cmpxchg", Ev, Gv, XX }, { "lss", Gv, Mp, XX }, { "btr", Ev, Gv, XX }, { "lfs", Gv, Mp, XX }, { "lgs", Gv, Mp, XX }, { "movzx", Gv, Eb, XX }, { "movzx", Gv, Ew, XX }, /* b8 */ { "(bad)", XX, XX, XX }, { "ud2b", XX, XX, XX }, { GRP8 }, { "btc", Ev, Gv, XX }, { "bsf", Gv, Ev, XX }, { "bsr", Gv, Ev, XX }, { "movsx", Gv, Eb, XX }, { "movsx", Gv, Ew, XX }, /* c0 */ { "xadd", Eb, Gb, XX }, { "xadd", Ev, Gv, XX }, { PREGRP1 }, { "movnti", 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 }, { "psrlq", MX, EM, XX }, { "paddq", MX, EM, XX }, { "pmullw", MX, EM, XX }, { PREGRP21 }, { "pmovmskb", Gd, MS, XX }, /* d8 */ { "psubusb", MX, EM, XX }, { "psubusw", MX, EM, XX }, { "pminub", MX, EM, XX }, { "pand", MX, EM, XX }, { "paddusb", MX, EM, XX }, { "paddusw", MX, EM, XX }, { "pmaxub", MX, EM, XX }, { "pandn", MX, EM, XX }, /* e0 */ { "pavgb", MX, EM, XX }, { "psraw", MX, EM, XX }, { "psrad", MX, EM, XX }, { "pavgw", MX, EM, XX }, { "pmulhuw", MX, EM, XX }, { "pmulhw", MX, EM, XX }, { PREGRP15 }, { PREGRP25 }, /* e8 */ { "psubsb", MX, EM, XX }, { "psubsw", MX, EM, XX }, { "pminsw", MX, EM, XX }, { "por", MX, EM, XX }, { "paddsb", MX, EM, XX }, { "paddsw", MX, EM, XX }, { "pmaxsw", MX, EM, XX }, { "pxor", MX, EM, XX }, /* f0 */ { "(bad)", XX, XX, XX }, { "psllw", MX, EM, XX }, { "pslld", MX, EM, XX }, { "psllq", MX, EM, XX }, { "pmuludq", MX, EM, XX }, { "pmaddwd", MX, EM, XX }, { "psadbw", MX, EM, XX }, { PREGRP18 }, /* f8 */ { "psubb", MX, EM, XX }, { "psubw", MX, EM, XX }, { "psubd", MX, EM, XX }, { "psubq", MX, EM, XX }, { "paddb", MX, EM, XX }, { "paddw", MX, EM, XX }, { "paddd", MX, EM, XX }, { "(bad)", XX, XX, XX }};static const unsigned char onebyte_has_modrm[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* ------------------------------- */ /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */ /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */ /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */ /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */ /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */ /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */ /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */ /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */ /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */ /* ------------------------------- */ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */};static const unsigned char twobyte_has_modrm[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* ------------------------------- */ /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */ /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, /* 1f */ /* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */ /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */ /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */ /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */ /* 70 */ 1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1, /* 7f */ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */ /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */ /* a0 */ 0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* af */ /* b0 */ 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* bf */ /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */ /* d0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */ /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */ /* f0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */ /* ------------------------------- */ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */};static const unsigned char twobyte_uses_SSE_prefix[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* ------------------------------- */ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */ /* 10 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */ /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0, /* 2f */ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */ /* 50 */ 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* 5f */ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1, /* 6f */ /* 70 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 7f */ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */ /* c0 */ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */ /* d0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* df */ /* e0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* ef */ /* f0 */ 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 /* ff */ /* ------------------------------- */ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */};static char obuf[100];static char *obufp;static char scratchbuf[100];static unsigned char *start_codep;static unsigned char *insn_codep;static unsigned char *codep;static disassemble_info *the_info;static int mod;static int rm;static int reg;static unsigned char need_modrm;static void oappend PARAMS ((const char *s));/* If we are accessing mod/rm/reg without need_modrm set, then the values are stale. Hitting this abort likely indicates that you need to update onebyte_has_modrm or twobyte_has_modrm. */#define MODRM_CHECK if (!need_modrm) abort ()static const char *names64[] = { "%rax","%rcx","%rdx","%rbx", "%rsp","%rbp","%rsi","%rdi", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"};static const char *names32[] = { "%eax","%ecx","%edx","%ebx", "%esp","%ebp","%esi","%edi", "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"};static const char *names16[] = { "%ax","%cx","%dx","%bx","%sp","%bp","%si","%di", "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"};static const char *names8[] = { "%al","%cl","%dl","%bl","%ah","%ch","%dh","%bh",};static const char *names8rex[] = { "%al","%cl","%dl","%bl","%spl", "%bpl", "%sil", "%dil", "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"};static const char *names_seg[] = { "%es","%cs","%ss","%ds","%fs","%gs","%?","%?",};static const char *index16[] = { "%bx,%si","%bx,%di","%bp,%si","%bp,%di","%si","%di","%bp","%bx"};static const struct dis386 grps[][8] = { /* GRP1b */ { { "addA", Eb, Ib, XX }, { "orA", Eb, Ib, XX }, { "adcA", Eb, Ib, XX }, { "sbbA", Eb, Ib, XX },
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?