Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SAVE - Registerinhalte sicherstellen

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Starten, Unterbrechen und Beenden; siehe "Starten, Unterbrechen und Beenden"

Makrotyp:

O-Typ;

siehe "O-Typ-Makroaufrufe"


Makrobeschreibung

Mit dem Makro SAVE kann man Registerinhalte zwischenspeichern.

Man ruft den Makro SAVE zu Beginn von Neben- oder Unterprogrammen auf, um die Registerinhalte des Hauptprogramms zu sichern. Für den Rücksprung in das Hauptprogramm ruft man den Makro RETRN auf, der die gesicherten Inhalte wieder in die Register lädt und den Sprung durchführt. Alle Mehrzweckregister außer dem Register R13 können gesichert werden. Das Register R13 muss die Adresse des Zwischenspeichers enthalten, der vom Hauptprogramm zur Verfügung gestellt werden muss.

Makroaufrufformat und Operandenbeschreibung

SAVE

[(r1[,r2])] [,T] [,entry / *]

r1
gibt ein Register (Mehrzweckregister=MZR) an, das gesichert werden soll. Für r1 dürfen die Zahlen 0 bis 12, 14 oder 15 angegeben werden; die runden Klammern können entfallen.

r1,r2
gibt eine fortlaufende Reihe von Registern (MZR) an, die gesichert werden sollen.
Der Bereich (r1,r2) darf Register 13 nicht enthalten, er kann sich aber über die Grenze Register R15/Register R0 erstrecken.
Es werden z.B. mit der Angabe (14,12) sämtliche Register bis auf Register R13 (also Register R0 bis 12, 14 und 15) gesichert.

Hinweis

Für die Registerangaben kann auch die Bezeichnung Rn (n=Registernummer) verwendet werden.

T

ist für die Kompatibilität mit BBS-Übersetzern vorgesehen und gibt an, dass die Register R14 und 15 gesichert werden sollen. Dieser Operand wird angegeben, wenn das Register r1 oder der Bereich (r1,r2) nicht an die Register R14 und 15 angrenzt.

Hinweis

Beginnt der Bereich (r1,r2) mit dem Register R1 oder R2 und ist der Operand T angegeben, so werden sämtliche Register von R14 bis R2 gesichert, d.h. die Register R0 und evtl. R1 werden nicht aus dem Bereich ausgeschlossen.

entry
ist für die Kompatiblilität mit BBS-Übersetzern vorgesehen und stellt ein Kennzeichen des Makroaufrufs SAVE dar. entry darf bis zu 155 Zeichen lang sein, Kommas und Leerzeichen sind nicht erlaubt. Das Kennzeichen wird in die Makroauflösung vor dem ersten auszuführenden Befehl übernommen. Dem Kennzeichen unmittelbar vorangestellt ist ein Byte, das an einer Halbwortgrenze beginnt und die Länge des Kennzeichens beinhaltet.

*
ist für die Kompatibilität mit BBS-Übersetzern vorgesehen und gibt an, dass als Kennzeichen der Eintrag im Namensfeld des Makroaufrufs verwendet werden soll. Ist das Namensfeld leer, wird der Name der CSECT verwendet, die den Makroaufruf enthält.

Funktionsweise

Der Makro SAVE wird - zusammen mit dem Makro RETRN - in Unterprogrammen benutzt, um die Registerinhalte des Hauptprogramms zu sichern. Der Makro SAVE speichert die Werte ab, der Makro RETRN lädt sie vor dem Rücksprung wieder in die Register und übergibt auf Wunsch einen Returncode.
Der Zwischenspeicher für die Registerinhalte muss vom Hauptprogramm mit einer Länge von 18 Worten (72 Byte) definiert werden. Seine Adresse muss in Register R13 geladen werden.

Struktur des Zwischenspeichers

1

Reserviert für COMPILER


2

Adresse des Zwischenspeichers des
vorgeordneten Programms (MZR 13)

2 - 3: vorbehalten für Programmschachtelung

3

Adresse des Zwischenspeichers des
anzuspringenden Programms

4

MZR 14 Rücksprungadresse

4-18: gesicherte Registerinhalte

5

MZR 15 Zieladresse

6

MZR 0

7

MZR 1 Datenadressen

8

MZR 2

9

MZR 3

10

MZR 4

11

MZR 5

12

MZR 6

13

MZR 7

14

MZR 8

15

MZR 9

16

MZR 10

17

MZR 11

18

MZR 12

Der Zwischenspeicher enthält immer die Registerinhalte des Programms, das ihn definiert hat. Abgespeichert werden sie vom nachgeordneten Unterprogramm, das zu Beginn den Makro SAVE aufruft.

Jedem der Register R0 bis R12, R14 und R15 ist ein Wort des Zwischenspeichers fest zugeordnet. Soll ein Register nicht gesichert werden, so übergeht der Makro SAVE das zugehörige Speicherwort. Die Anordnung der Registerinhalte im Speicher (R14, R15, R0 bis R12) erlaubt es, sämtliche Register in fortlaufender Reihe abzuspeichern und das Register R13 dabei auszuschließen. Das Register R13 kann nicht vom Makro SAVE gesichert werden, da es von SAVE zur Adressierung des Zwischenspeichers gebraucht wird.

Wenn das Unterprogramm das Register R13 verändert, muss dieses Register extra gesichert werden. Der Makro SAVE kann dazu nicht verwendet werden.

Hinweis zur Programmschachtelung

Ruft ein Unterprogramm selbst ein weiteres auf, das auch mit SAVE/RETRN Register sichert, so muss es selbst ebenfalls einen Zwischenspeicher definieren. Bevor es dessen Adresse nach Register R13 lädt, muss es den Inhalt von Register R13 (die Zwischenspeicheradresse des übergeordneten Programms) in Wort 2 des eigenen Zwischenspeichers sichern. Vor der Rückkehr in das übergeordnete Programm muss es das Register R13 von dort wieder laden.
Die Adresse des eigenen Zwischenspeichers kann es im Zwischenspeicher des übergeordneten Programms in Wort 3 hinterlegen.

Bild 25: Zwischenspeicher

Die Adresse in Wort 2 wird von dem Programm eingetragen, das den Zwischenspeicher definiert hat.
Die Adresse in Wort 3 wird - nach dessen Aufruf - vom untergeordneten Programm eingetragen, ebenso die Registerinhalte in den Worten 4 bis 18 (Makro SAVE).

Registervereinbarungen bei Programmverknüpfung:

Register R13

Adresse des Zwischenspeichers

Register R14

Rücksprungadresse

Register R15

Zieladresse (Einsprungstelle im untergeordneten Programm) bzw.
Returncode (siehe Makro RETRN)

Register R1

Adresse der Datenadressen (sofern Datenadressen an das untergeordnete
Programm übergeben werden).