|
|
/*++
Copyright (c) 1995-1998 Microsoft Corporation
Module Name:
ds32tbl.c
Abstract: Dispatch tables for instructions with no DATA: override. It is used for both DS: and FS: overrides.
Author:
29-Jun-1995 BarryBo
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <stdio.h>
#include "threadst.h"
#include "instr.h"
#include "decoderp.h"
#include "bytefns.h"
#include "dwordfns.h"
#include "miscfns.h"
#include "floatfns.h"
pfnDispatchInstruction Dispatch32[256] = { // 0
add_m_r8, add_m_r32, add_r_m8, add_r_m32, add_a_i8, add_a_i32, push_es, pop_es, // 8
or_m_r8, or_m_r32, or_r_m8, or_r_m32, or_a_i8, or_a_i32, push_cs, dispatch232, // 10
adc_m_r8, adc_m_r32, adc_r_m8, adc_r_m32, adc_a_i8, adc_a_i32, push_ss, pop_ss, // 18
sbb_m_r8, sbb_m_r32, sbb_r_m8, sbb_r_m32, sbb_a_i8, sbb_a_i32, push_ds, pop_ds, // 20
and_m_r8, and_m_r32, and_r_m8, and_r_m32, and_a_i8, and_a_i32, ProcessPrefixes, // es:
daa, // 28
sub_m_r8, sub_m_r32, sub_r_m8, sub_r_m32, sub_a_i8, sub_a_i32, ProcessPrefixes, // cs:
das, // 30
xor_m_r8, xor_m_r32, xor_r_m8, xor_r_m32, xor_a_i8, xor_a_i32, ProcessPrefixes, // ss:
aaa, // 38
cmp_m_r8, cmp_m_r32, cmp_r_m8, cmp_r_m32, cmp_a_i8, cmp_a_i32, ProcessPrefixes, // ds:
aas, // 40
inc_ax32, inc_cx32, inc_dx32, inc_bx32, inc_sp32, inc_bp32, inc_si32, inc_di32, // 48
dec_ax32, dec_cx32, dec_dx32, dec_bx32, dec_sp32, dec_bp32, dec_si32, dec_di32, // 50
push_ax32, push_cx32, push_dx32, push_bx32, push_sp32, push_bp32, push_si32, push_di32, // 58
pop_ax32, pop_cx32, pop_dx32, pop_bx32, pop_sp32, pop_bp32, pop_si32, pop_di32, // 60
pusha32, popa32, bound32, arpl, ProcessPrefixes, // fs:
ProcessPrefixes, // gs:
ProcessPrefixes, // data: prefix
ProcessPrefixes, // adr: prefix
// 68
push_iw32, imul_rw_m_iw32, push_ibs32, imul_rw_m_ib32, privileged, // in_ib_dx
privileged, // in_iw_dx
privileged, // out_ib_dx
privileged, // out_iw_dx
// 70
jo8, jno8, jb8, jae8, je8, jne8, jbe8, ja8, // 78
js8, jns8, jp8, jnp8, jl8, jnl8, jle8, jg8, // 80
GROUP_18, GROUP_132, bad, GROUP_1WS32, test_r_m8, test_r_m32, xchg_r_m8, xchg_r_m32, // 88
mov_m_r8, mov_m_r32, mov_r_m8, mov_r_m32, mov_mw_seg, lea_rw_mw32, mov_seg_mw, pop_mw32, // 90
nop, xchg_ax_cx32, xchg_ax_dx32, xchg_ax_bx32, xchg_ax_sp32, xchg_ax_bp32, xchg_ax_si32, xchg_ax_di32, // 98
cbw32, cwd32, call_md, wait, pushf32, popf32, sahf, lahf, // a0
mov_a_m8, mov_a_m32, mov_m_a8, mov_m_a32, movs8, movs32, cmps8, cmps32, // a8
test_a_i8, test_a_i32, stos8, stos32, lods8, lods32, scas8, scas32, // b0
mov_a_i8, mov_c_i8, mov_d_i8, mov_b_i8, mov_ah_ib, mov_ch_ib, mov_dh_ib, mov_bh_ib, // b8
mov_a_i32, mov_c_i32, mov_d_i32, mov_b_i32, mov_sp_iw32, mov_bp_iw32, mov_si_iw32, mov_di_iw32, // c0
GROUP_28, GROUP_232, retn_i32, retn32, les_rw_mw32, lds_rw_mw32, mov_m_i8, mov_m_i32, // c8
enter32, leave32, retf_i32, retf32, int3, int_ib, into, iret, // d0
GROUP_2_18, GROUP_2_132, GROUP_2_CL8, GROUP_2_CL32, aam_ib, aad_ib, bad, xlat, // d8
FLOAT_GP0, FLOAT_GP1, FLOAT_GP2, FLOAT_GP3, FLOAT_GP4, FLOAT_GP5, FLOAT_GP6, FLOAT_GP7, // e0
loopne_b32, loope_b32, loop_b32, jcxz_b32, privileged, // in_al_memb
privileged, // in_ax_memb
privileged, // out_memb_al
privileged, // out_memb_ax
// e8
call_rel32, jmp_rel32, jmpf_md, jmp_jb, privileged, // in_al_dx
privileged, // in_ax_dx
privileged, // out_dx_al
privileged, // out_dx_ax
// f0
ProcessPrefixes, // lock: prefix
bad, ProcessPrefixes, // repnz prefix
ProcessPrefixes, // repz prefix
privileged, // halt
cmc, GROUP_38, GROUP_332, // f8
clc, stc, privileged, // cli
privileged, // sti
cld, std, GROUP_4, GROUP_532 };
pfnDispatchInstruction Dispatch232[256] = { // 0
GROUP_6, GROUP_7, lar32, lsl32, bad, bad, privileged, // clts
bad, // 8
bad, bad, bad, bad, bad, bad, bad, bad, // 10
bad, bad, bad, bad, bad, bad, bad, bad, // 18
bad, bad, bad, bad, bad, bad, bad, bad, // 20
privileged, // mov reg2W, eeeControl
privileged, // mov reg2W, eeeDebug
privileged, // mov eeeControl, reg2W
privileged, // mov eeeDebug, reg2W
privileged, // mov reg2W, eeeTest
bad, privileged, // mov eeeTest, reg2W
bad, // 28
bad, bad, bad, bad, bad, bad, bad, bad, // 30
bad, rdtsc, bad, bad, bad, bad, bad, bad, // 38
bad, bad, bad, bad, bad, bad, bad, bad, // 40
bad, bad, bad, bad, bad, bad, bad, bad, // 48
bad, bad, bad, bad, bad, bad, bad, bad, // 50
bad, bad, bad, bad, bad, bad, bad, bad, // 58
bad, bad, bad, bad, bad, bad, bad, bad, // 60
bad, bad, bad, bad, bad, bad, bad, bad, // 68
bad, bad, bad, bad, bad, bad, bad, bad, // 70
bad, bad, bad, bad, bad, bad, bad, bad, // 78
bad, bad, bad, bad, bad, bad, bad, bad, // 80
jo32, jno32, jb32, jae32, je32, jne32, jbe32, ja32, // 88
js32, jns32, jp32, jnp32, jl32, jnl32, jle32, jg32, // 90
seto_modrmb, setno_modrmb, setb_modrmb, setae_modrmb, sete_modrmb, setne_modrmb, setbe_modrmb, seta_modrmb, // 98
sets_modrmb, setns_modrmb, setp_modrmb, setnp_modrmb, setl_modrmb, setge_modrmb, setle_modrmb, setg_modrmb, // a0
push_fs, pop_fs, cpuid, bt_m_r32, shld_regw_modrmw_immb32, shld_regw_modrmw_cl32, bad, bad, // a8
push_gs, pop_gs, bad, bts_m_r32, shrd_regw_modrmw_immb32, shrd_regw_modrmw_cl32, bad, imul_regw_modrmw32, // b0
cmpxchg_m_r8, cmpxchg_m_r32, lss_rw_mw32, btr_m_r32, lfs_rw_mw32, lgs_rw_mw32, movzx_regw_modrmb32, movzx_regw_modrmw, // b8
bad, bad, GROUP_832, btc_m_r32, bsf_modrmw_regw32, bsr_modrmw_regw32, movsx_regw_modrmb32, movsx_regw_modrmw, // c0
xadd_m_r8, xadd_m_r32, bad, bad, bad, bad, bad, cmpxchg8b, // c8
bswap_eax, bswap_ecx, bswap_edx, bswap_ebx, bswap_esp, bswap_ebp, bswap_esi, bswap_edi, // d0
bad, bad, bad, bad, bad, bad, bad, bad, // d8
bad, bad, bad, bad, bad, bad, bad, bad, // e0
bad, bad, bad, bad, bad, bad, bad, bad, // e8
bad, bad, bad, bad, bad, bad, bad, bad, // f0
bad, bad, bad, bad, bad, bad, bad, bad, // f8
bad, bad, bad, bad, bad, bad, bad, bad };
|