Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Typen von Makroaufrufen

In Typen werden die Makroaufrufe abhängig von der Art ihrer Operandenübergabe eingeteilt. Es gibt den O-Typ, R-Typ (Übergabe in Registern) und den S-Typ (Übergabe im Speicher).

O-Typ-Makroaufrufe

Makroaufrufe, die weder dem R-Typ noch dem S-Typ zuzuordnen sind, werden als O-Typ-Makros bezeichnet.

Vom O-Typ sind z.B. jene Makroaufrufe, die im Operandenfeld die Angabe eines Registers vorsehen (häufig nur R1), das die Anfangsadresse einer Operandenliste enthält.

Die Operandenliste wird im Datenteil des Programms definiert (DC-Anweisungen) und enthält die Operandenwerte.

R-Typ-Makroaufrufe

Operation

Operanden

RTYP

operand1 / (r1),operand2 / (r2)

Ein Makroaufruf ist vom Typ R, wenn alle erforderlichen Operandenwerte in die zwei für diesen Zweck verwendeten Register 0 und 1 geladen werden können. Durch einen R-Typ-Makroaufruf wird keine Operandenliste generiert.

Die Operanden können direkt angegeben werden oder in den Registern 0 und 1 enthalten sein.

Adressoperanden in R-Typ-Makroaufrufen können als explizite oder implizite Adressen geschrieben werden.

S-Typ-Makroaufrufe

Format 1 (S-, L-, D-, C-, M-Form)

Name

Operation

Operanden

[opadr]

makro

operand1,...operandn

[,MF = S / L /

C[,PREFIX = p][,MACID = mac] /

(C,p) /

D[,PREFIX = p] /

(D,p) /

M[,PREFIX = p][,MACID = mac]

]

Format 2 (E-Form)

Name

Operation

Operanden

[opadr]

makro

MF = E / (E,opadr) / (E,(r))[,PARAM = adr]

Beim S-Typ werden die im Makroaufruf angegebenen Operandenwerte in Form eines Datenbereichs an den Funktionsbaustein übergeben. Der Datenbereich ist Teil der Makroauflösung. Er ist ein geeignet strukturierter Bereich, der die für die Übergabe der Operandenwerte notwendigen Daten- und Speicherdefinitionen (DC- und DS-Anweisungen) enthält.

Für alle Makros, die mit einer bestimmten Makroversion aufgerufen werden können (z.B. über die Operanden VERSION oder PARMOD), gilt: In allen Aufrufen, die sich durch den MF-Operanden unterscheiden (MF=L/E/D/C) muss der Versionsoperand den gleichen Wert haben.

Für MF unterscheidet man 6 Formen des Makroaufrufs: S-Form, E-Form, L-Form, D-Form, C-Form, M-Form.

S-Form = Standardform

MF=S ist Voreinstellung. Es werden zuerst der Befehlsteil und anschließend der Datenbereich generiert, unter Beachtung der im Makroaufruf angegebenen Operandenwerte. Der Datenbereich enthält keine Feldnamen und keine erläuternden Equates. Der Standardheader ist initialisiert.

E-Form = Execute-Form


Operation

Operanden

[label]

makro

MF = E,PARAM = addr / (r) / (1)

Mit der E-Form des MF-Operanden wird ein Systemaufruf (SVC) ausgelöst: der Inhalt einer Operandenliste (siehe L-Form) wird ausgewertet und die entsprechenden Operationen werden ausgeführt. Daher muss im „Execute“-Makroaufruf die Adresse der Operandenliste enthalten sein, entweder als symbolische Adresse (addr) oder in einem Register (r/1). Weitere Operanden werden nicht ausgewertet.

„label“ ist die symbolische Adresse, die dem Makroaufruf im Assemblerprogramm zugeordnet werden kann.

L-Form = LIST-Form


Operation

Operanden

label

makro

MF=L,operandenliste

Die List-Form erzeugt mit den übrigen im Makroaufruf angegebenen Operanden eine Operandenliste, allerdings ohne symbolische Adressen für die Operanden. Diese werden über die C- oder D-Form generiert. Die Adresse der Operandenliste muss beim Systemaufruf (E-Form) angegeben werden, daher kann die symbolische Adresse „label“ nicht entfallen.

Die Operandenliste beginnt mit dem Standardheader (siehe "Standardheader"), dessen Felder beim Aufbau der Liste über MF=L automatisch versorgt sind. Auch wenn eine Operandenliste über die D- oder die C-Form dynamisch aufgebaut werden soll, muss sie vorher mit MF=L initialisiert werden, damit eine korrekte Versorgung des Headers gewährleistet ist.

D-Form=DSECT-Form


Operation

Operanden

[label]

makro

MF = D[,PREFIX = prefix]

Die D-Form erzeugt eine DSECT für die Operandenliste des Makros. Mit dem Operanden PREFIX kann das erste Zeichen der generierten Namen geändert werden. Ist für den Makro mit „label“ eine symbolische Adresse definiert, erhält die DSECT diesen Namen.

Ist „label“ nicht definiert, erhält die DSECT einen makrospezifischen Standardnamen, dessen erstes Zeichen ebenfalls über PREFIX modifiziert wird. Die Operandenliste sollte vor dem DSECT-Aufruf mit der List-Form initialisiert werden, damit die korrekte Versorgung des Standardheaders gewährleistet ist.

C-Form


Operation

Operanden

[label]

makro

MF = C[,PREFIX = prefix][,MACID = id]

Wie die D-Form erzeugt die C-Form eine Operandenliste, allerdings nicht als DSECT, da keine DSECT-Anweisung generiert wird. Die Operandenliste bleibt leer, sie sollte mit einem Aufruf in L-Form initialisiert werden, damit vor allem der Standardheader korrekt versorgt ist.

Mit dem Operanden PREFIX kann das erste Zeichen der generierten Namen geändert werden, mit dem Operanden MACID auch das zweite bis vierte Zeichen (in MACID kann eine bis zu drei Zeichen lange Zeichenfolge angegeben werden). Ist der Makroaufruf mit „label“ symbolisch adressiert, ist dies gleichzeitig die Adresse der Operandenliste; ist „label“ nicht definiert, ist die Operandenliste nicht symbolisch adressierbar.

M-Form = Modifizierungs-Form


Operation

Operanden

[label]

makro

MF = M[,PREFIX = prefix][,MACID = id],operandenliste

Es werden Befehle (z.B. MVCs) generiert, die während des Programmlaufs in einem bereits initialisierten Datenbereich (Operandenliste) Felder mit den Operandenwerten überschreiben, die im Makroaufruf angegeben werden. Damit bietet die M-Form eine komfortable Möglichkeit, die Operandenwerte, mit denen ein Makro aufgerufen wird, dynamisch dem Programmlauf anzupassen.

Da die dafür generierten Befehle die symbolischen Adressen und Equates der C-Form bzw. D-Form benutzen, ist bei der Verwendung der M-Form sicherzustellen, dass diese Namen für die Adressierung der zu modifizierenden Operandenliste zur Verfügung stehen. Insbesondere ist darauf zu achten, dass bei einem Makroaufruf mit MF=M die ggf. Operanden PREFIX und MACID mit den gleichen Werten angegeben werden wie im zugehörigen MF=C- bzw. MF=D-Aufruf.