long GetCpuSpeed(void)
{
SYSTEM_INFO SysInf;
DWORD start_high, start_low, overhead_high, overhead_low, MHz;
GetSystemInfo(&SysInf);
if(SysInf.wProcessorLevel<5) return 0; // RDTSC gibts erst ab Pentium!
MHz = 100000;
_asm
{
_emit 0x0f
_emit 0x31
MOV overhead_low, EAX
MOV overhead_high, EDX
_emit 0x0f
_emit 0x31
SUB EAX, overhead_low
SBB EDX, overhead_high
MOV overhead_low, EAX
MOV overhead_high, EDX
_emit 0x0f
_emit 0x31
MOV start_low, EAX
MOV start_high, EDX
}
Sleep(100);
_asm
{
_emit 0x0f
_emit 0x31
SUB EAX, overhead_low
SBB EDX, overhead_high
SUB EAX, start_low
SBB EDX, start_high
DIV MHz
MOV MHz, EAX
}
return MHz;
}