Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#26

Re: Compiler ändert asm Code ?

  Alt 9. Mai 2010, 12:18
Der automatisch erzeugte Eintritts- und Austrittscode (genannt Stack-Frame):
Delphi-Quellcode:
PUSH EBP // Vorhanden wenn Locals <> 0 oder Params <> 0
MOV EBP, ESP // Vorhanden wenn Locals <> 0 oder Params <> 0
SUB ESP, Locals // Vorhanden wenn Locals <> 0
PUSH ECX // -
...
MOV EAX, [EBP-4] // Vorhanden wenn nachdem Result etwas zugewiesen wurde auch noch EAX
                        // etwas zugewiesen wird, in diesem Fall wird für Result [EBP-4] statt
                        // EAX verwendet - wenn Result <= Integer
POP ECX // -
MOV ESP, EBP // Vorhanden wenn Locals <> 0
POP EBP // Vorhanden wenn Locals <> 0 oder Params <> 0
RET Params // Immer vorhanden
Dazu kommt dann noch die Behandlung von
{$W+} oder {$STACKFRAMES ON}
[equote="OH satgt zu ''Stack-Frames (Delphi)''"]Die Direktive $W steuert die Erzeugung von Stack-Frames für Prozeduren und Funktionen. Im Status {$W+} werden Stack-Frames für Prozeduren und Funktionen auch dann erzeugt, wenn sie nicht benötigt werden. Im Status {$W-} werden Stack-Frames nur generiert, wenn die Verwendung lokaler Variablen durch die Routine dies erforderlich macht. [/equote]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat