📄 i386-opcode.h
字号:
{"xlat", 0, 0xd7, _, NoModrm, 0, 0, 0},/* bit manipulation */{"bsf", 2, 0x0fbc, _, Modrm|ReverseRegRegmem, Reg|Mem, Reg, 0},{"bsr", 2, 0x0fbd, _, Modrm|ReverseRegRegmem, Reg|Mem, Reg, 0},{"bt", 2, 0x0fa3, _, Modrm, Reg, Reg|Mem, 0},{"bt", 2, 0x0fba, 4, Modrm, Imm8, Reg|Mem, 0},{"btc", 2, 0x0fbb, _, Modrm, Reg, Reg|Mem, 0},{"btc", 2, 0x0fba, 7, Modrm, Imm8, Reg|Mem, 0},{"btr", 2, 0x0fb3, _, Modrm, Reg, Reg|Mem, 0},{"btr", 2, 0x0fba, 6, Modrm, Imm8, Reg|Mem, 0},{"bts", 2, 0x0fab, _, Modrm, Reg, Reg|Mem, 0},{"bts", 2, 0x0fba, 5, Modrm, Imm8, Reg|Mem, 0},/* interrupts & op. sys insns *//* See i386.c for conversion of 'int $3' into the special int 3 insn. */#define INT_OPCODE 0xcd#define INT3_OPCODE 0xcc{"int", 1, 0xcd, _, NoModrm, Imm8, 0, 0},{"int3", 0, 0xcc, _, NoModrm, 0, 0, 0},{"into", 0, 0xce, _, NoModrm, 0, 0, 0},{"iret", 0, 0xcf, _, NoModrm, 0, 0, 0},{"boundl", 2, 0x62, _, Modrm, Reg32, Mem, 0},{"boundw", 2, 0x6662, _, Modrm, Reg16, Mem, 0},{"hlt", 0, 0xf4, _, NoModrm, 0, 0, 0},{"wait", 0, 0x9b, _, NoModrm, 0, 0, 0},/* nop is actually 'xchgl %eax, %eax' */{"nop", 0, 0x90, _, NoModrm, 0, 0, 0},/* protection control */{"arpl", 2, 0x63, _, Modrm, Reg16, Reg16|Mem, 0},{"lar", 2, 0x0f02, _, Modrm|ReverseRegRegmem, WordReg|Mem, WordReg, 0},{"lgdt", 1, 0x0f01, 2, Modrm, Mem, 0, 0},{"lidt", 1, 0x0f01, 3, Modrm, Mem, 0, 0},{"lldt", 1, 0x0f00, 2, Modrm, WordReg|Mem, 0, 0},{"lmsw", 1, 0x0f01, 6, Modrm, WordReg|Mem, 0, 0},{"lsl", 2, 0x0f03, _, Modrm|ReverseRegRegmem, WordReg|Mem, WordReg, 0},{"ltr", 1, 0x0f00, 3, Modrm, WordReg|Mem, 0, 0},{"sgdt", 1, 0x0f01, 0, Modrm, Mem, 0, 0},{"sidt", 1, 0x0f01, 1, Modrm, Mem, 0, 0},{"sldt", 1, 0x0f00, 0, Modrm, WordReg|Mem, 0, 0},{"smsw", 1, 0x0f01, 4, Modrm, WordReg|Mem, 0, 0},{"str", 1, 0x0f00, 1, Modrm, Reg16|Mem, 0, 0},{"verr", 1, 0x0f00, 4, Modrm, WordReg|Mem, 0, 0},{"verw", 1, 0x0f00, 5, Modrm, WordReg|Mem, 0, 0},/* floating point instructions *//* load */{"fld", 1, 0xd9c0, _, ShortForm, FloatReg, 0, 0}, /* register */{"flds", 1, 0xd9, 0, Modrm, Mem, 0, 0}, /* %st0 <-- mem float */{"fildl", 1, 0xdb, 0, Modrm, Mem, 0, 0}, /* %st0 <-- mem word */{"fldl", 1, 0xdd, 0, Modrm, Mem, 0, 0}, /* %st0 <-- mem double */{"fldl", 1, 0xd9c0, _, ShortForm, FloatReg, 0, 0}, /* register */{"filds", 1, 0xdf, 0, Modrm, Mem, 0, 0}, /* %st0 <-- mem dword */{"fildq", 1, 0xdf, 5, Modrm, Mem, 0, 0}, /* %st0 <-- mem qword */{"fldt", 1, 0xdb, 5, Modrm, Mem, 0, 0}, /* %st0 <-- mem efloat */{"fbld", 1, 0xdf, 4, Modrm, Mem, 0, 0}, /* %st0 <-- mem bcd *//* store (no pop) */{"fst", 1, 0xddd0, _, ShortForm, FloatReg, 0, 0}, /* register */{"fsts", 1, 0xd9, 2, Modrm, Mem, 0, 0}, /* %st0 --> mem float */{"fistl", 1, 0xdb, 2, Modrm, Mem, 0, 0}, /* %st0 --> mem dword */{"fstl", 1, 0xdd, 2, Modrm, Mem, 0, 0}, /* %st0 --> mem double */{"fstl", 1, 0xddd0, _, ShortForm, FloatReg, 0, 0}, /* register */{"fists", 1, 0xdf, 2, Modrm, Mem, 0, 0}, /* %st0 --> mem word *//* store (with pop) */{"fstp", 1, 0xddd8, _, ShortForm, FloatReg, 0, 0}, /* register */{"fstps", 1, 0xd9, 3, Modrm, Mem, 0, 0}, /* %st0 --> mem float */{"fistpl", 1, 0xdb, 3, Modrm, Mem, 0, 0}, /* %st0 --> mem word */{"fstpl", 1, 0xdd, 3, Modrm, Mem, 0, 0}, /* %st0 --> mem double */{"fstpl", 1, 0xddd8, _, ShortForm, FloatReg, 0, 0}, /* register */{"fistps", 1, 0xdf, 3, Modrm, Mem, 0, 0}, /* %st0 --> mem dword */{"fistpq", 1, 0xdf, 7, Modrm, Mem, 0, 0}, /* %st0 --> mem qword */{"fstpt", 1, 0xdb, 7, Modrm, Mem, 0, 0}, /* %st0 --> mem efloat */{"fbstp", 1, 0xdf, 6, Modrm, Mem, 0, 0}, /* %st0 --> mem bcd *//* exchange %st<n> with %st0 */{"fxch", 1, 0xd9c8, _, ShortForm, FloatReg, 0, 0},/* comparison (without pop) */{"fcom", 1, 0xd8d0, _, ShortForm, FloatReg, 0, 0},{"fcoms", 1, 0xd8, 2, Modrm, Mem, 0, 0}, /* compare %st0, mem float */{"ficoml", 1, 0xda, 2, Modrm, Mem, 0, 0}, /* compare %st0, mem word */ {"fcoml", 1, 0xdc, 2, Modrm, Mem, 0, 0}, /* compare %st0, mem double */{"fcoml", 1, 0xd8d0, _, ShortForm, FloatReg, 0, 0},{"ficoms", 1, 0xde, 2, Modrm, Mem, 0, 0}, /* compare %st0, mem dword *//* comparison (with pop) */{"fcomp", 1, 0xd8d8, _, ShortForm, FloatReg, 0, 0},{"fcomps", 1, 0xd8, 3, Modrm, Mem, 0, 0}, /* compare %st0, mem float */{"ficompl", 1, 0xda, 3, Modrm, Mem, 0, 0}, /* compare %st0, mem word */ {"fcompl", 1, 0xdc, 3, Modrm, Mem, 0, 0}, /* compare %st0, mem double */{"fcompl", 1, 0xd8d8, _, ShortForm, FloatReg, 0, 0},{"ficomps", 1, 0xde, 3, Modrm, Mem, 0, 0}, /* compare %st0, mem dword */{"fcompp", 0, 0xded9, _, NoModrm, 0, 0, 0}, /* compare %st0, %st1 & pop twice *//* unordered comparison (with pop) */{"fucom", 1, 0xdde0, _, ShortForm, FloatReg, 0, 0},{"fucomp", 1, 0xdde8, _, ShortForm, FloatReg, 0, 0},{"fucompp", 0, 0xdae9, _, NoModrm, 0, 0, 0}, /* ucompare %st0, %st1 & pop twice */{"ftst", 0, 0xd9e4, _, NoModrm, 0, 0, 0}, /* test %st0 */{"fxam", 0, 0xd9e5, _, NoModrm, 0, 0, 0}, /* examine %st0 *//* load constants into %st0 */{"fld1", 0, 0xd9e8, _, NoModrm, 0, 0, 0}, /* %st0 <-- 1.0 */{"fldl2t", 0, 0xd9e9, _, NoModrm, 0, 0, 0}, /* %st0 <-- log2(10) */{"fldl2e", 0, 0xd9ea, _, NoModrm, 0, 0, 0}, /* %st0 <-- log2(e) */{"fldpi", 0, 0xd9eb, _, NoModrm, 0, 0, 0}, /* %st0 <-- pi */{"fldlg2", 0, 0xd9ec, _, NoModrm, 0, 0, 0}, /* %st0 <-- log10(2) */{"fldln2", 0, 0xd9ed, _, NoModrm, 0, 0, 0}, /* %st0 <-- ln(2) */{"fldz", 0, 0xd9ee, _, NoModrm, 0, 0, 0}, /* %st0 <-- 0.0 *//* arithmetic *//* add */{"fadd", 1, 0xd8c0, _, ShortForm, FloatReg, 0, 0},{"fadd", 2, 0xd8c0, _, ShortForm|FloatD, FloatReg, FloatAcc, 0},{"fadd", 0, 0xdcc1, _, NoModrm, 0, 0, 0}, /* alias for fadd %st, %st(1) */{"faddp", 1, 0xdac0, _, ShortForm, FloatReg, 0, 0},{"faddp", 2, 0xdac0, _, ShortForm|FloatD, FloatReg, FloatAcc, 0},{"faddp", 0, 0xdec1, _, NoModrm, 0, 0, 0}, /* alias for faddp %st, %st(1) */{"fadds", 1, 0xd8, 0, Modrm, Mem, 0, 0},{"fiaddl", 1, 0xda, 0, Modrm, Mem, 0, 0},{"faddl", 1, 0xdc, 0, Modrm, Mem, 0, 0},{"fiadds", 1, 0xde, 0, Modrm, Mem, 0, 0},/* sub *//* Note: intel has decided that certain of these operations are reversed in assembler syntax. */{"fsub", 1, 0xd8e0, _, ShortForm, FloatReg, 0, 0},{"fsub", 2, 0xd8e0, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fsub", 2, 0xdce8, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fsub", 2, 0xdce0, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fsub", 0, 0xdce1, _, NoModrm, 0, 0, 0},{"fsubp", 1, 0xdae0, _, ShortForm, FloatReg, 0, 0},{"fsubp", 2, 0xdae0, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fsubp", 2, 0xdee8, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fsubp", 2, 0xdee0, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fsubp", 0, 0xdee1, _, NoModrm, 0, 0, 0},{"fsubs", 1, 0xd8, 4, Modrm, Mem, 0, 0},{"fisubl", 1, 0xda, 4, Modrm, Mem, 0, 0},{"fsubl", 1, 0xdc, 4, Modrm, Mem, 0, 0},{"fisubs", 1, 0xde, 4, Modrm, Mem, 0, 0},/* sub reverse */{"fsubr", 1, 0xd8e8, _, ShortForm, FloatReg, 0, 0},{"fsubr", 2, 0xd8e8, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fsubr", 2, 0xdce0, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fsubr", 2, 0xdce8, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fsubr", 0, 0xdce9, _, NoModrm, 0, 0, 0},{"fsubrp", 1, 0xdae8, _, ShortForm, FloatReg, 0, 0},{"fsubrp", 2, 0xdae8, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fsubrp", 2, 0xdee0, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fsubrp", 2, 0xdee8, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fsubrp", 0, 0xdee9, _, NoModrm, 0, 0, 0},{"fsubrs", 1, 0xd8, 5, Modrm, Mem, 0, 0},{"fisubrl", 1, 0xda, 5, Modrm, Mem, 0, 0},{"fsubrl", 1, 0xdc, 5, Modrm, Mem, 0, 0},{"fisubrs", 1, 0xde, 5, Modrm, Mem, 0, 0},/* mul */{"fmul", 1, 0xd8c8, _, ShortForm, FloatReg, 0, 0},{"fmul", 2, 0xd8c8, _, ShortForm|FloatD, FloatReg, FloatAcc, 0},{"fmul", 0, 0xdcc9, _, NoModrm, 0, 0, 0},{"fmulp", 1, 0xdac8, _, ShortForm, FloatReg, 0, 0},{"fmulp", 2, 0xdac8, _, ShortForm|FloatD, FloatReg, FloatAcc, 0},{"fmulp", 0, 0xdec9, _, NoModrm, 0, 0, 0},{"fmuls", 1, 0xd8, 1, Modrm, Mem, 0, 0},{"fimull", 1, 0xda, 1, Modrm, Mem, 0, 0},{"fmull", 1, 0xdc, 1, Modrm, Mem, 0, 0},{"fimuls", 1, 0xde, 1, Modrm, Mem, 0, 0},/* div *//* Note: intel has decided that certain of these operations are reversed in assembler syntax. */{"fdiv", 1, 0xd8f0, _, ShortForm, FloatReg, 0, 0},{"fdiv", 2, 0xd8f0, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fdiv", 2, 0xdcf8, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fdiv", 2, 0xdcf0, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fdiv", 0, 0xdcf1, _, NoModrm, 0, 0, 0},{"fdivp", 1, 0xdaf0, _, ShortForm, FloatReg, 0, 0},{"fdivp", 2, 0xdaf0, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fdivp", 2, 0xdef8, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fdivp", 2, 0xdef0, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fdivp", 0, 0xdef1, _, NoModrm, 0, 0, 0},{"fdivs", 1, 0xd8, 6, Modrm, Mem, 0, 0},{"fidivl", 1, 0xda, 6, Modrm, Mem, 0, 0},{"fdivl", 1, 0xdc, 6, Modrm, Mem, 0, 0},{"fidivs", 1, 0xde, 6, Modrm, Mem, 0, 0},/* div reverse */{"fdivr", 1, 0xd8f8, _, ShortForm, FloatReg, 0, 0},{"fdivr", 2, 0xd8f8, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fdivr", 2, 0xdcf0, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fdivr", 2, 0xdcf8, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fdivr", 0, 0xdcf9, _, NoModrm, 0, 0, 0},{"fdivrp", 1, 0xdaf8, _, ShortForm, FloatReg, 0, 0},{"fdivrp", 2, 0xdaf8, _, ShortForm, FloatReg, FloatAcc, 0},#ifdef NON_BROKEN_OPCODES{"fdivrp", 2, 0xdef0, _, ShortForm, FloatAcc, FloatReg, 0},#else{"fdivrp", 2, 0xdef8, _, ShortForm, FloatAcc, FloatReg, 0},#endif{"fdivrp", 0, 0xdef9, _, NoModrm, 0, 0, 0},{"fdivrs", 1, 0xd8, 7, Modrm, Mem, 0, 0},{"fidivrl", 1, 0xda, 7, Modrm, Mem, 0, 0},{"fdivrl", 1, 0xdc, 7, Modrm, Mem, 0, 0},{"fidivrs", 1, 0xde, 7, Modrm, Mem, 0, 0},{"f2xm1", 0, 0xd9f0, _, NoModrm, 0, 0, 0},{"fyl2x", 0, 0xd9f1, _, NoModrm, 0, 0, 0},{"fptan", 0, 0xd9f2, _, NoModrm, 0, 0, 0},{"fpatan", 0, 0xd9f3, _, NoModrm, 0, 0, 0},{"fxtract", 0, 0xd9f4, _, NoModrm, 0, 0, 0},{"fprem1", 0, 0xd9f5, _, NoModrm, 0, 0, 0},{"fdecstp", 0, 0xd9f6, _, NoModrm, 0, 0, 0},{"fincstp", 0, 0xd9f7, _, NoModrm, 0, 0, 0},{"fprem", 0, 0xd9f8, _, NoModrm, 0, 0, 0},{"fyl2xp1", 0, 0xd9f9, _, NoModrm, 0, 0, 0},{"fsqrt", 0, 0xd9fa, _, NoModrm, 0, 0, 0},{"fsincos", 0, 0xd9fb, _, NoModrm, 0, 0, 0},{"frndint", 0, 0xd9fc, _, NoModrm, 0, 0, 0},{"fscale", 0, 0xd9fd, _, NoModrm, 0, 0, 0},{"fsin", 0, 0xd9fe, _, NoModrm, 0, 0, 0},{"fcos", 0, 0xd9ff, _, NoModrm, 0, 0, 0},{"fchs", 0, 0xd9e0, _, NoModrm, 0, 0, 0},{"fabs", 0, 0xd9e1, _, NoModrm, 0, 0, 0},/* processor control */{"fninit", 0, 0xdbe3, _, NoModrm, 0, 0, 0},{"finit", 0, 0xdbe3, _, NoModrm, 0, 0, 0},{"fldcw", 1, 0xd9, 5, Modrm, Mem, 0, 0},{"fnstcw", 1, 0xd9, 7, Modrm, Mem, 0, 0},{"fstcw", 1, 0xd9, 7, Modrm, Mem, 0, 0},{"fnstsw", 1, 0xdfe0, _, NoModrm, Acc, 0, 0},{"fnstsw", 1, 0xdd, 7, Modrm, Mem, 0, 0},{"fnstsw", 0, 0xdfe0, _, NoModrm, 0, 0, 0},{"fstsw", 1, 0xdfe0, _, NoModrm, Acc, 0, 0},{"fstsw", 1, 0xdd, 7, Modrm, Mem, 0, 0},{"fstsw", 0, 0xdfe0, _, NoModrm, 0, 0, 0},{"fnclex", 0, 0xdbe2, _, NoModrm, 0, 0, 0},{"fclex", 0, 0xdbe2, _, NoModrm, 0, 0, 0},/* We ignore the short format (287) versions of fstenv/fldenv & fsave/frstor instructions; i'm not sure how to add them or how they are different. My 386/387 book offers no details about this.*/{"fnstenv", 1, 0xd9, 6, Modrm, Mem, 0, 0},{"fstenv", 1, 0xd9, 6, Modrm, Mem, 0, 0},{"fldenv", 1, 0xd9, 4, Modrm, Mem, 0, 0},{"fnsave", 1, 0xdd, 6, Modrm, Mem, 0, 0},{"fsave", 1, 0xdd, 6, Modrm, Mem, 0, 0},{"frstor", 1, 0xdd, 4, Modrm, Mem, 0, 0},{"ffree", 1, 0xddc0, _, ShortForm, FloatReg, 0, 0},{"fnop", 0, 0xd9d0, _, NoModrm, 0, 0, 0},{"fwait", 0, 0x9b, _, NoModrm, 0, 0, 0},/* opcode prefixes; we allow them as seperate insns too (see prefix table below)*/{"aword", 0, 0x67, _, NoModrm, 0, 0, 0},{"word", 0, 0x66, _, NoModrm, 0, 0, 0},{"lock", 0, 0xf0, _, NoModrm, 0, 0, 0},{"cs", 0, 0x2e, _, NoModrm, 0, 0, 0},{"ds", 0, 0x3e, _, NoModrm, 0, 0, 0},{"es", 0, 0x26, _, NoModrm, 0, 0, 0},{"fs", 0, 0x64, _, NoModrm, 0, 0, 0},{"gs", 0, 0x65, _, NoModrm, 0, 0, 0},{"ss", 0, 0x36, _, NoModrm, 0, 0, 0},{"rep", 0, 0xf3, _, NoModrm, 0, 0, 0},{"repe", 0, 0xf3, _, NoModrm, 0, 0, 0},{ "repne", 0, 0xf2, _, NoModrm, 0, 0, 0},{"", 0, 0, 0, 0, 0, 0, 0} /* sentinal */};#undef _template *i386_optab_end = i386_optab + sizeof (i386_optab)/sizeof(i386_optab[0]);/* 386 register table */reg_entry i386_regtab[] = { /* 8 bit regs */ {"al", Reg8|Acc, 0}, {"cl", Reg8|ShiftCount, 1}, {"dl", Reg8, 2}, {"bl", Reg8, 3}, {"ah", Reg8, 4}, {"ch", Reg8, 5}, {"dh", Reg8, 6}, {"bh", Reg8, 7}, /* 16 bit regs */ {"ax", Reg16|Acc, 0}, {"cx", Reg16, 1}, {"dx", Reg16|InOutPortReg, 2}, {"bx", Reg16, 3}, {"sp", Reg16, 4}, {"bp", Reg16, 5}, {"si", Reg16, 6}, {"di", Reg16, 7}, /* 32 bit regs */ {"eax", Reg32|Acc, 0}, {"ecx", Reg32, 1}, {"edx", Reg32, 2}, {"ebx", Reg32, 3}, {"esp", Reg32, 4}, {"ebp", Reg32, 5}, {"esi", Reg32, 6}, {"edi", Reg32, 7}, /* segment registers */ {"es", SReg2, 0}, {"cs", SReg2, 1}, {"ss", SReg2, 2}, {"ds", SReg2, 3}, {"fs", SReg3, 4}, {"gs", SReg3, 5}, /* control registers */ {"cr0", Control, 0}, {"cr2", Control, 2}, {"cr3", Control, 3}, /* debug registers */ {"db0", Debug, 0}, {"db1", Debug, 1}, {"db2", Debug, 2}, {"db3", Debug, 3}, {"db6", Debug, 6}, {"db7", Debug, 7}, /* test registers */ {"tr6", Test, 6}, {"tr7", Test, 7}, /* float registers */ {"st(0)", FloatReg|FloatAcc, 0}, {"st", FloatReg|FloatAcc, 0}, {"st(1)", FloatReg, 1}, {"st(2)", FloatReg, 2}, {"st(3)", FloatReg, 3}, {"st(4)", FloatReg, 4}, {"st(5)", FloatReg, 5}, {"st(6)", FloatReg, 6}, {"st(7)", FloatReg, 7}};#define MAX_REG_NAME_SIZE 8 /* for parsing register names from input */reg_entry *i386_regtab_end = i386_regtab + sizeof(i386_regtab)/sizeof(i386_regtab[0]);/* segment stuff */seg_entry cs = { "cs", 0x2e };seg_entry ds = { "ds", 0x3e };seg_entry ss = { "ss", 0x36 };seg_entry es = { "es", 0x26 };seg_entry fs = { "fs", 0x64 };seg_entry gs = { "gs", 0x65 };seg_entry null = { "", 0x0 };/* This table is used to store the default segment register implied by all possible memory addressing modes. It is indexed by the mode & modrm entries of the modrm byte as follows: index = (mode<<3) | modrm;*/seg_entry *one_byte_segment_defaults[] = { /* mode 0 */ &ds, &ds, &ds, &ds, &null, &ds, &ds, &ds, /* mode 1 */ &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds, /* mode 2 */ &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds, /* mode 3 --- not a memory reference; never referenced */};seg_entry *two_byte_segment_defaults[] = { /* mode 0 */ &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds, /* mode 1 */ &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds, /* mode 2 */ &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds, /* mode 3 --- not a memory reference; never referenced */};prefix_entry i386_prefixtab[] = { { "addr16", 0x67 }, /* address size prefix ==> 16bit addressing * (How is this useful?) */#define WORD_PREFIX_OPCODE 0x66 { "data16", 0x66 }, /* operand size prefix */ { "lock", 0xf0 }, /* bus lock prefix */ { "wait", 0x9b }, /* wait for coprocessor */ { "cs", 0x2e }, { "ds", 0x3e }, /* segment overrides ... */ { "es", 0x26 }, { "fs", 0x64 }, { "gs", 0x65 }, { "ss", 0x36 },/* REPE & REPNE used to detect rep/repne with a non-string instruction */#define REPNE 0xf2#define REPE 0xf3 { "rep", 0xf3 }, { "repe", 0xf3 }, /* repeat string instructions */ { "repne", 0xf2 }};prefix_entry *i386_prefixtab_end = i386_prefixtab + sizeof(i386_prefixtab)/sizeof(i386_prefixtab[0]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -