#include <windows.h>
#include <stdio.h>
#ifndef RDTSC
#define RDTSC __asm _emit 0x0F __asm _emit 0x31
#endif
#pragma warning(disable: 4035)
__inline __int64 GetCycleNumber(){
__asm {
RDTSC
}
}
__int64 GetHz(){
LARGE_INTEGER t1,t2,tf;
__int64 c1,c2;
QueryPerformanceFrequency(&tf);
QueryPerformanceCounter(&t1);
c1 = GetCycleNumber();
_asm {
MOV EBX, 2500000
WaitAlittle:
DEC EBX
JNZ WaitAlittle
}
QueryPerformanceCounter(&t2);
c2 = GetCycleNumber();
return ((c2 - c1) * tf.QuadPart / (t2.QuadPart - t1.QuadPart));
}
__int64 CPU_Hz;
void delay(int micros){
__int64 start = GetCycleNumber();
while (GetCycleNumber() - start < micros * CPU_Hz / 10000000);
}
void main(){
CPU_Hz = GetHz();
printf("Hello\n");
// delay 0.5 seconds
delay(5000000);
printf("World\n");
}