i386-dis.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,329 行 · 第 1/5 页
C
2,329 行
{ "orS", Ev, Gv, XX }, { "orB", Gb, Eb, XX }, { "orS", Gv, Ev, XX }, { "orB", AL, Ib, XX }, { "orS", eAX, Iv, XX }, { "pushI", cs, XX, XX }, { "(bad)", XX, XX, XX }, /* 0x0f extended opcode escape */ /* 10 */ { "adcB", Eb, Gb, XX }, { "adcS", Ev, Gv, XX }, { "adcB", Gb, Eb, XX }, { "adcS", Gv, Ev, XX }, { "adcB", AL, Ib, XX }, { "adcS", eAX, Iv, XX }, { "pushI", ss, XX, XX }, { "popI", ss, XX, XX }, /* 18 */ { "sbbB", Eb, Gb, XX }, { "sbbS", Ev, Gv, XX }, { "sbbB", Gb, Eb, XX }, { "sbbS", Gv, Ev, XX }, { "sbbB", AL, Ib, XX }, { "sbbS", eAX, Iv, XX }, { "pushI", ds, XX, XX }, { "popI", 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 */ { "incS", RMeAX, XX, XX }, { "incS", RMeCX, XX, XX }, { "incS", RMeDX, XX, XX }, { "incS", RMeBX, XX, XX }, { "incS", RMeSP, XX, XX }, { "incS", RMeBP, XX, XX }, { "incS", RMeSI, XX, XX }, { "incS", RMeDI, XX, XX }, /* 48 */ { "decS", RMeAX, XX, XX }, { "decS", RMeCX, XX, XX }, { "decS", RMeDX, XX, XX }, { "decS", RMeBX, XX, XX }, { "decS", RMeSP, XX, XX }, { "decS", RMeBP, XX, XX }, { "decS", RMeSI, XX, XX }, { "decS", RMeDI, XX, XX }, /* 50 */ { "pushS", RMeAX, XX, XX }, { "pushS", RMeCX, XX, XX }, { "pushS", RMeDX, XX, XX }, { "pushS", RMeBX, XX, XX }, { "pushS", RMeSP, XX, XX }, { "pushS", RMeBP, XX, XX }, { "pushS", RMeSI, XX, XX }, { "pushS", RMeDI, XX, XX }, /* 58 */ { "popS", RMeAX, XX, XX }, { "popS", RMeCX, XX, XX }, { "popS", RMeDX, XX, XX }, { "popS", RMeBX, XX, XX }, { "popS", RMeSP, XX, XX }, { "popS", RMeBP, XX, XX }, { "popS", RMeSI, XX, XX }, { "popS", RMeDI, XX, XX }, /* 60 */ { "pushaP", XX, XX, XX }, { "popaP", XX, XX, XX }, { "boundS", Gv, Ma, XX }, { "arpl", Ew, Gw, 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 */ { "pushI", Iv, XX, XX }, /* 386 book wrong */ { "imulS", Gv, Ev, Iv }, { "pushI", sIb, XX, XX }, /* push of byte really pushes 2 or 4 bytes */ { "imulS", Gv, Ev, sIb }, { "insb", Yb, indirDX, XX }, { "insR", Yv, indirDX, XX }, { "outsb", indirDX, Xb, XX }, { "outsR", indirDX, Xv, XX }, /* 70 */ { "jo", Jb, cond_jump_flag, XX }, { "jno", Jb, cond_jump_flag, XX }, { "jb", Jb, cond_jump_flag, XX }, { "jae", Jb, cond_jump_flag, XX }, { "je", Jb, cond_jump_flag, XX }, { "jne", Jb, cond_jump_flag, XX }, { "jbe", Jb, cond_jump_flag, XX }, { "ja", Jb, cond_jump_flag, XX }, /* 78 */ { "js", Jb, cond_jump_flag, XX }, { "jns", Jb, cond_jump_flag, XX }, { "jp", Jb, cond_jump_flag, XX }, { "jnp", Jb, cond_jump_flag, XX }, { "jl", Jb, cond_jump_flag, XX }, { "jge", Jb, cond_jump_flag, XX }, { "jle", Jb, cond_jump_flag, XX }, { "jg", Jb, cond_jump_flag, XX }, /* 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 }, { "popT", 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 */ { "cWtR", XX, XX, XX }, { "cRtO", XX, XX, XX }, { "lcallI", Ap, XX, XX }, { "(bad)", XX, XX, XX }, /* fwait */ { "pushfI", XX, XX, XX }, { "popfI", XX, XX, XX }, { "sahf", XX, XX, XX }, { "lahf", XX, XX, XX }, /* a0 */ { "movB", AL, Ob, XX }, { "movS", eAX, Ov, XX }, { "movB", Ob, AL, XX }, { "movS", Ov, eAX, XX }, { "movsb", Yb, Xb, XX }, { "movsR", Yv, Xv, XX }, { "cmpsb", Xb, Yb, XX }, { "cmpsR", 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, Iv, XX }, { "movS", RMeCX, Iv, XX }, { "movS", RMeDX, Iv, XX }, { "movS", RMeBX, Iv, XX }, { "movS", RMeSP, Iv, XX }, { "movS", RMeBP, Iv, XX }, { "movS", RMeSI, Iv, XX }, { "movS", RMeDI, Iv, XX }, /* c0 */ { GRP2b }, { GRP2S }, { "retI", Iw, XX, XX }, { "retI", XX, XX, XX }, { "lesS", Gv, Mp, XX }, { "ldsS", Gv, Mp, XX }, { "movA", Eb, Ib, XX }, { "movQ", Ev, Iv, XX }, /* c8 */ { "enterI", Iw, Ib, XX }, { "leaveI", 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 */ { "loopneF", Jb, loop_jcxz_flag, XX }, { "loopeF", Jb, loop_jcxz_flag, XX }, { "loopF", Jb, loop_jcxz_flag, XX }, { "jEcxz", Jb, loop_jcxz_flag, XX }, { "inB", AL, Ib, XX }, { "inS", eAX, Ib, XX }, { "outB", Ib, AL, XX }, { "outS", Ib, eAX, XX }, /* e8 */ { "callI", Jv, XX, XX }, { "jmpI", Jv, XX, XX }, { "ljmpI", 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_intel[] = { /* 00 */ { "add", Eb, Gb, XX }, { "add", Ev, Gv, XX }, { "add", Gb, Eb, XX }, { "add", Gv, Ev, XX }, { "add", AL, Ib, XX }, { "add", eAX, Iv, XX }, { "push", es, XX, XX }, { "pop", es, XX, XX }, /* 08 */ { "or", Eb, Gb, XX }, { "or", Ev, Gv, XX }, { "or", Gb, Eb, XX }, { "or", Gv, Ev, XX }, { "or", AL, Ib, XX }, { "or", eAX, Iv, XX }, { "push", cs, XX, XX }, { "(bad)", XX, XX, XX }, /* 0x0f extended opcode escape */ /* 10 */ { "adc", Eb, Gb, XX }, { "adc", Ev, Gv, XX }, { "adc", Gb, Eb, XX }, { "adc", Gv, Ev, XX }, { "adc", AL, Ib, XX }, { "adc", eAX, Iv, XX }, { "push", ss, XX, XX }, { "pop", ss, XX, XX }, /* 18 */ { "sbb", Eb, Gb, XX }, { "sbb", Ev, Gv, XX }, { "sbb", Gb, Eb, XX }, { "sbb", Gv, Ev, XX }, { "sbb", AL, Ib, XX }, { "sbb", eAX, Iv, XX }, { "push", ds, XX, XX }, { "pop", ds, XX, XX }, /* 20 */ { "and", Eb, Gb, XX }, { "and", Ev, Gv, XX }, { "and", Gb, Eb, XX }, { "and", Gv, Ev, XX }, { "and", AL, Ib, XX }, { "and", eAX, Iv, XX }, { "(bad)", XX, XX, XX }, /* SEG ES prefix */ { "daa", XX, XX, XX }, /* 28 */ { "sub", Eb, Gb, XX }, { "sub", Ev, Gv, XX }, { "sub", Gb, Eb, XX }, { "sub", Gv, Ev, XX }, { "sub", AL, Ib, XX }, { "sub", eAX, Iv, XX }, { "(bad)", XX, XX, XX }, /* SEG CS prefix */ { "das", XX, XX, XX }, /* 30 */ { "xor", Eb, Gb, XX }, { "xor", Ev, Gv, XX }, { "xor", Gb, Eb, XX }, { "xor", Gv, Ev, XX }, { "xor", AL, Ib, XX }, { "xor", eAX, Iv, XX }, { "(bad)", XX, XX, XX }, /* SEG SS prefix */ { "aaa", XX, XX, XX }, /* 38 */ { "cmp", Eb, Gb, XX }, { "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 */ { "aas", XX, XX, XX }, /* 40 */ { "inc", RMeAX, XX, XX }, { "inc", RMeCX, XX, XX }, { "inc", RMeDX, XX, XX }, { "inc", RMeBX, XX, XX }, { "inc", RMeSP, XX, XX }, { "inc", RMeBP, XX, XX }, { "inc", RMeSI, XX, XX }, { "inc", RMeDI, XX, XX }, /* 48 */ { "dec", RMeAX, XX, XX }, { "dec", RMeCX, XX, XX }, { "dec", RMeDX, XX, XX }, { "dec", RMeBX, XX, XX }, { "dec", RMeSP, XX, XX }, { "dec", RMeBP, XX, XX }, { "dec", RMeSI, XX, XX }, { "dec", RMeDI, XX, XX }, /* 50 */ { "push", RMeAX, XX, XX }, { "push", RMeCX, XX, XX }, { "push", RMeDX, XX, XX }, { "push", RMeBX, XX, XX }, { "push", RMeSP, XX, XX }, { "push", RMeBP, XX, XX }, { "push", RMeSI, XX, XX }, { "push", RMeDI, XX, XX }, /* 58 */ { "pop", RMeAX, XX, XX }, { "pop", RMeCX, XX, XX }, { "pop", RMeDX, XX, XX }, { "pop", RMeBX, XX, XX }, { "pop", RMeSP, XX, XX }, { "pop", RMeBP, XX, XX }, { "pop", RMeSI, XX, XX }, { "pop", RMeDI, XX, XX }, /* 60 */ { "pusha", XX, XX, XX }, { "popa", XX, XX, XX }, { "bound", Gv, Ma, XX }, { "arpl", Ew, Gw, 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", Iv, 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 */ { "lcall", Ap, XX, XX }, { "(bad)", XX, XX, XX }, /* fwait */ { "pushf", XX, XX, XX }, { "popf", XX, XX, XX }, { "sahf", XX, XX, XX }, { "lahf", XX, XX, XX }, /* a0 */ { "mov", AL, Ob, XX }, { "mov", eAX, Ov, XX }, { "mov", Ob, AL, XX },
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?