Stack — Änderungen 6949 → 6952

Zeile 1: Zeile 1:
−
Der Stack (=Kellerspeicher oder Stapel) ist eine der wichtigsten Datenstrukturen sowohl für Software als auch Hardware, da dieser ua. Parameter und Rücksprungadressen speichert.
+
Der Stack (=Kellerspeicher oder Stapel) ist eine der wichtigsten Datenstrukturen sowohl für Software als auch Hardware, da dieser u. a. Parameter und Rücksprungadressen speichert.
  
 
=== Funktionsweise ===
 
=== Funktionsweise ===
Zeile 12: Zeile 12:
 
Die CPU bietet zwei Register zum Arbeiten mit dem Stack:
 
Die CPU bietet zwei Register zum Arbeiten mit dem Stack:
 
*'''das SS-Register''' speichert das Stacksegment (im [[Real Mode]]) bzw. den Stackselektor (im [[Protected Mode]]).
 
*'''das SS-Register''' speichert das Stacksegment (im [[Real Mode]]) bzw. den Stackselektor (im [[Protected Mode]]).
−
*'''das ESP-Register''' (=StackPointer) zeigt auf das oberste Element des aktuellen Stacks. Die [[Real Mode]]Variante dieses Registers ist das SP-Register.
+
*'''das ESP-Register''' (=StackPointer) zeigt auf das oberste Element des aktuellen Stacks. Die [[Real Mode|Real-Mode]]-Variante dieses Registers ist das SP-Register.
  
 
Zudem sind die Befehle PUSH und POP in die CPU integriert. Dabei ist zu beachten, '''dass der Stack von den höheren zu den niedrigeren Adressen wächst'''.
 
Zudem sind die Befehle PUSH und POP in die CPU integriert. Dabei ist zu beachten, '''dass der Stack von den höheren zu den niedrigeren Adressen wächst'''.
−
*Der PUSH-Befehl schreibt den Operanden an die Stelle, auf die ESP zeigt und vermindert den Wert des Registers um die Größe des Operanden
+
*Der PUSH-Befehl vermindert den Wert von ESP um die Größe des Operanden und schreibt diesen an die Stelle, auf die das Register dann zeigt
 
*Der POP-Befehl liest das Element, auf das ESP zeigt und erhöht das Register um die Operandengröße.
 
*Der POP-Befehl liest das Element, auf das ESP zeigt und erhöht das Register um die Operandengröße.
  
−
Das bedeutet, dass der Stack seine maximale Größe erreicht hat, wenn der Wert Eins im ESP-Register steht. In diesem Fall wird ein [[Stackfault]] ausgelöst.
+
Das bedeutet, dass der Stack seine maximale Größe erreicht hat, wenn der Wert 0 im ESP-Register steht. In diesem Fall wird ein [[Stackfault]] ausgelöst.
  
 
=== Das EPB-Register ===
 
=== Das EPB-Register ===
Zeile 42: Zeile 42:
 
|popf
 
|popf
 
|liest das EFLAGS-Register vom Stack
 
|liest das EFLAGS-Register vom Stack
 +
|-
 +
|pusha
 +
|legt alle "allgemeinen" Register (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) auf den Stack
 +
|-
 +
|popa
 +
|Holt diese Register wieder vom Stack, wobei ESP übersprungen wird
 
|-
 
|-
 
|call
 
|call
Zeile 47: Zeile 53:
 
|-
 
|-
 
|ret
 
|ret
 +
|
 
|-
 
|-
 
|int
 
|int
Zeile 52: Zeile 59:
 
|-
 
|-
 
|iret
 
|iret
 +
|
 +
|-
 +
|enter
 +
|
 +
|-
 +
|leave
 
|
 
|
 
|}
 
|}