#include <stdio.h>
#include <windows.h>

double RDTSC(void)
{
	LARGE_INTEGER cycle;
    double CPU_Clock;

	int i;

    for(i = 0; i < 5;i++ ) {
        __asm { // 中括弧内はアセンブラ命令でしょう!
            cpuid
            rdtsc
            mov   cycle.LowPart, eax
            mov   cycle.HighPart, edx
        } // 現在のクロック数をcycleに格納します.

        Sleep(1000); // スレッドを1秒間停止させるためにSleep(1000)を実行します. (パラメータは[ms]の単位で指定)

        __asm { // 中括弧内はアセンブラ命令でしょう!
            cpuid
            rdtsc
            sub   eax, cycle.LowPart
            sub   edx, cycle.HighPart
            mov   cycle.LowPart, eax
            mov   cycle.HighPart, edx
        } // (1)を実行してから約1秒が経過した時点でのクロック数と, 1秒前のクロック数を引いてcycleに格納します.

        CPU_Clock = (double)cycle.LowPart;
        CPU_Clock /= 1000000; // CPU_Clockを1000000で割るとこによって, CPUのクロックの単位を[MHz]に変換しています.
        printf("%4.2lf[MHz]\n", CPU_Clock );
    }
	return 0;
}