Allgemeines
Anwendungsgebiet: | Binden und Laden; siehe "Binden und Laden" |
Makrotyp: | O-Typ; siehe "O-Typ-Makroaufrufe" |
Makrobeschreibung
Mit dem Makroaufruf CALL ist es möglich, über ein Symbol ein Segment zu laden, sofern es noch nicht im Speicher steht. Weitere Segmente innerhalb desselben Astes der Überlagerungsstruktur werden automatisch nachgeladen.
Nach dem Ladevorgang wird an dem angegebenen Symbol im nachgeladenen Segment fortgesetzt.
Makroaufrufformat und Operandenbeschreibung
CALL |
symbol |
symbol
symbolische Adresse (Einsprungpunkt) innerhalb des zu ladenden Segmentes. Eine 4 Byte lange V-Konstante wird für dieses Symbol erzeugt. Mit diesem Operanden wird implizit das Segment angegeben, welches geladen werden soll, und gleichzeitig die Adresse, bei welcher nach der Makroausführung fortgesetzt wird.
Funktionsweise
Mit dem Makro CALL (und auch mit dem Makro SEGLD) wird das automatische Laden von Segmenten realisiert (das nicht automatische Laden wird mit dem Makro LPOV durchgeführt).
Durch eine Anweisung im Makro CALL wird der Assembler veranlasst, aus der angegebenen symbolischen Adresse eine V-Konstante zu erzeugen, durch die sowohl das zu ladende Segment als auch die Fortsetzadresse nach dem Ladevorgang gekennzeichnet ist. Auf Grund dieser V-Konstanten im Makro CALL und des Operanden CONTROL=YES in der Steueranweisung PROGRAM (siehe Handbuch „Dienstprogramme“ [27]) erzeugt der Binder ein für automatisches Laden notwendiges Überlagerungssteuermodul, das die V-Konstante mit einer Adresse befriedigt. Der Makro CALL enthält einen Sprung zu der V-Konstanten: Zur Ausführungszeit von CALL wird also die Steuerung dem Überlagerungssteuermodul übertragen, der prüft, ob das verlangte Segment schon im Speicher ist. Ist das Segment schon geladen, wird der Programmablauf mit dem Befehl fortgesetzt, der durch den Operanden „symbol“ bezeichnet ist. Ist das angegebene Segment noch nicht geladen, so wird es zusammen mit allen im gleichen Ast enthaltenen Segmenten in den Speicher gebracht. Nach dem Ladevorgang wird das Programm - ebenso wie bei nicht erfolgtem Laden - bei der angegebenen Adresse in dem zu ladenden Segment fortgesetzt.
Hinweise
Beim Entwurf der Überlagerungstruktur eines Programms, in dem mit automatischem Laden von Segmenten gearbeitet wird, sollte der zusätzliche Speicherbedarf für das Überlagerungssteuermodul, für ENTAB und für SEGTAB berücksichtigt werden (siehe Handbuch „Dienstprogramme“ [27]).
Der Makroaufruf CALL muss in einem Programmbereich liegen, der durch eine USING-Anweisung abgedeckt wird. Da das Register R15 von dem Makro CALL zum Laden der Segmente verwendet wird (es enthält die Einsprungadresse), darf es nicht als Basisregister für den Programmteil verwendet werden, in dem der Makroaufruf CALL liegt.