Information Technology Reference
In-Depth Information
Identifikationsnummer (trap type) mit der Eintragsgröße multipliziert, d.h. um vier Positionen nach
links verschiebt und das als Offset zu interpretierende Ergebnis auf die Basisadresse der Ausnahme-
tabelle (trap base address) addiert. Tatsächlich wird die Addition durch die einfachere Konkatena-
tion der oberen 20 Bits der Basisadresse der Ausnahmetabelle und des aus der Identifikationsnum-
mer abgeleiteten Offsets ersetzt. Das in dieser Weise erzeugte Ergebnis wird schließlich in das Spe-
zialregister %tbr (trap base register) eingetragen und direkt für den Sprung zum Ausnahmepro-
gramm verwendet (Bild 1.21).
1:
sethi
%hi ( hnd ), %l0
2:
jmpl
[%l0, %lo ( hnd )], %g0
3:
nop
%tbr
trap base address (tba)
trap typ (tt)
0000
4:
-
20
8
4
trap-table
Bild 1.21. Aufruf eines Ausnahmeprogramms bei Prozessoren mit SPARC-Architektur
Da ein Eintrag der Ausnahmetabelle maximal vier Befehle enthalten darf, wird nach dem Aufruf
normalerweise ein unbedingter Sprung zu einem dem Ausnahmeprogramm genügend Platz bieten-
den Speicherbereich durchgeführt. Die hierzu erforderliche Befehlsfolge ist in Bild 1.21 rechts dar-
gestellt. Mit dem Befehl sethi (set high) in Zeile 1 werden dem Register %l0 zunächst die oberen 22
Bits der Zieladresse zugewiesen und mit dem Sprungbefehl jmpl (jump and link) in Zeile 2
anschließend indirekt zum Sprungziel hnd verzweigt, wobei die unteren 10 Bits der Zieladresse auf
den Inhalt des Registers %l0 addiert werden. Das hier zwei Befehle benötigt werden, liegt daran,
dass im Programmiermodell der SPARC-Architektur kein seiteneffektfreier Sprungbefehl definiert
ist, in dem sich eine beliebige Befehlsadresse direkt codieren lässt 1 . Der in Zeile 3 von Bild 1.21
rechts noch folgende nop-Befehl ist schließlich erforderlich, weil Sprungbefehle von Prozessoren
mit SPARC-Architektur verzögert ausgeführt werden (siehe Abschnitt 2.2.4).
Nach Bearbeitung des Ausnahmeprogramms wird in das unterbrochene Programm zurückgekehrt,
indem eine der beiden in Bild 1.22 dargestellten Befehlsfolgen ausgeführt werden, je nachdem, ob
der Befehl, bei dem die Ausnahmeanforderung auftrat, erneut auszuführen ist (a) oder nicht (b).
Zum Verständnis: In %l1 und %l2 sind die Adressen des unterbrochenen und des darauf folgenden
Befehls gespeichert. Die Verwendung von zwei Adressen ist hierbei erforderlich, weil der Befehl,
an dem die Ausnahmeanforderung aufgetreten ist, möglicherweise verzögert zu einem vorangehen-
den Sprungbefehl bearbeitet wird, in einem solchen Fall die Adressen in %l1 und %l2 also nicht
aufeinander folgen (erneut sei auf Abschnitt 2.2.4 verwiesen).
jmpl
%l1, %g0, %g0
jmpl
%l2, %g0, %g0
rett
%l2, %g0
rett
%l2, 4
a b
Bild 1.22. Befehlsfolgen zum Beenden eines Ausnahmeprogramms in Prozessoren mit SPARC-
Architektur. a Der Befehl, mit dem die Ausnahmesituation auftrat, wird wiederholt. b Der Befehl,
mit dem die Ausnahmesituation auftrat, wird nicht wiederholt
Soll ein Befehl wiederholt ausgeführt werden, ist zunächst zur Adresse in %l1 und verzögert zur
Adresse in %l2 zu verzweigen (Bild 1.22a). Hingegen reicht ein Sprung zur Adresse in %l2, wenn
der Befehl, mit dem die Ausnahmesituation auftrat, nicht wiederholt auszuführen ist. Da der Rück-
sprungbefehl rett jedoch der letz te des Ausnahmeprogramms sein sollte (er setzt z.B. das Supervi-
1.
Der call-Befehl, der einen befehlszählerrelativen direkten Sprung zu einer beliebigen Befehlsa-
dresse erlaubt, ist hier nicht verwendbar, weil er als Seiteneffekt eine Rücksprungadresse in
einem Register ablegt, dessen Inhalt durch ein Ausnahmeprogramm nicht verändert werden
darf.
 
Search WWH ::




Custom Search