next up previous
Nächste Seite: Das Register A5 Aufwärts: Die Register Vorherige Seite: Registerkonventionen


Das Register A4

A4 ist das ,,Heiligtum`` von . Das Register zeigt auf die globalen -Variablen des Programms, dazu zählen auch alle Zeiger auf die geöffneten Libraries (siehe Abschnitt 5.1.12, Seite [*]). Im Gegensatz zu den früheren Versionen von M2Amiga wird A4 nicht in jeder Prozedur neu geladen, sondern nur ein einziges Mal innerhalb des gesamten Programms (es sei denn, die Compiler-Option ,,LoadA4:=TRUE`` wird benutzt oder in Assembler wird eine Referenz auf das Symbol ,,_LinkerDB`` erzeugt).

Sollte A4 zerstört sein, ist so gut wie keine Operation mehr möglich. Dies kommt beispielsweise vor, wenn die Prozedur vom Betriebssystem aufgerufen wird (siehe oben, InputHandler, Exceptionhandler, usw.). In diesem Fall muss die richtige Addresse wieder nach A4 geladen werden. Durch die Compiler-Option ,,LoadA4:=TRUE`` vor Beginn der Prozedur wird erreicht, dass A4 auf den Stack gerettet (siehe oben, Registerkonventionen) und mit dem speziellen Linkersymbol ,,_LinkerDB`` geladen wird, welches eben diesen Zeiger darstellt.

In einer residenten Version des Programms ist dies leider nicht möglich, da der Variablen-Speicher für jeden Prozess neu alloziert wird. Glücklicherweise bekommen die meisten der eben angesprochenen, vom Betriebssystem aufgerufenen Prozeduren von Exec einen Zeiger auf ihre Daten im Register A0 oder A1 mit auf den Weg. Diese Daten sollte man als RECORD definieren, hierin während der Initialisierungsphase das Register A4 ablegen und dann später innerhalb der Prozedur wieder daraus laden. Dazu muss vor dem BEGIN der Prozedur die Option ,,SaveA4:=TRUE`` angegeben werden, damit beim Eintritt und Ausgang A4 auf den Stack gerettet bzw. wiederhergestellt wird. Diese Option verhält sich also ähnlich wie , nur dass hier A4 nicht automatisch geladen wird.


\begin{example}
Am Beispiel eines Inputhandlers wollen wir nun versuchen, dies a...
...ziemlicher Sicherheit
die eine oder andere Exec-Funktion aufrufen!
\end{example}


next up previous
Nächste Seite: Das Register A5 Aufwärts: Die Register Vorherige Seite: Registerkonventionen
Claudio Nieder 2000-11-12