from common import *
from operands import *

base = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ADD, Eb, Gb),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ADD, Ev, Gv),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.ADD, Gb, Eb),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.ADD, Gv, Ev),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.ADD, AL, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.ADD, eAX, Iv),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.PUSH_Sreg, ES),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.POP_Sreg, ES),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.OR, Eb, Gb),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.OR, Ev, Gv),
    0x0A: Opcode(0x0A, OpcodeType.Normal, Operation.OR, Gb, Eb),
    0x0B: Opcode(0x0B, OpcodeType.Normal, Operation.OR, Gv, Ev),
    0x0C: Opcode(0x0C, OpcodeType.Normal, Operation.OR, AL, Ib),
    0x0D: Opcode(0x0D, OpcodeType.Normal, Operation.OR, eAX, Iv),
    0x0E: Opcode(0x0E, OpcodeType.Normal, Operation.PUSH_Sreg, CS),
    0x0F: Opcode(0x0F, OpcodeType.Extension, Operation.Extension),
    0x10: Opcode(0x10, OpcodeType.Normal, Operation.ADC, Eb, Gb),
    0x11: Opcode(0x11, OpcodeType.Normal, Operation.ADC, Ev, Gv),
    0x12: Opcode(0x12, OpcodeType.Normal, Operation.ADC, Gb, Eb),
    0x13: Opcode(0x13, OpcodeType.Normal, Operation.ADC, Gv, Ev),
    0x14: Opcode(0x14, OpcodeType.Normal, Operation.ADC, AL, Ib),
    0x15: Opcode(0x15, OpcodeType.Normal, Operation.ADC, eAX, Iv),
    0x16: Opcode(0x16, OpcodeType.Normal, Operation.PUSH_Sreg, SS),
    0x17: Opcode(0x17, OpcodeType.Normal, Operation.POP_Sreg, SS),
    0x18: Opcode(0x18, OpcodeType.Normal, Operation.SBB, Eb, Gb),
    0x19: Opcode(0x19, OpcodeType.Normal, Operation.SBB, Ev, Gv),
    0x1A: Opcode(0x1A, OpcodeType.Normal, Operation.SBB, Gb, Eb),
    0x1B: Opcode(0x1B, OpcodeType.Normal, Operation.SBB, Gv, Ev),
    0x1C: Opcode(0x1C, OpcodeType.Normal, Operation.SBB, AL, Ib),
    0x1D: Opcode(0x1D, OpcodeType.Normal, Operation.SBB, eAX, Iv),
    0x1E: Opcode(0x1E, OpcodeType.Normal, Operation.PUSH_Sreg, DS),
    0x1F: Opcode(0x1F, OpcodeType.Normal, Operation.POP_Sreg, DS),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.AND, Eb, Gb),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.AND, Ev, Gv),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.AND, Gb, Eb),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.AND, Gv, Ev),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.AND, AL, Ib),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.AND, eAX, Iv),
    0x26: Opcode(0x26, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=ES),
    0x27: Opcode(0x27, OpcodeType.Normal, Operation.DAA),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.SUB, Eb, Gb),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.SUB, Ev, Gv),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.SUB, Gb, Eb),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.SUB, Gv, Ev),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.SUB, AL, Ib),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.SUB, eAX, Iv),
    0x2E: Opcode(0x2E, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=CS),
    0x2F: Opcode(0x2F, OpcodeType.Normal, Operation.DAS),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.XOR, Eb, Gb),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.XOR, Ev, Gv),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.XOR, Gb, Eb),
    0x33: Opcode(0x33, OpcodeType.Normal, Operation.XOR, Gv, Ev),
    0x34: Opcode(0x34, OpcodeType.Normal, Operation.XOR, AL, Ib),
    0x35: Opcode(0x35, OpcodeType.Normal, Operation.XOR, eAX, Iv),
    0x36: Opcode(0x36, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=SS),
    0x37: Opcode(0x37, OpcodeType.Normal, Operation.AAA),
    0x38: Opcode(0x38, OpcodeType.Normal, Operation.CMP, Eb, Gb),
    0x39: Opcode(0x39, OpcodeType.Normal, Operation.CMP, Ev, Gv),
    0x3A: Opcode(0x3A, OpcodeType.Normal, Operation.CMP, Gb, Eb),
    0x3B: Opcode(0x3B, OpcodeType.Normal, Operation.CMP, Gv, Ev),
    0x3C: Opcode(0x3C, OpcodeType.Normal, Operation.CMP, AL, Ib),
    0x3D: Opcode(0x3D, OpcodeType.Normal, Operation.CMP, eAX, Iv),
    0x3E: Opcode(0x3E, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=DS),
    0x3F: Opcode(0x3F, OpcodeType.Normal, Operation.AAS),
    0x40: Opcode(0x40, OpcodeType.Normal, Operation.INC, eAX),
    0x41: Opcode(0x41, OpcodeType.Normal, Operation.INC, eCX),
    0x42: Opcode(0x42, OpcodeType.Normal, Operation.INC, eDX),
    0x43: Opcode(0x43, OpcodeType.Normal, Operation.INC, eBX),
    0x44: Opcode(0x44, OpcodeType.Normal, Operation.INC, eSP),
    0x45: Opcode(0x45, OpcodeType.Normal, Operation.INC, eBP),
    0x46: Opcode(0x46, OpcodeType.Normal, Operation.INC, eSI),
    0x47: Opcode(0x47, OpcodeType.Normal, Operation.INC, eDI),
    0x48: Opcode(0x48, OpcodeType.Normal, Operation.DEC, eAX),
    0x49: Opcode(0x49, OpcodeType.Normal, Operation.DEC, eCX),
    0x4A: Opcode(0x4A, OpcodeType.Normal, Operation.DEC, eDX),
    0x4B: Opcode(0x4B, OpcodeType.Normal, Operation.DEC, eBX),
    0x4C: Opcode(0x4C, OpcodeType.Normal, Operation.DEC, eSP),
    0x4D: Opcode(0x4D, OpcodeType.Normal, Operation.DEC, eBP),
    0x4E: Opcode(0x4E, OpcodeType.Normal, Operation.DEC, eSI),
    0x4F: Opcode(0x4F, OpcodeType.Normal, Operation.DEC, eDI),
    0x50: Opcode(0x50, OpcodeType.Normal, Operation.PUSH, eAX),
    0x51: Opcode(0x51, OpcodeType.Normal, Operation.PUSH, eCX),
    0x52: Opcode(0x52, OpcodeType.Normal, Operation.PUSH, eDX),
    0x53: Opcode(0x53, OpcodeType.Normal, Operation.PUSH, eBX),
    0x54: Opcode(0x54, OpcodeType.Normal, Operation.PUSH, eSP),
    0x55: Opcode(0x55, OpcodeType.Normal, Operation.PUSH, eBP),
    0x56: Opcode(0x56, OpcodeType.Normal, Operation.PUSH, eSI),
    0x57: Opcode(0x57, OpcodeType.Normal, Operation.PUSH, eDI),
    0x58: Opcode(0x58, OpcodeType.Normal, Operation.POP, eAX),
    0x59: Opcode(0x59, OpcodeType.Normal, Operation.POP, eCX),
    0x5A: Opcode(0x5A, OpcodeType.Normal, Operation.POP, eDX),
    0x5B: Opcode(0x5B, OpcodeType.Normal, Operation.POP, eBX),
    0x5C: Opcode(0x5C, OpcodeType.Normal, Operation.POP, eSP),
    0x5D: Opcode(0x5D, OpcodeType.Normal, Operation.POP, eBP),
    0x5E: Opcode(0x5E, OpcodeType.Normal, Operation.POP, eSI),
    0x5F: Opcode(0x5F, OpcodeType.Normal, Operation.POP, eDI),
    0x60: Opcode(0x60, OpcodeType.Normal, Operation.PUSHA),
    0x61: Opcode(0x61, OpcodeType.Normal, Operation.POPA),
    0x62: Opcode(0x62, OpcodeType.Normal, Operation.BOUND, Gv, Ma),
    0x63: Opcode(0x63, OpcodeType.Normal, Operation.ARPL, Ew, Gw),
    0x64: Opcode(0x64, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=FS),
    0x65: Opcode(0x65, OpcodeType.SegmentPrefix, Operation.Segment_Prefix, op1=GS),
    0x66: Opcode(0x66, OpcodeType.OperandSizePrefix, Operation.OperandSize_Prefix),
    0x67: Opcode(0x67, OpcodeType.AddressSizePrefix, Operation.AddressSize_Prefix),
    0x68: Opcode(0x68, OpcodeType.Normal, Operation.PUSH, Iv),
    0x69: Opcode(0x69, OpcodeType.Normal, Operation.IMUL, Gv, Ev, Iv),
    0x6A: Opcode(0x6A, OpcodeType.Normal, Operation.PUSH, Ib),
    0x6B: Opcode(0x6B, OpcodeType.Normal, Operation.IMUL, Gv, Ev, Ib),
    0x6C: Opcode(0x6C, OpcodeType.Normal, Operation.INS, Yb, DX),
    0x6D: Opcode(0x6D, OpcodeType.Normal, Operation.INS, Yv, DX),
    0x6E: Opcode(0x6E, OpcodeType.Normal, Operation.OUTS, DX, Xb),
    0x6F: Opcode(0x6F, OpcodeType.Normal, Operation.OUTS, DX, Yv),
    0x70: Opcode(0x70, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Overflow),
    0x71: Opcode(0x71, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.NotOverflow),
    0x72: Opcode(0x72, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Below),
    0x73: Opcode(0x73, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.AboveOrEqual),
    0x74: Opcode(0x74, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Equal),
    0x75: Opcode(0x75, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.NotEqual),
    0x76: Opcode(0x76, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.BelowOrEqual),
    0x77: Opcode(0x77, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Above),
    0x78: Opcode(0x78, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Sign),
    0x79: Opcode(0x79, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.NotSign),
    0x7A: Opcode(0x7A, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Parity),
    0x7B: Opcode(0x7B, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.NotParity),
    0x7C: Opcode(0x7C, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Less),
    0x7D: Opcode(0x7D, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.GreaterOrEqual),
    0x7E: Opcode(0x7E, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.LessOrEqual),
    0x7F: Opcode(0x7F, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.Greater),
    0x80: Opcode(0x80, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x81: Opcode(0x81, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x82: Opcode(0x82, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x83: Opcode(0x83, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x84: Opcode(0x84, OpcodeType.Normal, Operation.TEST, Gb, Eb),
    0x85: Opcode(0x85, OpcodeType.Normal, Operation.TEST, Gv, Ev),
    0x86: Opcode(0x86, OpcodeType.Normal, Operation.XCHG, Eb, Gb),
    0x87: Opcode(0x87, OpcodeType.Normal, Operation.XCHG, Ev, Gv),
    0x88: Opcode(0x88, OpcodeType.Normal, Operation.MOV, Eb, Gb),
    0x89: Opcode(0x89, OpcodeType.Normal, Operation.MOV, Ev, Gv),
    0x8A: Opcode(0x8A, OpcodeType.Normal, Operation.MOV, Gb, Eb),
    0x8B: Opcode(0x8B, OpcodeType.Normal, Operation.MOV, Gv, Ev),
    0x8C: Opcode(0x8C, OpcodeType.Normal, Operation.MOV_Sreg, Ew, Sw),
    0x8D: Opcode(0x8D, OpcodeType.Normal, Operation.LEA, Gv, M),
    0x8E: Opcode(0x8E, OpcodeType.Normal, Operation.MOV_Sreg, Sw, Ew),
    0x8F: Opcode(0x8F, OpcodeType.Normal, Operation.POP, Ev),
    0x90: Opcode(0x90, OpcodeType.Normal, Operation.NOP),
    0x91: Opcode(0x91, OpcodeType.Normal, Operation.XCHG, eCX, eAX),
    0x92: Opcode(0x92, OpcodeType.Normal, Operation.XCHG, eDX, eAX),
    0x93: Opcode(0x93, OpcodeType.Normal, Operation.XCHG, eBX, eAX),
    0x94: Opcode(0x94, OpcodeType.Normal, Operation.XCHG, eSP, eAX),
    0x95: Opcode(0x95, OpcodeType.Normal, Operation.XCHG, eBP, eAX),
    0x96: Opcode(0x96, OpcodeType.Normal, Operation.XCHG, eSI, eAX),
    0x97: Opcode(0x97, OpcodeType.Normal, Operation.XCHG, eDI, eAX),
    0x98: Opcode(0x98, OpcodeType.Normal, Operation.CBW),
    0x99: Opcode(0x99, OpcodeType.Normal, Operation.CWD),
    0x9A: Opcode(0x9A, OpcodeType.Normal, Operation.CALL_Far, Ap),
    0x9B: Opcode(0x9B, OpcodeType.Normal, Operation.WAIT),
    0x9C: Opcode(0x9C, OpcodeType.Normal, Operation.PUSHF),
    0x9D: Opcode(0x9D, OpcodeType.Normal, Operation.POPF),
    0x9E: Opcode(0x9E, OpcodeType.Normal, Operation.SAHF),
    0x9F: Opcode(0x9F, OpcodeType.Normal, Operation.LAHF),
    0xA0: Opcode(0xA0, OpcodeType.Normal, Operation.MOV, AL, Ob),
    0xA1: Opcode(0xA1, OpcodeType.Normal, Operation.MOV, eAX, Ov),
    0xA2: Opcode(0xA2, OpcodeType.Normal, Operation.MOV, Ob, AL),
    0xA3: Opcode(0xA3, OpcodeType.Normal, Operation.MOV, Ov, eAX),
    0xA4: Opcode(0xA4, OpcodeType.Normal, Operation.MOVS, Yb, Xb),
    0xA5: Opcode(0xA5, OpcodeType.Normal, Operation.MOVS, Yv, Xv),
    0xA6: Opcode(0xA6, OpcodeType.Normal, Operation.CMPS, Xb, Yb),
    0xA7: Opcode(0xA7, OpcodeType.Normal, Operation.CMPS, Xv, Yv),
    0xA8: Opcode(0xA8, OpcodeType.Normal, Operation.TEST, AL, Ib),
    0xA9: Opcode(0xA9, OpcodeType.Normal, Operation.TEST, eAX, Iv),
    0xAA: Opcode(0xAA, OpcodeType.Normal, Operation.STOS, Yb, AL),
    0xAB: Opcode(0xAB, OpcodeType.Normal, Operation.STOS, Yv, eAX),
    0xAC: Opcode(0xAC, OpcodeType.Normal, Operation.LODS, AL, Xb),
    0xAD: Opcode(0xAD, OpcodeType.Normal, Operation.LODS, eAX, Xv),
    0xAE: Opcode(0xAE, OpcodeType.Normal, Operation.SCAS, AL, Yb),
    0xAF: Opcode(0xAF, OpcodeType.Normal, Operation.SCAS, eAX, Yv),
    0xB0: Opcode(0xB0, OpcodeType.Normal, Operation.MOV, AL, Ib),
    0xB1: Opcode(0xB1, OpcodeType.Normal, Operation.MOV, CL, Ib),
    0xB2: Opcode(0xB2, OpcodeType.Normal, Operation.MOV, DL, Ib),
    0xB3: Opcode(0xB3, OpcodeType.Normal, Operation.MOV, BL, Ib),
    0xB4: Opcode(0xB4, OpcodeType.Normal, Operation.MOV, AH, Ib),
    0xB5: Opcode(0xB5, OpcodeType.Normal, Operation.MOV, CH, Ib),
    0xB6: Opcode(0xB6, OpcodeType.Normal, Operation.MOV, DH, Ib),
    0xB7: Opcode(0xB7, OpcodeType.Normal, Operation.MOV, BH, Ib),
    0xB8: Opcode(0xB8, OpcodeType.Normal, Operation.MOV, eAX, Iv),
    0xB9: Opcode(0xB9, OpcodeType.Normal, Operation.MOV, eCX, Iv),
    0xBA: Opcode(0xBA, OpcodeType.Normal, Operation.MOV, eDX, Iv),
    0xBB: Opcode(0xBB, OpcodeType.Normal, Operation.MOV, eBX, Iv),
    0xBC: Opcode(0xBC, OpcodeType.Normal, Operation.MOV, eSP, Iv),
    0xBD: Opcode(0xBD, OpcodeType.Normal, Operation.MOV, eBP, Iv),
    0xBE: Opcode(0xBE, OpcodeType.Normal, Operation.MOV, eSI, Iv),
    0xBF: Opcode(0xBF, OpcodeType.Normal, Operation.MOV, eDI, Iv),
    0xC0: Opcode(0xC0, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xC1: Opcode(0xC1, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xC2: Opcode(0xC2, OpcodeType.Normal, Operation.RET_Near, Iw),
    0xC3: Opcode(0xC3, OpcodeType.Normal, Operation.RET_Near),
    0xC4: Opcode(0xC4, OpcodeType.Normal, Operation.LXS, ES, Gv, Mp),
    0xC5: Opcode(0xC5, OpcodeType.Normal, Operation.LXS, DS, Gv, Mp),
    0xC6: Opcode(0xC6, OpcodeType.Normal, Operation.MOV, Eb, Ib),
    0xC7: Opcode(0xC7, OpcodeType.Normal, Operation.MOV, Ev, Iv),
    0xC8: Opcode(0xC8, OpcodeType.Normal, Operation.ENTER, Iw, Ib2),
    0xC9: Opcode(0xC9, OpcodeType.Normal, Operation.LEAVE),
    0xCA: Opcode(0xCA, OpcodeType.Normal, Operation.RET_Far, Iw),
    0xCB: Opcode(0xCB, OpcodeType.Normal, Operation.RET_Far),
    0xCC: Opcode(0xCC, OpcodeType.Normal, Operation.INT3),
    0xCD: Opcode(0xCD, OpcodeType.Normal, Operation.INT, Ib),
    0xCE: Opcode(0xCE, OpcodeType.Normal, Operation.INTO),
    0xCF: Opcode(0xCF, OpcodeType.Normal, Operation.IRET),
    0xD0: Opcode(0xD0, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xD1: Opcode(0xD1, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xD2: Opcode(0xD2, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xD3: Opcode(0xD3, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xD4: Opcode(0xD4, OpcodeType.Normal, Operation.AAM, Ib),
    0xD5: Opcode(0xD5, OpcodeType.Normal, Operation.AAD, Ib),
    0xD6: Opcode(0xD6, OpcodeType.Normal, Operation.SALC),
    0xD7: Opcode(0xD7, OpcodeType.Normal, Operation.XLAT),
    0xD8: Opcode(0xD8, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xD9: Opcode(0xD9, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDA: Opcode(0xDA, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDB: Opcode(0xDB, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDC: Opcode(0xDC, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDD: Opcode(0xDD, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDE: Opcode(0xDE, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xDF: Opcode(0xDF, OpcodeType.X87Extension, Operation.Extension_ModRM_X87),
    0xE0: Opcode(0xE0, OpcodeType.Normal, Operation.LOOP, Jb, cc=JumpCondition.NotEqual),
    0xE1: Opcode(0xE1, OpcodeType.Normal, Operation.LOOP, Jb, cc=JumpCondition.Equal),
    0xE2: Opcode(0xE2, OpcodeType.Normal, Operation.LOOP, Jb, cc=JumpCondition.Always),
    0xE3: Opcode(0xE3, OpcodeType.Normal, Operation.Jcc, Jb, cc=JumpCondition.CXZero),
    0xE4: Opcode(0xE4, OpcodeType.Normal, Operation.IN, AL, Ib),
    0xE5: Opcode(0xE5, OpcodeType.Normal, Operation.IN, eAX, Ib),
    0xE6: Opcode(0xE6, OpcodeType.Normal, Operation.OUT, Ib, AL),
    0xE7: Opcode(0xE7, OpcodeType.Normal, Operation.OUT, Ib, eAX),
    0xE8: Opcode(0xE8, OpcodeType.Normal, Operation.CALL_Near, Jv),
    0xE9: Opcode(0xE9, OpcodeType.Normal, Operation.JMP_Near, Jv),
    0xEA: Opcode(0xEA, OpcodeType.Normal, Operation.JMP_Far, Ap),
    0xEB: Opcode(0xEB, OpcodeType.Normal, Operation.JMP_Near, Jb),
    0xEC: Opcode(0xEC, OpcodeType.Normal, Operation.IN, AL, DX),
    0xED: Opcode(0xED, OpcodeType.Normal, Operation.IN, eAX, DX),
    0xEE: Opcode(0xEE, OpcodeType.Normal, Operation.OUT, DX, AL),
    0xEF: Opcode(0xEF, OpcodeType.Normal, Operation.OUT, DX, eAX),
    0xF0: Opcode(0xF0, OpcodeType.LockPrefix, Operation.Lock_Prefix),
    0xF1: Opcode(0xF1, OpcodeType.Invalid, Operation.Invalid),
    0xF2: Opcode(0xF2, OpcodeType.RepNEPrefix, Operation.RepNE_Prefix),
    0xF3: Opcode(0xF3, OpcodeType.RepPrefix, Operation.Rep_Prefix),
    0xF4: Opcode(0xF4, OpcodeType.Normal, Operation.HLT),
    0xF5: Opcode(0xF5, OpcodeType.Normal, Operation.CMC),
    0xF6: Opcode(0xF6, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xF7: Opcode(0xF7, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xF8: Opcode(0xF8, OpcodeType.Normal, Operation.CLC),
    0xF9: Opcode(0xF9, OpcodeType.Normal, Operation.STC),
    0xFA: Opcode(0xFA, OpcodeType.Normal, Operation.CLI),
    0xFB: Opcode(0xFB, OpcodeType.Normal, Operation.STI),
    0xFC: Opcode(0xFC, OpcodeType.Normal, Operation.CLD),
    0xFD: Opcode(0xFD, OpcodeType.Normal, Operation.STD),
    0xFE: Opcode(0xFE, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xFF: Opcode(0xFF, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
}

prefix_0F = {
    0x00: Opcode(0x00, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x01: Opcode(0x01, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.LAR, Gv, Ew),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.LSL, Gv, Ew),
    0x04: Opcode(0x04, OpcodeType.Invalid, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.Invalid, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.CLTS),
    0x07: Opcode(0x07, OpcodeType.Invalid, Operation.Invalid),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.INVD),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.WBINVD),
    0x0A: Opcode(0x0A, OpcodeType.Invalid, Operation.Invalid),
    0x0B: Opcode(0x0B, OpcodeType.Invalid, Operation.Invalid),
    0x0C: Opcode(0x0C, OpcodeType.Invalid, Operation.Invalid),
    0x0D: Opcode(0x0D, OpcodeType.Invalid, Operation.Invalid),
    0x0E: Opcode(0x0E, OpcodeType.Invalid, Operation.Invalid),
    0x0F: Opcode(0x0F, OpcodeType.Invalid, Operation.Invalid),
    0x10: Opcode(0x10, OpcodeType.Invalid, Operation.Invalid),
    0x11: Opcode(0x11, OpcodeType.Invalid, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.Invalid, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.Invalid, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.Invalid, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.Invalid, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.Invalid, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.Invalid, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.Invalid, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.Invalid, Operation.Invalid),
    0x1A: Opcode(0x1A, OpcodeType.Invalid, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.Invalid, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.Invalid, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.Invalid, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.Invalid, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.Invalid, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.MOV_CR, Rd, Cd),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.MOV_DR, Rd, Dd),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.MOV_CR, Cd, Rd),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.MOV_DR, Dd, Rd),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.MOV_TR, Rd, Td),
    0x25: Opcode(0x25, OpcodeType.Invalid, Operation.Invalid),
    0x26: Opcode(0x26, OpcodeType.Normal, Operation.MOV_TR, Td, Rd),
    0x27: Opcode(0x27, OpcodeType.Invalid, Operation.Invalid),
    0x28: Opcode(0x28, OpcodeType.Invalid, Operation.Invalid),
    0x29: Opcode(0x29, OpcodeType.Invalid, Operation.Invalid),
    0x2A: Opcode(0x2A, OpcodeType.Invalid, Operation.Invalid),
    0x2B: Opcode(0x2B, OpcodeType.Invalid, Operation.Invalid),
    0x2C: Opcode(0x2C, OpcodeType.Invalid, Operation.Invalid),
    0x2D: Opcode(0x2D, OpcodeType.Invalid, Operation.Invalid),
    0x2E: Opcode(0x2E, OpcodeType.Invalid, Operation.Invalid),
    0x2F: Opcode(0x2F, OpcodeType.Invalid, Operation.Invalid),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.WRMSR),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.RDTSC),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.RDMSR),
    0x33: Opcode(0x33, OpcodeType.Invalid, Operation.Invalid),
    0x34: Opcode(0x34, OpcodeType.Invalid, Operation.Invalid),
    0x35: Opcode(0x35, OpcodeType.Invalid, Operation.Invalid),
    0x36: Opcode(0x36, OpcodeType.Invalid, Operation.Invalid),
    0x37: Opcode(0x37, OpcodeType.Invalid, Operation.Invalid),
    0x38: Opcode(0x38, OpcodeType.Invalid, Operation.Invalid),
    0x39: Opcode(0x39, OpcodeType.Invalid, Operation.Invalid),
    0x3A: Opcode(0x3A, OpcodeType.Invalid, Operation.Invalid),
    0x3B: Opcode(0x3B, OpcodeType.Invalid, Operation.Invalid),
    0x3C: Opcode(0x3C, OpcodeType.Invalid, Operation.Invalid),
    0x3D: Opcode(0x3D, OpcodeType.Invalid, Operation.Invalid),
    0x3E: Opcode(0x3E, OpcodeType.Invalid, Operation.Invalid),
    0x3F: Opcode(0x3F, OpcodeType.Invalid, Operation.Invalid),
    0x40: Opcode(0x40, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Overflow),
    0x41: Opcode(0x41, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.NotOverflow),
    0x42: Opcode(0x42, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Below),
    0x43: Opcode(0x43, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.AboveOrEqual),
    0x44: Opcode(0x44, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Equal),
    0x45: Opcode(0x45, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.NotEqual),
    0x46: Opcode(0x46, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.BelowOrEqual),
    0x47: Opcode(0x47, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Above),
    0x48: Opcode(0x48, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Sign),
    0x49: Opcode(0x49, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.NotSign),
    0x4A: Opcode(0x4A, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Parity),
    0x4B: Opcode(0x4B, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.NotParity),
    0x4C: Opcode(0x4C, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Less),
    0x4D: Opcode(0x4D, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.GreaterOrEqual),
    0x4E: Opcode(0x4E, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.LessOrEqual),
    0x4F: Opcode(0x4F, OpcodeType.Normal, Operation.CMOVcc, Gv, Ev, cc=JumpCondition.Greater),
    0x50: Opcode(0x50, OpcodeType.Invalid, Operation.Invalid),
    0x51: Opcode(0x51, OpcodeType.Invalid, Operation.Invalid),
    0x52: Opcode(0x52, OpcodeType.Invalid, Operation.Invalid),
    0x53: Opcode(0x53, OpcodeType.Invalid, Operation.Invalid),
    0x54: Opcode(0x54, OpcodeType.Invalid, Operation.Invalid),
    0x55: Opcode(0x55, OpcodeType.Invalid, Operation.Invalid),
    0x56: Opcode(0x56, OpcodeType.Invalid, Operation.Invalid),
    0x57: Opcode(0x57, OpcodeType.Invalid, Operation.Invalid),
    0x58: Opcode(0x58, OpcodeType.Invalid, Operation.Invalid),
    0x59: Opcode(0x59, OpcodeType.Invalid, Operation.Invalid),
    0x5A: Opcode(0x5A, OpcodeType.Invalid, Operation.Invalid),
    0x5B: Opcode(0x5B, OpcodeType.Invalid, Operation.Invalid),
    0x5C: Opcode(0x5C, OpcodeType.Invalid, Operation.Invalid),
    0x5D: Opcode(0x5D, OpcodeType.Invalid, Operation.Invalid),
    0x5E: Opcode(0x5E, OpcodeType.Invalid, Operation.Invalid),
    0x5F: Opcode(0x5F, OpcodeType.Invalid, Operation.Invalid),
    0x60: Opcode(0x60, OpcodeType.Invalid, Operation.Invalid),
    0x61: Opcode(0x61, OpcodeType.Invalid, Operation.Invalid),
    0x62: Opcode(0x62, OpcodeType.Invalid, Operation.Invalid),
    0x63: Opcode(0x63, OpcodeType.Invalid, Operation.Invalid),
    0x64: Opcode(0x64, OpcodeType.Invalid, Operation.Invalid),
    0x65: Opcode(0x65, OpcodeType.Invalid, Operation.Invalid),
    0x66: Opcode(0x66, OpcodeType.Invalid, Operation.Invalid),
    0x67: Opcode(0x67, OpcodeType.Invalid, Operation.Invalid),
    0x68: Opcode(0x68, OpcodeType.Invalid, Operation.Invalid),
    0x69: Opcode(0x69, OpcodeType.Invalid, Operation.Invalid),
    0x6A: Opcode(0x6A, OpcodeType.Invalid, Operation.Invalid),
    0x6B: Opcode(0x6B, OpcodeType.Invalid, Operation.Invalid),
    0x6C: Opcode(0x6C, OpcodeType.Invalid, Operation.Invalid),
    0x6D: Opcode(0x6D, OpcodeType.Invalid, Operation.Invalid),
    0x6E: Opcode(0x6E, OpcodeType.Invalid, Operation.Invalid),
    0x6F: Opcode(0x6F, OpcodeType.Invalid, Operation.Invalid),
    0x70: Opcode(0x70, OpcodeType.Invalid, Operation.Invalid),
    0x71: Opcode(0x71, OpcodeType.Invalid, Operation.Invalid),
    0x72: Opcode(0x72, OpcodeType.Invalid, Operation.Invalid),
    0x73: Opcode(0x73, OpcodeType.Invalid, Operation.Invalid),
    0x74: Opcode(0x74, OpcodeType.Invalid, Operation.Invalid),
    0x75: Opcode(0x75, OpcodeType.Invalid, Operation.Invalid),
    0x76: Opcode(0x76, OpcodeType.Invalid, Operation.Invalid),
    0x77: Opcode(0x77, OpcodeType.Invalid, Operation.Invalid),
    0x78: Opcode(0x78, OpcodeType.Invalid, Operation.Invalid),
    0x79: Opcode(0x79, OpcodeType.Invalid, Operation.Invalid),
    0x7A: Opcode(0x7A, OpcodeType.Invalid, Operation.Invalid),
    0x7B: Opcode(0x7B, OpcodeType.Invalid, Operation.Invalid),
    0x7C: Opcode(0x7C, OpcodeType.Invalid, Operation.Invalid),
    0x7D: Opcode(0x7D, OpcodeType.Invalid, Operation.Invalid),
    0x7E: Opcode(0x7E, OpcodeType.Invalid, Operation.Invalid),
    0x7F: Opcode(0x7F, OpcodeType.Invalid, Operation.Invalid),
    0x80: Opcode(0x80, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Overflow),
    0x81: Opcode(0x81, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.NotOverflow),
    0x82: Opcode(0x82, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Below),
    0x83: Opcode(0x83, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.AboveOrEqual),
    0x84: Opcode(0x84, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Equal),
    0x85: Opcode(0x85, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.NotEqual),
    0x86: Opcode(0x86, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.BelowOrEqual),
    0x87: Opcode(0x87, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Above),
    0x88: Opcode(0x88, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Sign),
    0x89: Opcode(0x89, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.NotSign),
    0x8A: Opcode(0x8A, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Parity),
    0x8B: Opcode(0x8B, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.NotParity),
    0x8C: Opcode(0x8C, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Less),
    0x8D: Opcode(0x8D, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.GreaterOrEqual),
    0x8E: Opcode(0x8E, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.LessOrEqual),
    0x8F: Opcode(0x8F, OpcodeType.Normal, Operation.Jcc, Jv, cc=JumpCondition.Greater),
    0x90: Opcode(0x90, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Overflow),
    0x91: Opcode(0x91, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.NotOverflow),
    0x92: Opcode(0x92, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Below),
    0x93: Opcode(0x93, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.AboveOrEqual),
    0x94: Opcode(0x94, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Equal),
    0x95: Opcode(0x95, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.NotEqual),
    0x96: Opcode(0x96, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.BelowOrEqual),
    0x97: Opcode(0x97, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Above),
    0x98: Opcode(0x98, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Sign),
    0x99: Opcode(0x99, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.NotSign),
    0x9A: Opcode(0x9A, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Parity),
    0x9B: Opcode(0x9B, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.NotParity),
    0x9C: Opcode(0x9C, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Less),
    0x9D: Opcode(0x9D, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.GreaterOrEqual),
    0x9E: Opcode(0x9E, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.LessOrEqual),
    0x9F: Opcode(0x9F, OpcodeType.Normal, Operation.SETcc, Eb, cc=JumpCondition.Greater),
    0xA0: Opcode(0xA0, OpcodeType.Normal, Operation.PUSH_Sreg, FS),
    0xA1: Opcode(0xA1, OpcodeType.Normal, Operation.POP_Sreg, FS),
    0xA2: Opcode(0xA2, OpcodeType.Normal, Operation.CPUID),
    0xA3: Opcode(0xA3, OpcodeType.Normal, Operation.BT, Ev, Gv),
    0xA4: Opcode(0xA4, OpcodeType.Normal, Operation.SHLD, Ev, Gv, Ib),
    0xA5: Opcode(0xA5, OpcodeType.Normal, Operation.SHLD, Ev, Gv, CL),
    0xA6: Opcode(0xA6, OpcodeType.Invalid, Operation.Invalid),
    0xA7: Opcode(0xA7, OpcodeType.Invalid, Operation.Invalid),
    0xA8: Opcode(0xA8, OpcodeType.Normal, Operation.PUSH_Sreg, GS),
    0xA9: Opcode(0xA9, OpcodeType.Normal, Operation.POP_Sreg, GS),
    0xAA: Opcode(0xAA, OpcodeType.Normal, Operation.RSM),
    0xAB: Opcode(0xAB, OpcodeType.Normal, Operation.BTS, Ev, Gv),
    0xAC: Opcode(0xAC, OpcodeType.Normal, Operation.SHRD, Ev, Gv, Ib),
    0xAD: Opcode(0xAD, OpcodeType.Normal, Operation.SHRD, Ev, Gv, CL),
    0xAE: Opcode(0xAE, OpcodeType.Invalid, Operation.Invalid),
    0xAF: Opcode(0xAF, OpcodeType.Normal, Operation.IMUL, Gv, Ev),
    0xB0: Opcode(0xB0, OpcodeType.Normal, Operation.CMPXCHG, Eb, Gb),
    0xB1: Opcode(0xB1, OpcodeType.Normal, Operation.CMPXCHG, Ev, Gv),
    0xB2: Opcode(0xB2, OpcodeType.Normal, Operation.LXS, SS, Gv, Mp),
    0xB3: Opcode(0xB3, OpcodeType.Normal, Operation.BTR, Ev, Gv),
    0xB4: Opcode(0xB4, OpcodeType.Normal, Operation.LXS, FS, Gv, Mp),
    0xB5: Opcode(0xB5, OpcodeType.Normal, Operation.LXS, GS, Gv, Mp),
    0xB6: Opcode(0xB6, OpcodeType.Normal, Operation.MOVZX, Gv, Eb),
    0xB7: Opcode(0xB7, OpcodeType.Normal, Operation.MOVZX, Gv, Ew),
    0xB8: Opcode(0xB8, OpcodeType.Invalid, Operation.Invalid),
    0xB9: Opcode(0xB9, OpcodeType.Invalid, Operation.Invalid),
    0xBA: Opcode(0xBA, OpcodeType.ModRMRegExtension, Operation.Extension_ModRM_Reg),
    0xBB: Opcode(0xBB, OpcodeType.Normal, Operation.BTC, Ev, Gv),
    0xBC: Opcode(0xBC, OpcodeType.Normal, Operation.BSF, Gv, Ev),
    0xBD: Opcode(0xBD, OpcodeType.Normal, Operation.BSR, Gv, Ev),
    0xBE: Opcode(0xBE, OpcodeType.Normal, Operation.MOVSX, Gv, Eb),
    0xBF: Opcode(0xBF, OpcodeType.Normal, Operation.MOVSX, Gv, Ew),
    0xC0: Opcode(0xC0, OpcodeType.Normal, Operation.XADD, Eb, Gb),
    0xC1: Opcode(0xC1, OpcodeType.Normal, Operation.XADD, Ev, Gv),
    0xC2: Opcode(0xC2, OpcodeType.Invalid, Operation.Invalid),
    0xC3: Opcode(0xC3, OpcodeType.Invalid, Operation.Invalid),
    0xC4: Opcode(0xC4, OpcodeType.Invalid, Operation.Invalid),
    0xC5: Opcode(0xC5, OpcodeType.Invalid, Operation.Invalid),
    0xC6: Opcode(0xC6, OpcodeType.Invalid, Operation.Invalid),
    0xC7: Opcode(0xC7, OpcodeType.Normal, Operation.CMPXCHG8B, Mq),
    0xC8: Opcode(0xC8, OpcodeType.Normal, Operation.BSWAP, EAX),
    0xC9: Opcode(0xC9, OpcodeType.Normal, Operation.BSWAP, ECX),
    0xCA: Opcode(0xCA, OpcodeType.Normal, Operation.BSWAP, EDX),
    0xCB: Opcode(0xCB, OpcodeType.Normal, Operation.BSWAP, EBX),
    0xCC: Opcode(0xCC, OpcodeType.Normal, Operation.BSWAP, ESP),
    0xCD: Opcode(0xCD, OpcodeType.Normal, Operation.BSWAP, EBP),
    0xCE: Opcode(0xCE, OpcodeType.Normal, Operation.BSWAP, ESI),
    0xCF: Opcode(0xCF, OpcodeType.Normal, Operation.BSWAP, EDI),
    0xD0: Opcode(0xD0, OpcodeType.Invalid, Operation.Invalid),
    0xD1: Opcode(0xD1, OpcodeType.Invalid, Operation.Invalid),
    0xD2: Opcode(0xD2, OpcodeType.Invalid, Operation.Invalid),
    0xD3: Opcode(0xD3, OpcodeType.Invalid, Operation.Invalid),
    0xD4: Opcode(0xD4, OpcodeType.Invalid, Operation.Invalid),
    0xD5: Opcode(0xD5, OpcodeType.Invalid, Operation.Invalid),
    0xD6: Opcode(0xD6, OpcodeType.Invalid, Operation.Invalid),
    0xD7: Opcode(0xD7, OpcodeType.Invalid, Operation.Invalid),
    0xD8: Opcode(0xD8, OpcodeType.Invalid, Operation.Invalid),
    0xD9: Opcode(0xD9, OpcodeType.Invalid, Operation.Invalid),
    0xDA: Opcode(0xDA, OpcodeType.Invalid, Operation.Invalid),
    0xDB: Opcode(0xDB, OpcodeType.Invalid, Operation.Invalid),
    0xDC: Opcode(0xDC, OpcodeType.Invalid, Operation.Invalid),
    0xDD: Opcode(0xDD, OpcodeType.Invalid, Operation.Invalid),
    0xDE: Opcode(0xDE, OpcodeType.Invalid, Operation.Invalid),
    0xDF: Opcode(0xDF, OpcodeType.Invalid, Operation.Invalid),
    0xE0: Opcode(0xE0, OpcodeType.Invalid, Operation.Invalid),
    0xE1: Opcode(0xE1, OpcodeType.Invalid, Operation.Invalid),
    0xE2: Opcode(0xE2, OpcodeType.Invalid, Operation.Invalid),
    0xE3: Opcode(0xE3, OpcodeType.Invalid, Operation.Invalid),
    0xE4: Opcode(0xE4, OpcodeType.Invalid, Operation.Invalid),
    0xE5: Opcode(0xE5, OpcodeType.Invalid, Operation.Invalid),
    0xE6: Opcode(0xE6, OpcodeType.Invalid, Operation.Invalid),
    0xE7: Opcode(0xE7, OpcodeType.Invalid, Operation.Invalid),
    0xE8: Opcode(0xE8, OpcodeType.Invalid, Operation.Invalid),
    0xE9: Opcode(0xE9, OpcodeType.Invalid, Operation.Invalid),
    0xEA: Opcode(0xEA, OpcodeType.Invalid, Operation.Invalid),
    0xEB: Opcode(0xEB, OpcodeType.Invalid, Operation.Invalid),
    0xEC: Opcode(0xEC, OpcodeType.Invalid, Operation.Invalid),
    0xED: Opcode(0xED, OpcodeType.Invalid, Operation.Invalid),
    0xEE: Opcode(0xEE, OpcodeType.Invalid, Operation.Invalid),
    0xEF: Opcode(0xEF, OpcodeType.Invalid, Operation.Invalid),
    0xF0: Opcode(0xF0, OpcodeType.Invalid, Operation.Invalid),
    0xF1: Opcode(0xF1, OpcodeType.Invalid, Operation.Invalid),
    0xF2: Opcode(0xF2, OpcodeType.Invalid, Operation.Invalid),
    0xF3: Opcode(0xF3, OpcodeType.Invalid, Operation.Invalid),
    0xF4: Opcode(0xF4, OpcodeType.Invalid, Operation.Invalid),
    0xF5: Opcode(0xF5, OpcodeType.Invalid, Operation.Invalid),
    0xF6: Opcode(0xF6, OpcodeType.Invalid, Operation.Invalid),
    0xF7: Opcode(0xF7, OpcodeType.Invalid, Operation.Invalid),
    0xF8: Opcode(0xF8, OpcodeType.Invalid, Operation.Invalid),
    0xF9: Opcode(0xF9, OpcodeType.Invalid, Operation.Invalid),
    0xFA: Opcode(0xFA, OpcodeType.Invalid, Operation.Invalid),
    0xFB: Opcode(0xFB, OpcodeType.Invalid, Operation.Invalid),
    0xFC: Opcode(0xFC, OpcodeType.Invalid, Operation.Invalid),
    0xFD: Opcode(0xFD, OpcodeType.Invalid, Operation.Invalid),
    0xFE: Opcode(0xFE, OpcodeType.Invalid, Operation.Invalid),
    0xFF: Opcode(0xFF, OpcodeType.Invalid, Operation.Invalid),
}

prefix_0F00 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.SLDT, Ew),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.STR, Ew),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.LLDT, Ew),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.LTR, Ew),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.VERR, Ew),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.VERW, Ew),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Invalid, Operation.Invalid),
}
prefix_0F01 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.SGDT, Ms),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.SIDT, Ms),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.LGDT, Ms),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.LIDT, Ms),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SMSW, Ew),
    0x05: Opcode(0x05, OpcodeType.Invalid, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.LMSW, Ew),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.INVLPG, Ev),
}
prefix_0FBA = {
    0x00: Opcode(0x00, OpcodeType.Invalid, Operation.Invalid),
    0x01: Opcode(0x01, OpcodeType.Invalid, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Invalid, Operation.Invalid),
    0x03: Opcode(0x03, OpcodeType.Invalid, Operation.Invalid),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.BT, Ev, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.BTS, Ev, Ib),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.BTR, Ev, Ib),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.BTC, Ev, Ib),
}

prefix_80 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ADD, Eb, Ib),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.OR, Eb, Ib),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.ADC, Eb, Ib),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.SBB, Eb, Ib),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.AND, Eb, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SUB, Eb, Ib),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.XOR, Eb, Ib),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.CMP, Eb, Ib),
}

prefix_81 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ADD, Ev, Iv),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.OR, Ev, Iv),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.ADC, Ev, Iv),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.SBB, Ev, Iv),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.AND, Ev, Iv),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SUB, Ev, Iv),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.XOR, Ev, Iv),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.CMP, Ev, Iv),
}

prefix_82 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ADD, Eb, Ib),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.OR, Eb, Ib),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.ADC, Eb, Ib),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.SBB, Eb, Ib),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.AND, Eb, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SUB, Eb, Ib),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.XOR, Eb, Ib),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.CMP, Eb, Ib),
}
prefix_83 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ADD, Ev, Ib),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.OR, Ev, Ib),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.ADC, Ev, Ib),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.SBB, Ev, Ib),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.AND, Ev, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SUB, Ev, Ib),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.XOR, Ev, Ib),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.CMP, Ev, Ib),
}
prefix_C0 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Eb, Ib),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Eb, Ib),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Eb, Ib),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Eb, Ib),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Eb, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Eb, Ib),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Eb, Ib),
}
prefix_C1 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Ev, Ib),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Ev, Ib),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Ev, Ib),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Ev, Ib),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Ev, Ib),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Ev, Ib),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Ev, Ib),
}
prefix_D0 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Eb, Cb(1)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Eb, Cb(1)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Eb, Cb(1)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Eb, Cb(1)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Eb, Cb(1)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Eb, Cb(1)),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Eb, Cb(1)),
}
prefix_D1 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Ev, Cb(1)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Ev, Cb(1)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Ev, Cb(1)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Ev, Cb(1)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Ev, Cb(1)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Ev, Cb(1)),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Ev, Cb(1)),
}
prefix_D2 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Eb, CL),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Eb, CL),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Eb, CL),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Eb, CL),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Eb, CL),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Eb, CL),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Eb, CL),
}
prefix_D3 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.ROL, Ev, CL),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.ROR, Ev, CL),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.RCL, Ev, CL),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.RCR, Ev, CL),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.SHL, Ev, CL),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.SHR, Ev, CL),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.SAR, Ev, CL),
}
prefix_D8_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FADD, ST(0), Md),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FMUL, ST(0), Md),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FCOM, ST(0), Md),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FCOMP, ST(0), Md),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FSUB, ST(0), Md),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FSUBR, ST(0), Md),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FDIV, ST(0), Md),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FDIVR, ST(0), Md),
}
prefix_D8_mem = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FADD, ST(0), ST(0)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FADD, ST(0), ST(1)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FADD, ST(0), ST(2)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FADD, ST(0), ST(3)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FADD, ST(0), ST(4)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FADD, ST(0), ST(5)),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FADD, ST(0), ST(6)),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FADD, ST(0), ST(7)),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.FMUL, ST(0), ST(0)),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.FMUL, ST(0), ST(1)),
    0x0A: Opcode(0x0A, OpcodeType.Normal, Operation.FMUL, ST(0), ST(2)),
    0x0B: Opcode(0x0B, OpcodeType.Normal, Operation.FMUL, ST(0), ST(3)),
    0x0C: Opcode(0x0C, OpcodeType.Normal, Operation.FMUL, ST(0), ST(4)),
    0x0D: Opcode(0x0D, OpcodeType.Normal, Operation.FMUL, ST(0), ST(5)),
    0x0E: Opcode(0x0E, OpcodeType.Normal, Operation.FMUL, ST(0), ST(6)),
    0x0F: Opcode(0x0F, OpcodeType.Normal, Operation.FMUL, ST(0), ST(7)),
    0x10: Opcode(0x10, OpcodeType.Normal, Operation.FCOM, ST(0), ST(0)),
    0x11: Opcode(0x11, OpcodeType.Normal, Operation.FCOM, ST(0), ST(1)),
    0x12: Opcode(0x12, OpcodeType.Normal, Operation.FCOM, ST(0), ST(2)),
    0x13: Opcode(0x13, OpcodeType.Normal, Operation.FCOM, ST(0), ST(3)),
    0x14: Opcode(0x14, OpcodeType.Normal, Operation.FCOM, ST(0), ST(4)),
    0x15: Opcode(0x15, OpcodeType.Normal, Operation.FCOM, ST(0), ST(5)),
    0x16: Opcode(0x16, OpcodeType.Normal, Operation.FCOM, ST(0), ST(6)),
    0x17: Opcode(0x17, OpcodeType.Normal, Operation.FCOM, ST(0), ST(7)),
    0x18: Opcode(0x18, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(0)),
    0x19: Opcode(0x19, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(1)),
    0x1A: Opcode(0x1A, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(2)),
    0x1B: Opcode(0x1B, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(3)),
    0x1C: Opcode(0x1C, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(4)),
    0x1D: Opcode(0x1D, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(5)),
    0x1E: Opcode(0x1E, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(6)),
    0x1F: Opcode(0x1F, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(7)),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FSUB, ST(0), ST(0)),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FSUB, ST(0), ST(1)),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.FSUB, ST(0), ST(2)),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.FSUB, ST(0), ST(3)),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FSUB, ST(0), ST(4)),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.FSUB, ST(0), ST(5)),
    0x26: Opcode(0x26, OpcodeType.Normal, Operation.FSUB, ST(0), ST(6)),
    0x27: Opcode(0x27, OpcodeType.Normal, Operation.FSUB, ST(0), ST(7)),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(0)),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(1)),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(2)),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(3)),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(4)),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(5)),
    0x2E: Opcode(0x2E, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(6)),
    0x2F: Opcode(0x2F, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(7)),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.FDIV, ST(0), ST(0)),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.FDIV, ST(0), ST(1)),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.FDIV, ST(0), ST(2)),
    0x33: Opcode(0x33, OpcodeType.Normal, Operation.FDIV, ST(0), ST(3)),
    0x34: Opcode(0x34, OpcodeType.Normal, Operation.FDIV, ST(0), ST(4)),
    0x35: Opcode(0x35, OpcodeType.Normal, Operation.FDIV, ST(0), ST(5)),
    0x36: Opcode(0x36, OpcodeType.Normal, Operation.FDIV, ST(0), ST(6)),
    0x37: Opcode(0x37, OpcodeType.Normal, Operation.FDIV, ST(0), ST(7)),
    0x38: Opcode(0x38, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(0)),
    0x39: Opcode(0x39, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(1)),
    0x3A: Opcode(0x3A, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(2)),
    0x3B: Opcode(0x3B, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(3)),
    0x3C: Opcode(0x3C, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(4)),
    0x3D: Opcode(0x3D, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(5)),
    0x3E: Opcode(0x3E, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(6)),
    0x3F: Opcode(0x3F, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(7)),
}
prefix_D9_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FLD, Md),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FST, Md),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FSTP, Md),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FLDENV, M),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FLDCW, Mw),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FNSTENV, M),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FNSTCW, Mw),
}
prefix_D9_mem = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FLD, ST(0)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FLD, ST(1)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FLD, ST(2)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FLD, ST(3)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FLD, ST(4)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FLD, ST(5)),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FLD, ST(6)),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FLD, ST(7)),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.FXCH, ST(0)),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.FXCH, ST(1)),
    0x0A: Opcode(0x0A, OpcodeType.Normal, Operation.FXCH, ST(2)),
    0x0B: Opcode(0x0B, OpcodeType.Normal, Operation.FXCH, ST(3)),
    0x0C: Opcode(0x0C, OpcodeType.Normal, Operation.FXCH, ST(4)),
    0x0D: Opcode(0x0D, OpcodeType.Normal, Operation.FXCH, ST(5)),
    0x0E: Opcode(0x0E, OpcodeType.Normal, Operation.FXCH, ST(6)),
    0x0F: Opcode(0x0F, OpcodeType.Normal, Operation.FXCH, ST(7)),
    0x10: Opcode(0x10, OpcodeType.Normal, Operation.FNOP),
    0x11: Opcode(0x11, OpcodeType.InvalidX87, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.InvalidX87, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.InvalidX87, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.InvalidX87, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.InvalidX87, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.InvalidX87, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.InvalidX87, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.InvalidX87, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.InvalidX87, Operation.Invalid),
    0x1A: Opcode(0x1A, OpcodeType.InvalidX87, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.InvalidX87, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.InvalidX87, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.InvalidX87, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.InvalidX87, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.InvalidX87, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FCHS),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FABS),
    0x22: Opcode(0x22, OpcodeType.InvalidX87, Operation.Invalid),
    0x23: Opcode(0x23, OpcodeType.InvalidX87, Operation.Invalid),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FTST),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.FXAM),
    0x26: Opcode(0x26, OpcodeType.InvalidX87, Operation.Invalid),
    0x27: Opcode(0x27, OpcodeType.InvalidX87, Operation.Invalid),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.FLD1),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FLDL2T),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.FLDL2E),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.FLDPI),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.FLDLG2),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.FLDLN2),
    0x2E: Opcode(0x2E, OpcodeType.Normal, Operation.FLDZ),
    0x2F: Opcode(0x2F, OpcodeType.InvalidX87, Operation.Invalid),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.F2XM1),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.FYL2X),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.FPTAN),
    0x33: Opcode(0x33, OpcodeType.Normal, Operation.FPATAN),
    0x34: Opcode(0x34, OpcodeType.Normal, Operation.FXTRACT),
    0x35: Opcode(0x35, OpcodeType.Normal, Operation.FPREM1),
    0x36: Opcode(0x36, OpcodeType.Normal, Operation.FDECSTP),
    0x37: Opcode(0x37, OpcodeType.Normal, Operation.FINCSTP),
    0x38: Opcode(0x38, OpcodeType.Normal, Operation.FPREM),
    0x39: Opcode(0x39, OpcodeType.Normal, Operation.FYL2XP1),
    0x3A: Opcode(0x3A, OpcodeType.Normal, Operation.FSQRT),
    0x3B: Opcode(0x3B, OpcodeType.Normal, Operation.FSINCOS),
    0x3C: Opcode(0x3C, OpcodeType.Normal, Operation.FRNDINT),
    0x3D: Opcode(0x3D, OpcodeType.Normal, Operation.FSCALE),
    0x3E: Opcode(0x3E, OpcodeType.Normal, Operation.FSIN),
    0x3F: Opcode(0x3F, OpcodeType.Normal, Operation.FCOS),
}
prefix_DA_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FIADD, ST(0), Md),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FIMUL, ST(0), Md),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FICOM, ST(0), Md),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FICOMP, ST(0), Md),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FISUB, ST(0), Md),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FISUBR, ST(0), Md),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FIDIV, ST(0), Md),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FIDIVR, ST(0), Md),
}
prefix_DA_mem = {
    0x00: Opcode(0x00, OpcodeType.InvalidX87, Operation.Invalid),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.InvalidX87, Operation.Invalid),
    0x03: Opcode(0x03, OpcodeType.InvalidX87, Operation.Invalid),
    0x04: Opcode(0x04, OpcodeType.InvalidX87, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.InvalidX87, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.InvalidX87, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.InvalidX87, Operation.Invalid),
    0x08: Opcode(0x08, OpcodeType.InvalidX87, Operation.Invalid),
    0x09: Opcode(0x09, OpcodeType.InvalidX87, Operation.Invalid),
    0x0A: Opcode(0x0A, OpcodeType.InvalidX87, Operation.Invalid),
    0x0B: Opcode(0x0B, OpcodeType.InvalidX87, Operation.Invalid),
    0x0C: Opcode(0x0C, OpcodeType.InvalidX87, Operation.Invalid),
    0x0D: Opcode(0x0D, OpcodeType.InvalidX87, Operation.Invalid),
    0x0E: Opcode(0x0E, OpcodeType.InvalidX87, Operation.Invalid),
    0x0F: Opcode(0x0F, OpcodeType.InvalidX87, Operation.Invalid),
    0x10: Opcode(0x10, OpcodeType.InvalidX87, Operation.Invalid),
    0x11: Opcode(0x11, OpcodeType.InvalidX87, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.InvalidX87, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.InvalidX87, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.InvalidX87, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.InvalidX87, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.InvalidX87, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.InvalidX87, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.InvalidX87, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.InvalidX87, Operation.Invalid),
    0x1A: Opcode(0x1A, OpcodeType.InvalidX87, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.InvalidX87, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.InvalidX87, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.InvalidX87, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.InvalidX87, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.InvalidX87, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.InvalidX87, Operation.Invalid),
    0x21: Opcode(0x21, OpcodeType.InvalidX87, Operation.Invalid),
    0x22: Opcode(0x22, OpcodeType.InvalidX87, Operation.Invalid),
    0x23: Opcode(0x23, OpcodeType.InvalidX87, Operation.Invalid),
    0x24: Opcode(0x24, OpcodeType.InvalidX87, Operation.Invalid),
    0x25: Opcode(0x25, OpcodeType.InvalidX87, Operation.Invalid),
    0x26: Opcode(0x26, OpcodeType.InvalidX87, Operation.Invalid),
    0x27: Opcode(0x27, OpcodeType.InvalidX87, Operation.Invalid),
    0x28: Opcode(0x28, OpcodeType.InvalidX87, Operation.Invalid),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FUCOMPP, ST(0), ST(1)),
    0x2A: Opcode(0x2A, OpcodeType.InvalidX87, Operation.Invalid),
    0x2B: Opcode(0x2B, OpcodeType.InvalidX87, Operation.Invalid),
    0x2C: Opcode(0x2C, OpcodeType.InvalidX87, Operation.Invalid),
    0x2D: Opcode(0x2D, OpcodeType.InvalidX87, Operation.Invalid),
    0x2E: Opcode(0x2E, OpcodeType.InvalidX87, Operation.Invalid),
    0x2F: Opcode(0x2F, OpcodeType.InvalidX87, Operation.Invalid),
    0x30: Opcode(0x30, OpcodeType.InvalidX87, Operation.Invalid),
    0x31: Opcode(0x31, OpcodeType.InvalidX87, Operation.Invalid),
    0x32: Opcode(0x32, OpcodeType.InvalidX87, Operation.Invalid),
    0x33: Opcode(0x33, OpcodeType.InvalidX87, Operation.Invalid),
    0x34: Opcode(0x34, OpcodeType.InvalidX87, Operation.Invalid),
    0x35: Opcode(0x35, OpcodeType.InvalidX87, Operation.Invalid),
    0x36: Opcode(0x36, OpcodeType.InvalidX87, Operation.Invalid),
    0x37: Opcode(0x37, OpcodeType.InvalidX87, Operation.Invalid),
    0x38: Opcode(0x38, OpcodeType.InvalidX87, Operation.Invalid),
    0x39: Opcode(0x39, OpcodeType.InvalidX87, Operation.Invalid),
    0x3A: Opcode(0x3A, OpcodeType.InvalidX87, Operation.Invalid),
    0x3B: Opcode(0x3B, OpcodeType.InvalidX87, Operation.Invalid),
    0x3C: Opcode(0x3C, OpcodeType.InvalidX87, Operation.Invalid),
    0x3D: Opcode(0x3D, OpcodeType.InvalidX87, Operation.Invalid),
    0x3E: Opcode(0x3E, OpcodeType.InvalidX87, Operation.Invalid),
    0x3F: Opcode(0x3F, OpcodeType.InvalidX87, Operation.Invalid),
}
prefix_DB_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FILD, Md),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FIST, Md),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FISTP, Md),
    0x04: Opcode(0x04, OpcodeType.InvalidX87, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FLD, Mt),
    0x06: Opcode(0x06, OpcodeType.InvalidX87, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FSTP, Mt),
}
prefix_DB_mem = {
    0x00: Opcode(0x00, OpcodeType.InvalidX87, Operation.Invalid),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.InvalidX87, Operation.Invalid),
    0x03: Opcode(0x03, OpcodeType.InvalidX87, Operation.Invalid),
    0x04: Opcode(0x04, OpcodeType.InvalidX87, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.InvalidX87, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.InvalidX87, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.InvalidX87, Operation.Invalid),
    0x08: Opcode(0x08, OpcodeType.InvalidX87, Operation.Invalid),
    0x09: Opcode(0x09, OpcodeType.InvalidX87, Operation.Invalid),
    0x0A: Opcode(0x0A, OpcodeType.InvalidX87, Operation.Invalid),
    0x0B: Opcode(0x0B, OpcodeType.InvalidX87, Operation.Invalid),
    0x0C: Opcode(0x0C, OpcodeType.InvalidX87, Operation.Invalid),
    0x0D: Opcode(0x0D, OpcodeType.InvalidX87, Operation.Invalid),
    0x0E: Opcode(0x0E, OpcodeType.InvalidX87, Operation.Invalid),
    0x0F: Opcode(0x0F, OpcodeType.InvalidX87, Operation.Invalid),
    0x10: Opcode(0x10, OpcodeType.InvalidX87, Operation.Invalid),
    0x11: Opcode(0x11, OpcodeType.InvalidX87, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.InvalidX87, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.InvalidX87, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.InvalidX87, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.InvalidX87, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.InvalidX87, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.InvalidX87, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.InvalidX87, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.InvalidX87, Operation.Invalid),
    0x1A: Opcode(0x1A, OpcodeType.InvalidX87, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.InvalidX87, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.InvalidX87, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.InvalidX87, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.InvalidX87, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.InvalidX87, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FNENI),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FNDISI),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.FNCLEX),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.FNINIT),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FSETPM),
    0x25: Opcode(0x25, OpcodeType.InvalidX87, Operation.Invalid),
    0x26: Opcode(0x26, OpcodeType.InvalidX87, Operation.Invalid),
    0x27: Opcode(0x27, OpcodeType.InvalidX87, Operation.Invalid),
    0x28: Opcode(0x28, OpcodeType.InvalidX87, Operation.Invalid),
    0x29: Opcode(0x29, OpcodeType.InvalidX87, Operation.Invalid),
    0x2A: Opcode(0x2A, OpcodeType.InvalidX87, Operation.Invalid),
    0x2B: Opcode(0x2B, OpcodeType.InvalidX87, Operation.Invalid),
    0x2C: Opcode(0x2C, OpcodeType.InvalidX87, Operation.Invalid),
    0x2D: Opcode(0x2D, OpcodeType.InvalidX87, Operation.Invalid),
    0x2E: Opcode(0x2E, OpcodeType.InvalidX87, Operation.Invalid),
    0x2F: Opcode(0x2F, OpcodeType.InvalidX87, Operation.Invalid),
    0x30: Opcode(0x30, OpcodeType.InvalidX87, Operation.Invalid),
    0x31: Opcode(0x31, OpcodeType.InvalidX87, Operation.Invalid),
    0x32: Opcode(0x32, OpcodeType.InvalidX87, Operation.Invalid),
    0x33: Opcode(0x33, OpcodeType.InvalidX87, Operation.Invalid),
    0x34: Opcode(0x34, OpcodeType.InvalidX87, Operation.Invalid),
    0x35: Opcode(0x35, OpcodeType.InvalidX87, Operation.Invalid),
    0x36: Opcode(0x36, OpcodeType.InvalidX87, Operation.Invalid),
    0x37: Opcode(0x37, OpcodeType.InvalidX87, Operation.Invalid),
    0x38: Opcode(0x38, OpcodeType.InvalidX87, Operation.Invalid),
    0x39: Opcode(0x39, OpcodeType.InvalidX87, Operation.Invalid),
    0x3A: Opcode(0x3A, OpcodeType.InvalidX87, Operation.Invalid),
    0x3B: Opcode(0x3B, OpcodeType.InvalidX87, Operation.Invalid),
    0x3C: Opcode(0x3C, OpcodeType.InvalidX87, Operation.Invalid),
    0x3D: Opcode(0x3D, OpcodeType.InvalidX87, Operation.Invalid),
    0x3E: Opcode(0x3E, OpcodeType.InvalidX87, Operation.Invalid),
    0x3F: Opcode(0x3F, OpcodeType.InvalidX87, Operation.Invalid),
}
prefix_DC_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FADD, ST(0), Mq),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FMUL, ST(0), Mq),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FCOM, ST(0), Mq),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FCOMP, ST(0), Mq),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FSUB, ST(0), Mq),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FSUBR, ST(0), Mq),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FDIV, ST(0), Mq),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FDIVR, ST(0), Mq),
}
prefix_DC_mem = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FADD, ST(0), ST(0)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FADD, ST(1), ST(0)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FADD, ST(2), ST(0)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FADD, ST(3), ST(0)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FADD, ST(4), ST(0)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FADD, ST(5), ST(0)),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FADD, ST(6), ST(0)),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FADD, ST(7), ST(0)),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.FMUL, ST(0), ST(0)),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.FMUL, ST(1), ST(0)),
    0x0A: Opcode(0x0A, OpcodeType.Normal, Operation.FMUL, ST(2), ST(0)),
    0x0B: Opcode(0x0B, OpcodeType.Normal, Operation.FMUL, ST(3), ST(0)),
    0x0C: Opcode(0x0C, OpcodeType.Normal, Operation.FMUL, ST(4), ST(0)),
    0x0D: Opcode(0x0D, OpcodeType.Normal, Operation.FMUL, ST(5), ST(0)),
    0x0E: Opcode(0x0E, OpcodeType.Normal, Operation.FMUL, ST(6), ST(0)),
    0x0F: Opcode(0x0F, OpcodeType.Normal, Operation.FMUL, ST(7), ST(0)),
    0x10: Opcode(0x10, OpcodeType.Normal, Operation.FCOM, ST(0), ST(0)),
    0x11: Opcode(0x11, OpcodeType.Normal, Operation.FCOM, ST(1), ST(0)),
    0x12: Opcode(0x12, OpcodeType.Normal, Operation.FCOM, ST(2), ST(0)),
    0x13: Opcode(0x13, OpcodeType.Normal, Operation.FCOM, ST(3), ST(0)),
    0x14: Opcode(0x14, OpcodeType.Normal, Operation.FCOM, ST(4), ST(0)),
    0x15: Opcode(0x15, OpcodeType.Normal, Operation.FCOM, ST(5), ST(0)),
    0x16: Opcode(0x16, OpcodeType.Normal, Operation.FCOM, ST(6), ST(0)),
    0x17: Opcode(0x17, OpcodeType.Normal, Operation.FCOM, ST(7), ST(0)),
    0x18: Opcode(0x18, OpcodeType.Normal, Operation.FCOMP, ST(0), ST(0)),
    0x19: Opcode(0x19, OpcodeType.Normal, Operation.FCOMP, ST(1), ST(0)),
    0x1A: Opcode(0x1A, OpcodeType.Normal, Operation.FCOMP, ST(2), ST(0)),
    0x1B: Opcode(0x1B, OpcodeType.Normal, Operation.FCOMP, ST(3), ST(0)),
    0x1C: Opcode(0x1C, OpcodeType.Normal, Operation.FCOMP, ST(4), ST(0)),
    0x1D: Opcode(0x1D, OpcodeType.Normal, Operation.FCOMP, ST(5), ST(0)),
    0x1E: Opcode(0x1E, OpcodeType.Normal, Operation.FCOMP, ST(6), ST(0)),
    0x1F: Opcode(0x1F, OpcodeType.Normal, Operation.FCOMP, ST(7), ST(0)),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FSUBR, ST(0), ST(0)),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FSUBR, ST(1), ST(0)),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.FSUBR, ST(2), ST(0)),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.FSUBR, ST(3), ST(0)),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FSUBR, ST(4), ST(0)),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.FSUBR, ST(5), ST(0)),
    0x26: Opcode(0x26, OpcodeType.Normal, Operation.FSUBR, ST(6), ST(0)),
    0x27: Opcode(0x27, OpcodeType.Normal, Operation.FSUBR, ST(7), ST(0)),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.FSUB, ST(0), ST(0)),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FSUB, ST(1), ST(0)),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.FSUB, ST(2), ST(0)),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.FSUB, ST(3), ST(0)),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.FSUB, ST(4), ST(0)),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.FSUB, ST(5), ST(0)),
    0x2E: Opcode(0x2E, OpcodeType.Normal, Operation.FSUB, ST(6), ST(0)),
    0x2F: Opcode(0x2F, OpcodeType.Normal, Operation.FSUB, ST(7), ST(0)),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.FDIVR, ST(0), ST(0)),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.FDIVR, ST(1), ST(0)),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.FDIVR, ST(2), ST(0)),
    0x33: Opcode(0x33, OpcodeType.Normal, Operation.FDIVR, ST(3), ST(0)),
    0x34: Opcode(0x34, OpcodeType.Normal, Operation.FDIVR, ST(4), ST(0)),
    0x35: Opcode(0x35, OpcodeType.Normal, Operation.FDIVR, ST(5), ST(0)),
    0x36: Opcode(0x36, OpcodeType.Normal, Operation.FDIVR, ST(6), ST(0)),
    0x37: Opcode(0x37, OpcodeType.Normal, Operation.FDIVR, ST(7), ST(0)),
    0x38: Opcode(0x38, OpcodeType.Normal, Operation.FDIV, ST(0), ST(0)),
    0x39: Opcode(0x39, OpcodeType.Normal, Operation.FDIV, ST(1), ST(0)),
    0x3A: Opcode(0x3A, OpcodeType.Normal, Operation.FDIV, ST(2), ST(0)),
    0x3B: Opcode(0x3B, OpcodeType.Normal, Operation.FDIV, ST(3), ST(0)),
    0x3C: Opcode(0x3C, OpcodeType.Normal, Operation.FDIV, ST(4), ST(0)),
    0x3D: Opcode(0x3D, OpcodeType.Normal, Operation.FDIV, ST(5), ST(0)),
    0x3E: Opcode(0x3E, OpcodeType.Normal, Operation.FDIV, ST(6), ST(0)),
    0x3F: Opcode(0x3F, OpcodeType.Normal, Operation.FDIV, ST(7), ST(0)),
}
prefix_DD_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FLD, Mq),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FST, Mq),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FSTP, Mq),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FRSTOR, M),
    0x05: Opcode(0x05, OpcodeType.InvalidX87, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FNSAVE, M),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FNSTSW, Mw),
}
prefix_DD_mem = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FFREE, ST(0)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FFREE, ST(1)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FFREE, ST(2)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FFREE, ST(3)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FFREE, ST(4)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FFREE, ST(5)),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FFREE, ST(6)),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FFREE, ST(7)),
    0x08: Opcode(0x08, OpcodeType.InvalidX87, Operation.Invalid),
    0x09: Opcode(0x09, OpcodeType.InvalidX87, Operation.Invalid),
    0x0A: Opcode(0x0A, OpcodeType.InvalidX87, Operation.Invalid),
    0x0B: Opcode(0x0B, OpcodeType.InvalidX87, Operation.Invalid),
    0x0C: Opcode(0x0C, OpcodeType.InvalidX87, Operation.Invalid),
    0x0D: Opcode(0x0D, OpcodeType.InvalidX87, Operation.Invalid),
    0x0E: Opcode(0x0E, OpcodeType.InvalidX87, Operation.Invalid),
    0x0F: Opcode(0x0F, OpcodeType.InvalidX87, Operation.Invalid),
    0x10: Opcode(0x10, OpcodeType.Normal, Operation.FST, ST(0)),
    0x11: Opcode(0x11, OpcodeType.Normal, Operation.FST, ST(1)),
    0x12: Opcode(0x12, OpcodeType.Normal, Operation.FST, ST(2)),
    0x13: Opcode(0x13, OpcodeType.Normal, Operation.FST, ST(3)),
    0x14: Opcode(0x14, OpcodeType.Normal, Operation.FST, ST(4)),
    0x15: Opcode(0x15, OpcodeType.Normal, Operation.FST, ST(5)),
    0x16: Opcode(0x16, OpcodeType.Normal, Operation.FST, ST(6)),
    0x17: Opcode(0x17, OpcodeType.Normal, Operation.FST, ST(7)),
    0x18: Opcode(0x18, OpcodeType.Normal, Operation.FSTP, ST(0)),
    0x19: Opcode(0x19, OpcodeType.Normal, Operation.FSTP, ST(1)),
    0x1A: Opcode(0x1A, OpcodeType.Normal, Operation.FSTP, ST(2)),
    0x1B: Opcode(0x1B, OpcodeType.Normal, Operation.FSTP, ST(3)),
    0x1C: Opcode(0x1C, OpcodeType.Normal, Operation.FSTP, ST(4)),
    0x1D: Opcode(0x1D, OpcodeType.Normal, Operation.FSTP, ST(5)),
    0x1E: Opcode(0x1E, OpcodeType.Normal, Operation.FSTP, ST(6)),
    0x1F: Opcode(0x1F, OpcodeType.Normal, Operation.FSTP, ST(7)),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(0)),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(1)),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(2)),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(3)),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(4)),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(5)),
    0x26: Opcode(0x26, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(6)),
    0x27: Opcode(0x27, OpcodeType.Normal, Operation.FUCOM, ST(0), ST(7)),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(0)),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(1)),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(2)),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(3)),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(4)),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(5)),
    0x2E: Opcode(0x2E, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(6)),
    0x2F: Opcode(0x2F, OpcodeType.Normal, Operation.FUCOMP, ST(0), ST(7)),
    0x30: Opcode(0x30, OpcodeType.InvalidX87, Operation.Invalid),
    0x31: Opcode(0x31, OpcodeType.InvalidX87, Operation.Invalid),
    0x32: Opcode(0x32, OpcodeType.InvalidX87, Operation.Invalid),
    0x33: Opcode(0x33, OpcodeType.InvalidX87, Operation.Invalid),
    0x34: Opcode(0x34, OpcodeType.InvalidX87, Operation.Invalid),
    0x35: Opcode(0x35, OpcodeType.InvalidX87, Operation.Invalid),
    0x36: Opcode(0x36, OpcodeType.InvalidX87, Operation.Invalid),
    0x37: Opcode(0x37, OpcodeType.InvalidX87, Operation.Invalid),
    0x38: Opcode(0x38, OpcodeType.InvalidX87, Operation.Invalid),
    0x39: Opcode(0x39, OpcodeType.InvalidX87, Operation.Invalid),
    0x3A: Opcode(0x3A, OpcodeType.InvalidX87, Operation.Invalid),
    0x3B: Opcode(0x3B, OpcodeType.InvalidX87, Operation.Invalid),
    0x3C: Opcode(0x3C, OpcodeType.InvalidX87, Operation.Invalid),
    0x3D: Opcode(0x3D, OpcodeType.InvalidX87, Operation.Invalid),
    0x3E: Opcode(0x3E, OpcodeType.InvalidX87, Operation.Invalid),
    0x3F: Opcode(0x3F, OpcodeType.InvalidX87, Operation.Invalid),
}
prefix_DE_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FIADD, ST(0), Mw),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FIMUL, ST(0), Mw),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FICOM, ST(0), Mw),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FICOMP, ST(0), Mw),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FISUB, ST(0), Mw),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FISUBR, ST(0), Mw),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FIDIV, ST(0), Mw),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FIDIVR, ST(0), Mw),
}
prefix_DE_mem = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FADDP, ST(0), ST(0)),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.FADDP, ST(1), ST(0)),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FADDP, ST(2), ST(0)),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FADDP, ST(3), ST(0)),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FADDP, ST(4), ST(0)),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FADDP, ST(5), ST(0)),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FADDP, ST(6), ST(0)),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FADDP, ST(7), ST(0)),
    0x08: Opcode(0x08, OpcodeType.Normal, Operation.FMULP, ST(0), ST(0)),
    0x09: Opcode(0x09, OpcodeType.Normal, Operation.FMULP, ST(1), ST(0)),
    0x0A: Opcode(0x0A, OpcodeType.Normal, Operation.FMULP, ST(2), ST(0)),
    0x0B: Opcode(0x0B, OpcodeType.Normal, Operation.FMULP, ST(3), ST(0)),
    0x0C: Opcode(0x0C, OpcodeType.Normal, Operation.FMULP, ST(4), ST(0)),
    0x0D: Opcode(0x0D, OpcodeType.Normal, Operation.FMULP, ST(5), ST(0)),
    0x0E: Opcode(0x0E, OpcodeType.Normal, Operation.FMULP, ST(6), ST(0)),
    0x0F: Opcode(0x0F, OpcodeType.Normal, Operation.FMULP, ST(7), ST(0)),
    0x10: Opcode(0x10, OpcodeType.InvalidX87, Operation.Invalid),
    0x11: Opcode(0x11, OpcodeType.InvalidX87, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.InvalidX87, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.InvalidX87, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.InvalidX87, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.InvalidX87, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.InvalidX87, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.InvalidX87, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.InvalidX87, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.Normal, Operation.FCOMPP, ST(0), ST(1)),
    0x1A: Opcode(0x1A, OpcodeType.InvalidX87, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.InvalidX87, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.InvalidX87, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.InvalidX87, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.InvalidX87, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.InvalidX87, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FSUBRP, ST(0), ST(0)),
    0x21: Opcode(0x21, OpcodeType.Normal, Operation.FSUBRP, ST(1), ST(0)),
    0x22: Opcode(0x22, OpcodeType.Normal, Operation.FSUBRP, ST(2), ST(0)),
    0x23: Opcode(0x23, OpcodeType.Normal, Operation.FSUBRP, ST(3), ST(0)),
    0x24: Opcode(0x24, OpcodeType.Normal, Operation.FSUBRP, ST(4), ST(0)),
    0x25: Opcode(0x25, OpcodeType.Normal, Operation.FSUBRP, ST(5), ST(0)),
    0x26: Opcode(0x26, OpcodeType.Normal, Operation.FSUBRP, ST(6), ST(0)),
    0x27: Opcode(0x27, OpcodeType.Normal, Operation.FSUBRP, ST(7), ST(0)),
    0x28: Opcode(0x28, OpcodeType.Normal, Operation.FSUBP, ST(0), ST(0)),
    0x29: Opcode(0x29, OpcodeType.Normal, Operation.FSUBP, ST(1), ST(0)),
    0x2A: Opcode(0x2A, OpcodeType.Normal, Operation.FSUBP, ST(2), ST(0)),
    0x2B: Opcode(0x2B, OpcodeType.Normal, Operation.FSUBP, ST(3), ST(0)),
    0x2C: Opcode(0x2C, OpcodeType.Normal, Operation.FSUBP, ST(4), ST(0)),
    0x2D: Opcode(0x2D, OpcodeType.Normal, Operation.FSUBP, ST(5), ST(0)),
    0x2E: Opcode(0x2E, OpcodeType.Normal, Operation.FSUBP, ST(6), ST(0)),
    0x2F: Opcode(0x2F, OpcodeType.Normal, Operation.FSUBP, ST(7), ST(0)),
    0x30: Opcode(0x30, OpcodeType.Normal, Operation.FDIVRP, ST(0), ST(0)),
    0x31: Opcode(0x31, OpcodeType.Normal, Operation.FDIVRP, ST(1), ST(0)),
    0x32: Opcode(0x32, OpcodeType.Normal, Operation.FDIVRP, ST(2), ST(0)),
    0x33: Opcode(0x33, OpcodeType.Normal, Operation.FDIVRP, ST(3), ST(0)),
    0x34: Opcode(0x34, OpcodeType.Normal, Operation.FDIVRP, ST(4), ST(0)),
    0x35: Opcode(0x35, OpcodeType.Normal, Operation.FDIVRP, ST(5), ST(0)),
    0x36: Opcode(0x36, OpcodeType.Normal, Operation.FDIVRP, ST(6), ST(0)),
    0x37: Opcode(0x37, OpcodeType.Normal, Operation.FDIVRP, ST(7), ST(0)),
    0x38: Opcode(0x38, OpcodeType.Normal, Operation.FDIVP, ST(0), ST(0)),
    0x39: Opcode(0x39, OpcodeType.Normal, Operation.FDIVP, ST(1), ST(0)),
    0x3A: Opcode(0x3A, OpcodeType.Normal, Operation.FDIVP, ST(2), ST(0)),
    0x3B: Opcode(0x3B, OpcodeType.Normal, Operation.FDIVP, ST(3), ST(0)),
    0x3C: Opcode(0x3C, OpcodeType.Normal, Operation.FDIVP, ST(4), ST(0)),
    0x3D: Opcode(0x3D, OpcodeType.Normal, Operation.FDIVP, ST(5), ST(0)),
    0x3E: Opcode(0x3E, OpcodeType.Normal, Operation.FDIVP, ST(6), ST(0)),
    0x3F: Opcode(0x3F, OpcodeType.Normal, Operation.FDIVP, ST(7), ST(0)),
}
prefix_DF_reg = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.FILD, Mw),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.FIST, Mw),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.FISTP, Mw),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.FBLD, Mt),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.FILD, Mq),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.FBSTP, Mt),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.FISTP, Mq),
}
prefix_DF_mem = {
    0x00: Opcode(0x00, OpcodeType.InvalidX87, Operation.Invalid),
    0x01: Opcode(0x01, OpcodeType.InvalidX87, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.InvalidX87, Operation.Invalid),
    0x03: Opcode(0x03, OpcodeType.InvalidX87, Operation.Invalid),
    0x04: Opcode(0x04, OpcodeType.InvalidX87, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.InvalidX87, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.InvalidX87, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.InvalidX87, Operation.Invalid),
    0x08: Opcode(0x08, OpcodeType.InvalidX87, Operation.Invalid),
    0x09: Opcode(0x09, OpcodeType.InvalidX87, Operation.Invalid),
    0x0A: Opcode(0x0A, OpcodeType.InvalidX87, Operation.Invalid),
    0x0B: Opcode(0x0B, OpcodeType.InvalidX87, Operation.Invalid),
    0x0C: Opcode(0x0C, OpcodeType.InvalidX87, Operation.Invalid),
    0x0D: Opcode(0x0D, OpcodeType.InvalidX87, Operation.Invalid),
    0x0E: Opcode(0x0E, OpcodeType.InvalidX87, Operation.Invalid),
    0x0F: Opcode(0x0F, OpcodeType.InvalidX87, Operation.Invalid),
    0x10: Opcode(0x10, OpcodeType.InvalidX87, Operation.Invalid),
    0x11: Opcode(0x11, OpcodeType.InvalidX87, Operation.Invalid),
    0x12: Opcode(0x12, OpcodeType.InvalidX87, Operation.Invalid),
    0x13: Opcode(0x13, OpcodeType.InvalidX87, Operation.Invalid),
    0x14: Opcode(0x14, OpcodeType.InvalidX87, Operation.Invalid),
    0x15: Opcode(0x15, OpcodeType.InvalidX87, Operation.Invalid),
    0x16: Opcode(0x16, OpcodeType.InvalidX87, Operation.Invalid),
    0x17: Opcode(0x17, OpcodeType.InvalidX87, Operation.Invalid),
    0x18: Opcode(0x18, OpcodeType.InvalidX87, Operation.Invalid),
    0x19: Opcode(0x19, OpcodeType.InvalidX87, Operation.Invalid),
    0x1A: Opcode(0x1A, OpcodeType.InvalidX87, Operation.Invalid),
    0x1B: Opcode(0x1B, OpcodeType.InvalidX87, Operation.Invalid),
    0x1C: Opcode(0x1C, OpcodeType.InvalidX87, Operation.Invalid),
    0x1D: Opcode(0x1D, OpcodeType.InvalidX87, Operation.Invalid),
    0x1E: Opcode(0x1E, OpcodeType.InvalidX87, Operation.Invalid),
    0x1F: Opcode(0x1F, OpcodeType.InvalidX87, Operation.Invalid),
    0x20: Opcode(0x20, OpcodeType.Normal, Operation.FNSTSW, AX),
    0x21: Opcode(0x21, OpcodeType.InvalidX87, Operation.Invalid),
    0x22: Opcode(0x22, OpcodeType.InvalidX87, Operation.Invalid),
    0x23: Opcode(0x23, OpcodeType.InvalidX87, Operation.Invalid),
    0x24: Opcode(0x24, OpcodeType.InvalidX87, Operation.Invalid),
    0x25: Opcode(0x25, OpcodeType.InvalidX87, Operation.Invalid),
    0x26: Opcode(0x26, OpcodeType.InvalidX87, Operation.Invalid),
    0x27: Opcode(0x27, OpcodeType.InvalidX87, Operation.Invalid),
    0x28: Opcode(0x28, OpcodeType.InvalidX87, Operation.Invalid),
    0x29: Opcode(0x29, OpcodeType.InvalidX87, Operation.Invalid),
    0x2A: Opcode(0x2A, OpcodeType.InvalidX87, Operation.Invalid),
    0x2B: Opcode(0x2B, OpcodeType.InvalidX87, Operation.Invalid),
    0x2C: Opcode(0x2C, OpcodeType.InvalidX87, Operation.Invalid),
    0x2D: Opcode(0x2D, OpcodeType.InvalidX87, Operation.Invalid),
    0x2E: Opcode(0x2E, OpcodeType.InvalidX87, Operation.Invalid),
    0x2F: Opcode(0x2F, OpcodeType.InvalidX87, Operation.Invalid),
    0x30: Opcode(0x30, OpcodeType.InvalidX87, Operation.Invalid),
    0x31: Opcode(0x31, OpcodeType.InvalidX87, Operation.Invalid),
    0x32: Opcode(0x32, OpcodeType.InvalidX87, Operation.Invalid),
    0x33: Opcode(0x33, OpcodeType.InvalidX87, Operation.Invalid),
    0x34: Opcode(0x34, OpcodeType.InvalidX87, Operation.Invalid),
    0x35: Opcode(0x35, OpcodeType.InvalidX87, Operation.Invalid),
    0x36: Opcode(0x36, OpcodeType.InvalidX87, Operation.Invalid),
    0x37: Opcode(0x37, OpcodeType.InvalidX87, Operation.Invalid),
    0x38: Opcode(0x38, OpcodeType.InvalidX87, Operation.Invalid),
    0x39: Opcode(0x39, OpcodeType.InvalidX87, Operation.Invalid),
    0x3A: Opcode(0x3A, OpcodeType.InvalidX87, Operation.Invalid),
    0x3B: Opcode(0x3B, OpcodeType.InvalidX87, Operation.Invalid),
    0x3C: Opcode(0x3C, OpcodeType.InvalidX87, Operation.Invalid),
    0x3D: Opcode(0x3D, OpcodeType.InvalidX87, Operation.Invalid),
    0x3E: Opcode(0x3E, OpcodeType.InvalidX87, Operation.Invalid),
    0x3F: Opcode(0x3F, OpcodeType.InvalidX87, Operation.Invalid),
}
prefix_F6 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.TEST, Eb, Ib),
    0x01: Opcode(0x01, OpcodeType.Invalid, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.NOT, Eb),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.NEG, Eb),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.MUL, Eb),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.IMUL, Eb),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.DIV, Eb),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.IDIV, Eb),
}
prefix_F7 = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.TEST, Ev, Iv),
    0x01: Opcode(0x01, OpcodeType.Invalid, Operation.Invalid),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.NOT, Ev),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.NEG, Ev),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.MUL, Ev),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.IMUL, Ev),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.DIV, Ev),
    0x07: Opcode(0x07, OpcodeType.Normal, Operation.IDIV, Ev),
}
prefix_FE = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.INC, Eb),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.DEC, Eb),
    0x02: Opcode(0x02, OpcodeType.Invalid, Operation.Invalid),
    0x03: Opcode(0x03, OpcodeType.Invalid, Operation.Invalid),
    0x04: Opcode(0x04, OpcodeType.Invalid, Operation.Invalid),
    0x05: Opcode(0x05, OpcodeType.Invalid, Operation.Invalid),
    0x06: Opcode(0x06, OpcodeType.Invalid, Operation.Invalid),
    0x07: Opcode(0x07, OpcodeType.Invalid, Operation.Invalid),
}
prefix_FF = {
    0x00: Opcode(0x00, OpcodeType.Normal, Operation.INC, Ev),
    0x01: Opcode(0x01, OpcodeType.Normal, Operation.DEC, Ev),
    0x02: Opcode(0x02, OpcodeType.Normal, Operation.CALL_Near, Ev),
    0x03: Opcode(0x03, OpcodeType.Normal, Operation.CALL_Far, Mp),
    0x04: Opcode(0x04, OpcodeType.Normal, Operation.JMP_Near, Ev),
    0x05: Opcode(0x05, OpcodeType.Normal, Operation.JMP_Far, Mp),
    0x06: Opcode(0x06, OpcodeType.Normal, Operation.PUSH, Ev),
    0x07: Opcode(0x07, OpcodeType.Invalid, Operation.Invalid),
}
