windows-nt/Source/XPSP1/NT/base/wow64/mscpu/decoder/modrm.c

3428 lines
130 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
mod_rm.c
Abstract:
Mod/Rm/Reg decoder. Compiled multiple times to generate the following
functions: mod_rm_reg8 - for 8-bit integer instructions
mod_rm_reg16 - for 16-bit integer instructions
mod_rm_reg32 - for 32-bit integer instructions
mod_rm_regst - for floating-point instructions (mod=11
indicates rm bits specify ST(i)).
mod_rm_seg16 - for 16-bit integer instructions which
specify a segment register in the remaining
bits.
Author:
29-Jun-1995 BarryBo
Revision History:
--*/
// THIS FILE IS #include'd INTO FILES WHICH DEFINE THE FOLLOWING MACROS:
// MOD_RM_DECODER - name of the decoder
// MOD11_RM000 - the name of the thing to use when mod=11,rm=000.
// MOD11_RM001 - mod=11,rm=001
// ...
// MOD11_RM111 - mod=11,rm=111
//
// REG000 - the name of the register to use when reg=000
// ...
// REG111 - reg=111
int MOD_RM_DECODER(PDECODERSTATE State, POPERAND op1, POPERAND op2)
{
int cbInstr;
OPERAND ScratchOperand;
if (op2 == NULL) {
// If caller doesn't care about operand #2, then store the results
// to a scratch structure.
op2 = &ScratchOperand;
}
op2->Type = OPND_REGREF;
if (State->AdrPrefix) {
// ADR: prefix specified.
// mm aaa rrr
// | | |
// | | +--- 'rm' bits from mod/rm
// | +------- reg bits
// +---------- 'mod' bits from mod/rm
switch (*(PBYTE)(eipTemp+1)) {
case 0x00: // mod/rm = 00 000, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG000;
break;
case 0x01: // mod/rm = 00 001, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG000;
break;
case 0x02: // mod/rm = 00 010, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG000;
break;
case 0x03: // mod/rm = 00 011, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG000;
break;
case 0x04: // mod/rm = 00 100, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG000;
break;
case 0x05: // mod/rm = 00 101, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG000;
break;
case 0x06: // mod/rm = 00 110, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x07: // mod/rm = 00 111, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG000;
break;
case 0x08: // mod/rm = 00 000, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG001;
break;
case 0x09: // mod/rm = 00 001, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG001;
break;
case 0x0a: // mod/rm = 00 010, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op2->IndexReg = GP_SI;
op2->Reg = REG001;
break;
case 0x0b: // mod/rm = 00 011, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op2->IndexReg = GP_DI;
op2->Reg = REG001;
break;
case 0x0c: // mod/rm = 00 100, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG001;
break;
case 0x0d: // mod/rm = 00 101, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG001;
break;
case 0x0e: // mod/rm = 00 110, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x0f: // mod/rm = 00 111, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG001;
break;
case 0x10: // mod/rm = 00 000, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG010;
break;
case 0x11: // mod/rm = 00 001, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG010;
break;
case 0x12: // mod/rm = 00 010, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG010;
break;
case 0x13: // mod/rm = 00 011, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG010;
break;
case 0x14: // mod/rm = 00 100, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG010;
break;
case 0x15: // mod/rm = 00 101, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG010;
break;
case 0x16: // mod/rm = 00 110, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x17: // mod/rm = 00 111, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG010;
break;
case 0x18: // mod/rm = 00 000, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG011;
break;
case 0x19: // mod/rm = 00 001, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Reg = GP_DI;
op2->Reg = REG011;
break;
case 0x1a: // mod/rm = 00 010, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG011;
break;
case 0x1b: // mod/rm = 00 011, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG011;
break;
case 0x1c: // mod/rm = 00 100, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG011;
break;
case 0x1d: // mod/rm = 00 101, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG011;
break;
case 0x1e: // mod/rm = 00 110, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x1f: // mod/rm = 00 111, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG011;
break;
case 0x20: // mod/rm = 00 000, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG100;
break;
case 0x21: // mod/rm = 00 001, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG100;
break;
case 0x22: // mod/rm = 00 010, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG100;
break;
case 0x23: // mod/rm = 00 011, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG100;
break;
case 0x24: // mod/rm = 00 100, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG100;
break;
case 0x25: // mod/rm = 00 101, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG100;
break;
case 0x26: // mod/rm = 00 110, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0x27: // mod/rm = 00 111, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG100;
break;
case 0x28: // mod/rm = 00 000, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG101;
break;
case 0x29: // mod/rm = 00 001, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG101;
break;
case 0x2a: // mod/rm = 00 010, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG101;
break;
case 0x2b: // mod/rm = 00 011, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG101;
break;
case 0x2c: // mod/rm = 00 100, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG101;
break;
case 0x2d: // mod/rm = 00 101, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG101;
break;
case 0x2e: // mod/rm = 00 110, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0x2f: // mod/rm = 00 111, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG101;
break;
case 0x30: // mod/rm = 00 000, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG110;
break;
case 0x31: // mod/rm = 00 001, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG110;
break;
case 0x32: // mod/rm = 00 010, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG110;
break;
case 0x33: // mod/rm = 00 011, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG110;
break;
case 0x34: // mod/rm = 00 100, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG110;
break;
case 0x35: // mod/rm = 00 101, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG110;
break;
case 0x36: // mod/rm = 00 110, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0x37: // mod/rm = 00 111, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG110;
break;
case 0x38: // mod/rm = 00 000, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op2->Reg = REG111;
break;
case 0x39: // mod/rm = 00 001, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op2->Reg = REG111;
break;
case 0x3a: // mod/rm = 00 010, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op2->Reg = REG111;
break;
case 0x3b: // mod/rm = 00 011, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op2->Reg = REG111;
break;
case 0x3c: // mod/rm = 00 100, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op2->Reg = REG111;
break;
case 0x3d: // mod/rm = 00 101, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op2->Reg = REG111;
break;
case 0x3e: // mod/rm = 00 110, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0x3f: // mod/rm = 00 111, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0x40: // mod/rm = 01 000, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x41: // mod/rm = 01 001, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x42: // mod/rm = 01 010, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x43: // mod/rm = 01 011, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x44: // mod/rm = 01 100, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x45: // mod/rm = 01 101, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x46: // mod/rm = 01 110, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x47: // mod/rm = 01 111, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x48: // mod/rm = 01 000, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x49: // mod/rm = 01 001, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4a: // mod/rm = 01 010, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4b: // mod/rm = 01 011, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4c: // mod/rm = 01 100, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4d: // mod/rm = 01 101, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4e: // mod/rm = 01 110, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4f: // mod/rm = 01 111, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x50: // mod/rm = 01 000, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x51: // mod/rm = 01 001, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x52: // mod/rm = 01 010, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x53: // mod/rm = 01 011, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x54: // mod/rm = 01 100, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x55: // mod/rm = 01 101, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x56: // mod/rm = 01 110, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x57: // mod/rm = 01 111, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x58: // mod/rm = 01 000, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x59: // mod/rm = 01 001, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5a: // mod/rm = 01 010, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5b: // mod/rm = 01 011, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5c: // mod/rm = 01 100, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5d: // mod/rm = 01 101, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5e: // mod/rm = 01 110, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5f: // mod/rm = 01 111, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x60: // mod/rm = 01 000, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x61: // mod/rm = 01 001, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x62: // mod/rm = 01 010, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x63: // mod/rm = 01 011, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x64: // mod/rm = 01 100, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x65: // mod/rm = 01 101, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x66: // mod/rm = 01 110, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x67: // mod/rm = 01 111, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x68: // mod/rm = 01 000, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x69: // mod/rm = 01 001, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6a: // mod/rm = 01 010, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6b: // mod/rm = 01 011, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6c: // mod/rm = 01 100, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6d: // mod/rm = 01 101, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6e: // mod/rm = 01 110, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6f: // mod/rm = 01 111, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x70: // mod/rm = 01 000, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x71: // mod/rm = 01 001, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x72: // mod/rm = 01 010, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x73: // mod/rm = 01 011, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x74: // mod/rm = 01 100, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x75: // mod/rm = 01 101, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x76: // mod/rm = 01 110, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x77: // mod/rm = 01 111, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x78: // mod/rm = 01 000, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x79: // mod/rm = 01 001, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7a: // mod/rm = 01 010, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7b: // mod/rm = 01 011, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7c: // mod/rm = 01 100, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7d: // mod/rm = 01 101, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7e: // mod/rm = 01 110, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7f: // mod/rm = 01 111, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0x80: // mod/rm = 10 000, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x81: // mod/rm = 10 001, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x82: // mod/rm = 10 010, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x83: // mod/rm = 10 011, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x84: // mod/rm = 10 100, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x85: // mod/rm = 10 101, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x86: // mod/rm = 10 110, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x87: // mod/rm = 10 111, reg=000
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG000;
break;
case 0x88: // mod/rm = 10 000, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x89: // mod/rm = 10 001, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8a: // mod/rm = 10 010, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8b: // mod/rm = 10 011, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8c: // mod/rm = 10 100, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8d: // mod/rm = 10 101, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8e: // mod/rm = 10 110, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8f: // mod/rm = 10 111, reg=001
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG001;
break;
case 0x90: // mod/rm = 10 000, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x91: // mod/rm = 10 001, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x92: // mod/rm = 10 010, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x93: // mod/rm = 10 011, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x94: // mod/rm = 10 100, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x95: // mod/rm = 10 101, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x96: // mod/rm = 10 110, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x97: // mod/rm = 10 111, reg=010
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG010;
break;
case 0x98: // mod/rm = 10 000, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x99: // mod/rm = 10 001, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9a: // mod/rm = 10 010, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9b: // mod/rm = 10 011, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9c: // mod/rm = 10 100, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9d: // mod/rm = 10 101, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9e: // mod/rm = 10 110, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9f: // mod/rm = 10 111, reg=011
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG011;
break;
case 0xa0: // mod/rm = 10 000, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa1: // mod/rm = 10 001, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa2: // mod/rm = 10 010, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa3: // mod/rm = 10 011, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa4: // mod/rm = 10 100, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa5: // mod/rm = 10 101, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa6: // mod/rm = 10 110, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa7: // mod/rm = 10 111, reg=100
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa8: // mod/rm = 10 000, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xa9: // mod/rm = 10 001, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xaa: // mod/rm = 10 010, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xab: // mod/rm = 10 011, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xac: // mod/rm = 10 100, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xad: // mod/rm = 10 101, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xae: // mod/rm = 10 110, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xaf: // mod/rm = 10 111, reg=101
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG101;
break;
case 0xb0: // mod/rm = 10 000, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb1: // mod/rm = 10 001, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb2: // mod/rm = 10 010, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb3: // mod/rm = 10 011, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb4: // mod/rm = 10 100, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb5: // mod/rm = 10 101, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb6: // mod/rm = 10 110, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb7: // mod/rm = 10 111, reg=110
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb8: // mod/rm = 10 000, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xb9: // mod/rm = 10 001, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xba: // mod/rm = 10 010, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbb: // mod/rm = 10 011, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->IndexReg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbc: // mod/rm = 10 100, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_SI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbd: // mod/rm = 10 101, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_DI;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbe: // mod/rm = 10 110, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BP;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbf: // mod/rm = 10 111, reg=111
cbInstr = 3;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_BX;
op1->Immed = GET_SHORT(eipTemp+2);
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0xc0: // mod/rm = 11 000, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG000;
break;
case 0xc1: // mod/rm = 11 001, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG000;
break;
case 0xc2: // mod/rm = 11 010, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG000;
break;
case 0xc3: // mod/rm = 11 011, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG000;
break;
case 0xc4: // mod/rm = 11 100, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG000;
break;
case 0xc5: // mod/rm = 11 101, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG000;
break;
case 0xc6: // mod/rm = 11 110, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG000;
break;
case 0xc7: // mod/rm = 11 111, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG000;
break;
case 0xc8: // mod/rm = 11 000, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG001;
break;
case 0xc9: // mod/rm = 11 001, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG001;
break;
case 0xca: // mod/rm = 11 010, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG001;
break;
case 0xcb: // mod/rm = 11 011, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG001;
break;
case 0xcc: // mod/rm = 11 100, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG001;
break;
case 0xcd: // mod/rm = 11 101, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG001;
break;
case 0xce: // mod/rm = 11 110, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG001;
break;
case 0xcf: // mod/rm = 11 111, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG001;
break;
case 0xd0: // mod/rm = 11 000, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG010;
break;
case 0xd1: // mod/rm = 11 001, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG010;
break;
case 0xd2: // mod/rm = 11 010, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG010;
break;
case 0xd3: // mod/rm = 11 011, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG010;
break;
case 0xd4: // mod/rm = 11 100, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG010;
break;
case 0xd5: // mod/rm = 11 101, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG010;
break;
case 0xd6: // mod/rm = 11 110, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG010;
break;
case 0xd7: // mod/rm = 11 111, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG010;
break;
case 0xd8: // mod/rm = 11 000, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG011;
break;
case 0xd9: // mod/rm = 11 001, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG011;
break;
case 0xda: // mod/rm = 11 010, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG011;
break;
case 0xdb: // mod/rm = 11 011, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG011;
break;
case 0xdc: // mod/rm = 11 100, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG011;
break;
case 0xdd: // mod/rm = 11 101, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG011;
break;
case 0xde: // mod/rm = 11 110, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG011;
break;
case 0xdf: // mod/rm = 11 111, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG011;
break;
case 0xe0: // mod/rm = 11 000, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG100;
break;
case 0xe1: // mod/rm = 11 001, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG100;
break;
case 0xe2: // mod/rm = 11 010, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG100;
break;
case 0xe3: // mod/rm = 11 011, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG100;
break;
case 0xe4: // mod/rm = 11 100, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG100;
break;
case 0xe5: // mod/rm = 11 101, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG100;
break;
case 0xe6: // mod/rm = 11 110, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG100;
break;
case 0xe7: // mod/rm = 11 111, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG100;
break;
case 0xe8: // mod/rm = 11 000, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG101;
break;
case 0xe9: // mod/rm = 11 001, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG101;
break;
case 0xea: // mod/rm = 11 010, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG101;
break;
case 0xeb: // mod/rm = 11 011, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG101;
break;
case 0xec: // mod/rm = 11 100, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG101;
break;
case 0xed: // mod/rm = 11 101, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG101;
break;
case 0xee: // mod/rm = 11 110, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG101;
break;
case 0xef: // mod/rm = 11 111, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG101;
break;
case 0xf0: // mod/rm = 11 000, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG110;
break;
case 0xf1: // mod/rm = 11 001, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG110;
break;
case 0xf2: // mod/rm = 11 010, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG110;
break;
case 0xf3: // mod/rm = 11 011, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG110;
break;
case 0xf4: // mod/rm = 11 100, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG110;
break;
case 0xf5: // mod/rm = 11 101, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG110;
break;
case 0xf6: // mod/rm = 11 110, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG110;
break;
case 0xf7: // mod/rm = 11 111, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG110;
break;
case 0xf8: // mod/rm = 11 000, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG111;
break;
case 0xf9: // mod/rm = 11 001, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG111;
break;
case 0xfa: // mod/rm = 11 010, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG111;
break;
case 0xfb: // mod/rm = 11 011, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG111;
break;
case 0xfc: // mod/rm = 11 100, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG111;
break;
case 0xfd: // mod/rm = 11 101, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG111;
break;
case 0xfe: // mod/rm = 11 110, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG111;
break;
default:
case 0xff: // mod/rm = 11 111, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG111;
break;
}
#if DBG
State->AdrPrefix = FALSE;
#endif
return cbInstr;
}
// else no ADR: prefix found...
// mm aaa rrr
// | | |
// | | +--- 'rm' bits from mod/rm
// | +------- reg bits
// +---------- 'mod' bits from mod/rm
switch (*(PBYTE)(eipTemp+1)) {
case 0x00: // mod/rm = 00 000, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG000;
break;
case 0x01: // mod/rm = 00 001, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG000;
break;
case 0x02: // mod/rm = 00 010, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG000;
break;
case 0x03: // mod/rm = 00 011, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG000;
break;
case 0x04: // mod/rm = 00 100, reg=000
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG000;
break;
case 0x05: // mod/rm = 00 101, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x06: // mod/rm = 00 110, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG000;
break;
case 0x07: // mod/rm = 00 111, reg=000
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG000;
break;
case 0x08: // mod/rm = 00 000, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG001;
break;
case 0x09: // mod/rm = 00 001, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG001;
break;
case 0x0a: // mod/rm = 00 010, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG001;
break;
case 0x0b: // mod/rm = 00 011, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG001;
break;
case 0x0c: // mod/rm = 00 100, reg=001
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG001;
break;
case 0x0d: // mod/rm = 00 101, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x0e: // mod/rm = 00 110, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG001;
break;
case 0x0f: // mod/rm = 00 111, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG001;
break;
case 0x10: // mod/rm = 00 000, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG010;
break;
case 0x11: // mod/rm = 00 001, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG010;
break;
case 0x12: // mod/rm = 00 010, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG010;
break;
case 0x13: // mod/rm = 00 011, reg=001
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG010;
break;
case 0x14: // mod/rm = 00 100, reg=010
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG010;
break;
case 0x15: // mod/rm = 00 101, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x16: // mod/rm = 00 110, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG010;
break;
case 0x17: // mod/rm = 00 111, reg=010
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG010;
break;
case 0x18: // mod/rm = 00 000, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG011;
break;
case 0x19: // mod/rm = 00 001, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG011;
break;
case 0x1a: // mod/rm = 00 010, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG011;
break;
case 0x1b: // mod/rm = 00 011, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG011;
break;
case 0x1c: // mod/rm = 00 100, reg=011
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG011;
break;
case 0x1d: // mod/rm = 00 101, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x1e: // mod/rm = 00 110, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG011;
break;
case 0x1f: // mod/rm = 00 111, reg=011
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG011;
break;
case 0x20: // mod/rm = 00 000, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG100;
break;
case 0x21: // mod/rm = 00 001, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG100;
break;
case 0x22: // mod/rm = 00 010, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG100;
break;
case 0x23: // mod/rm = 00 011, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG100;
break;
case 0x24: // mod/rm = 00 100, reg=100
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG100;
break;
case 0x25: // mod/rm = 00 101, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0x26: // mod/rm = 00 110, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG100;
break;
case 0x27: // mod/rm = 00 111, reg=100
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG100;
break;
case 0x28: // mod/rm = 00 000, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG101;
break;
case 0x29: // mod/rm = 00 001, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG101;
break;
case 0x2a: // mod/rm = 00 010, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG101;
break;
case 0x2b: // mod/rm = 00 011, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG101;
break;
case 0x2c: // mod/rm = 00 100, reg=101
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG101;
break;
case 0x2d: // mod/rm = 00 101, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0x2e: // mod/rm = 00 110, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG101;
break;
case 0x2f: // mod/rm = 00 111, reg=101
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG101;
break;
case 0x30: // mod/rm = 00 000, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG110;
break;
case 0x31: // mod/rm = 00 001, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG110;
break;
case 0x32: // mod/rm = 00 010, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG110;
break;
case 0x33: // mod/rm = 00 011, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG110;
break;
case 0x34: // mod/rm = 00 100, reg=110
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG110;
break;
case 0x35: // mod/rm = 00 101, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0x36: // mod/rm = 00 110, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG110;
break;
case 0x37: // mod/rm = 00 111, reg=110
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG110;
break;
case 0x38: // mod/rm = 00 000, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op2->Reg = REG111;
break;
case 0x39: // mod/rm = 00 001, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op2->Reg = REG111;
break;
case 0x3a: // mod/rm = 00 010, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op2->Reg = REG111;
break;
case 0x3b: // mod/rm = 00 011, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op2->Reg = REG111;
break;
case 0x3c: // mod/rm = 00 100, reg=111
// s-i-b present
cbInstr = 1 + scaled_index((BYTE *)(eipTemp+1), op1);
op2->Reg = REG111;
break;
case 0x3d: // mod/rm = 00 101, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0x3e: // mod/rm = 00 110, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op2->Reg = REG111;
break;
case 0x3f: // mod/rm = 00 111, reg=111
cbInstr = 1;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0x40: // mod/rm = 01 000, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x41: // mod/rm = 01 001, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x42: // mod/rm = 01 010, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x43: // mod/rm = 01 011, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x44: // mod/rm = 01 100, reg=000
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG000;
break;
case 0x45: // mod/rm = 01 101, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x46: // mod/rm = 01 110, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x47: // mod/rm = 01 111, reg=000
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG000;
break;
case 0x48: // mod/rm = 01 000, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x49: // mod/rm = 01 001, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4a: // mod/rm = 01 010, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4b: // mod/rm = 01 011, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4c: // mod/rm = 01 100, reg=001
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG001;
break;
case 0x4d: // mod/rm = 01 101, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4e: // mod/rm = 01 110, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x4f: // mod/rm = 01 111, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG001;
break;
case 0x50: // mod/rm = 01 000, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x51: // mod/rm = 01 001, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x52: // mod/rm = 01 010, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x53: // mod/rm = 01 011, reg=001
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x54: // mod/rm = 01 100, reg=010
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG010;
break;
case 0x55: // mod/rm = 01 101, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x56: // mod/rm = 01 110, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x57: // mod/rm = 01 111, reg=010
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG010;
break;
case 0x58: // mod/rm = 01 000, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x59: // mod/rm = 01 001, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5a: // mod/rm = 01 010, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5b: // mod/rm = 01 011, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5c: // mod/rm = 01 100, reg=011
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG011;
break;
case 0x5d: // mod/rm = 01 101, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5e: // mod/rm = 01 110, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x5f: // mod/rm = 01 111, reg=011
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG011;
break;
case 0x60: // mod/rm = 01 000, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x61: // mod/rm = 01 001, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x62: // mod/rm = 01 010, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x63: // mod/rm = 01 011, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x64: // mod/rm = 01 100, reg=100
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG100;
break;
case 0x65: // mod/rm = 01 101, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x66: // mod/rm = 01 110, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x67: // mod/rm = 01 111, reg=100
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG100;
break;
case 0x68: // mod/rm = 01 000, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x69: // mod/rm = 01 001, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6a: // mod/rm = 01 010, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6b: // mod/rm = 01 011, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6c: // mod/rm = 01 100, reg=101
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG101;
break;
case 0x6d: // mod/rm = 01 101, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6e: // mod/rm = 01 110, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x6f: // mod/rm = 01 111, reg=101
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG101;
break;
case 0x70: // mod/rm = 01 000, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x71: // mod/rm = 01 001, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x72: // mod/rm = 01 010, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x73: // mod/rm = 01 011, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x74: // mod/rm = 01 100, reg=110
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG110;
break;
case 0x75: // mod/rm = 01 101, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x76: // mod/rm = 01 110, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x77: // mod/rm = 01 111, reg=110
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG110;
break;
case 0x78: // mod/rm = 01 000, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x79: // mod/rm = 01 001, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7a: // mod/rm = 01 010, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7b: // mod/rm = 01 011, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7c: // mod/rm = 01 100, reg=111
// s-i-b present
cbInstr = 2 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = (DWORD)(long)*(char *)(eipTemp+cbInstr);
op2->Reg = REG111;
break;
case 0x7d: // mod/rm = 01 101, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7e: // mod/rm = 01 110, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
case 0x7f: // mod/rm = 01 111, reg=111
cbInstr = 2;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = (DWORD)(long)*(char *)(eipTemp+2);
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0x80: // mod/rm = 10 000, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x81: // mod/rm = 10 001, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x82: // mod/rm = 10 010, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x83: // mod/rm = 10 011, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x84: // mod/rm = 10 100, reg=000
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG000;
break;
case 0x85: // mod/rm = 10 101, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x86: // mod/rm = 10 110, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x87: // mod/rm = 10 111, reg=000
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG000;
break;
case 0x88: // mod/rm = 10 000, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x89: // mod/rm = 10 001, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8a: // mod/rm = 10 010, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8b: // mod/rm = 10 011, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8c: // mod/rm = 10 100, reg=001
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG001;
break;
case 0x8d: // mod/rm = 10 101, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8e: // mod/rm = 10 110, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x8f: // mod/rm = 10 111, reg=001
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG001;
break;
case 0x90: // mod/rm = 10 000, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x91: // mod/rm = 10 001, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x92: // mod/rm = 10 010, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x93: // mod/rm = 10 011, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x94: // mod/rm = 10 100, reg=010
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG010;
break;
case 0x95: // mod/rm = 10 101, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x96: // mod/rm = 10 110, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x97: // mod/rm = 10 111, reg=010
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG010;
break;
case 0x98: // mod/rm = 10 000, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x99: // mod/rm = 10 001, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9a: // mod/rm = 10 010, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9b: // mod/rm = 10 011, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9c: // mod/rm = 10 100, reg=011
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG011;
break;
case 0x9d: // mod/rm = 10 101, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9e: // mod/rm = 10 110, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0x9f: // mod/rm = 10 111, reg=011
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG011;
break;
case 0xa0: // mod/rm = 10 000, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa1: // mod/rm = 10 001, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa2: // mod/rm = 10 010, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa3: // mod/rm = 10 011, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa4: // mod/rm = 10 100, reg=100
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG100;
break;
case 0xa5: // mod/rm = 10 101, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa6: // mod/rm = 10 110, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa7: // mod/rm = 10 111, reg=100
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG100;
break;
case 0xa8: // mod/rm = 10 000, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xa9: // mod/rm = 10 001, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xaa: // mod/rm = 10 010, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xab: // mod/rm = 10 011, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xac: // mod/rm = 10 100, reg=101
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG101;
break;
case 0xad: // mod/rm = 10 101, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xae: // mod/rm = 10 110, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xaf: // mod/rm = 10 111, reg=101
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG101;
break;
case 0xb0: // mod/rm = 10 000, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb1: // mod/rm = 10 001, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb2: // mod/rm = 10 010, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb3: // mod/rm = 10 011, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb4: // mod/rm = 10 100, reg=110
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG110;
break;
case 0xb5: // mod/rm = 10 101, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb6: // mod/rm = 10 110, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb7: // mod/rm = 10 111, reg=110
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG110;
break;
case 0xb8: // mod/rm = 10 000, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EAX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xb9: // mod/rm = 10 001, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ECX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xba: // mod/rm = 10 010, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbb: // mod/rm = 10 011, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBX;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbc: // mod/rm = 10 100, reg=111
// s-i-b present
cbInstr = 5 + scaled_index((BYTE *)(eipTemp+1), op1);
op1->Immed = GET_LONG(eipTemp+cbInstr-3);
op2->Reg = REG111;
break;
case 0xbd: // mod/rm = 10 101, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EBP;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbe: // mod/rm = 10 110, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_ESI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
case 0xbf: // mod/rm = 10 111, reg=111
cbInstr = 5;
op1->Type = OPND_ADDRREF;
op1->Reg = GP_EDI;
op1->Immed = GET_LONG(eipTemp+2);
op2->Reg = REG111;
break;
/////////////////////////////////////////////////////////////////////
case 0xc0: // mod/rm = 11 000, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG000;
break;
case 0xc1: // mod/rm = 11 001, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG000;
break;
case 0xc2: // mod/rm = 11 010, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG000;
break;
case 0xc3: // mod/rm = 11 011, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG000;
break;
case 0xc4: // mod/rm = 11 100, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG000;
break;
case 0xc5: // mod/rm = 11 101, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG000;
break;
case 0xc6: // mod/rm = 11 110, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG000;
break;
case 0xc7: // mod/rm = 11 111, reg=000
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG000;
break;
case 0xc8: // mod/rm = 11 000, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG001;
break;
case 0xc9: // mod/rm = 11 001, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG001;
break;
case 0xca: // mod/rm = 11 010, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG001;
break;
case 0xcb: // mod/rm = 11 011, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG001;
break;
case 0xcc: // mod/rm = 11 100, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG001;
break;
case 0xcd: // mod/rm = 11 101, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG001;
break;
case 0xce: // mod/rm = 11 110, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG001;
break;
case 0xcf: // mod/rm = 11 111, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG001;
break;
case 0xd0: // mod/rm = 11 000, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG010;
break;
case 0xd1: // mod/rm = 11 001, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG010;
break;
case 0xd2: // mod/rm = 11 010, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG010;
break;
case 0xd3: // mod/rm = 11 011, reg=001
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG010;
break;
case 0xd4: // mod/rm = 11 100, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG010;
break;
case 0xd5: // mod/rm = 11 101, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG010;
break;
case 0xd6: // mod/rm = 11 110, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG010;
break;
case 0xd7: // mod/rm = 11 111, reg=010
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG010;
break;
case 0xd8: // mod/rm = 11 000, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG011;
break;
case 0xd9: // mod/rm = 11 001, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG011;
break;
case 0xda: // mod/rm = 11 010, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG011;
break;
case 0xdb: // mod/rm = 11 011, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG011;
break;
case 0xdc: // mod/rm = 11 100, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG011;
break;
case 0xdd: // mod/rm = 11 101, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG011;
break;
case 0xde: // mod/rm = 11 110, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG011;
break;
case 0xdf: // mod/rm = 11 111, reg=011
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG011;
break;
case 0xe0: // mod/rm = 11 000, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG100;
break;
case 0xe1: // mod/rm = 11 001, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG100;
break;
case 0xe2: // mod/rm = 11 010, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG100;
break;
case 0xe3: // mod/rm = 11 011, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG100;
break;
case 0xe4: // mod/rm = 11 100, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG100;
break;
case 0xe5: // mod/rm = 11 101, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG100;
break;
case 0xe6: // mod/rm = 11 110, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG100;
break;
case 0xe7: // mod/rm = 11 111, reg=100
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG100;
break;
case 0xe8: // mod/rm = 11 000, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG101;
break;
case 0xe9: // mod/rm = 11 001, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG101;
break;
case 0xea: // mod/rm = 11 010, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG101;
break;
case 0xeb: // mod/rm = 11 011, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG101;
break;
case 0xec: // mod/rm = 11 100, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG101;
break;
case 0xed: // mod/rm = 11 101, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG101;
break;
case 0xee: // mod/rm = 11 110, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG101;
break;
case 0xef: // mod/rm = 11 111, reg=101
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG101;
break;
case 0xf0: // mod/rm = 11 000, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG110;
break;
case 0xf1: // mod/rm = 11 001, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG110;
break;
case 0xf2: // mod/rm = 11 010, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG110;
break;
case 0xf3: // mod/rm = 11 011, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG110;
break;
case 0xf4: // mod/rm = 11 100, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG110;
break;
case 0xf5: // mod/rm = 11 101, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG110;
break;
case 0xf6: // mod/rm = 11 110, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG110;
break;
case 0xf7: // mod/rm = 11 111, reg=110
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG110;
break;
case 0xf8: // mod/rm = 11 000, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM000;
op2->Reg = REG111;
break;
case 0xf9: // mod/rm = 11 001, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM001;
op2->Reg = REG111;
break;
case 0xfa: // mod/rm = 11 010, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM010;
op2->Reg = REG111;
break;
case 0xfb: // mod/rm = 11 011, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM011;
op2->Reg = REG111;
break;
case 0xfc: // mod/rm = 11 100, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM100;
op2->Reg = REG111;
break;
case 0xfd: // mod/rm = 11 101, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM101;
op2->Reg = REG111;
break;
case 0xfe: // mod/rm = 11 110, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM110;
op2->Reg = REG111;
break;
default:
case 0xff: // mod/rm = 11 111, reg=111
cbInstr = 1;
op1->Type = OPND_REGREF; op1->Reg = MOD11_RM111;
op2->Reg = REG111;
break;
}
return cbInstr;
}