, части кода Boath имеют более или менее некоторую скорость исключения. Вы можете проверить скорость выполнения, выполнив команду rdtsc до процедуры и после процедуры, чтобы измерить (подсчитать) тактовые частоты выполнения процессора. Конечно, рутины должны начинаться с некоторого значения в регистре EAX и ESI. Не используйте огромные значения цикла, потому что планировщик задач может прервать текущую задачу в середине выполнения цикла, и вы получите неправильный результат. Однако, если какой-либо результат измерения значительно отличается, чем текущая задача была прервана планировщиком задачи, и вы должны игнорировать этот результат.
РЕДАКТИРОВАТЬ: ТЕСТЫ
Здесь я поставил оба теста, чтобы каждый мог проверить результаты:
var
StartTicks :Int64;
EndTicks :Int64;
procedure TForm9.ButtonEAXClick(Sender: TObject);
begin
asm
rdtsc
mov dword ptr [StartTicks], eax
mov dword ptr [StartTicks + 4], edx
//Start test
mov eax, 10000
@Loop:
dec eax
cmp eax, 0
jnz @Loop
//End test
rdtsc
mov dword ptr [EndTicks], eax
mov dword ptr [EndTicks + 4], edx
end;
caption := IntToStr(EndTicks - StartTicks);
end;
procedure TForm9.ButtonESIClick(Sender: TObject);
begin
asm
rdtsc
mov dword ptr [StartTicks], eax
mov dword ptr [StartTicks + 4], edx
//Start test
mov esi, 10000
@Loop:
dec esi
cmp esi, 0
jnz @Loop
//End test
rdtsc
mov dword ptr [EndTicks], eax
mov dword ptr [EndTicks + 4], edx
end;
caption := IntToStr(EndTicks - StartTicks);
end;
10000 циклов на современном процессоре не приведут к разнице между выполнением рутины с использованием EAX или ESI.