Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03543.jsonl.gz/1717

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.