| Zeile 1: | Zeile 1: | ||
| − | Der Stack ( | + | 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 === | ||
| − | |||
Der Stack arbeitet nach dem LIFO-Prinzip ("Last in, first out"). Das bedeutet, dass neue Elemente immer oben auf den Stack gelegt werden, sodass das zuletzt auf den Stack gelegte Element auch das zuerst wieder zurück geholte ist. | Der Stack arbeitet nach dem LIFO-Prinzip ("Last in, first out"). Das bedeutet, dass neue Elemente immer oben auf den Stack gelegt werden, sodass das zuletzt auf den Stack gelegte Element auch das zuerst wieder zurück geholte ist. | ||
Dabei kann man bei jedem Stack zwei Grundoperationen ausführen: | Dabei kann man bei jedem Stack zwei Grundoperationen ausführen: | ||
| Zeile 9: | Zeile 8: | ||
=== Implementierung durch die CPU === | === Implementierung durch die CPU === | ||
| − | + | Die CPU bietet zwei Register zum Arbeiten mit dem Stack an: | |
| − | 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|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. | ||
| Zeile 22: | Zeile 20: | ||
=== Das EPB-Register === | === Das EPB-Register === | ||
| − | Zur Verwendung des Stacks bietet die CPU noch ein EBP-Register ( | + | Zur Verwendung des Stacks bietet die CPU noch ein EBP-Register (Base Pointer). Dieses wird von vielen Hochsprachen verwendet, um lokale Variablen auf dem Stack zu speichern. |
=== Befehle, die sich auf den Stack auswirken === | === Befehle, die sich auf den Stack auswirken === | ||