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; }