Beim BIND-Makroaufruf bestimmt der dynamische Bindelader die Ladeadresse und den Adressierungsmodus aus den Operanden PROGMOD=ANY/24 und BRANCH=NO/YES.
PROGMOD=ANY (Standard)
Jedes Modul der Ladeeinheit kann oberhalb oder unterhalb 16 Mbyte geladen werden. Die Ladeadresse ist abhängig von den RMODE-Attributen der CSECTs des Moduls und vom Adressierungsmodus des Programms zum Zeitpunkt des BIND-Aufrufs.
Wenn AMODE-CHECK=*ADVANCED angegeben ist, wird zusätzlich das AMODE-Attribut der Ladeeinheit herangezogen um die Ladeadresse der Module der Ladeeinheit zu bestimmen.
Enthält das Modul mehrere CSECTs, legt der DBL einen (Pseudo-)RMODE fest, der aus den RMODE-Attributen der einzelnen CSECTs wie folgt bestimmt wird:
Das Bindemodul erhält nur dann das Attribut Pseudo-RMODE ANY, wenn alle enthaltenen CSECTs das Attribut RMODE ANY besitzen.
Enthält mindestens eine CSECT das Attribut RMODE 24, erhält auch das Modul das Attribut Pseudo-RMODE 24.
Bei AMODE-CHECK=*STD wird die Ladeadresse folgendermaßen bestimmt:
Wenn der Addressierungsmodus des Programms beim BIND-Aufruf nicht 31 ist, werden alle Module der Ladeeinheit unterhalb der 16-Mbyte-Grenze geladen.
Andernfalls werden die Module abhänging von ihren (Pseudo-)RMODE unter- oder oberhalb der 16-Mbyte-Grenze geladen
Der DBL lädt also jedes Modul nur oberhalb 16 Mbyte, wenn das Modul das Attribut RMODE ANY hat und beim BIND-Aufruf der 31-Bit-Adressierungsmodus eingestellt war.
In allen anderen Fällen wird das Modul unterhalb 16 Mbyte geladen.
Bei AMODE-CHECK=*ADVANCED gilt:
Wenn nach dem Laden des ersten Moduls der Ladeeinheit als AMODE-Attribut 24 ermittelt wurde, werden alle weiteren Module der Ladeeinheit unterhalb 16 Mbyte geladen.
PROGMOD=24
Der DBL wertet den Operanden PROGMOD=24 wie folgt aus:
Alle Module der Ladeeinheit werden unterhalb 16 Mbyte geladen.
Externverweise werden nur dann befriedigt, wenn sie eine Adresse unterhalb 16 Mbyte bezeichnen.
Ist gleichzeitig der Operand BRANCH=YES angegeben, wird der 24-Bit-Adressierungsmodus eingestellt.
Das Laden der Ladeeinheit wird mit Fehlermeldung abgebrochen, wenn die Ladeeinheit ein Modul mit dem Attribut AMODE 31 enthält.
BRANCH=NO (Standard)
Nach dem Laden des Moduls wird die Steuerung an das aufrufende Programm zurückgegeben. Der aktuelle Adressierungsmodus wird nicht verändert. Nach dem BIND-Aufruf zeigt das höchstwertige Bit des Feldes, das mit dem Operanden SYMBLAD definiert wurde an, welcher Adressierungsmodus bei Ausführung des Moduls eingestellt werden muss.
Diese Information wird nach folgenden Kriterien bestimmt:
Lage der | AMODE (CSECT) | ||
24 | 31 | ANY | |
≤ 16 Mbyte | 24-Bit-Modus | 31-Bit-Modus | je nach AMODE bei BIND-Aufruf |
> 16 Mbyte | 31-Bit-Modus | 31-Bit-Modus | 31-Bit-Modus |
BRANCH=YES
Es wird zuerst das nachgeladene Modul (ab Einsprungstelle) abgearbeitet. Der Adressierungsmodus wird bestimmt durch die Angabe für den Operanden PROGMOD in Verbindung mit dem Attribut AMODE des ersten Programmabschnitts (CSECT) des Moduls und unter Beachtung der Einsprungstelle und dem eingestellten Adressierungsmodus zum Zeitpunkt des BIND-Aufrufs.
Der Adressierungsmodus wird intern nach folgenden Kriterien eingestellt:
AMODE (CSECT) | |||
PROGMOD | 24 | 31 | ANY |
24 | 24-Bit-Modus | unzulässig | 24-Bit-Modus |
ANY | 24-Bit-Modus | 31-Bit-Modus | 31-Bit-Modus, wenn Einsprungstelle ≥ 16 Mbyte. Wie BIND-Aufruf, wenn Einsprungstelle < 16 Mbyte. |