Emilie
Le référencement direct est généralement utilisé en langage assembleur. Dans le référencement avant, la variable ou l'étiquette est référencée avant d'être déclarée. Différents problèmes peuvent être résolus en utilisant le référencement One Pass ou Two Pass forward. Dans One Pass Forward, le programme source de référencement est traduit instruction par instruction. L'assembleur laisse un espace d'adressage pour l'étiquette lorsqu'elle est référencée et lorsque l'assembleur a trouvé la déclaration d'étiquette, il utilise le correctif arrière. Le référencement à deux passes consiste en deux passes.
Au cours de la table de symboles de premier passage, la table de codes d'opération et la table d'étiquettes sont conservées. Dans la table de code op, la taille et l'adresse de l'instruction sont stockées. L'étiquette et l'adresse de l'étiquette sont stockées dans la table des étiquettes. Lorsque l'étiquette est rencontrée, son nom est stocké dans la table des étiquettes lorsque la déclaration de l'étiquette est trouvée, puis son emplacement est également stocké dans la table des étiquettes.
Pendant le 2nd Pass, la traduction de la langue source vers le langage machine a lieu. Les adresses d'instruction et les adresses d'étiquette sont utilisées à partir de la table des symboles au lieu de leurs noms. Le compilateur ne sait pas où le programme sera exécuté dans la mémoire, donc le compilateur a généré des adresses logiques au lieu de l'adresse absolue. Loader utilise également la constante de relocalisation pour résoudre le problème de relocalisation. Le problème de référencement externe est résolu par l'éditeur de liens lors de la compilation. Linder connecte le programme objet au code pour les fonctions de bibliothèque standard.