Das PUSH ECX gehört zum Standardverhallten des Compilers.
Der automatisch erzeugte Eintritts- und Austrittscode:
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
Standardmäßig sind, laut Intel-Sepzifikation, EAX, EDX und ECX, sowie die Statusregister frei verfügbar
und alle anderen Register müssen nach der Prozedur/Funktion wieder hergestellt werden.
Allerdings verwendet Delphi das ECX intern für eigene Dinge, weßhalb es dieses sicherheitshalber selber nochmal sichert, da der Programmierer es (laut Spec) ja nicht selber machen muß.