Registriert seit: 3. Jun 2004
4 Beiträge
|
WTF? ASM langsamer als Delphi?
26. Jun 2004, 20:57
Hi,
einfach ein Memofeld namens mmAus erstellen, einen Button und diese prozedur dafür verwenden:
Laut Speedtest hab ich bei mir 1800 und 100 ms warum ist bitte der delphi code schneller als der ASM code?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var f: array[1..8, 1..8] of byte;
p: ^byte;
i, j: cardinal;
x, y: integer;
s: string;
begin
j := GetTickCount();
for i:=1 to 1000000 do
begin
p := @f[1, 1];
asm
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV ECX, 64
MOV EBX, p
ADD EBX, 63
@@s1:
PUSH ECX
XOR EDX, EDX
MOV EAX, ECX
DEC EAX
MOV ECX, 8
DIV ECX
INC EAX
INC EDX
CMP AL, DL
JG @@ mod
MOV BYTE [EBX], AL
JMP @@ende
@@ mod:
MOV BYTE [EBX], DL
@@ende:
DEC EBX
POP ECX
LOOP @@s1
POP EDX
POP ECX
POP EBX
POP EAX
end;
end;
j := GetTickCount-j;
ShowMessage(IntToStr(j));
j := GetTickCount();
for i:=1 to 1000000 do
begin
for x:=1 to 8 do
for y:=x to 8 do
begin
f[x, y] := x;
f[y, x] := x;
end;
end;
j := GetTickCount-j;
ShowMessage(IntToStr(j));
for j:=1 to 8 do
begin
s:=' ';
for i:= 1 to 8 do
s := s+format(' %2d ', [f[i, j]]);
mmAus.Lines.Add(s);
end;
end;
Mfg Xenon
|
|
Zitat
|