📄 i386-dis.c
字号:
{ "sbbS", eAX, Iv, XX }, { "push{T|}", ds, XX, XX }, { "pop{T|}", 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 */ { "inc{S|}", RMeAX, XX, XX }, { "inc{S|}", RMeCX, XX, XX }, { "inc{S|}", RMeDX, XX, XX }, { "inc{S|}", RMeBX, XX, XX }, { "inc{S|}", RMeSP, XX, XX }, { "inc{S|}", RMeBP, XX, XX }, { "inc{S|}", RMeSI, XX, XX }, { "inc{S|}", RMeDI, XX, XX }, /* 48 */ { "dec{S|}", RMeAX, XX, XX }, { "dec{S|}", RMeCX, XX, XX }, { "dec{S|}", RMeDX, XX, XX }, { "dec{S|}", RMeBX, XX, XX }, { "dec{S|}", RMeSP, XX, XX }, { "dec{S|}", RMeBP, XX, XX }, { "dec{S|}", RMeSI, XX, XX }, { "dec{S|}", RMeDI, XX, XX }, /* 50 */ { "pushS", RMrAX, XX, XX }, { "pushS", RMrCX, XX, XX }, { "pushS", RMrDX, XX, XX }, { "pushS", RMrBX, XX, XX }, { "pushS", RMrSP, XX, XX }, { "pushS", RMrBP, XX, XX }, { "pushS", RMrSI, XX, XX }, { "pushS", RMrDI, XX, XX }, /* 58 */ { "popS", RMrAX, XX, XX }, { "popS", RMrCX, XX, XX }, { "popS", RMrDX, XX, XX }, { "popS", RMrBX, XX, XX }, { "popS", RMrSP, XX, XX }, { "popS", RMrBP, XX, XX }, { "popS", RMrSI, XX, XX }, { "popS", RMrDI, XX, XX }, /* 60 */ { "pusha{P|}", XX, XX, XX }, { "popa{P|}", XX, XX, XX }, { "bound{S|}", Gv, Ma, XX }, { X86_64_0 }, { "(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 */ { "pushT", Iq, XX, XX }, { "imulS", Gv, Ev, Iv }, { "pushT", sIb, XX, XX }, { "imulS", Gv, Ev, sIb }, { "ins{b||b|}", Yb, indirDX, XX }, { "ins{R||R|}", Yv, indirDX, XX }, { "outs{b||b|}", indirDX, Xb, XX }, { "outs{R||R|}", indirDX, Xv, XX }, /* 70 */ { "joH", Jb, XX, cond_jump_flag }, { "jnoH", Jb, XX, cond_jump_flag }, { "jbH", Jb, XX, cond_jump_flag }, { "jaeH", Jb, XX, cond_jump_flag }, { "jeH", Jb, XX, cond_jump_flag }, { "jneH", Jb, XX, cond_jump_flag }, { "jbeH", Jb, XX, cond_jump_flag }, { "jaH", Jb, XX, cond_jump_flag }, /* 78 */ { "jsH", Jb, XX, cond_jump_flag }, { "jnsH", Jb, XX, cond_jump_flag }, { "jpH", Jb, XX, cond_jump_flag }, { "jnpH", Jb, XX, cond_jump_flag }, { "jlH", Jb, XX, cond_jump_flag }, { "jgeH", Jb, XX, cond_jump_flag }, { "jleH", Jb, XX, cond_jump_flag }, { "jgH", Jb, XX, cond_jump_flag }, /* 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 }, { "popU", 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 */ { "cW{tR||tR|}", XX, XX, XX }, { "cR{tO||tO|}", XX, XX, XX }, { "lcall{T|}", Ap, XX, XX }, { "(bad)", XX, XX, XX }, /* fwait */ { "pushfT", XX, XX, XX }, { "popfT", XX, XX, XX }, { "sahf{|}", XX, XX, XX }, { "lahf{|}", XX, XX, XX }, /* a0 */ { "movB", AL, Ob64, XX }, { "movS", eAX, Ov64, XX }, { "movB", Ob64, AL, XX }, { "movS", Ov64, eAX, XX }, { "movs{b||b|}", Yb, Xb, XX }, { "movs{R||R|}", Yv, Xv, XX }, { "cmps{b||b|}", Xb, Yb, XX }, { "cmps{R||R|}", 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, Iv64, XX }, { "movS", RMeCX, Iv64, XX }, { "movS", RMeDX, Iv64, XX }, { "movS", RMeBX, Iv64, XX }, { "movS", RMeSP, Iv64, XX }, { "movS", RMeBP, Iv64, XX }, { "movS", RMeSI, Iv64, XX }, { "movS", RMeDI, Iv64, XX }, /* c0 */ { GRP2b }, { GRP2S }, { "retT", Iw, XX, XX }, { "retT", XX, XX, XX }, { "les{S|}", Gv, Mp, XX }, { "ldsS", Gv, Mp, XX }, { "movA", Eb, Ib, XX }, { "movQ", Ev, Iv, XX }, /* c8 */ { "enterT", Iw, Ib, XX }, { "leaveT", 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 */ { "loopneFH", Jb, XX, loop_jcxz_flag }, { "loopeFH", Jb, XX, loop_jcxz_flag }, { "loopFH", Jb, XX, loop_jcxz_flag }, { "jEcxzH", Jb, XX, loop_jcxz_flag }, { "inB", AL, Ib, XX }, { "inS", eAX, Ib, XX }, { "outB", Ib, AL, XX }, { "outS", Ib, eAX, XX }, /* e8 */ { "callT", Jv, XX, XX }, { "jmpT", Jv, XX, XX }, { "ljmp{T|}", 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_twobyte[] = { /* 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 */ { "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 */ { "joH", Jv, XX, cond_jump_flag }, { "jnoH", Jv, XX, cond_jump_flag }, { "jbH", Jv, XX, cond_jump_flag }, { "jaeH", Jv, XX, cond_jump_flag }, { "jeH", Jv, XX, cond_jump_flag }, { "jneH", Jv, XX, cond_jump_flag }, { "jbeH", Jv, XX, cond_jump_flag }, { "jaH", Jv, XX, cond_jump_flag }, /* 88 */ { "jsH", Jv, XX, cond_jump_flag }, { "jnsH", Jv, XX, cond_jump_flag }, { "jpH", Jv, XX, cond_jump_flag }, { "jnpH", Jv, XX, cond_jump_flag }, { "jlH", Jv, XX, cond_jump_flag }, { "jgeH", Jv, XX, cond_jump_flag }, { "jleH", Jv, XX, cond_jump_flag }, { "jgH", Jv, XX, cond_jump_flag }, /* 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 */ { "pushT", fs, XX, XX }, { "popT", 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 */ { "pushT", gs, XX, XX }, { "popT", 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 }, { "movz{bR|x|bR|x}", Gv, Eb, XX }, { "movz{wR|x|wR|x}", 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 }, { "movs{bR|x|bR|x}", Gv, Eb, XX }, { "movs{wR|x|wR|x}", 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", 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 },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -