1 typedef struct { 2 UINT8 opcode; 3 UINT32 flags; 4 void (*handler16)(void); 5 void (*handler32)(void); 6 } X86_OPCODE; 7 8 #define OP_I386 0x1 9 #define OP_FPU 0x2 10 #define OP_I486 0x4 11 #define OP_PENTIUM 0x8 12 #define OP_MMX 0x10 13 #define OP_PPRO 0x20 14 #define OP_SSE 0x40 15 #define OP_SSE2 0x80 16 #define OP_SSE3 0x100 17 #define OP_CYRIX 0x8000 18 #define OP_2BYTE 0x80000000 19 20 static X86_OPCODE x86_opcode_table[] = 21 { 22 // Opcode Flags 16-bit handler 32-bit handler 23 { 0x00, OP_I386, I386OP(add_rm8_r8), I386OP(add_rm8_r8), }, 24 { 0x01, OP_I386, I386OP(add_rm16_r16), I386OP(add_rm32_r32), }, 25 { 0x02, OP_I386, I386OP(add_r8_rm8), I386OP(add_r8_rm8), }, 26 { 0x03, OP_I386, I386OP(add_r16_rm16), I386OP(add_r32_rm32), }, 27 { 0x04, OP_I386, I386OP(add_al_i8), I386OP(add_al_i8), }, 28 { 0x05, OP_I386, I386OP(add_ax_i16), I386OP(add_eax_i32), }, 29 { 0x06, OP_I386, I386OP(push_es16), I386OP(push_es32), }, 30 { 0x07, OP_I386, I386OP(pop_es16), I386OP(pop_es32), }, 31 { 0x08, OP_I386, I386OP(or_rm8_r8), I386OP(or_rm8_r8), }, 32 { 0x09, OP_I386, I386OP(or_rm16_r16), I386OP(or_rm32_r32), }, 33 { 0x0A, OP_I386, I386OP(or_r8_rm8), I386OP(or_r8_rm8), }, 34 { 0x0B, OP_I386, I386OP(or_r16_rm16), I386OP(or_r32_rm32), }, 35 { 0x0C, OP_I386, I386OP(or_al_i8), I386OP(or_al_i8), }, 36 { 0x0D, OP_I386, I386OP(or_ax_i16), I386OP(or_eax_i32), }, 37 { 0x0E, OP_I386, I386OP(push_cs16), I386OP(push_cs32), }, 38 { 0x0F, OP_I386, I386OP(decode_two_byte), I386OP(decode_two_byte), }, 39 { 0x10, OP_I386, I386OP(adc_rm8_r8), I386OP(adc_rm8_r8), }, 40 { 0x11, OP_I386, I386OP(adc_rm16_r16), I386OP(adc_rm32_r32), }, 41 { 0x12, OP_I386, I386OP(adc_r8_rm8), I386OP(adc_r8_rm8), }, 42 { 0x13, OP_I386, I386OP(adc_r16_rm16), I386OP(adc_r32_rm32), }, 43 { 0x14, OP_I386, I386OP(adc_al_i8), I386OP(adc_al_i8), }, 44 { 0x15, OP_I386, I386OP(adc_ax_i16), I386OP(adc_eax_i32), }, 45 { 0x16, OP_I386, I386OP(push_ss16), I386OP(push_ss32), }, 46 { 0x17, OP_I386, I386OP(pop_ss16), I386OP(pop_ss32), }, 47 { 0x18, OP_I386, I386OP(sbb_rm8_r8), I386OP(sbb_rm8_r8), }, 48 { 0x19, OP_I386, I386OP(sbb_rm16_r16), I386OP(sbb_rm32_r32), }, 49 { 0x1A, OP_I386, I386OP(sbb_r8_rm8), I386OP(sbb_r8_rm8), }, 50 { 0x1B, OP_I386, I386OP(sbb_r16_rm16), I386OP(sbb_r32_rm32), }, 51 { 0x1C, OP_I386, I386OP(sbb_al_i8), I386OP(sbb_al_i8), }, 52 { 0x1D, OP_I386, I386OP(sbb_ax_i16), I386OP(sbb_eax_i32), }, 53 { 0x1E, OP_I386, I386OP(push_ds16), I386OP(push_ds32), }, 54 { 0x1F, OP_I386, I386OP(pop_ds16), I386OP(pop_ds32), }, 55 { 0x20, OP_I386, I386OP(and_rm8_r8), I386OP(and_rm8_r8), }, 56 { 0x21, OP_I386, I386OP(and_rm16_r16), I386OP(and_rm32_r32), }, 57 { 0x22, OP_I386, I386OP(and_r8_rm8), I386OP(and_r8_rm8), }, 58 { 0x23, OP_I386, I386OP(and_r16_rm16), I386OP(and_r32_rm32), }, 59 { 0x24, OP_I386, I386OP(and_al_i8), I386OP(and_al_i8), }, 60 { 0x25, OP_I386, I386OP(and_ax_i16), I386OP(and_eax_i32), }, 61 { 0x26, OP_I386, I386OP(segment_ES), I386OP(segment_ES), }, 62 { 0x27, OP_I386, I386OP(daa), I386OP(daa), }, 63 { 0x28, OP_I386, I386OP(sub_rm8_r8), I386OP(sub_rm8_r8), }, 64 { 0x29, OP_I386, I386OP(sub_rm16_r16), I386OP(sub_rm32_r32), }, 65 { 0x2A, OP_I386, I386OP(sub_r8_rm8), I386OP(sub_r8_rm8), }, 66 { 0x2B, OP_I386, I386OP(sub_r16_rm16), I386OP(sub_r32_rm32), }, 67 { 0x2C, OP_I386, I386OP(sub_al_i8), I386OP(sub_al_i8), }, 68 { 0x2D, OP_I386, I386OP(sub_ax_i16), I386OP(sub_eax_i32), }, 69 { 0x2E, OP_I386, I386OP(segment_CS), I386OP(segment_CS), }, 70 { 0x2F, OP_I386, I386OP(das), I386OP(das), }, 71 { 0x30, OP_I386, I386OP(xor_rm8_r8), I386OP(xor_rm8_r8), }, 72 { 0x31, OP_I386, I386OP(xor_rm16_r16), I386OP(xor_rm32_r32), }, 73 { 0x32, OP_I386, I386OP(xor_r8_rm8), I386OP(xor_r8_rm8), }, 74 { 0x33, OP_I386, I386OP(xor_r16_rm16), I386OP(xor_r32_rm32), }, 75 { 0x34, OP_I386, I386OP(xor_al_i8), I386OP(xor_al_i8), }, 76 { 0x35, OP_I386, I386OP(xor_ax_i16), I386OP(xor_eax_i32), }, 77 { 0x36, OP_I386, I386OP(segment_SS), I386OP(segment_SS), }, 78 { 0x37, OP_I386, I386OP(aaa), I386OP(aaa), }, 79 { 0x38, OP_I386, I386OP(cmp_rm8_r8), I386OP(cmp_rm8_r8), }, 80 { 0x39, OP_I386, I386OP(cmp_rm16_r16), I386OP(cmp_rm32_r32), }, 81 { 0x3A, OP_I386, I386OP(cmp_r8_rm8), I386OP(cmp_r8_rm8), }, 82 { 0x3B, OP_I386, I386OP(cmp_r16_rm16), I386OP(cmp_r32_rm32), }, 83 { 0x3C, OP_I386, I386OP(cmp_al_i8), I386OP(cmp_al_i8), }, 84 { 0x3D, OP_I386, I386OP(cmp_ax_i16), I386OP(cmp_eax_i32), }, 85 { 0x3E, OP_I386, I386OP(segment_DS), I386OP(segment_DS), }, 86 { 0x3F, OP_I386, I386OP(aas), I386OP(aas), }, 87 { 0x40, OP_I386, I386OP(inc_ax), I386OP(inc_eax), }, 88 { 0x41, OP_I386, I386OP(inc_cx), I386OP(inc_ecx), }, 89 { 0x42, OP_I386, I386OP(inc_dx), I386OP(inc_edx), }, 90 { 0x43, OP_I386, I386OP(inc_bx), I386OP(inc_ebx), }, 91 { 0x44, OP_I386, I386OP(inc_sp), I386OP(inc_esp), }, 92 { 0x45, OP_I386, I386OP(inc_bp), I386OP(inc_ebp), }, 93 { 0x46, OP_I386, I386OP(inc_si), I386OP(inc_esi), }, 94 { 0x47, OP_I386, I386OP(inc_di), I386OP(inc_edi), }, 95 { 0x48, OP_I386, I386OP(dec_ax), I386OP(dec_eax), }, 96 { 0x49, OP_I386, I386OP(dec_cx), I386OP(dec_ecx), }, 97 { 0x4A, OP_I386, I386OP(dec_dx), I386OP(dec_edx), }, 98 { 0x4B, OP_I386, I386OP(dec_bx), I386OP(dec_ebx), }, 99 { 0x4C, OP_I386, I386OP(dec_sp), I386OP(dec_esp), }, 100 { 0x4D, OP_I386, I386OP(dec_bp), I386OP(dec_ebp), }, 101 { 0x4E, OP_I386, I386OP(dec_si), I386OP(dec_esi), }, 102 { 0x4F, OP_I386, I386OP(dec_di), I386OP(dec_edi), }, 103 { 0x50, OP_I386, I386OP(push_ax), I386OP(push_eax), }, 104 { 0x51, OP_I386, I386OP(push_cx), I386OP(push_ecx), }, 105 { 0x52, OP_I386, I386OP(push_dx), I386OP(push_edx), }, 106 { 0x53, OP_I386, I386OP(push_bx), I386OP(push_ebx), }, 107 { 0x54, OP_I386, I386OP(push_sp), I386OP(push_esp), }, 108 { 0x55, OP_I386, I386OP(push_bp), I386OP(push_ebp), }, 109 { 0x56, OP_I386, I386OP(push_si), I386OP(push_esi), }, 110 { 0x57, OP_I386, I386OP(push_di), I386OP(push_edi), }, 111 { 0x58, OP_I386, I386OP(pop_ax), I386OP(pop_eax), }, 112 { 0x59, OP_I386, I386OP(pop_cx), I386OP(pop_ecx), }, 113 { 0x5A, OP_I386, I386OP(pop_dx), I386OP(pop_edx), }, 114 { 0x5B, OP_I386, I386OP(pop_bx), I386OP(pop_ebx), }, 115 { 0x5C, OP_I386, I386OP(pop_sp), I386OP(pop_esp), }, 116 { 0x5D, OP_I386, I386OP(pop_bp), I386OP(pop_ebp), }, 117 { 0x5E, OP_I386, I386OP(pop_si), I386OP(pop_esi), }, 118 { 0x5F, OP_I386, I386OP(pop_di), I386OP(pop_edi), }, 119 { 0x60, OP_I386, I386OP(pusha), I386OP(pushad), }, 120 { 0x61, OP_I386, I386OP(popa), I386OP(popad), }, 121 { 0x62, OP_I386, I386OP(bound_r16_m16_m16), I386OP(bound_r32_m32_m32), }, 122 { 0x63, OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 123 { 0x64, OP_I386, I386OP(segment_FS), I386OP(segment_FS), }, 124 { 0x65, OP_I386, I386OP(segment_GS), I386OP(segment_GS), }, 125 { 0x66, OP_I386, I386OP(operand_size), I386OP(operand_size), }, 126 { 0x67, OP_I386, I386OP(address_size), I386OP(address_size), }, 127 { 0x68, OP_I386, I386OP(push_i16), I386OP(push_i32), }, 128 { 0x69, OP_I386, I386OP(imul_r16_rm16_i16), I386OP(imul_r32_rm32_i32), }, 129 { 0x6A, OP_I386, I386OP(push_i8), I386OP(push_i8), }, 130 { 0x6B, OP_I386, I386OP(imul_r16_rm16_i8), I386OP(imul_r32_rm32_i8), }, 131 { 0x6C, OP_I386, I386OP(insb), I386OP(insb), }, 132 { 0x6D, OP_I386, I386OP(insw), I386OP(insd), }, 133 { 0x6E, OP_I386, I386OP(outsb), I386OP(outsb), }, 134 { 0x6F, OP_I386, I386OP(outsw), I386OP(outsd), }, 135 { 0x70, OP_I386, I386OP(jo_rel8), I386OP(jo_rel8), }, 136 { 0x71, OP_I386, I386OP(jno_rel8), I386OP(jno_rel8), }, 137 { 0x72, OP_I386, I386OP(jc_rel8), I386OP(jc_rel8), }, 138 { 0x73, OP_I386, I386OP(jnc_rel8), I386OP(jnc_rel8), }, 139 { 0x74, OP_I386, I386OP(jz_rel8), I386OP(jz_rel8), }, 140 { 0x75, OP_I386, I386OP(jnz_rel8), I386OP(jnz_rel8), }, 141 { 0x76, OP_I386, I386OP(jbe_rel8), I386OP(jbe_rel8), }, 142 { 0x77, OP_I386, I386OP(ja_rel8), I386OP(ja_rel8), }, 143 { 0x78, OP_I386, I386OP(js_rel8), I386OP(js_rel8), }, 144 { 0x79, OP_I386, I386OP(jns_rel8), I386OP(jns_rel8), }, 145 { 0x7A, OP_I386, I386OP(jp_rel8), I386OP(jp_rel8), }, 146 { 0x7B, OP_I386, I386OP(jnp_rel8), I386OP(jnp_rel8), }, 147 { 0x7C, OP_I386, I386OP(jl_rel8), I386OP(jl_rel8), }, 148 { 0x7D, OP_I386, I386OP(jge_rel8), I386OP(jge_rel8), }, 149 { 0x7E, OP_I386, I386OP(jle_rel8), I386OP(jle_rel8), }, 150 { 0x7F, OP_I386, I386OP(jg_rel8), I386OP(jg_rel8), }, 151 { 0x80, OP_I386, I386OP(group80_8), I386OP(group80_8), }, 152 { 0x81, OP_I386, I386OP(group81_16), I386OP(group81_32), }, 153 { 0x82, OP_I386, I386OP(group80_8), I386OP(group80_8), }, 154 { 0x83, OP_I386, I386OP(group83_16), I386OP(group83_32), }, 155 { 0x84, OP_I386, I386OP(test_rm8_r8), I386OP(test_rm8_r8), }, 156 { 0x85, OP_I386, I386OP(test_rm16_r16), I386OP(test_rm32_r32), }, 157 { 0x86, OP_I386, I386OP(xchg_r8_rm8), I386OP(xchg_r8_rm8), }, 158 { 0x87, OP_I386, I386OP(xchg_r16_rm16), I386OP(xchg_r32_rm32), }, 159 { 0x88, OP_I386, I386OP(mov_rm8_r8), I386OP(mov_rm8_r8), }, 160 { 0x89, OP_I386, I386OP(mov_rm16_r16), I386OP(mov_rm32_r32), }, 161 { 0x8A, OP_I386, I386OP(mov_r8_rm8), I386OP(mov_r8_rm8), }, 162 { 0x8B, OP_I386, I386OP(mov_r16_rm16), I386OP(mov_r32_rm32), }, 163 { 0x8C, OP_I386, I386OP(mov_rm16_sreg), I386OP(mov_rm16_sreg), }, 164 { 0x8D, OP_I386, I386OP(lea16), I386OP(lea32), }, 165 { 0x8E, OP_I386, I386OP(mov_sreg_rm16), I386OP(mov_sreg_rm16), }, 166 { 0x8F, OP_I386, I386OP(pop_rm16), I386OP(pop_rm32), }, 167 { 0x90, OP_I386, I386OP(nop), I386OP(nop), }, 168 { 0x91, OP_I386, I386OP(xchg_ax_cx), I386OP(xchg_eax_ecx), }, 169 { 0x92, OP_I386, I386OP(xchg_ax_dx), I386OP(xchg_eax_edx), }, 170 { 0x93, OP_I386, I386OP(xchg_ax_bx), I386OP(xchg_eax_ebx), }, 171 { 0x94, OP_I386, I386OP(xchg_ax_sp), I386OP(xchg_eax_esp), }, 172 { 0x95, OP_I386, I386OP(xchg_ax_bp), I386OP(xchg_eax_ebp), }, 173 { 0x96, OP_I386, I386OP(xchg_ax_si), I386OP(xchg_eax_esi), }, 174 { 0x97, OP_I386, I386OP(xchg_ax_di), I386OP(xchg_eax_edi), }, 175 { 0x98, OP_I386, I386OP(cbw), I386OP(cwde), }, 176 { 0x99, OP_I386, I386OP(cwd), I386OP(cdq), }, 177 { 0x9A, OP_I386, I386OP(call_abs16), I386OP(call_abs32), }, 178 { 0x9B, OP_I386, I386OP(wait), I386OP(wait), }, 179 { 0x9C, OP_I386, I386OP(pushf), I386OP(pushfd), }, 180 { 0x9D, OP_I386, I386OP(popf), I386OP(popfd), }, 181 { 0x9E, OP_I386, I386OP(sahf), I386OP(sahf), }, 182 { 0x9F, OP_I386, I386OP(lahf), I386OP(lahf), }, 183 { 0xA0, OP_I386, I386OP(mov_al_m8), I386OP(mov_al_m8), }, 184 { 0xA1, OP_I386, I386OP(mov_ax_m16), I386OP(mov_eax_m32), }, 185 { 0xA2, OP_I386, I386OP(mov_m8_al), I386OP(mov_m8_al), }, 186 { 0xA3, OP_I386, I386OP(mov_m16_ax), I386OP(mov_m32_eax), }, 187 { 0xA4, OP_I386, I386OP(movsb), I386OP(movsb), }, 188 { 0xA5, OP_I386, I386OP(movsw), I386OP(movsd), }, 189 { 0xA6, OP_I386, I386OP(cmpsb), I386OP(cmpsb), }, 190 { 0xA7, OP_I386, I386OP(cmpsw), I386OP(cmpsd), }, 191 { 0xA8, OP_I386, I386OP(test_al_i8), I386OP(test_al_i8), }, 192 { 0xA9, OP_I386, I386OP(test_ax_i16), I386OP(test_eax_i32), }, 193 { 0xAA, OP_I386, I386OP(stosb), I386OP(stosb), }, 194 { 0xAB, OP_I386, I386OP(stosw), I386OP(stosd), }, 195 { 0xAC, OP_I386, I386OP(lodsb), I386OP(lodsb), }, 196 { 0xAD, OP_I386, I386OP(lodsw), I386OP(lodsd), }, 197 { 0xAE, OP_I386, I386OP(scasb), I386OP(scasb), }, 198 { 0xAF, OP_I386, I386OP(scasw), I386OP(scasd), }, 199 { 0xB0, OP_I386, I386OP(mov_al_i8), I386OP(mov_al_i8), }, 200 { 0xB1, OP_I386, I386OP(mov_cl_i8), I386OP(mov_cl_i8), }, 201 { 0xB2, OP_I386, I386OP(mov_dl_i8), I386OP(mov_dl_i8), }, 202 { 0xB3, OP_I386, I386OP(mov_bl_i8), I386OP(mov_bl_i8), }, 203 { 0xB4, OP_I386, I386OP(mov_ah_i8), I386OP(mov_ah_i8), }, 204 { 0xB5, OP_I386, I386OP(mov_ch_i8), I386OP(mov_ch_i8), }, 205 { 0xB6, OP_I386, I386OP(mov_dh_i8), I386OP(mov_dh_i8), }, 206 { 0xB7, OP_I386, I386OP(mov_bh_i8), I386OP(mov_bh_i8), }, 207 { 0xB8, OP_I386, I386OP(mov_ax_i16), I386OP(mov_eax_i32), }, 208 { 0xB9, OP_I386, I386OP(mov_cx_i16), I386OP(mov_ecx_i32), }, 209 { 0xBA, OP_I386, I386OP(mov_dx_i16), I386OP(mov_edx_i32), }, 210 { 0xBB, OP_I386, I386OP(mov_bx_i16), I386OP(mov_ebx_i32), }, 211 { 0xBC, OP_I386, I386OP(mov_sp_i16), I386OP(mov_esp_i32), }, 212 { 0xBD, OP_I386, I386OP(mov_bp_i16), I386OP(mov_ebp_i32), }, 213 { 0xBE, OP_I386, I386OP(mov_si_i16), I386OP(mov_esi_i32), }, 214 { 0xBF, OP_I386, I386OP(mov_di_i16), I386OP(mov_edi_i32), }, 215 { 0xC0, OP_I386, I386OP(groupC0_8), I386OP(groupC0_8), }, 216 { 0xC1, OP_I386, I386OP(groupC1_16), I386OP(groupC1_32), }, 217 { 0xC2, OP_I386, I386OP(ret_near16_i16), I386OP(ret_near32_i16), }, 218 { 0xC3, OP_I386, I386OP(ret_near16), I386OP(ret_near32), }, 219 { 0xC4, OP_I386, I386OP(les16), I386OP(les32), }, 220 { 0xC5, OP_I386, I386OP(lds16), I386OP(lds32), }, 221 { 0xC6, OP_I386, I386OP(mov_rm8_i8), I386OP(mov_rm8_i8), }, 222 { 0xC7, OP_I386, I386OP(mov_rm16_i16), I386OP(mov_rm32_i32), }, 223 { 0xC8, OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 224 { 0xC9, OP_I386, I386OP(leave16), I386OP(leave32), }, 225 { 0xCA, OP_I386, I386OP(retf_i16), I386OP(retf_i32), }, 226 { 0xCB, OP_I386, I386OP(retf16), I386OP(retf32), }, 227 { 0xCC, OP_I386, I386OP(int3), I386OP(int3), }, 228 { 0xCD, OP_I386, I386OP(int), I386OP(int), }, 229 { 0xCE, OP_I386, I386OP(into), I386OP(into), }, 230 { 0xCF, OP_I386, I386OP(iret16), I386OP(iret32), }, 231 { 0xD0, OP_I386, I386OP(groupD0_8), I386OP(groupD0_8), }, 232 { 0xD1, OP_I386, I386OP(groupD1_16), I386OP(groupD1_32), }, 233 { 0xD2, OP_I386, I386OP(groupD2_8), I386OP(groupD2_8), }, 234 { 0xD3, OP_I386, I386OP(groupD3_16), I386OP(groupD3_32), }, 235 { 0xD4, OP_I386, I386OP(aam), I386OP(aam), }, 236 { 0xD5, OP_I386, I386OP(aad), I386OP(aad), }, 237 { 0xD6, OP_I386, I386OP(setalc), I386OP(setalc), }, 238 { 0xD7, OP_I386, I386OP(xlat16), I386OP(xlat32), }, 239 { 0xD8, OP_I386, I386OP(escape), I386OP(escape), }, 240 { 0xD9, OP_I386, I386OP(escape), I386OP(escape), }, 241 { 0xDA, OP_I386, I386OP(escape), I386OP(escape), }, 242 { 0xDB, OP_I386, I386OP(escape), I386OP(escape), }, 243 { 0xDC, OP_I386, I386OP(escape), I386OP(escape), }, 244 { 0xDD, OP_I386, I386OP(escape), I386OP(escape), }, 245 { 0xDE, OP_I386, I386OP(escape), I386OP(escape), }, 246 { 0xDF, OP_I386, I386OP(escape), I386OP(escape), }, 247 { 0xD8, OP_FPU, I386OP(fpu_group_d8), I386OP(fpu_group_d8), }, 248 { 0xD9, OP_FPU, I386OP(fpu_group_d9), I386OP(fpu_group_d9), }, 249 { 0xDA, OP_FPU, I386OP(fpu_group_da), I386OP(fpu_group_da), }, 250 { 0xDB, OP_FPU, I386OP(fpu_group_db), I386OP(fpu_group_db), }, 251 { 0xDC, OP_FPU, I386OP(fpu_group_dc), I386OP(fpu_group_dc), }, 252 { 0xDD, OP_FPU, I386OP(fpu_group_dd), I386OP(fpu_group_dd), }, 253 { 0xDE, OP_FPU, I386OP(fpu_group_de), I386OP(fpu_group_de), }, 254 { 0xDF, OP_FPU, I386OP(fpu_group_df), I386OP(fpu_group_df), }, 255 { 0xE0, OP_I386, I386OP(loopne16), I386OP(loopne32), }, 256 { 0xE1, OP_I386, I386OP(loopz16), I386OP(loopz32), }, 257 { 0xE2, OP_I386, I386OP(loop16), I386OP(loop32), }, 258 { 0xE3, OP_I386, I386OP(jcxz16), I386OP(jcxz32), }, 259 { 0xE4, OP_I386, I386OP(in_al_i8), I386OP(in_al_i8), }, 260 { 0xE5, OP_I386, I386OP(in_ax_i8), I386OP(in_eax_i8), }, 261 { 0xE6, OP_I386, I386OP(out_al_i8), I386OP(out_al_i8), }, 262 { 0xE7, OP_I386, I386OP(out_ax_i8), I386OP(out_eax_i8), }, 263 { 0xE8, OP_I386, I386OP(call_rel16), I386OP(call_rel32), }, 264 { 0xE9, OP_I386, I386OP(jmp_rel16), I386OP(jmp_rel32), }, 265 { 0xEA, OP_I386, I386OP(jmp_abs16), I386OP(jmp_abs32), }, 266 { 0xEB, OP_I386, I386OP(jmp_rel8), I386OP(jmp_rel8), }, 267 { 0xEC, OP_I386, I386OP(in_al_dx), I386OP(in_al_dx), }, 268 { 0xED, OP_I386, I386OP(in_ax_dx), I386OP(in_eax_dx), }, 269 { 0xEE, OP_I386, I386OP(out_al_dx), I386OP(out_al_dx), }, 270 { 0xEF, OP_I386, I386OP(out_ax_dx), I386OP(out_eax_dx), }, 271 { 0xF0, OP_I386, I386OP(lock), I386OP(lock), }, 272 { 0xF1, OP_I386, I386OP(invalid), I386OP(invalid), }, 273 { 0xF2, OP_I386, I386OP(repne), I386OP(repne), }, 274 { 0xF3, OP_I386, I386OP(rep), I386OP(rep), }, 275 { 0xF4, OP_I386, I386OP(hlt), I386OP(hlt), }, 276 { 0xF5, OP_I386, I386OP(cmc), I386OP(cmc), }, 277 { 0xF6, OP_I386, I386OP(groupF6_8), I386OP(groupF6_8), }, 278 { 0xF7, OP_I386, I386OP(groupF7_16), I386OP(groupF7_32), }, 279 { 0xF8, OP_I386, I386OP(clc), I386OP(clc), }, 280 { 0xF9, OP_I386, I386OP(stc), I386OP(stc), }, 281 { 0xFA, OP_I386, I386OP(cli), I386OP(cli), }, 282 { 0xFB, OP_I386, I386OP(sti), I386OP(sti), }, 283 { 0xFC, OP_I386, I386OP(cld), I386OP(cld), }, 284 { 0xFD, OP_I386, I386OP(std), I386OP(std), }, 285 { 0xFE, OP_I386, I386OP(groupFE_8), I386OP(groupFE_8), }, 286 { 0xFF, OP_I386, I386OP(groupFF_16), I386OP(groupFF_32), }, 287 { 0x00, OP_2BYTE|OP_I386, I386OP(group0F00_16), I386OP(group0F00_32), }, 288 { 0x01, OP_2BYTE|OP_I386, I386OP(group0F01_16), I386OP(group0F01_32), }, 289 { 0x02, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 290 { 0x03, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 291 { 0x06, OP_2BYTE|OP_I386, I386OP(clts), I386OP(clts), }, 292 { 0x08, OP_2BYTE|OP_I486, I486OP(invd), I486OP(invd), }, 293 { 0x09, OP_2BYTE|OP_I486, I486OP(wbinvd), I486OP(wbinvd), }, 294 { 0x0B, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 295 { 0x20, OP_2BYTE|OP_I386, I386OP(mov_r32_cr), I386OP(mov_r32_cr), }, 296 { 0x21, OP_2BYTE|OP_I386, I386OP(mov_r32_dr), I386OP(mov_r32_dr), }, 297 { 0x22, OP_2BYTE|OP_I386, I386OP(mov_cr_r32), I386OP(mov_cr_r32), }, 298 { 0x23, OP_2BYTE|OP_I386, I386OP(mov_dr_r32), I386OP(mov_dr_r32), }, 299 { 0x24, OP_2BYTE|OP_I386, I386OP(mov_r32_tr), I386OP(mov_r32_tr), }, 300 { 0x26, OP_2BYTE|OP_I386, I386OP(mov_tr_r32), I386OP(mov_tr_r32), }, 301 { 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), }, 302 { 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), }, 303 { 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), }, 304 { 0x74, OP_2BYTE|OP_CYRIX, I386OP(cyrix_unknown), I386OP(cyrix_unknown), }, 305 { 0x80, OP_2BYTE|OP_I386, I386OP(jo_rel16), I386OP(jo_rel32), }, 306 { 0x81, OP_2BYTE|OP_I386, I386OP(jno_rel16), I386OP(jno_rel32), }, 307 { 0x82, OP_2BYTE|OP_I386, I386OP(jc_rel16), I386OP(jc_rel32), }, 308 { 0x83, OP_2BYTE|OP_I386, I386OP(jnc_rel16), I386OP(jnc_rel32), }, 309 { 0x84, OP_2BYTE|OP_I386, I386OP(jz_rel16), I386OP(jz_rel32), }, 310 { 0x85, OP_2BYTE|OP_I386, I386OP(jnz_rel16), I386OP(jnz_rel32), }, 311 { 0x86, OP_2BYTE|OP_I386, I386OP(jbe_rel16), I386OP(jbe_rel32), }, 312 { 0x87, OP_2BYTE|OP_I386, I386OP(ja_rel16), I386OP(ja_rel32), }, 313 { 0x88, OP_2BYTE|OP_I386, I386OP(js_rel16), I386OP(js_rel32), }, 314 { 0x89, OP_2BYTE|OP_I386, I386OP(jns_rel16), I386OP(jns_rel32), }, 315 { 0x8A, OP_2BYTE|OP_I386, I386OP(jp_rel16), I386OP(jp_rel32), }, 316 { 0x8B, OP_2BYTE|OP_I386, I386OP(jnp_rel16), I386OP(jnp_rel32), }, 317 { 0x8C, OP_2BYTE|OP_I386, I386OP(jl_rel16), I386OP(jl_rel32), }, 318 { 0x8D, OP_2BYTE|OP_I386, I386OP(jge_rel16), I386OP(jge_rel32), }, 319 { 0x8E, OP_2BYTE|OP_I386, I386OP(jle_rel16), I386OP(jle_rel32), }, 320 { 0x8F, OP_2BYTE|OP_I386, I386OP(jg_rel16), I386OP(jg_rel32), }, 321 { 0x90, OP_2BYTE|OP_I386, I386OP(seto_rm8), I386OP(seto_rm8), }, 322 { 0x91, OP_2BYTE|OP_I386, I386OP(setno_rm8), I386OP(setno_rm8), }, 323 { 0x92, OP_2BYTE|OP_I386, I386OP(setc_rm8), I386OP(setc_rm8), }, 324 { 0x93, OP_2BYTE|OP_I386, I386OP(setnc_rm8), I386OP(setnc_rm8), }, 325 { 0x94, OP_2BYTE|OP_I386, I386OP(setz_rm8), I386OP(setz_rm8), }, 326 { 0x95, OP_2BYTE|OP_I386, I386OP(setnz_rm8), I386OP(setnz_rm8), }, 327 { 0x96, OP_2BYTE|OP_I386, I386OP(setbe_rm8), I386OP(setbe_rm8), }, 328 { 0x97, OP_2BYTE|OP_I386, I386OP(seta_rm8), I386OP(seta_rm8), }, 329 { 0x98, OP_2BYTE|OP_I386, I386OP(sets_rm8), I386OP(sets_rm8), }, 330 { 0x99, OP_2BYTE|OP_I386, I386OP(setns_rm8), I386OP(setns_rm8), }, 331 { 0x9A, OP_2BYTE|OP_I386, I386OP(setp_rm8), I386OP(setp_rm8), }, 332 { 0x9B, OP_2BYTE|OP_I386, I386OP(setnp_rm8), I386OP(setnp_rm8), }, 333 { 0x9C, OP_2BYTE|OP_I386, I386OP(setl_rm8), I386OP(setl_rm8), }, 334 { 0x9D, OP_2BYTE|OP_I386, I386OP(setge_rm8), I386OP(setge_rm8), }, 335 { 0x9E, OP_2BYTE|OP_I386, I386OP(setle_rm8), I386OP(setle_rm8), }, 336 { 0x9F, OP_2BYTE|OP_I386, I386OP(setg_rm8), I386OP(setg_rm8), }, 337 { 0xA0, OP_2BYTE|OP_I386, I386OP(push_fs16), I386OP(push_fs32), }, 338 { 0xA1, OP_2BYTE|OP_I386, I386OP(pop_fs16), I386OP(pop_fs32), }, 339 { 0xA2, OP_2BYTE|OP_I486, I486OP(cpuid), I486OP(cpuid), }, 340 { 0xA3, OP_2BYTE|OP_I386, I386OP(bt_rm16_r16), I386OP(bt_rm32_r32), }, 341 { 0xA4, OP_2BYTE|OP_I386, I386OP(shld16_i8), I386OP(shld32_i8), }, 342 { 0xA5, OP_2BYTE|OP_I386, I386OP(shld16_cl), I386OP(shld32_cl), }, 343 { 0xA8, OP_2BYTE|OP_I386, I386OP(push_gs16), I386OP(push_gs32), }, 344 { 0xA9, OP_2BYTE|OP_I386, I386OP(pop_gs16), I386OP(pop_gs32), }, 345 { 0xAA, OP_2BYTE|OP_I386, I386OP(unimplemented), I386OP(unimplemented), }, 346 { 0xAB, OP_2BYTE|OP_I386, I386OP(bts_rm16_r16), I386OP(bts_rm32_r32), }, 347 { 0xAC, OP_2BYTE|OP_I386, I386OP(shrd16_i8), I386OP(shrd32_i8), }, 348 { 0xAD, OP_2BYTE|OP_I386, I386OP(shrd16_cl), I386OP(shrd32_cl), }, 349 { 0xAE, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(invalid), }, 350 { 0xAF, OP_2BYTE|OP_I386, I386OP(imul_r16_rm16), I386OP(imul_r32_rm32), }, 351 { 0xB2, OP_2BYTE|OP_I386, I386OP(lss16), I386OP(lss32), }, 352 { 0xB3, OP_2BYTE|OP_I386, I386OP(btr_rm16_r16), I386OP(btr_rm32_r32), }, 353 { 0xB4, OP_2BYTE|OP_I386, I386OP(lfs16), I386OP(lfs32), }, 354 { 0xB5, OP_2BYTE|OP_I386, I386OP(lgs16), I386OP(lgs32), }, 355 { 0xB6, OP_2BYTE|OP_I386, I386OP(movzx_r16_rm8), I386OP(movzx_r32_rm8), }, 356 { 0xB7, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movzx_r32_rm16), }, 357 { 0xBA, OP_2BYTE|OP_I386, I386OP(group0FBA_16), I386OP(group0FBA_32), }, 358 { 0xBB, OP_2BYTE|OP_I386, I386OP(btc_rm16_r16), I386OP(btc_rm32_r32), }, 359 { 0xBC, OP_2BYTE|OP_I386, I386OP(bsf_r16_rm16), I386OP(bsf_r32_rm32), }, 360 { 0xBD, OP_2BYTE|OP_I386, I386OP(bsr_r16_rm16), I386OP(bsr_r32_rm32), }, 361 { 0xBE, OP_2BYTE|OP_I386, I386OP(movsx_r16_rm8), I386OP(movsx_r32_rm8), }, 362 { 0xBF, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movsx_r32_rm16), }, 363 }; 364