📄 dasmcte.h
字号:
{ "11011 001 : mod 000 rm" , "fld dword ptr %0" , 0 } ,
{ "11011 101 : mod 000 rm" , "fld qword ptr %0" , 0 } ,
{ "11011 011 : mod 101 rm" , "fld tbyte ptr %0" , 0 } , // a voir
{ "11011 001 : 11 000 fpu:" , "fld %0" },
{ "11011 001 : 1110 1000:" , "fld1" , 0 } ,
{ "11011 001 : mod 101 rm" , "fldcw %0" , 0 } ,
{ "11011 001 : mod 100 rm" , "fldenv %0" , 0 } ,
{ "11011 001 : 1110 1010:" , "fldl2e" , 0 } ,
{ "11011 001 : 1110 1001:" , "fldl2t" , 0 } ,
{ "11011 001 : 1110 1100:" , "fldlg2" , 0 } ,
{ "11011 001 : 1110 1101:" , "fldln2" , 0 } ,
{ "11011 001 : 1110 1011:" , "fldpi" , 0 } ,
{ "11011 001 : 1110 1110:" , "fldz" , 0 } ,
{ "11011 000 : mod 001 rm" , "fmul dword ptr %0" , 0 } ,
{ "11011 100 : mod 001 rm" , "fmul qword ptr %0" , 0 } ,
{ "11011 000 : 11 001 fpu:" , "fmul st(0) , %0" , 0 } ,
{ "11011 100 : 11 001 fpu:" , "fmul %0 , st(0)" , 0 } ,
{ "11011 110 : 11 001 fpu:" , "fmulp %0 , st(0)" , 0 } ,
{ "11011 001 : 1101 0000:" , "fnop" , 0 } ,
{ "11011 001 : 1111 0011:" , "fpatan" , 0 } ,
{ "11011 001 : 1111 1000:" , "fprem" , 0 } ,
{ "11011 001 : 1111 0101:" , "fprem1" , 0 } ,
{ "11011 001 : 1111 0010:" , "fptan" , 0 } ,
{ "11011 001 : 1111 1100:" , "frndint" , 0 } ,
{ "11011 101 : mod 100 rm" , "frstor %0" , 0 } ,
{ "11011 101 : mod 110 rm" , "fsave %0" , 0 } ,
{ "11011 001 : 1111 1101:" , "fscale" , 0 } ,
{ "11011 001 : 1111 1110:" , "fsin" , 0 } ,
{ "11011 001 : 1111 1011:" , "fsincos" , 0 } ,
{ "11011 001 : 1111 1010:" , "fsqrt" , 0 } ,
{ "11011 001 : mod 010 rm" , "fst dword ptr %0" , 0 } ,
{ "11011 101 : mod 010 rm" , "fst qword ptr %0" , 0 } ,
{ "11011 101 : 11 010 fpu:" , "fst %0" , 0 } ,
{ "11011 001 : mod 111 rm" , "fstcw %0" , 0 } ,
{ "11011 001 : mod 110 rm" , "fstenv %0" , 0 } ,
{ "11011 001 : mod 011 rm" , "fstp dword ptr %0" , 0 } ,
{ "11011 101 : mod 011 rm" , "fstp qword ptr %0" , 0 } ,
{ "11011 011 : mod 111 rm" , "fstp tbyte ptr %0" , 0 } , // a voir
{ "11011 101 : 11 011 fpu:" , "fstp %0" , 0 } ,
{ "11011 111 : 1110 0000:" , "fstsw ax" , 0 } ,
{ "11011 101 : mod 111 rm" , "fstsw word ptr %0" , 0 } ,
{ "11011 000 : mod 100 rm" , "fsub dword ptr %0" , 0 } ,
{ "11011 100 : mod 100 rm" , "fsub qword ptr %0" , 0 } ,
{ "11011 000 : 11100 fpu:" , "fsub st(0) , %0" , 0 } ,
{ "11011 100 : 11101 fpu:" , "fsub %0 , st(0)" , 0 } ,
{ "11011 110 : 11101 fpu:" , "fsubp %0 , st(0)" , 0 } ,
{ "11011 000 : mod 101 rm" , "fsubr dword ptr %0" , 0 } ,
{ "11011 100 : mod 101 rm" , "fsubr qword ptr %0" , 0 } ,
{ "11011 000 : 11101 fpu:" , "fsubr st(0) , %0" , 0 } ,
{ "11011 100 : 11100 fpu:" , "fsubr %0 , st(0)" , 0 } ,
{ "11011 110 : 11100 fpu:" , "fsubrp %0 , st(0)" , 0 } ,
{ "11011 001 : 1110 0100:" , "ftst" , 0 } ,
{ "11011 101 : 1110 0 fpu:" , "fucom %0" , 0 } ,
{ "11011 101 : 1110 1 fpu:" , "fucomp %0" , 0 } ,
{ "11011 010 : 1110 1001:" , "fucompp" , 0 } ,
{ "11011 011 : 11 101 fpu:" , "fucomi" , 0 } ,
{ "11011 111 : 11 101 fpu:" , "fucomip" , 0 } ,
{ "11011 001 : 1110 0101:" , "fxam" , 0 } ,
{ "11011 001 : 1100 1fpu:" , "fxch %0" , 0 } ,
{ "11011 001 : 1111 0100:" , "fxtract" , 0 } ,
{ "11011 001 : 1111 0001:" , "fyl2x" , 0 } ,
{ "11011 001 : 1111 1001:" , "fyl2xp1" , 0 } ,
{ "1001 1011:" , "fwait" , 0 } ,
{ 0 , 0 , 0 }
};
////////////////////////////////////////////////////////////////////
// instructions privilegiees
static SOPContext pfnOPCPrivileged[] =
{
{ "0110 0011 : 11 g16 g16:" , "arpl %1 , %0" , 0 } ,
{ "0110 0011 : mod g16 rm" , "arpl %1 , %0" , 0 } ,
{ "0000 1111 : 0000 0110 :" , "clts" , 0 } ,
{ "1111 0100:" , "hlt" , 0 } ,
{ "1110 010w eax : i08" , "in %0 , %1" , 0 } ,
{ "1110 110w eax : " , "in %0 , dx" , 0 } ,
{ "0110 1100:" , "%r_insb" , 0 } ,
{ "oas 0110 1101:" , "%r_insw" , 0 } ,
{ "nas 0110 1101:" , "%r_insd" , 0 } ,
{ "0000 1111 : 0000 1000:" , "invd" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 111 rm" , "invlpg %p %0" , 0 } ,
{ "0000 1111 : 0000 0010 : 11 grg grg:" , "lar %0 , %1" , 0 } ,
{ "0000 1111 : 0000 0010 : mod grg rm" , "lar %0 ,%p %1 " , 0 } ,
{ "0000 1111 : 0000 0001 : mod 010 rm" , "lgdt %0" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 011 rm" , "lidt %0" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 010 grg:" , "lldt %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 010 rm" , "lldt %p %0" , 0 } ,
{ "0000 1111 : 0000 0001 : 11 110 grg:" , "lmsw %0" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 110 rm" , "lmsw %p %0" , 0 } ,
{ "1111 0000:" , "lock" , 0 } ,
{ "0000 1111 : 0000 0011 : 11 grg grg:" , "lsl %0 , %1" , 0 } ,
{ "0000 1111 : 0000 0011 : mod grg rm" , "lsl %0 , %p %1" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 011 grg:" , "ltr %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 011 rm" , "ltr %p %0" , 0 } ,
{ "0000 1111 : 0010 00d0 : 11 _cr grg:" , "mov %1 , %0" , 0 } ,
{ "0000 1111 : 0010 00d1 : 11 _dr grg:" , "mov %1 , %0" , 0 } ,
{ "1110 011w eax : i08" , "out %1 , %0" , 0 } ,
{ "1110 111w eax : " , "out dx , %0" , 0 } ,
{ "0110 1110:" , "%r_outsb" , 0 } ,
{ "oas 0110 1111:" , "%r_outsw" , 0 } ,
{ "nas 0110 1111:" , "%r_outsd" , 0 } ,
{ "0000 1111 : 0011 0010 :" , "rdmsr" , 0 } ,
{ "0000 1111 : 0011 0011 :" , "rdpmc" , 0 } ,
{ "0000 1111 : 0011 0001 :" , "rdtsc" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 000 rm" , "sgdt %p %0" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 000 grg:" , "sldt %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 000 rm" , "sldt %0" , 0 } ,
{ "0000 1111 : 1010 1010: " , "rsm" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 001 grg:" , "str %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 001 rm" , "str %0" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 001 rm" , "sidt %0" , 0 } ,
{ "0000 1111 : 0000 0001 : 11 100 grg:" , "smsw %0" , 0 } ,
{ "0000 1111 : 0000 0001 : mod 100 rm" , "smsw %0" , 0 } ,
{ "0000 1111 : 0000 1001 :" , "wbinvd" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 100 grg:" , "verr %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 100 rm" , "verr %p %0" , 0 } ,
{ "0000 1111 : 0000 0000 : 11 101 grg:" , "verw %0" , 0 } ,
{ "0000 1111 : 0000 0000 : mod 101 rm" , "verw %p %0" , 0 } ,
{ "0000 1111 : 0011 0000 :" , "wrmsr" , 0 } ,
{ 0 , 0 , 0 }
};
////////////////////////////////////////////////////////////////////
// instructions mmx
static SOPContext pfnOPCMmx[] =
{
{ "0000 1111 : 01110111: " , "emms" , 0 } ,
{ "0000 1111 : 011d1110: 11 xmm grg:" , "movd %0 , %1" , 0 } ,
{ "0000 1111 : 011d1110: mod xmm rm" , "movd %0 , %1" , 0 } ,
{ "0000 1111 : 011d1111: 11 xmm grg:" , "movq %0 , %1" , 0 } ,
{ "0000 1111 : 011d1111: mod xmm rm" , "movq %0 , %1" , 0 } ,
{ "0000 1111 : 01101011: 11 xmm xmm:" , "packssdw %0 , %1" , 0 } ,
{ "0000 1111 : 01101011: mod xmm rm" , "packssdw %0 , %1" , 0 } ,
{ "0000 1111 : 01100011: 11 xmm xmm:" , "packsswb %0 , %1" , 0 } ,
{ "0000 1111 : 01100011: mod xmm rm" , "packsswb %0 , %1" , 0 } ,
{ "0000 1111 : 01100111: 11 xmm xmm:" , "packuswb %0 , %1" , 0 } ,
{ "0000 1111 : 01100111: mod xmm rm" , "packuswb %0 , %1" , 0 } ,
{ "0000 1111 : 111111pp: 11 xmm xmm:" , "padd%g %0 , %1" , 0 } ,
{ "0000 1111 : 111111pp: mod xmm rm" , "padd%g %0 , %1" , 0 } ,
{ "0000 1111 : 111011pp: 11 xmm xmm:" , "padds%g %0 , %1" , 0 } ,
{ "0000 1111 : 111011pp: mod xmm rm" , "padds%g %0 , %1" , 0 } ,
{ "0000 1111 : 110111pp: 11 xmm xmm:" , "paddus%g %0 , %1" , 0 } ,
{ "0000 1111 : 110111pp: mod xmm rm" , "paddus%g %0 , %1" , 0 } ,
{ "0000 1111 : 11011011: 11 xmm xmm:" , "pand %0 , %1" , 0 } ,
{ "0000 1111 : 11011011: mod xmm rm" , "pand %0 , %1" , 0 } ,
{ "0000 1111 : 11011111: 11 xmm xmm:" , "pandn %0 , %1" , 0 } ,
{ "0000 1111 : 11011111: mod xmm rm" , "pandn %0 , %1" , 0 } ,
{ "0000 1111 : 011101pp: 11 xmm xmm:" , "pcmpeq%g %0 , %1" , 0 } ,
{ "0000 1111 : 011101pp: mod xmm rm" , "pcmpeq%g %0 , %1" , 0 } ,
{ "0000 1111 : 011001pp: 11 xmm xmm:" , "pcmpgt%g %0 , %1" , 0 } ,
{ "0000 1111 : 011001pp: mod xmm rm" , "pcmpgt%g %0 , %1" , 0 } ,
{ "0000 1111 : 11110101: 11 xmm xmm:" , "pmadd %0 , %1" , 0 } ,
{ "0000 1111 : 11011111: mod xmm rm" , "pmadd, %1" , 0 } ,
{ "0000 1111 : 11100101: 11 xmm xmm:" , "pmulh %0 , %1" , 0 } ,
{ "0000 1111 : 11100101: mod xmm rm" , "pmulh %0 , %1" , 0 } ,
{ "0000 1111 : 11010101: 11 xmm xmm:" , "pmull %0 , %1" , 0 } ,
{ "0000 1111 : 11010101: mod xmm rm" , "pmull %0 , %1" , 0 } ,
{ "0000 1111 : 11101011: 11 xmm xmm:" , "por %0 , %1" , 0 } ,
{ "0000 1111 : 11101011: mod xmm rm" , "por %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: 11 xmm xmm:" , "psll%g %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: mod xmm rm" , "psll%g %0 , %1" , 0 } ,
{ "0000 1111 : 011100pp: 11 100 xmm : i08" , "psll%g %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: 11 xmm xmm:" , "psra%g %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: mod xmm rm" , "psra%g %0 , %1" , 0 } ,
{ "0000 1111 : 011100pp: 11 100 xmm : i08" , "psra%g %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: 11 xmm xmm:" , "psrl%g %0 , %1" , 0 } ,
{ "0000 1111 : 111100pp: mod xmm rm" , "psrl%g %0 , %1" , 0 } ,
{ "0000 1111 : 011100pp: 11 100 xmm : i08" , "psrl%g %0 , %1" , 0 } ,
{ "0000 1111 : 111110pp: 11 xmm xmm:" , "psub%g %0 , %1" , 0 } ,
{ "0000 1111 : 111110pp: mod xmm rm" , "psub%g %0 , %1" , 0 } ,
{ "0000 1111 : 111010pp: 11 xmm xmm:" , "psubs%g %0 , %1" , 0 } ,
{ "0000 1111 : 111010pp: mod xmm rm" , "psubs%g %0 , %1" , 0 } ,
{ "0000 1111 : 110110pp: 11 xmm xmm:" , "psubus%g %0 , %1" , 0 } ,
{ "0000 1111 : 110110pp: mod xmm rm" , "psubus%g %0 , %1" , 0 } ,
{ "0000 1111 : 011010pp: 11 xmm xmm:" , "punpckh%g %0 , %1" , 0 } ,
{ "0000 1111 : 011010pp: mod xmm rm" , "punpckh%g %0 , %1" , 0 } ,
{ "0000 1111 : 011000pp: 11 xmm xmm:" , "punpckl%g %0 , %1" , 0 } ,
{ "0000 1111 : 011000pp: mod xmm rm" , "punpckl%g %0 , %1" , 0 } ,
{ "0000 1111 : 11101111: 11 xmm xmm:" , "pxor %0 , %1" , 0 } ,
{ "0000 1111 : 11101111: mod xmm rm" , "pxor %0 , %1" , 0 } ,
{ 0 , 0 , 0 }
};
////////////////////////////////////////////////////////////////////
// definition de tout les banks
struct SBank
{
/** { 0 , 0 , 0 } tab de motif d'instructions */
SOPContext* m_pData ;
/** nom du bank tq ds la ligne de command */
const char* m_pszName ;
/** == true si utilise */
bool m_bIsDefault ;
/** op de comparaison */
bool operator==( const SBank& other )
{ return ( strcmp( m_pszName , other.m_pszName ) == 0 ); }
};
/** bank list ( par ordre de proba d'utilisation decroissante !)*/
static SBank pAllBanks[] =
{
{ pfnOPCGeneral , "user" , true } ,
{ pfnOPCFPU , "fpu" , true } ,
{ pfnOPCMmx , "mmx" , false } ,
{ pfnOPCPrivileged , "system" , false }
};
////////////////////////////////////////////////////////////////////
// divers flags
////////////////////////////////////////////////////////////////////
// decoupage typique d'un octet en 3 parties (2,3,3)
inline void ByteSplit3( BYTE in , BYTE& outHigh , BYTE& outMed , BYTE& outLow )
{
outLow = in & BIN_CTE(0,0,0,0,0,1,1,1) ;
outMed = ( in & BIN_CTE(0,0,1,1,1,0,0,0) ) >> 3 ;
outHigh = ( in & BIN_CTE(1,1,0,0,0,0,0,0) ) >> 6 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -