The measured frequency is not correct, because your code assumes that the performance counter's frequency is the same on all machines.
cpu_mips PROC USES ebx
LOCAL counter : QWORD, start : QWORD, stop : QWORD
LOCAL freq:QWORD
invoke QueryPerformanceFrequency,ADDR freq
invoke QueryPerformanceCounter, ADDR start
RDTSC
MOV DWORD PTR counter, EAX
MOV DWORD PTR counter + 4, EDX
; ïîëó?åíèå ìíîæèòåëÿ è òàêòîâ
invoke Sleep, 23
invoke QueryPerformanceCounter, ADDR stop
RDTSC
MOV EBX, DWORD PTR start
SUB DWORD PTR stop, EBX
MOV EBX, DWORD PTR start + 4
SBB DWORD PTR stop + 4, EBX
MOV DWORD PTR start, TIMERFREQSEC
FILD freq
FILD stop
FDIV ; äåëèì êîëè?åñòâî òèêîâ òàéìåðà â ñåêóíäó
SUB EAX, DWORD PTR counter
SBB EDX, DWORD PTR counter + 4
MOV DWORD PTR counter, EAX
MOV DWORD PTR counter + 4, EDX
FILD counter
FMUL ; ïîäïðàâëÿåì çíà?åíèå íà ôàêòè?åñêîå âðåìÿ
MOV DWORD PTR counter, 1000000 ; <= 1E6 !
FILD DWORD PTR counter
FDIV ; äåëèì íà ìèëëèîí îïåðàöèé â ñåêóíäó
FISTP DWORD PTR counter
MOV EAX, DWORD PTR counter
RET
cpu_mips ENDPThis one returns more useful values on my i5.