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