Code:
Befehle Taktzyklen
-----------------------
DEC ECX 1
JNZ Beginn 3
LOOP Beginn 6
Die Taktzyklen beziehen sich auf einen i486 und stammen aus dem Referenzhandbuch von Borland zu Turbo Assembler.
Hier ein Geschwindigkeitstest:
Delphi-Quellcode:
function RDTSC: Int64;
asm
RDTSC
end;
function Test_Loop(Count: Integer): Int64;
asm
MOV ECX, EAX
RDTSC
// Startzeit ermitteln (Result=EDX:EAX)
@@
Repeat:
LOOP @@
Repeat
end;
function Test_DecJcc(Count: Integer): Int64;
asm
MOV ECX, EAX
RDTSC
// Startzeit ermitteln (Result=EDX:EAX)
@@
Repeat:
DEC ECX
JNZ @@
Repeat
end;
procedure TForm1.Button1Click(Sender: TObject);
const
Count = $5fffffff;
var
t1, t2: Int64;
begin
try
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
t1 := Test_Loop(Count);
t1 := RDTSC - t1;
t2 := Test_DecJcc(Count);
t2 := RDTSC - t2;
finally
SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);
end;
Memo1.Lines.Add('
LOOP : ' + IntToStr(t1));
Memo1.Lines.Add('
DEC/Jcc: ' + IntToStr(t2));
Memo1.Lines.Add('
');
end;
Auf P4 2GHz kommen im Schnitt folgende Werte zustande:
Code:
LOOP : 538596152
DEC/Jcc: 403735408