• |
Wenn das erste Bit eine 0 ist, dann werden die folgenden 8 Bit entsprechend dem Wert des aktuellen Adresszeigers abgelegt.
|
• |
Wenn das erste Bit eine 1 ist, dann werden die folgenden 2 Bits wie folgt interpretiert:
|
| 00 |
Spezielles Element, siehe unten
|
| 01 |
Programm relativ.
Die nächsten 16 Bits werden abgelegt mit einem Offset des Programmsegments.
|
| 10 |
Daten relativ.
Die nächsten 16 Bits werden abgelegt mit einem Offset des Datensegments.
|
| 11 |
Common relativ.
Die nächsten 16 Bits werden abgelegt mit einem Offset des aktuellen Common-Blocks.
|
Den folgenden Elementen folgt nur ein Namenfeld:
|
0000 |
ENTRY Symbol.
Das im Namenfeld angegebene Symbol wird in diesem Modul definiert, so dass dieses Modul gelinkt wird, wenn diese Bibliothek durchsucht wird, wie mit der S-Option von LINK-80 angegeben.
[PUBLIC Anweisung]
|
0001 |
Auswahl eines Common-Blocks.
Weist LINK-80 an, den Adresszeiger für folgende Elemente mit Common-Zugriff zu verwenden, zu dem der Common-Block gehört, der im Namenfeld angegeben ist.
|
0010 |
Programm-Name.
Der Name des relozierbaren Moduls.
|
0011 |
Aufruf einer Library. Dies geschieht z.B. mittels des Assemblerbefehls .request library
|
0100 |
Extension MS-LINK.
Ein solches Element ist aufgebaut wie ein Element mit nur einem Namenfeld.
Allerdings enthält es keine Symbole sondern es enthält ein Zeichen, das das Element definiert, gefolgt von einem bis sieben Zeichen mit zusätzlicher Information.
Ein Extension MS-LINK-Element hat folgende Gestalt: 1 00 0100 lll s bbbbbb .
Mit:
lll | Drei Bits, die die Länge des Feldes bbbbbb definieren. |
s | Ein 8 Bit Extension MS-LINK-Element Typ. |
bbbbbb | 1 bis 6 Bytes mit zusätzlicher Information. |
Die aktuellen Extension MS-LINK-Element Typen sind:
5 | X'35' | COBOL Overlay-Markierung |
A | X'41' | Arithmetische Operation (Arithmetischer Operator).
Das folgende Byte definiert die Operation:
Operator | Definition |
Operator | Definition |
01 |
Byte vom Expession-Stack laden.
|
02 |
Wort (16 Bit) vom Expession-Stack laden.
|
03 |
Oberes Byte vom TOS (Top Of the Stack) auf den Stack laden.
|
04 |
Unteres Byte vom TOS auf den Stack laden.
|
05 |
Bitweise NOT: Einerkomplement bilden.
|
06 |
Negation: Zweierkomplement bilden.
|
07 |
Subtraktion: Differenz der beiden TOS-Werte auf dem Stack ablegen.
|
08 |
Addition: Summe der beiden TOS-Werte auf dem Stack ablegen.
|
09 |
Multiplikation: Produkt der beiden TOS-Werte auf dem Stack ablegen.
|
0A |
Division: Quotienten der beiden TOS-Werte auf dem Stack ablegen.
|
0B |
Modulo: Divisionsrest der beiden TOS-Werte auf dem Stack ablegen.
|
| |
|
B | X'42' | Arithmetische Operation (Externe Referenz) |
C | X'43' | Arithmetische Operation (Feldbasis + Offset) |
|
Den folgenden Elementen folgt ein Wertefeld und ein Namenfeld:
|
0101 |
Definition der Common-Größe.
Das Wertefeld beinhaltet die Anzahl reservierter Bytes für den im Namenfeld beschriebenen Common-Block.
Der erste angegebene Wert eines gegebenen Blocks muss größer als oder gleich sein bezogen auf folgende
Definitionen dieses Blocks in anderen zu linkenden Modulen.
|
0110 |
Externe Verkettung.
Das Wertefeld beinhaltet das oberste Glied einer Kette, die mit einer absoluten 0 endet.
Jeder Eintrag in der Kette wird ausgewechselt gegen das externe Symbol, das im Namenfeld angegeben ist.
[benutzt bei EXTRN usw.]
|
0111 |
Definition eines ENTRY.
Der Wert des Symbols im Namenfeld wird gesetzt durch das Wertefeld.
[PUBLIC Anweisung]
|
Den folgenden Elementen folgt nur ein Wertefeld:
|
1000 |
Externer --Offset.
Wird bei JP und CALL -Instruktionen auf externe Referenzen genutzt.
|
1001 |
Externer +-Offset.
Die folgenden zwei Bytes im aktuellen Segment müssen mit dem Offset aus dem Wertefeld versehen werden, nachdem alle Verkettungen aufgelöst sind.
|
1010 |
Definition der Datengröße.
Das Wertefeld beinhaltet die Anzahl Bytes im Datensegment des aktuellen Moduls.
|
1011 |
Setzen des Adresszeigers.
Setzt den Adresszeiger auf den Wert, der im Wertefeld steht.
|
1100 |
Adresse einer Verkettung.
Das Wertefeld beinhaltet das oberste Glied einer Kette, die mit einer absoluten 0 endet.
Jeder Eintrag in der Kette wird ausgewechselt gegen den aktuellen Wert des Adresszeigers.
|
1101 |
Definition der Programmgröße.
Das Wertefeld beinhaltet die Anzahl Bytes im Programmsegment des aktuellen Moduls.
|
1110 |
Modul-Ende.
Definiert das Ende des aktuellen Moduls.
Wenn das Wertefeld einen anderen Wert als absolut 0 enthält, dann wird der Wert genutzt als Startadresse für das gelinkte Programm.
Im allgemeinen ist dann das aktuelle Modul das Hauptmodul.
Das nächste Element in der Datei startet an der nächsten Byte-Grenze.
|
1111 |
Datei-Ende;
ohne Werte- oder Namenfeld.
Dieses Element folgt dem Element „Modul-Ende" im letzten Modul der Datei.
|