Memo1->Lines->Add("Поддерживаемые инструкции:");
DWORD brt;
bool AMD,MMX;
__asm
{
mov eax,1
cpuid
mov brt,edx
}
if(brt&(1<<23))
{
MMX=true;
Memo1->Lines->Add("MMX");
}
if(brt&(1<<25))
{
if(brt&(1<<24))
{
__try
{
__asm xorps xmm0, xmm0
Memo1->Lines->Add("SSE");
}
__except(EXCEPTION_EXECUTE_HANDLER){}
if(brt&(1<<26))
{
__try
{
__asm xorpd xmm0,xmm0
Memo1->Lines->Add("SSE2");
}
__except(EXCEPTION_EXECUTE_HANDLER){}
}
}
}
__asm
{
mov eax,0x80000000
cpuid
cmp eax,0x80000000
jc notamd
mov eax,0x80000001
cpuid
mov brt,edx
mov AMD,1
notamd:
}
if(AMD)
if((MMX)&&(brt&(1<<31)))
Memo1->Lines->Add("3DNOW!");Автор: ant47
double CPUSpeed(void)
{
DWORD dwTimerHi, dwTimerLo;
double dRes;
asm
{
DW 0x310F
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
Sleep (500);
asm
{
DW 0x310F
sub EAX, dwTimerLo
sub EAX, dwTimerHi
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
dRes = dwTimerLo/(1000.0*500);
return dRes;
}