Einzelnen Beitrag anzeigen

Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#18

Re: FOR-Schleifenvariable muss eine lokale Variable sein. Wa

  Alt 24. Aug 2003, 13:05
Habs mir jetzt mal näher angeschaut..

folgender Delphi-Code (das begin-end der for-Schleife ist unnötig, aber ganz bewusst gesetzt):
Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 1 to 20 do
  begin
    Inc(PInteger(@i)^);
  end;
end;
wird in folgenden ASM-Code übersetzt:
Code:
Unit1.pas.30: for i := 1 to 20 do
    mov [eax], $00000001
Unit1.pas.32: Inc(PInteger(@i)^);
    inc dword ptr [eax]
Unit1.pas.33: end; // <- das end der Schleife
    inc dword ptr [eax]
Unit1.pas.30: for i := 1 to 20 do
    cmp dword ptr [eax], $15
    jnz -$09
In Zeile 32 wird die Zählvariable manuell erhöht, während in Zeile 33 (daher der unnötige begin-end Block) die "echte" Inkrementierung der Schleifenvariable stattfindet - beide Zeilen erzeugen denselben ASM-Code.
eax enthält eine Referenz in den Stack wo die eigentliche Zählvariable liegt.
Manuel Pöter
  Mit Zitat antworten Zitat