Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Syntaxdarstellung der Makroaufrufe

&pagelevel(3)&pagelevel

Format eines Makroaufrufs

Das Makroaufruf-Format ist aus zwei Feldern aufgebaut.
Das obere Feld enthält das optionale Namensfeld und den Makronamen. Das untere Feld enthält die möglichen Operanden.

[name] Makroname

<operand1>

,<operand2>

Ein Eintrag im Namensfeld ist grundsätzlich erlaubt. Der hier angegebene Name stellt die symbolische Adresse des ersten Befehls der Makroauflösung dar. Der Benutzer kann diese Adresse z.B. als Sprungziel oder als Haltepunkt für die Dialogtesthilfe benutzen.
Die Aufruf-Formate in diesem Handbuch verzichten allgemein auf die Darstellung des Namensfeldes außer in den Fällen, wo einer Angabe im Namensfeld besondere Bedeutung zukommt. Ein Beispiel dafür ist der Aufruf eines Makros vom Typ S in der L-Form (siehe "S-Typ-Makroaufrufe"): die im Namensfeld angegebene symbolische Adresse ist nötig zur Verknüpfung des Datenbereichs mit dem Befehlsteil des Makros (E-Form). Weitere Beispiele sind die Makros ARDS, CUPAB, DCSTA und TMODE, wo der Standardname des generierten Pseudoabschnittes durch die Angabe im Namensfeld ersetzt werden kann. Die Formatdarstellung dieser Makros umfasst auch das Namensfeld.

Der Makroname bezeichnet den gewünschten Makro. Das Zeichen „$“ als erstes Zeichen kommt bei Makros für Benutzer nicht vor, da es den privilegierten Makroaufrufen vorbehalten ist.

Das Operandenfeld kann eine beliebige Anzahl von Operanden enthalten, die durch Kommas getrennt sind. Es kann auch leer sein. Die Art und Anzahl der Operanden, die angegeben werden können oder müssen, ist der Formatdarstellung des jeweiligen Makroaufrufs zu entnehmen.

Beim Aufruf des Makros im Assemblerprogramm müssen das Namensfeld, der Makroname und der erste Operand mit mindestens einem Leerzeichen getrennt sein. Mehrere Operanden müssen durch Kommas getrennt werden.

Fehler im Format eines Makroaufrufs, die bereits bei der Verarbeitung durch den Assembler erkannt werden, sind durch MNOTE-Meldungen (siehe die Kapitel zur Makrosprache im Handbuch „ASSEMBH“ [2]) im Übersetzungsprotokoll gekennzeichnet.

Operandenformen

Stellungsoperanden

Stellungsoperanden werden vom Assembler anhand ihrer Stellung im Operandenfeld identifiziert, weshalb in ihrer Schreibweise eine bestimmte Reihenfolge eingehalten werden muss. Beispiel: MAKRO A,B,C

Soll der zweite Operand (B) entfallen, so muss dennoch das zweite Komma (unmittelbar hinter dem ersten Komma) geschrieben werden, um die Stellung des dritten Operanden (C) beizubehalten: MAKRO A,,C

Entfallen dagegen die letzten Stellungsoperanden, so müssen die trennenden Kommas nicht geschrieben werden. Im vorliegenden Beispiel bedeutet dies, dass beim Wegfall der Operanden B und C der Makroaufruf wie folgt geschrieben werden kann: MAKRO A

Schlüsselwortoperanden

Ein Schlüsselwortoperand wird vom Assembler durch das ihm eindeutig zugeordnete Schlüsselwort identifiziert. Deshalb ist auch die Reihenfolge dieser Operanden beliebig. Einem Schlüsselwortoperanden wird durch ein Gleichheitszeichen ein Operandenwert zugewiesen, welcher aus einem definierten Wertevorrat stammt.
Die Schreibfolge ist: <Schlüsselwort>=<gewünschter Wert>
Beispiel: MAKRO AREA=X,LENGTH=100

Gemischte Operanden

Ein Operandenfeld kann beide Arten, Stellungs- und Schlüsselwortoperanden, enthalten. Dabei müssen jedoch alle Stellungsoperanden den Schlüsselwortoperanden vorangehen. Beispiel: MAKRO A,B,C,AREA=X,LENGTH=100

Die Regeln für das Weglassen von Stellungs- und Schlüsselwortoperanden gelten entsprechend auch für gemischte Operandenfelder. Sollen z.B. die Operanden B, C und AREA entfallen, so lautet obiges Beispiel wie folgt: MAKRO A,LENGTH=100

Operanden-Unterlisten

Eine Unterliste besteht aus einem oder mehreren durch Kommas getrennten Stellungsoperanden, wobei die gesamte Liste in Klammern eingeschlossen ist. Sie wird als ein Operand betrachtet, d.h. sie besetzt entweder eine einzelne Stelle im Operandenfeld oder ist einem einzelnen Schlüsselwort zugeordnet. Die Verarbeitung des Inhalts einer Unterliste geschieht ähnlich wie bei Stellungsoperanden. Beispiel: (A,B,C) oder (A)
Wenn die Unterliste aus nur einem Operanden besteht (wie im zweiten Beispiel), so müssen die einschließenden Klammern dennoch geschrieben werden, da hierdurch die Unterliste als solche gekennzeichnet ist.

Metasyntax

Bei der Darstellung des Makroaufruf-Formats werden bestimmte Metazeichen verwendet und Vereinbarungen vorausgesetzt, die im Folgenden erläutert werden.

Formale Darstellung

Erläuterung

Beispiel

GROSSBUCHSTABEN



Großbuchstaben bezeichnen Schlüsselwörter oder Konstanten, die in dieser Form vom Benutzer angegeben werden müssen. 

ACCESS=READ

anzugeben ist ACCESS=READ

Schlüsselwörter müssen mit * beginnen, falls alternativ sowohl Schlüsselwörter als auch Namen von Konstanten oder Variablen angegeben werden können.

XPAND=PL / *ALL / MCE

anzugeben ist XPAND=PL  oder XPAND=*ALL oder XPAND=MCE

GROSSBUCHSTABEN in halbfett

Großbuchstaben in Halbfett kennzeichnen erlaubte Abkürzungen der Schlüsselwörter.

GLOBAL=YES
Anzugeben ist:
GLOBAL=YES oder GLOBAL=Y

kleinbuchstaben

Kleinbuchstaben bezeichnen Variablen, die bei der Eingabe vom Benutzer durch aktuelle Werte ersetzt werden müssen, d.h. ihr Inhalt kann von Fall zu Fall verschieden sein.

MPNAMLN=länge

anzugeben ist z.B.
MPNAMLN=10

< >

Spitze Klammern kennzeichnen Variablen, deren Wertevorrat durch die Datentypen beschrieben wird.

<var: pointer>
{ }

Geschweifte Klammern schließen Alternativen ein, d.h. aus den eingeschlossenen Größen muss eine Angabe ausgewählt werden. Ausnahme: Standardwerte

{SINAME=name |
 SINAMAD=adr

Anzugeben ist
SINAME=  oder SINAMAD= mit ihren entsprechenden Werten

/

Der Schrägstrich trennt alternativ zu verwendende Angaben (Operandenwerte). Siehe auch Anmerkung weiter unten.  In komplizierten Strukturen können die alternativen Operandenwerte auch mit geschweiften Klammern gruppiert sein. Geschweifte Klammern dürfen nicht angegeben werden.

ACCESS=READ / WRITE
ACCESS={ READ / WRITE }

Anzugeben ist
ACCESS=READ oder ACCESS=WRITE

|

Der senkrechte Strich trennt alternativ zu verwendende Angaben innerhalb von geschweiften Klammern. Siehe auch Anmerkung weiter unten.
Er wird insbesondere bei der Darstellung alternativ zu verwendender Operanden verwendet.  

FCT=
{
 
REDUCE,SPID=spid_adr
        ,SIZE=zahl / (r)     |

  GETAREA,SPID=spid_adr
        ,SIZE=zahl / (r)
}

Anzugeben ist
FCT=REDUCE,SPID=..,SIZE=..   oder
FCT=GETAREA,SPID=..,SIZE=...

[ ]

Eckige Klammern schließen Wahlangaben ein, d.h. Angaben, die weggelassen werden können. Steht bei Wahlangaben das Komma innerhalb der Klammer, so muss es nur bei Verwendung dieser Wahlangabe geschrieben werden. Steht es hingegen außerhalb der Klammer, so muss es stets geschrieben werden, auch wenn die Wahlangabe nicht gemacht wird.
(Runde Klammern müssen eingegeben werden!)

bereich[,länge]

Anzugeben ist z.B.  BADR  oder  BADR,60

ABC..

Die Unterstreichung hebt den Standardwert hervor. Das ist der Wert, den das System einsetzt, wenn der Benutzer keine Angabe macht (= Voreinstellung). Hat ein Operand keinen Standardwert, so ist die Angabe dieses Operanden Pflicht.

ACCESS=WRITE / READ

Anzugeben ist:
ACCESS=WRITE  oder
ACCESS=READ

(keine Angabe, impliziert ACCESS=WRITE )

l
listposs(n)

Aus den list-poss folgenden Operandenwerten kann eine Liste gebildet werden. n gibt die maximale Anzahl der Listenelemente an. Enthält die Liste mehr als ein Element, muss sie in runden Klammern eingeschlossen werden.

FLAG=list-poss(3):
*SLI/*SKIP/*DC

anzugeben ist:

FLAG=*SKIP
FLAG=(*SLI,*DC)

...

Punkte bedeuten eine Wiederholung. Sie zeigen an, dass die davor stehende Einheit mehrmals hintereinander in Form einer Liste wiederholt werden kann.

Punkte können auch darauf hinweisen, dass weitere Operanden angegeben werden können, die in einem früheren Abschnitt erläutert wurden.

(id1,..4)

Anzugeben ist z.B.  (id1)  oder  (id1,id2)  etc.

MF=(E,...)
Anzugeben ist
MF=(E,(adr))   oder MF=(E,(r))

(siehe auch Typen von Makro-Aufrufen)

=

Das Gleichheitszeichen weist den Operanden einen Operandenwert zu.

DATA=<var:pointer>

  oder 'BLANK'

Dieses Zeichen kennzeichnet ein Leerzeichen (X'40')

STD     oder STD'BLANK'

Anzugeben ist 'STD  '

Tabelle 1: Makro-Syntax

Die Darstellung von Alternativen mittels Schrägstrich ( ACCESS=READ / WRITE) oder geschweiften Klammern mit senkrechtem Strich (ACCESS={ READ | WRITE }) ist gleichwertig. Die geschweiften Klammern werden in komplexeren Ausdrücken verwendet, um eine bessere Übersichtlichkeit zu gewährleisten oder Mehrdeutigkeiten zu vermeiden.

Beispiel 1:

...

,{
   LIBNAM@=adr / (r) / label  |
   LIBNAM= *DBLOPT  / datei / * |
   LIBLINK=name
 }

...

Die geschweiften Klammern beinhalten Alternativen, die mit senkrechten Strichen voneinander getrennt sind: die Operanden LIBNAM@, LIBNAM oder LIBLINK können alternativ verwendet werden. Beim Operanden LIBNAM@ können die Werte adr, (r) oder label alternativ verwendet werden; beim Operanden LIBNAM können die Werte *DBLOPT, datei oder "*" alternativ verwendet werden. Die alternativen Werte sind hier mit einen Schrägstrich getrennt.

Beispiel 2:

{ --------------------------------------------------- (1)
  { ------------------------------------------------- (2)
     SINAME=name |
     SINAMAD=adr / (r)[,SINAMLN=länge] 
  } ------------------------------------------------- (2')
   ,SCOPE=LOCAL  / GROUP / USER_GROUP / GLOBAL |

  SIID=adr / (r)

} --------------------------------------------------- (1')

Innerhalb der Klammern (2)/(2') können die Operanden SINAME=name bzw. SINAMAD=..  verwendet werden. Innerhalb des Operanden SINAMAD können die alternativen Werte adr oder (r),SINAMLN=länge angegeben werden, wobei die Angabe SINAMLN optional ist. Optionale Operanden/Werte werden in eckige Klammern gefasst.

Innerhalb der Klammern (1)/(1') kann entweder das Konstrukt der Klammern (2)/(2') mit der Angabe SCOPE= verwendet werden oder alternativ die Angabe SIID=

Alternative Operandenwerte für SCOPE sind LOCAL, GROUP, USER_GROUP oder GLOBAL. Alternative Operandenwerte für SIID sind adr oder (r).

Beispiel3:

{ -------------------------------------------------- (3)
  
INTR='messid' / adr / (r)[,AREA={adr | (r)}]     |   (4)
  FINISH='messid' / adr / (r),AREA={adr | (r)}       (5)
} -------------------------------------------------- (3')

Innerhalb der äußersten geschweiften Klammern (3)+(3') können alternativ die Operanden INTR oder FINISH angegeben werden. Die beiden Alternativen werden durch "|" am Ende von (4) getrennt.

Die Operandenwerte von INTR können alternativ 'messid', adr, (r), (r),AREA=adr oder (r),AREA=(r) sein. Die eckige Klammer um AREA... zeigt an, dass die Angabe optional ist. Beim Operanden FINISH verhält es sich ähnlich, nur, dass bei der Alternative (r),AREA=   die Angabe von AREA verpflichtend ist. Die beiden Alternativen adr und (r) beim Operanden AREA wurden in geschweifte Klammern gefasst, um Mehrdeutigkeiten bei der Zuordnung der Alternativen zu den Operanden zu vermeiden. 

Beispiel 4:

FCT=

{ DESTROY,SPID=spid_adr                                 |  --- (6)

  INFORM,IDENT=NAME / SPID
       [,SPID=spid_adr]
       [,NAME='name' / name_adr]
        
,SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL}    |  --- (6)

  EXTEND,SPID=spid_adr
        ,SIZE={zahl / (r)}                              |  --- (6)

  CLEAR,SPID=spid_adr
        ,AREA=area_adr / (r)
        ,SIZE=zahl / (r)                               
}

Der Operand FCT erlaubt im Beispiel oben vier alternative Funktionen:  DESTROY, INFORM, EXTEND, CLEAR. Die Alternativen sind durch "|" getrennt (6). Die Einrückungen verdeutlichen, welche weiteren Operanden zu den jeweiligen Funktionen gehören. Z.B. gehören zur Funktion INFORM die weiteren Operanden IDENT, SPID, NAME und SCOPE. Die Funktion EXTEND kennt nur die Operanden SPID und SIZE.


Datentypen der Operandenwerte

Datentyp

Zeichenvorrat

Anmerkungen

c-string

EBCDIC-Zeichen

ist in Hochkommata einzuschließen

integer

[+-] 0..2147483647

ist eine dezimale Zahl

var:

leitet eine variable Angabe ein.
Nach dem Doppelpunkt folgt der Typ der Variablen
(siehe Tabelle „Datentypen der Variablen“).

<var: var-type>

reg:

Register 0..15

(<reg: var-type>)

Zusätze zu Datentypen

Zusatz

Bedeutung

n..m

für Datentyp integer bedeutet n..m eine Intervallangabe;
n: Mindestwert
m: Maximalwert

für Datentyp c-string bedeutet n..m eine Längenangabe in Bytes;
n: Mindestlänge
m: Maximallänge
mit n < m

n

bei Datentyp c-string bedeutet n eine Längenangabe in Bytes;
n muss exakt eingehalten werden.

Die Operandenwerte können direkt als Zeichenkette oder Integer-Zahl (siehe Datentypen c-string und integer) eingegeben werden oder indirekt über eine Variable (siehe Datentyp var:) bezeichnet werden. Die nachfolgende Tabelle enthält die Datentypen, die für Variablen möglich sind.

Datentypen der Variablen

Datentyp

Beschreibung

Definition im
Programm

char: n

Die Variable ist eine Zeichenkette von n Zeichen.
Fehlt die Längenangabe, wird n = 1 angenommen.

CLn

int: n

Die Variable ist eine Integer-Zahl, die n Bytes belegt. Fehlt die
Längenangabe, wird n = 1 angenommen. Bedingung: n <= 4

FLn

enum-of E: n

Die Variable ist die Aufzählung E, die n Bytes belegt. Fehlt die
Längenangabe, wird n = 1 angenommen (n <= 4).

XLn

pointer

Die Variable ist eine Adresse oder ein Adresswert.

A