Einzelnen Beitrag anzeigen

Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Inkrementieren von Eax geht nicht

  Alt 15. Feb 2009, 22:22
Wie gesagt... bei einer Funktion oder Prozedur:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
asm
end;
Das ist nicht gleich dem:
Delphi-Quellcode:
function Foo(Bar:Integer): Boolean;
begin
  asm
  end;
end;
Die OH sagt dazu:
Zitat:
Der Compiler führt für diese Routinen [erstere ^^] verschiedene Optimierungen durch:
  • Der Compiler erstellt keinen Code zum Kopieren von Wert-Parametern in lokale Variablen. Dies betrifft alle Wert-Parameter vom Typ String und alle anderen Wert-Parameter, deren Größe nicht ein, zwei oder vier Byte beträgt. Innerhalb der Routine müssen derartige Parameter als var-Parameter behandelt werden.
  • Der Compiler weist keine Funktionsergebnis-Variable zu, und eine Referenz auf das Symbol @Result ist ein Fehler. Eine Ausnahme bilden Funktionen, die eine Referenz auf einen String, eine Variante oder ein Interface zurückliefern. Die aufrufende Routine weist diesen Typen immer einen @Result-Zeiger zu.
  • Der Compiler generiert nur Stackframes für verschachtelte Routinen, für Routinen mit lokalen Parametern oder für Routinen, die über Parameter im Stack verfügen.
  • Locals ist die Größe der lokalen Variablen, Params die Größe der Parameter. Wenn sowohl Locals als auch Params Null ist, existiert kein Eintrittscode, und der Austrittscode besteht nur aus einer RET-Anweisung.
...
Gruß Mr_G
Jan
  Mit Zitat antworten Zitat