Enter / Leave — Änderungen 7089 → 7090

Zeile 1: Zeile 1:
−
Das Befehlspaar ''enter'' und ''leave'' adjustiert den [[Stack]] für die Verwendung von [[lokalen Variablen]].
+
Das Befehlspaar ''enter'' und ''leave'' adjustiert den [[Stack]] für die Verwendung von lokalen Variablen.
  
  
 
== Funktionsweise ==
 
== Funktionsweise ==
−
Das Befehlspaar enter/leve war nicht zwingend notwendig, da man sie durch mehrere Befehle ersetzen kann. Da aber diese Befehlsfolge von vielen Hochsprachen häufig verwendet wurde, hat man dieses spezielle Befehlspaar eingeführt.
+
Das Befehlspaar ''enter''/''leave'' war nicht zwingend notwendig, da man sie durch mehrere Befehle ersetzen kann. Da aber diese Befehlsfolge von vielen Hochsprachen häufig verwendet wurde, hat man dieses spezielle Befehlspaar eingeführt.
  
 
=== enter ===
 
=== enter ===
−
Enter hat folgende Syntax:
+
''enter'' hat folgende Syntax:
−
<asm>
+
<asm>enter operand1, operand2</asm>
−
enter operand1, operand2
 
−
</asm>
 
 
Sie lässt sich ersetzen durch:
 
Sie lässt sich ersetzen durch:
−
<asm>
+
<asm>push ebp
−
push ebp
 
 
mov ebp, esp
 
mov ebp, esp
−
sub esp, operand1
+
sub esp, operand1</asm>
−
</asm>
+
''operand1'' gibt also an, wieviel Speicherplatz auf dem Stack für lokale Variablen freigehalten werden soll. ''operand2'' steht für die Verschachtelungstiefe und kann auf 0 gesetzt werden.
−
''operand1'' gibt also an, wieviel Speicherplatz auf dem Stack freigehalten werden soll für [[lokale Variablen]]. ''operand2'' steht für die Verschachtlungstiefe und kann auf 0 gesetzt werden.
 
  
 
=== leave ===
 
=== leave ===
−
Leave macht die Änderungen von Enter rückgängig, damit der Aufrufstack wiederhergestellt wird und die Funktion zum Aufrufer zurückkehren kann:
+
''leave'' macht die Änderungen von ''enter'' rückgängig, damit der Aufrufstack wiederhergestellt wird und die Funktion zum Aufrufer zurückkehren kann:
−
<asm>
+
<asm>leave</asm>
−
leave
 
−
</asm>
 
 
Sie lässt sich ersetzen durch:
 
Sie lässt sich ersetzen durch:
−
<asm>
+
<asm>mov esp, ebp
−
mov esp, ebp
+
pop ebp</asm>
−
pop ebp
 
−
</asm>
 
 
== Umsetzung in verschiedenen Compilern ==
 
== Umsetzung in verschiedenen Compilern ==
 
=== gcc ===
 
=== gcc ===
Zeile 34: Zeile 26:
 
== siehe auch ==
 
== siehe auch ==
 
* [[Stack]]
 
* [[Stack]]
−
* [[lokale Variablen]]
 
  
 
[[Kategorie:x86-Befehle]]
 
[[Kategorie:x86-Befehle]]