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

&pagelevel(4)&pagelevel

Der Eindeutigkeit wegen sei hier erwähnt, dass mit der Bezeichnung „Makroaufruftyp“ nicht die Begriffe „Aktionsmakro“ bzw. „Definitionsmakro“ gemeint sind. Diese Begriffe nehmen Bezug auf die Funktion eines Makros:

Ein Aktionsmakro ist ein Makro, von dem die Ausführung bestimmter Handlungen erwartet wird, wie z.B. ein Druckvorgang durch den PRNT-Makro gesteuert wird.

Ein Definitionsmakro ist ein Makro, von dem keine Handlungen, sondern Definitionen (Adressierungshilfen, DSECTS) erwartet werden. Der Makro CUPAB ist ein Beispiel für die Generierung von symbolischen Namen zur Adressierung von Operandentabellen.

In Typen werden die Makroaufrufe abhängig von der Art ihrer Operandenübergabe eingeteilt. Es gibt den R-Typ (Übergabe in Registern), den S-Typ (Übergabe im Speicher) und den sog. O-Typ (Makros ohne Typzuordnung).
Makros vom S-Typ können sowohl Aktionsmakros (MF=E) als auch Definitionsmakros (MF=D) sein.

R-Typ-Makroaufrufe

Operation

Operanden

makro

Ein Makroaufruf ist von Typ R, wenn alle erforderlichen Operandenwerte in die zwei für diesen Zweck verwendeten Register R0 und R1 geladen werden können. Durch einen R-Typ-Makroaufruf wird also kein Parameterbereich generiert.

S-Typ-Makroaufrufe

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 erhält die für die Übergabe der Operandenwerte notwendigen Daten- und Speicherdefinitionen (DC- und DS-Anweisungen).

Name

Operation

Operanden

[opadr]

makro

Der S-Typ unterstützt die Angabe des Operanden MF. In Abhängigkeit von der Funktionalität der verschiedenen Makros sind mehrere Arten der Darstellung von MF möglich:

  • Standardform (MF=S):

    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.

  • L-Form (MF=L):

    Es wird nur 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. Der Makroaufruf wird gewöhnlich im Definitionsteil des Programms abgesetzt. Bei Shared-Code-Programmierung darf dieser Aufruf nicht im invarianten Programmteil liegen, wenn er variable Daten enthält. Der Datenbereich wird im invarianten Programmteil mit konstanten Werten initialisiert, vor dem E-Form-Aufruf in einen ablauflokalen Datenbereich kopiert und dort ggf. modifiziert. Die Modifizierung wird z.B. mit der M-Form realisiert, falls sie für die betreffende Schnittstelle angeboten wird.

  • C-Form (MF=C / MF=(C,p)):

    Es wird nur der Datenbereich generiert; im Makroaufruf angegebene Operandenwerte werden nicht ausgewertet. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich. Die ersten Zeichen der Feldnamen können bestimmt werden (p = Präfix zur Ersetzung der ersten Zeichen). Der Datenbereich wird durch ein Längenequate beendet. Der Standardheader muss i.d.R. vom Anwender initialisiert werden.

  • D-Form (MF=D / MF=(D,p)):

    Es wird eine DSECT generiert. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich. Die ersten Zeichen der Feldnamen können bestimmt werden (p = Präfix zur Ersetzung der ersten Zeichen). Die DSECT beschreibt die Struktur eines Speicherbereiches, ohne selbst Speicherplatz zu belegen. Sie wird durch ein Längenequate beendet. Es wird nicht auf den anfänglichen Adresspegel umgeschaltet. Der bei DSECT angegebene symbolische Name wird in einen ESD-Satz eingetragen. Der Adresspegel wird auf null gesetzt.

  • E-Form:

    Es werden nur die zum Aufruf des Funktionsbausteins notwendigen Befehle generiert. Der Befehlsteil endet i.d.R. mit einem SVC. Im Makroaufruf muss die Adresse des Datenbereichs mit den Operandenwerten angegeben sein. Folgende Formen sind gebräuchlich:

    MF=(E,adr)
    MF=(E,(r))
    MF=E,PARAM=adr

    adr = Adresse des Datenbereichs
    r = Register mit dem Wert der Adresse des Datenbereichs
    adr = Adresse des Datenbereichs

    Weitere Operanden werden in der E-Form nicht ausgewertet.

  • M-Form (MF=M)

    Es werden Befehle (z.B. MVCs) generiert, die während des Programmlaufs in einem mit MF=M bereits initialisierten Datenbereich bzw. bei Shared-Code-Programmierung in einer ablauflokalen Kopie des mit MF=L initialisierten Datenbereichs 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 oder 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.

Eine ausführliche Beschreibung der MF-Formen finden Sie im Handbuch „Makroaufrufe an

den Ablaufteil“ [8].

O-Typ-Makroaufrufe

Eine Reihe von Makroaufrufen kann weder dem R-Typ noch dem S-Typ zugeordnet werden. Sie sind Makroaufrufe ohne Typ-Zuordnung.

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.