Section courante

A propos

Section administrative du site

LINK

Liaison
Zenith Data Systems Microsoft MS-DOS 2 Externe

Syntaxe 1

LINK LINK appelle la commande LINK et commence le prompt.

Syntaxe 2

LINK object-list,runfile,listfile,lib-list [/x]

Paramètres

Nom Description
LINK Ce paramètre permet d'indiquer une liste de modules d'objets avec une spécification facultative de nom de l'unité de disque et/ou de nom de chemin.
object-list Ce paramètre permet d'indiquer une liste de modules d'objet avec une spécification facultative de nom de l'unité de disque et/ou de nom de chemin.
runfile Ce paramètre permet d'indiquer le fichier devant recevoir la sortie exécutable avec la spécification facultative du nom l'unité de disque et/ou du nom du chemin.
listfile Ce paramètre permet d'indiquer le fichier recevant la liste avec la spécification facultative du nom de l'unité de disque et/ou du nom du chemin.
lib-list Ce paramètre permet d'indiquer une liste de modules de bibliothèque à rechercher avec une spécification facultative de nom de l'unité de disque et/ou de nom de chemin.
/DSALLOCATE Ce paramètre permet de charger les données à l'extrémité supérieure du segment de données.
/HIGH Ce paramètre permet de placer le fichier d'exécution aussi haut que possible dans la mémoire.
/LINENUMBER Ce paramètre permet d'inclure les numéros de ligne dans le fichier de liste.
/MAP Ce paramètre permet de lister tous les symboles globaux avec leurs définitions.
/PAUSE Ce paramètre permet de suspendre la session de l'éditeur de liens.
/STACK:number Ce paramètre permet de définir la taille de pile fixe dans le fichier d'exécution.
/NO Ce paramètre permet d'indiquer qu'il n'y a aucune recherche de bibliothèque de répertoire par défaut.

Syntaxe 3

LINK @filespec

Paramètres

Nom Description
LINK Ce paramètre permet d'appeler la commande LINK.
@ Ce paramètre permet d'indiquer à LIB que toutes les réponses aux prompts sont contenues dans le nom de fichier qui suit.
filespec Ce paramètre permet d'indiquer le nom de votre fichier de réponses avec une spécification facultative de nom de l'unité de disque et/ou de nom de chemin.

Description

Cette commande permet de créer les liaisons de modules d'objets de programme afin de produire un code en langage machine pour que le système de micro-ordinateur puisse exécuter le programme.

Remarque

Objectif

LINK est un utilitaire MS-DOS vous permettant de combiner plusieurs modules d'objets en un seul module de chargement déplaçable, ou fichier d'exécution.

Concepts préliminaires

LINK est un concepteur de lien relocalisable permettant de relier des modules de code objet 8086 et 8088 produits séparément. Les modules objets doivent être des fichiers 8086 ou 8088 uniquement.

LINK utilise des prompts pour toutes les commandes nécessaires et facultatives.

Le fichier de sortie de LINK (appelé fichier d'exécution) n'est pas lié à des adresses mémoire spécifiques et, par conséquent, peut être chargé et exécuté à n'importe quelle adresse pratique par le système d'exploitation.

LINK utilise une méthode de recherche de bibliothèque d'index de dictionnaire, ce qui réduit considérablement le temps de liaison pour les sessions impliquant des recherches de bibliothèque.

LINK est capable de lier des fichiers totalisant 900K octets.

Présentation du fonctionnement LINK

Le LINK combine plusieurs modules d'objets en un seul module de chargement déplaçable, ou fichier d'exécution. Comme il combine des modules, LINK résout les références externes entre les modules d'objet et peut rechercher dans plusieurs fichiers de bibliothèque les définitions de toutes les références externes non résolues.

Le LINK produit également un fichier de liste qui affiche les références externes résolues et tous les messages d'erreur.

LINK utilise autant que possible la mémoire disponible. Lorsque la mémoire disponible est épuisée, LINK crée alors un fichier disque et devient un éditeur de liens virtuel.

Définitions

Les termes suivants décrivent le fonctionnement intrinsèque de LINK. Une compréhension des concepts définis par ces termes fournit une compréhension de base du fonctionnement de LINK.

Parmi les termes ci-dessous, les trois premiers apparaissent fréquemment dans les messages d'erreur LINK.

  1. Segment : Un segment est une zone de mémoire contiguë d'une longueur maximale de 64 Ko (où K correspond à 1 024 octets). Un segment peut être situé n'importe où dans la mémoire 8086 sur une limite de "paragraphe" (16 octets). Le contenu d'un segment est adressé par un couple registre-segment/déplacement.
  2. Groupe : Un groupe est une collection de segments tenant dans 64 Ko de mémoire. Les segments sont inclus dans le groupe par l'assembleur, par le compilateur ou par vous. Vous donnez le nom du groupe dans le programme de langage d'assemblage. Pour les langages de haut niveau tels que BASIC, FORTRAN, COBOL et Pascal, la dénomination est effectuée par le compilateur.
  3. Le groupe est utilisé pour l'adressage des segments en mémoire. Chaque groupe est adressé par un seul registre de segment. Les segments au sein du groupe sont adressés par le registre de segment plus un déplacement. LINK vérifie que les modules d'objet d'un groupe respectent la contrainte de 64 Ko.

  4. Classe : Une classe est une collection de segments. L'inclusion de segments dans une classe contrôle l'ordre et le placement relatif des segments en mémoire. Le nom de la classe est donné par vous dans le programme de langage d'assemblage. Pour les langages de haut niveau (BASIC, FORTRAN, COBOL, Pascal), le nommage est effectué par le compilateur.
  5. Les segments sont inclus dans une classe au moment de la compilation ou de l'assemblage. Les segments d'une classe sont chargés en mémoire de manière contiguë. Les segments sont classés au sein d'une classe dans l'ordre où LINK rencontre les segments dans les fichiers objet. Une classe précède une autre en mémoire uniquement si un segment de la première classe précède tous les segments de la deuxième classe dans l'entrée de LINK.

  6. Alignement : L'alignement fait référence à certaines limites de segment. Il peut s'agir de limites d'octets, de mots ou de paragraphes.

  7. Type de combinaison : Un type de combinaison est un attribut d'un segment ; il indique à l'éditeur de liens comment combiner les segments d'un nom de lien, ou il relaie d'autres informations sur les propriétés d'un segment. Les types de combinaison sont : pile, public, privé et commun. La manière dont LINK organise ces types de combinaisons est abordée dans la section suivante.

Combinaison et disposition des segments

Le LINK fonctionne avec quatre types de combinaison étant déclarés dans le module source pour l'assembleur ou le compilateur : privé, public, pile et commun. Le type de combinaison de mémoire disponible dans la MACRO-86 de Microsoft est traité de la même manière que public. LINK ne place pas automatiquement le type de combinaison de mémoire comme les segments les plus élevés.

LINK combine les segments pour ces type de combinaison comme suit :

Nom Description Schéma
Privé Les segments privés sont chargés séparément et restent séparés. Ils peuvent être physiquement, mais pas logiquement, continus, même si les segments portent le même nom. Chaque segment privé a sa propre adresse de base.
Publique Les segments publics portant le même nom et le même nom de classe sont chargés de manière contiguë. Le déplacement va du début du premier segment chargé au dernier segment chargé. Il n'y a qu'une seule adresse de base pour tous les segments publics du même nom et du même nom de classe. Les types de combinaison pile et mémoire sont traités de la même manière que public. Cependant, le pointeur de pile est défini sur la dernière adresse du dernier segment de pile.
Commun Les segments communs du même nom de segment et du même nom de classe sont chargés en se chevauchant. Il n'y a qu'une seule adresse de base pour tous les segments communs du même nom. La longueur de l'aire commune est la longueur du segment le plus long.

Le placement de segments dans un groupe dans l'assembleur fournit un adressage de déplacement des éléments à partir d'une seule adresse de base pour tous les segments de ce groupe.

Les segments sont regroupés par noms de classe déclarés. LINK charge tous les segments appartenant au premier nom de classe rencontré, puis charge tous les segments du nom de classe suivant rencontré, et continue jusqu'à ce que toutes les classes aient été chargées.

Si votre programme contient : Ils seront chargés en tant que :
A SEGMENT 'FOO'
B SEGMENT 'BAZ'
C SEGMENT 'BAZ'
D SEGMENT 'ZOO'
E SEGMENT 'FOO'
'FOO'
A
E
'BAZ'
B
C
'ZOO'
D

Si vous écrivez des programmes en langage assembleur, vous pouvez exercer un contrôle sur l'ordre des classes en mémoire en écrivant un module factice et en le répertoriant immédiatement après le prompt des modules d'objet LINK. Le module factice déclare les segments dans les classes dans l'ordre dans lequel vous voulez que les classes soient chargées.

Remarque : N'utilisez pas cette méthode avec les programmes BASIC, COBOL, FORTRAN ou Pascal. Autorisez le compilateur et l'éditeur de liens à effectuer leurs tâches normalement.

Par exemple, si vous créez le module factice :

A  SEGMENT 'CODE'
A  ENDS
B  SEGMENT 'CONST'
B  ENDS
C  SEGMENT 'DATA'
C  ENDS
D  SEGMENT STACK 'STACK'
D  ENDS
E  SEGMENT 'MEMORY'
E  ENDS

veillez à déclarer toutes les classes à utiliser dans votre programme dans ce module. Si vous ne le faites pas, vous perdez le contrôle absolu sur l'ordonnancement des cours. (Les segments sont chargés dans leur ordre d'apparition et alphabétiquement par nom de classe.)

Adresses segment

Le 8088 doit pouvoir adresser tous les segments en mémoire. Tout numéro de 20 bits peut être adressé. Le 8088 représente ces nombres sous la forme de deux nombres de 16 bits ; par exemple, HEX F:12. Le F représente une adresse de trame canonique et le 12 est le déplacement. L'adresse de trame canonique est l'adresse de base ou l'adresse de segment contenant le segment. Un déplacement est l'emplacement du segment, déplacé depuis le début de la trame canonique.

L'éditeur de liens reconnaît un segment par son adresse de trame canonique et son déplacement dans la trame.

Pour convertir l'adresse de segment F:12 en un nombre de 20 bits, déplacez l'adresse de trame vers la gauche de 4 bits et ajoutez le déplacement.

En utilisant l'exemple ci-dessus HEX F:12.

F0
+ 12
___
F:12 = 102
(HEXF F décalage vers la gauche 4 bits)
(le déplacement)

F:12 = 102

Comment LINK attribue les adresses

Pour attribuer des adresses aux segments, LINK :

Corrections de relocalisations

LINK effectue des corrections de relocalisation ou résout des références d'adresse sur quatre types de références dans des modules d'objet.

Brève référence

Les références courtes sont toutes relatives à elles-mêmes. Ainsi, l'adresse de trame des trames cible et source est la même. LINK générera le message d'erreur de correction :

Fixup offset exceeds field width

dans les conditions suivantes :

  1. Les adresses de trame cible et source sont différentes.
  2. La cible est plus de 128 octets avant ou après l'adresse de la trame source.

La valeur résultante de la référence courte doit tenir dans un octet signé.

Références relative courte

Lorsque des références relative courte sont utilisées, l'adresse de trame des trames cible et source est la même. LINK générera le message d'erreur de correction dans les conditions suivantes :

  1. Les adresses des trames cible et source sont différentes.
  2. La cible est plus de 32K avant ou après l'adresse de la trame source.

La valeur résultante de la référence presque auto-relative doit tenir dans un mot signé (16 bits).

Références longue

Les références longues ont une cible dans un autre cadre. La cible doit être adressable via le cadre canonique spécifié. LINK générera le message d'erreur de correction dans les conditions suivantes :

La valeur résultante d'une référence longue doit être une adresse de trame et un déplacement.

Fichiers utilisés par LINK

LINK fonctionne avec un ou plusieurs fichiers d'entrée, peut produire deux fichiers de sortie, peut créer un fichier de mémoire virtuelle et peut être dirigé pour rechercher un à huit fichiers de bibliothèque. Pour chaque type de fichier, vous pouvez donner une spécification de fichier en trois parties. Le format des spécifications de fichier LINK est :

d:pathname filename

Nom Description
d: Ce paramètre permet d'indiquer le nom de l'unité de disque identifiant le disque sur lequel se trouve le fichier. Les noms de l'unité de disque autorisés pour LINK sont A: à O:
pathname Ce paramètre permet d'indiquer le chemin du répertoire que le système doit utiliser (s'il est différent du répertoire actuel du disque spécifié par défaut) pour localiser le ou les fichiers souhaités.
filename Ce paramètre permet d'indiquer le nom de fichier principal et l'extension, le cas échéant, identifiant le fichier.

Fichiers d'entrée

Si aucune extension n'est donnée dans les spécifications du fichier d'entrée (objet), LINK reconnaît par défaut :

Fichier Extension par défaut
Objet .OBJ
Bibliothèque .LIB

Fichiers de sortie

Fichier Extension par défaut
Exécution .EXE (ne peut pas être remplacé)
Liste .MAP (peut être remplacé)

Fichier VM.TMP

LINK utilise la mémoire disponible pour la session de liaison. Si les fichiers à lier créent un fichier de sortie dépassant la mémoire disponible, LINK crée un fichier temporaire et le nomme VM.TMP. Si LINK doit créer VM.TMP, il affiche le message :

VM.TMP has been created.
Do not change diskette in drive, d:

Une fois ce message affiché, vous ne devez pas retirer le disque de l'unité de disque par défaut tant que la session de liaison n'est pas terminée. Si le disque est retiré, le fonctionnement de LINK est imprévisible et LINK peut renvoyer le message d'erreur :

Unexpected end of file on VM.TMP

LINK utilise VM.TMP comme mémoire virtuelle. Le contenu de VM.TMP est ensuite écrit dans le fichier que vous avez spécifié au prompt run file:. VM.TMP est un fichier de travail uniquement et est supprimé à la fin de la session de liaison.

Attention : N'utilisez pas VM.TMP comme nom de fichier pour n'importe quel fichier. Si vous avez créé un fichier nommé VM.TMP sur l'unité de disque par défaut et que LINK avait besoin de créer le fichier VM.TMP, LINK supprimerait votre fichier VM.TMP et créerait son fichier VM.TMP. Tout le contenu de votre fichier VM.TMP serait perdu.

Exécution de LINK

L'exécution de LINK nécessite deux types d'entrées : la commande pour appeler LINK et les réponses aux prompts de commande LINK. De plus, six commutateurs contrôlent les fonctions LINK alternatives. Habituellement, vous saisirez toutes les réponses à LINK sur le clavier du terminal. En option, les réponses aux prompts de commande et tous les commutateurs peuvent être contenus dans un fichier de réponse. Certains caractères de commande sont fournis pour vous aider lors de la saisie des commandes de l'éditeur de liens.

Appel de LINK

LINK peut être appelé par trois méthodes. Par la première méthode, la méthode de prompt de commande, vous entrez des réponses aux prompts individuelles. Par la deuxième méthode, la méthode de ligne de commande, vous entrez toutes les réponses sur la ligne utilisée pour appeler LINK. Par la troisième méthode, la méthode du fichier de réponses, vous spécifiez un fichier de réponses contenant toutes les réponses nécessaires. Le fichier de réponses doit exister avant que vous n'entriez la commande LIB.

Sommaire de méthode pour appelé LINK Syntaxe
Méthode de commande de prompt LINK
Méthode de commande de ligne LINK filenames p/x]
Méthode de fichier de réponse LINK @filespec

Méthode de prompt de commande

Pour commencer sous la méthode de prompt de commande, tapez la commande suivante au prompt système :

LINK

et appuyez sur la touche RETURN. LINK se charge en mémoire. Ensuite, LINK renvoie une série de quatre prompts textuelles s'affichant une par une. Vous répondez aux prompts pour effectuer des tâches spécifiques.

A la fin de chaque ligne, vous pouvez saisir un ou plusieurs interrupteurs, chacun devant être précédé d'une barre oblique. Si aucun commutateur n'est inclus, LINK par défaut n'exécute pas la fonction décrite dans le tableau récapitulatif des commutateurs.

Les résumés des invites de commande et des commutateurs suivent. Pour une description complète, reportez-vous aux sections des prompts de commandes et Commutateurs plus loin sur cette page.

Prompt Réponses
Object Modules [.OBJ]: Répertoriez les fichiers .OBJ à lier, avec le nom de l'unité de disque et/ou le nom de chemin facultatifs, séparés par des espaces ou des signes plus (+). Si un signe plus est le dernier caractère saisi, le prompt réapparaîtra. (Aucune valeur par défaut : une réponse est requise.)
Run File [Objfile.EXE]: Nom de fichier de liste, avec le nom de l'unité et/ou le nom de chemin facultatifs, pour le code objet exécutable. (Premier objet filename.EXE saisi dans le prompt «Object Modules [OBJ]:».)
List File [NUL.MAP]: Nom du fichier de liste, avec le nom de l'unité de disque et/ou le nom du chemin d'accès facultatifs, pour la liste (par défaut : aucun fichier MAP créé.)
Libraries [.LIB]: Répertorier les noms de fichiers à rechercher, avec le nom de l'unité de disque et/ou le nom du chemin facultatifs, séparés par des espaces ou des signes plus (+). Si le signe plus est le dernier caractère saisi, le prompt réapparaîtra. (Par défaut : pas de recherche.)

Résumé des commutateurs

Commutateur Action
/DSALLOCATE Charger les données à l'extrémité supérieure du segment de données, requis pour les programmes Pascal et FORTRAN.
/HIGH Placez le fichier d'exécution aussi haut que possible dans la mémoire. Ne pas utiliser avec les programmes Pascal et FORTRAN.
/LINENUMBERS Inclure les numéros de ligne dans le fichier liste.
/MAP Lister tous les symboles globaux avec leurs définitions.
/PAUSE Arrêtez la session de l'éditeur de liens et attendez que la touche RETURN soit enfoncée.
/STACK:number Définissez la taille de pile fixe dans le fichier d'exécution.
/NO Aucune recherche de bibliothèque par défaut.

Caractères de commande

LINK fournit trois caractères de commande («+», «;», CTRL+BREAK).

Symbole Description
+ Utilisez le signe plus (+) pour séparer les entrées et pour étendre la ligne physique actuelle en suivant les prompts Object Modules [.OBJ]: et Libraries [.LIB]:. (Un espace peut être utilisé pour séparer les modules d'objets.) Pour entrer un grand nombre de réponses (chacune pouvant aussi être très longue), entrez un signe plus et appuyez sur la touche RETURN à la fin de la ligne physique (pour prolonger la ligne logique). Par exemple, vous saisiriez :

Object Modules [.OBJ]: FUN TEXT TABLE CARE+


Étant donné que le signe plus et le fait d'appuyer sur RETURN sont la dernière entrée suivant le prompt, LINK vous demandera d'autres noms de modules. Lorsque le prompt Object Modules [.OBJ]: ou Libraries [.LIB]: s'affiche à nouveau, continuez à saisir les réponses. Lorsque tous les modules à lier ont été répertoriés, assurez-vous que la ligne de réponse se termine par un nom de module et non par un signe plus avant d'appuyer sur RETURN.

Ainsi, vos entrées complétées devraient ressembler à ceci :

Object Modules [.OBJ]: FUN TEXT TABLE CARE+
Object Modules [.OBJ]: FOO+FLIPFLOP+JUNIQUE+
Object Modules [.OBJ]: CORSAIR
Utilisez un seul point-virgule (;) suivi immédiatement de RETURN à tout moment après le premier prompt (à partir de Run File [.EXE]: on) pour sélectionner les réponses par défaut aux prompts restantes.

Remarque : Une fois le point-virgule saisi, l'utilisateur ne peut plus répondre à aucune des prompts de cette session de liaison. Par conséquent, n'utilisez pas le point-virgule pour ignorer certaines prompts. Pour cela, utilisez RETURN.

Par exemple, lorsque vous saisissez :

Object Modules [.OBJ]: FUN TEXT TABLE CARE
Run Module [FUN.EXE]:;


et appuyez sur RETURN après chaque ligne, les prompts restantes n'apparaîtront pas. LINK utilise les valeurs par défaut.
CTRL+BREAK Utilisez CTRL+BREAK à tout moment pour interrompre la session de liaison. Si vous entrez une réponse erronée, comme un nom de fichier incorrect ou un nom de fichier mal orthographié, vous devez appuyer sur CTRL+BREAK pour quitter LINK ; puis rappelez LINK et recommencez. (Si l'erreur a été tapée mais pas entrée, vous pouvez supprimer les caractères erronés, mais pour la ligne en cours uniquement.)

Méthode de ligne de commande

La méthode de la ligne de commande vous permet d'entrer toutes les spécifications d'une opération LINK dans une seule ligne de commande.

Pour commencer avec la méthode de la ligne de commande, saisissez une ligne de commande sous la forme suivante au prompt système :

LINK object-list,runfile,listfile,lib-list[/x...]

Nom Description
object-list Ce paramètre permet d'indiquer une liste de modules d'objets, séparés par des signes plus.
runfile Ce paramètre permet d'indiquer le nom du fichier devant recevoir la sortie exécutable.
listfile Ce paramètre permet d'indiquer le nom du fichier devant recevoir l'affichage.
lib-list Ce paramètre permet d'indiquer une liste de modules de bibliothèque à rechercher.
/x Ce paramètre permet d'indiquer les commutateurs facultatifs, décrits plus en détail dans la section des commutateurs plus loin dans cette page, pouvant être placés après n'importe laquelle des entrées de réponse (juste avant l'une des virgules ou après la lib-list, comme indiqué).

Les entrées suivant LINK sont des réponses aux prompts de commande. Les champs de saisie des différents prompts doivent être séparés par des virgules. Pour chaque nom de fichier spécifié, vous pouvez éventuellement spécifier le nom de l'unité de disque et le nom du chemin.

Pour sélectionner la valeur par défaut d'un champ, saisissez simplement une deuxième virgule sans espace :

LINK FUN+TEXT+TABLE+CARE/P/M/,,FUNLIST,COBLIB.LIB

Cet exemple provoque le chargement de LINK, puis le chargement des modules d'objet FUN.OBJ, TEXT.OBJ, TABLE.OBJ et CARE.OBJ. Lorsque LINK est prêt à produire le fichier d'exécution .EXE, il s'interrompt (à cause du commutateur /P). Lorsque vous appuyez sur ENTER, LINK produit le fichier d'exécution .EXE, produit une carte de symboles globale (à cause du commutateur /M), utilise par défaut le fichier d'exécution FUN.EXE, crée un fichier de liste nommé FUNLIST.MAP et recherche le fichier de bibliothèque COBLIB.LIB.

Méthode du fichier de réponse

La méthode du fichier de réponses vous permet d'entrer toutes les spécifications d'une opération LINK dans un seul fichier :

LINK @filespec

Nom Description
@ Ce paramètre permet d'indiquer un pointeur indiquant à LINK que toutes les réponses aux prompts sont contenues dans le fichier dont le nom suit.
filespec Ce paramètre permet d'indiquer le nom d'un fichier de réponses avec un nom de l'unité de disque et/ou un nom de chemin facultatifs. Un fichier de réponses contient des réponses aux prompts LINK (résumées sous la méthode de prompt de commande pour l'appel) et peut également contenir n'importe lequel des commutateurs. La méthode du fichier de réponses permet à l'utilisateur de répondre aux prompts LINK.

Remarque : Avant d'utiliser la méthode du fichier de réponse pour appeler LINK, l'utilisateur doit d'abord créer le fichier de réponse. Vous pouvez créer un fichier de réponses à l'aide d'EDLIN, de l'éditeur MS-DOS, de la commande COPY ou d'un éditeur de texte.

Un fichier de réponses contient des lignes de texte, une pour chaque prompt. Les réponses doivent apparaître dans le même ordre que les prompts de commande.

Utilisez les commutateurs et les caractères de commande dans le fichier de réponses de la même manière qu'ils sont utilisés pour les réponses saisies sur le clavier du terminal.

Au début de la session LINK, chaque prompt s'affichera tour à tour avec le fichier de réponse ne contenant pas de réponses pour toutes les prompts (soit sous la forme de noms de fichiers, soit sous la forme d'un caractère de commande point-virgule ou de RETURN) LINK affichera le prompt n'ayant pas de réponse, attendez que vous saisissiez une réponse légale. Lorsqu'une réponse légale a été saisie, LINK poursuit la session de liaison.

Le fichier de réponse :

FUN TEXT TABLE CARE
/PAUSE/MAP
FUNLIST
COBLIB.LIB

oblige LINK à charger les quatre modules d'objet. LINK s'arrêtera avant de produire le fichier d'exécution .EXE pour vous permettre d'échanger des disques (voir la discussion sous /PAUSE dans la section des commutateurs avant d'utiliser cette fonctionnalité). Après avoir appuyé sur ENTER, LINK crée une cartographie de symboles PUBLIC. Les fichiers de sortie seront nommés FUN.EXE et FUNLIST.MAP ; LINK recherchera le fichier de bibliothèque COBLIB.LIB et utilisera les paramètres par défaut pour les drapeaux.

Prompt de commande

LINK est exploité en saisissant des réponses à quatre prompts textuelles. Lorsque vous avez saisi une réponse au prompt en cours, la suivante s'affiche. Lorsque la dernière invite a été répondue, LINK commence automatiquement la liaison sans autre commande. Lorsque la session de liaison est terminée avec succès, LINK existe pour le système d'exploitation. Si la session de liaison échoue, LINK renvoie le message d'erreur approprié.

LINK vous demande les noms des fichiers d'objet, d'exécution et de liste ; et pour les bibliothèques. Les prompts sont répertoriées ici dans leur ordre d'apparition. Pour les prompts pouvant utiliser par défaut des réponses prédéfinies, la réponse par défaut est affichée entre crochets ([]) à la suite du prompt. Le prompt Object Modules: est suivie uniquement d'une réponse par défaut d'extension de nom de fichier car elle n'a pas de réponse de nom de fichier prédéfinie et nécessite que vous saisissiez un nom de fichier.

Object Modules [.OBJ]

Entrez une liste des modules d'objet à lier. LINK suppose par défaut que l'extension du nom de fichier est .OBJ. Si un module d'objet a une autre extension de nom de fichier, l'extension doit être donnée ici. Sinon, l'extension peut être omise.

Les modules doivent être séparés par des signes plus (+).

N'oubliez pas que LINK charge les segments dans les classes dans l'ordre rencontré (voir la section des définitions au début de cette page). Utilisez ces informations pour définir l'ordre dans lequel les modules d'objets sont entrés.

Run File [Objfile.EXE]:

Le nom de fichier saisi sera créé pour entreposer le fichier d'exécution (exécutable) résultant de la session de liaison. Tous les fichiers d'exécution reçoivent l'extension de nom de fichier .EXE, même si vous spécifiez une extension (en d'autres termes, votre extension spécifiée est ignorée).

Si aucune réponse n'est entrée au prompt Run File [Objfile.EXE]:, LINK utilise le premier nom de fichier entré en réponse au prompt «Object Modules» comme nom de fichier d'exécution. Par exemple, si vous saisissez :

Run File [FUN.EXE]: B:PAYROLL/P

LINK est chargé de créer le fichier d'exécution PAYROLL.EXE sur l'unité de disque B. De plus, LINK s'interrompt, ce qui vous permet d'insérer un nouveau disque pour recevoir le fichier d'exécution.

List File [NUL.MAP]

Le fichier de liste contient une entrée pour chaque segment dans les modules d'entrée (objet). Chaque entrée affiche également le déplacement (adressage) dans le fichier d'exécution.

La réponse par défaut est qu'aucun fichier de liste (NUL) n'est créé avec l'extension .MAP.

Libraries [.LIB]

Les réponses valides sont un à dix noms de fichiers de bibliothèque ou en appuyant sur RETURN. (Un RETURN signifie uniquement qu'il n'y a pas de recherche dans la bibliothèque.) Les fichiers de bibliothèque doivent avoir été créés par un utilitaire de bibliothèque. LINK suppose par défaut que l'extension du nom de fichier est .LIB pour les fichiers de bibliothèque.

Les noms de fichiers de bibliothèque doivent être séparés par des signes plus (+).

LINK recherche les fichiers de bibliothèque dans l'ordre indiqué pour résoudre les références externes. Lorsqu'il trouve le module définissant le symbole externe, LINK traite le module comme un autre module objet.

Si LINK ne trouve pas de fichier de bibliothèque sur le disque dans les unités de disque, il renvoie le message :

Cannot find libraryh library-name
Enter new drive letter:

Appuyez simplement sur la lettre du nom de l'unité de disque (par exemple, appuyez sur B).

LINK n'effectue pas de recherche séquentielle dans chaque fichier de bibliothèque. LINK utilise une méthode appelée dictionary indexed library search. Cela signifie que LINK trouve les définitions des références externes par accès à l'index, plutôt que de rechercher du début à la fin du fichier pour chaque référence. Cette recherche indexée réduit considérablement le temps de liaison pour toutes les sessions impliquant des recherches dans la bibliothèque.

Commutateurs

Les six commutateurs contrôlent les fonctions de l'éditeur de liens alternatif. Les commutateurs doivent être entrés à la fin d'une réponse du prompt, quelle que soit la méthode utilisée pour appeler LINK. Les commutateurs peuvent être regroupés à la fin de l'une quelconque des réponses, ou peuvent être dispersés à la fin de plusieurs. Chaque commutateur doit être précédé de la barre oblique (/).

Tous les commutateurs peuvent être abrégés. Vous pouvez saisir n'importe quoi, d'une seule lettre à tout le nom du commutateur. La seule restriction est qu'une abréviation doit être une sous-chaîne séquentielle de la première lettre à la dernière entrée ; aucun espace ou transposition n'est autorisé. Par exemple :

Légal Illégal
/D /DSL
/DS /DAL
/DSA /DLC
/DSALLOCA /DSALLOCT

/DSALLOCATE

L'utilisation du commutateur /DSALLOCATE ordonne à LINK de charger toutes les données (DGroup) à l'extrémité supérieure du segment de données. Sinon, LINK charge toutes les données à l'extrémité inférieure du segment de données. Lors de l'exécution, le pointeur DS est défini sur l'adresse la plus basse possible et permet d'utiliser l'intégralité du segment DS. L'utilisation du commutateur /DSALLOCATE en combinaison avec la charge par défaut faible (c'est-à-dire que le commutateur /HIGH n'est pas utilisé) permet à votre programme d'application d'allouer dynamiquement toute mémoire disponible en dessous de la zone spécialement allouée dans DGroup, tout en restant adressable par le même pointeur DS. Cette allocation dynamique est nécessaire pour les programmes Pascal et FORTRAN.

Remarque : Votre programme d'application peut allouer dynamiquement jusqu'à 64 Ko (ou la quantité réellement disponible) moins la quantité allouée dans DGroup.

/HIGH

L'utilisation du commutateur /HIGH amène LINK à placer l'image d'exécution aussi haut que possible dans la mémoire. Sinon, LINK place le fichier d'exécution aussi bas que possible.

Remarque : N'utilisez pas le commutateur /HIGH avec les programmes Pascal ou FORTRAN.

/LINENUMBERS

L'utilisation du commutateur /LINENUMBERS demande à LINK d'inclure dans le fichier de liste les numéros de ligne et les adresses des instructions source dans les modules d'entrée. Sinon, les numéros de ligne ne sont pas inclus dans le fichier de liste.

Remarque : Tous les compilateurs ne produisent pas de modules objet contenant des informations sur les numéros de ligne. Dans ces cas, bien sûr, LINK ne peut pas inclure de numéros de ligne.

/MAP

/MAP ordonne à LINK de lister tous les symboles PUBLIC (globaux) définis dans les modules d'entrée. Si /MAP n'est pas donné, LINK ne listera que les définitions de segment et les erreurs (ce qui inclut les variables globales non définies).

Les symboles sont classés par ordre alphabétique. Pour chaque symbole, LINK affiche sa valeur et son emplacement segment:déplacement dans le fichier d'exécution. Les symboles sont listés à la fin du fichier liste.

/PAUSE

Le commutateur /PAUSE provoque l'interruption de LINK dans la session de liaison lorsque l'éditeur de liens est sur le point de produire le fichier d'exécution .EXE. Normalement, LINK effectue la session de liaison sans interruption du début à la fin. Cela permet à l'utilisateur d'échanger les disques avant que LINK ne génère le fichier d'exécution (.EXE).

Lorsque LINK est prêt à produire le fichier d'exécution, il affiche le message :

About to generate .EXE file
Change disks <hit ENTER>

LINK reprend le traitement après avoir appuyé sur ENTER.

Attention : N'échangez pas le disque qui doit recevoir le fichier de liste, ou le disque utilisé pour le fichier VM.TMP, s'il a été créé.

/STACK:number

number représente toute valeur numérique positive (en base hexadécimale) jusqu'à 65536 octets. Si le commutateur /STACK n'est pas utilisé pour une session de liaison, LINK calcule automatiquement la taille de pile nécessaire.

Si une valeur comprise entre 1 et 511 est saisie, LINK utilise 512.

Tous les compilateurs et assembleurs doivent fournir des informations dans les modules objets permettant à l'éditeur de liens de calculer la taille de pile requise.

/NO

Ce commutateur indique à LINK de ne pas rechercher les bibliothèques (produit) par défaut dans les modules d'objet. Par exemple, si vous liez des modules objet à Pascal, la spécification du commutateur /NO indique à LINK de ne pas rechercher automatiquement la bibliothèque nommée PASCAL.LIB pour résoudre les références externes.

Messages d'erreur

Toutes les erreurs, à l'exception du segment No STACK, provoquent l'abandon de la session de liaison. Par conséquent, une fois la cause trouvée et corrigée, LINK doit être réexécuté.

Attempt to access data outside of segment bounds, possibly bad object module

Explication : Cette erreur se produit parce que vous avez un fichier objet incorrect. Corrigez le programme, réassemblez votre module et relancez LINK.

Bad numeric parameter

Explication : La valeur numérique n'est pas en chiffres. Modifiez la valeur numérique et relancez LINK.

Cannot find file filename

Explication : Le fichier spécifié n'existe pas sur ce disque. Modifiez le nom du fichier ou insérez le disque sur lequel réside le fichier.

Cannot open temporary file

Explication : LINK ne parvient pas à créer le fichier VM.TMP car le répertoire du disque est plein. Essayez un autre disque contenant plus d'espace ou libérez de l'espace sur le disque en supprimant des fichiers.

Error: Dup record too complex

Explication : L'enregistrement DUP dans le module de langage d'assemblage est trop complexe. Simplifiez l'enregistrement DUP, réassemblez et relancez LINK.

Error: Fixup offset exceeds field width

Explication : Une instruction en langage assembleur fait référence à une adresse avec une instruction courte là où une instruction longue est requise. Modifiez la source du langage d'assemblage et réassemblez.

Input file read error

Explication : Cette erreur se produit lorsqu'il existe un fichier objet incorrect (probablement un disque défectueux). Remontez le module et relancez LINK.

Invalid object module

Explication : Cette erreur se produit lorsque le(s) module(s) d'objet est mal formé ou incomplet (comme lorsque l'assemblage a été arrêté au milieu). Remontez le module et relancez LINK.

Program size or number of segments exceeds capacity of Linker

Explication : La taille totale ne peut pas dépasser 900K octets et le nombre de segments et de classes pris ensemble ne peut pas dépasser 255. Modifiez votre programme pour qu'il rentre dans ces limites et relancez LINK.

Requested stack size exceeds 64K

Explication : 64K octets est la limite du système d'adressage. Modifiez le fichier de langage d'assemblage pour que le segment soit inférieur à 64 Ko, réassemblez et réexécutez LINK.

Segment size exceeds 64K

Explication : 64K octets est la limite du système d'adressage. Modifiez le fichier de langage d'assemblage pour que le segment soit inférieur à 64 Ko, assemblez et réexécutez LINK.

Symbol defined more than once

Explication : LINK a trouvé deux ou plusieurs modules définissant un seul nom de symbole. Modifiez l'un des modules de langage d'assemblage, réassemblez et réexécutez LINK.

Symbol table capacity exceeded

Explication : Des noms très nombreux et/ou très longs ont été saisis ; dépassant environ 25K octets. Rééditez les fichiers source en utilisant des noms plus courts pour les variables, réassemblez et réexécutez LINK.

Too many external symbols in one module

Explication : Le nombre de symboles externes par module dépasse la limite de 1024. Modifiez le fichier de langage d'assemblage, en divisant les éléments externes afin que chaque module soit dans la limite de 1024. Réassemblez et réexécutez LINK.

Too many groups

Explication : Le nombre de groupes dépasse la limite de 10. Modifiez les modules source pour utiliser 10 groupes ou moins. Réassemblez et réexécutez LINK.

Too many libraries specified

Explication : Le nombre de bibliothèques dépasse la limite de 10. Réexécutez LINK en spécifiant 10 bibliothèques ou moins (consolidez les bibliothèques si nécessaire).

Too many PUBLIC symbols

Explication : Le nombre de symboles PUBLIC dépasse la limite de 1024, rééditez un ou plusieurs fichiers de langage d'assemblage définissant moins de 1024 symboles publics. Relancez LINK.

Too many segments or classes

Explication : Le nombre de segments ou classes dépasse la limite de 255 (segments et classes confondus). Rééditez un ou plusieurs fichiers en langage assembleur définissant moins de 255 segments et/ou classes. Relancez LINK.

Unresolved externals: list

Explication : list représente les symboles externes n'ayant pas de module de définition les définissant parmi les modules ou les fichiers de bibliothèque spécifiés. Réexaminez l'utilisation des symboles PUBLIC et externes dans vos programmes en langage d'assemblage. Apportez les modifications nécessaires et relancez LINK.

VM read error

Explication : Cette erreur se produit en raison d'un problème de disque et n'est pas causée par LINK. Utilisez un autre disque.

Warning: No STACK segment

Explication : Aucun des modules objet spécifiés ne contient d'instruction allouant de l'espace de pile, mais vous avez entré le commutateur /STACK. Appelez LINK sans le commutateur /STACK ou rééditez le module en créant un segment de pile, réassemblez et réexécutez LINK.

Remarque : Lors de la création d'un fichier .COM à l'aide de EXE2BIN, ou si le programme alloue sa propre pile, cet avertissement peut être ignoré.

Warning: Segment of absolute or unknown type

Explication : Cette erreur se produit car il existe un module d'objet incorrect et une tentative a été effectuée pour lier des modules que LINK ne peut pas gérer (tel qu'un module d'objet absolu). Remontez le module incriminé et relancez LINK.

Write error in TMP file

Explication : Cette erreur se produit car le disque n'a plus d'espace pour développer le fichier VM.TMP. Essayez un autre disque contenant plus d'espace, ou libérez de l'espace sur le disque et relancez LINK.

Write Error on Run File

Explication : Cette erreur se produit car le disque ne dispose pas de suffisamment d'espace pour le fichier d'exécution. Essayez un autre disque contenant plus d'espace, ou libérez de l'espace sur le disque et relancez LINK. (Le commutateur /P pourrait être utilisé pour résoudre ce problème.)



Dernière mise à jour : Jeudi, le 25 Août 2022