Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

TABLE - Ladeinformation übergeben

&pagelevel(4)&pagelevel

Allgemeines

Anwendungsgebiet:

Binden und Laden; siehe "Binden und Laden"

Makrotyp:

24-Bit-Schnittstelle: R-Typ; siehe "R-Typ-Makroaufrufe";

31-Bit-Schnittstelle: S-Typ; (Stan-dardform/E-Form/L-Form/C-Form/D-Form);

siehe "S-Typ-Makroaufrufe"

Für 31-Bit-Schnittstelle zu beachten: Im Standardheader wird kein Returncode übergeben.


  • TABLE wird durch die Makros ETABLE und ETABIT abgelöst.

Makrobeschreibung

Mit dem TABLE-Makro übergibt das Benutzerprogramm dem dynamischen Bindelader DBL eine Tabelle mit Einträgen. Diese informieren den DBL über Namen und Adressen von Programmabschnitten (CSECT), Einsprungstellen (ENTRY) und COMMON-Bereichen des Benutzerprogramms, sodass der DBL beim Befriedigen von Externverweisen usw. die ihm übergebenen Werte verwenden kann.

Insbesondere kann ein vom Binder TSOSLNK gebundenes und mit dem Lader ELDE geladenes Benutzerprogramm, das den LINK-Makro verwendet, mit dem TABLE-Makro den DBL (der durch den LINK-Makro aufgerufen wurde) über den Programmaufbau informieren. Dadurch vermeidet man, dass der DBL erneut Moduln lädt, die bereits vom TSOSLNK in das Programm eingebunden wurden.
Während der Makroausführung wird für jeden Tabelleneintrag geprüft, ob der Name eines Ladepunkts schon bekannt ist durch einen vorherigen Ladevorgang oder TABLE-Aufruf. Im Ja-Fall wird eine Warnung ausgegeben und die Makroausführung normal fortgesetzt.

Makroaufrufformat 1 und Operandenbeschreibung

TABLE

{adr / (r) }, {länge / (r)}

[,PARMOD=24 / 31]

[,MF=L / (E,..) / C / D]

Format 2

PBTABD

[,MF=(D,p) / (C,p)]

adr
symbolische Adresse der Tabelle (Aufbau siehe am Ende der Operandenbeschreibung).

(r)
r = Register mit dem Adresswert adr. Für die 24-Bit-Schnittstelle muss Register R1 verwendet werden.
Bei Verwendung der 31-Bit-Schnittstelle wird Register R1 mit der Adresse des Datenbereichs geladen und kann vom Anwender nicht verwendet werden.

länge
Länge der Tabelle in Byte.

(r)
r = Register mit der Längenangabe. Für die 24-Bit-Schnittstelle muss Register R0 verwendet werden.

PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).

24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).

31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB). Datenlisten beginnen mit dem Standardheader.

MF=
Nur für die 31-Bit-Schnittstelle: Die C-/D-Form wird aufgerufen mit MF=C/D bzw.
MF=(C,p)/(D,p).
p = Präfix (max. 3 Zeichen); Voreinstellung: p = I. Das Präfix verändert nur die Feldnamen (nicht die symbolischen Namen bei den Equates). Bei Angabe p = * werden die symbolischen Namen ohne Präfix erzeugt. Bei dynamischer Versorgung des Datenbereichs sollten die Initialisierungswerte für den Standardheader aus einem mit MF=L erzeugten Datenbereich übernommen werden.

Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt„S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.

Der Makro PBTABD generiert für die 31-Bit-Schnittstelle eine Beschreibung der Tabelle als DSECT oder Datenabschnitt. Es bedeuten:

MF=
gibt an, ob eine DSECT oder eine Datenliste erzeugt wird.

p = Präfix (max. 3 Zeichen), mit dem alle in der Liste vorkommenden symbolischen Namen beginnen. Bei Angabe p = * werden die Namen ohne Präfix erzeugt.

D
eine DSECT wird erzeugt; Voreinstellung.

C
ein Datenabschnitt wird erzeugt.

Aufbau der Tabelle für den DBL

  1. bei Verwendung der 24-Bit-Schnittstelle:

Distanz

Länge

Eintrag/Funktion

0

1

X'02': kennzeichnet CSECT oder ENTRY
X'03': kennzeichnet benannten COMMON
X'04': kennzeichnet unbenannten COMMON

1

8

Name des ENTRY, COMMON oder CSECT (8 Zeichen)

9

3

errechnete Adresse

12

3

Länge des COMMON (gilt nur für COMMON)

  1. bei Verwendung der 31-Bit-Schnittstelle:

Distanz

Länge

Eintrag/Funktion

0

1

X'F0': kennzeichnet CSECT
X'F1': kennzeichnet ENTRY
X'F3': kennzeichnet COMMON

1

8

Name des ENTRY, CSECT oder COMMON (8 Zeichen)

9

1

Attribute:
AMODE = 24 --> X'02'
AMODE = 31 --> X'04'
AMODE = ANY −−> X'06'

10

2

X'00' (wird für Ausrichtung benötigt)

12

4

Ladeadresse (31-Bit-Adresse)

16

4

Länge des COMMON: sonst 4 X'00'

Der Makro PBTABD generiert das Layout dieser Tabelle.

Rückinformation und Fehleranzeigen

Über die Ausführung des Makros TABLE wird im Register R15 ein Returncode übergeben. Es ist aber zu unterscheiden, ob die 24-Bit- oder die 31-Bit-Schnittstelle aufgerufen wurde (Operand PARMOD oder Makro GPARMOD).

bei PARMOD=24:

R15:

+---------------+
|   |   |   |   |
| | | | | | |a|a|
+---------------+

Über die Ausführung des Makros TABLE wird im rechtsbündigen Byte des Registers R15 ein Returncode übergeben.

Ret.Code

Erläuterung

X'00'

Makroaufruf erfolgreich.

X'04'

Makroaufruf nicht erfolgreich; in diesem Fall wird Register R1 gelöscht.

bei PARMOD=31:

R15:

+---------------+
|   |   |   |   |
|c|c|b|b|a|a|a|a|
+---------------+

Über die Ausführung des Makros TABLE wird im Register R15 ein gegliederter Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode)
Es bedeuten:
cc=00: Funktion normal ausgeführt.
cc=0C: Funktion nicht ausgeführt.

Register R1 wird mit der Adresse des Datenbereichs geladen.

cc

bb

aaaa

Erläuterung

00

00

0000

Normale Ausführung.

0C

00

0004

Datenbereich ist nicht ausgerichtet.

0C

00

0008

Datenbereich nicht zugewiesen oder Adresse in Register R1 liegt außerhalb
des Adressraums.

0C

00

0014

Es wurde eine Registernummer > 15 angegeben.

0C

00

0018

Unerlaubte Benutzung eines reservierten Feldes.

0C

00

0100

Fehlerhafte Längenangabe (Operand länge).

0C

00

0104

Falscher Name angegeben (Tabelleneintrag; Distanz 1).

0C

00

0108

Falsche Typangabe (Tabelleneintrag; Distanz 0).

0C

00

010C

Angabe für AMODE nicht korrekt (Tabelleneintrag).

0C

00

0110

ungültige Ladeadresse angegeben (Tabelle Ladeadresse).
Die Adresse liegt außerhalb des Klasse-6-Speichers.

0C

00

0200

Systemfehler.

0C

00

0300

Interner Fehler bei Speicheranforderung ($REQM) oder Speicherfreigabe
($RELM) (Systemfehler).

00

01

FFFF

Ungültige Angabe für UNIT/FUNCTION im Standardheader.

00

03

FFFF

Ungültige Angabe für VERSION im Standardheader.