Information Technology Reference
In-Depth Information
Bild 1.11 ist dies exemplarisch dargestellt. Die Adresse des obersten Eintrags ist im Stapelzeiger ,
normalerweise einem Register, gespeichert. Ein neuer Eintrag lässt sich auf dem Stapel anlegen,
indem der Stapelzeiger zunächst entsprechend des zu schreibenden Eintrags vermindert (der Stapel
wächst historisch bedingt immer zu niedrigen Adressen) und der zu schreibende Wert anschließend
indirekt zum Stapelzeiger abgelegt wird.
Für Zugriffe auf lokale Variablen (im Bild a, b) oder Parameter (im Bild X, Y) nutzt man die indi-
rektindizierte Adressierung. Mit dem Stapelzeiger als Basisadresse muss für einen Zugriff auf b
z.B. eine um vier Byte vergrößerte Adresse (a ist vier Byte breit) also Stapelzeiger + 4 verwendet
werden. Sollten alle Einträge auf dem Stapel jeweils vier Byte breit sein, lässt sich auf b auch
zugreifen, indem man den Index mit Vier skaliert. In diesem Fall würde, vom Stapelzeiger aus gese-
hen, der zweite Eintrag adressiert, als Index also Eins angegeben werden müssen, d.h.
Stapelzeiger + 1
4.
Niedrige Adresse
Stapelzeiger
b
Lokale Variablen der aufgerufenen Funktion
a
Rahmenzeiger 1
Rahmenzeiger 0
Rücksprungadresse
X
Y
Parameter
A
Lokale Variable der aufrufenden Funktion
31
0
Hohe Adresse
Bild 1.11. Exemplarische Darstellung eines Stapels im Datenspeicherraum nach dem Aufruf eines
Unterprogramms mit zwei Parametern X und Y und drei lokalen Variablen a, b und c
Da der Stapelzeiger permanent benutzt und auch geändert wird, erfolgt der Zugriff auf lokale Vari-
ablen oder Parameter i.Allg. nicht relativ zum Stapelzeiger, sondern relativ zu einem sog. Rahmen-
zeiger ( framepointer ), der innerhalb eines Unterprogramms nicht verändert wird. Ein Zugriff auf b
ist möglich, wenn in Bild 1.11 die Adresse Rahmenzeiger 1 - 8 verwendet wird, was mit der indi-
rektindizierten Adressierung ebenfalls in einem Schritt durchführbar ist, sofern sich der Rahmen-
zeiger in einem Register befindet. - Rahmenzeiger 1 ist dem Unterprogramm fest zugeordnet. Er
wird zu Beginn des Unterprogramms in einem Register gesetzt, nachdem der Rahmenzeiger 0 des
aufrufenden Programms auf dem Stapel gesichert wurde.
Zahlreiche RISC-Prozessoren nutzen die indirektindizierte statt der indirekten
Adressierung von Sprungzielen für den Rücksprung aus Unterprogrammen. Dies ist
erforderlich, weil hier nicht die Rücksprungadresse, sondern die effektive Adresse
des unterprogrammaufrufenden Befehls gesichert wird. Für einen Rücksprung ist
diese Adresse entsprechend der Befehlsbreite des unterprogrammaufrufenden
Befehls zu vergrößern, was sich mit der indirektindizierten Adressierung in einem
Schritt erreichen lässt, sofern alle Befehle eine einheitliche Breite aufweisen.
Unter derselben Voraussetzung sind auch sog. Ausnahmeprogramme ( exception
handler ) in einem Schritt beendbar. Ein Ausnahmeprogramm ist mit einem Unter-
programm vergleichbar, das jedoch nicht explizit durch einen Befehl, sondern impli-
zit und automatisch, z.B. bei einer Unterbrechung ( interrupt ) oder bei Auftreten
eines Fehlers aufgerufen wird. Dabei wird der in Ausführung befindliche Befehl
ggf. mit fehlerhaftem Ergebnis beendet, die effektive Adresse des Befehls für den
Rücksprung gespeichert und zu einem für den jeweiligen Fall vorgesehenen Aus-
nahmeprogramm verzweigt.
Search WWH ::




Custom Search