Emily
Vorwärtsreferenzieren wird normalerweise in Assembler verwendet. Beim Vorwärtsreferenzieren wird auf Variable oder Label verwiesen, bevor es deklariert wird. Verschiedene Probleme können mit One-Pass- oder Two-Pass-Forward-Referencing gelöst werden. In One Pass wird das vorwärts referenzierende Quellprogramm Anweisung für Anweisung übersetzt. Assembler lässt Adressraum für Label frei, wenn es referenziert wird, und wenn Assembler die Deklaration von Label gefunden hat, verwendet es Back-Patching. Die Vorwärtsreferenzierung mit zwei Durchgängen besteht aus zwei Durchgängen.
Während des ersten Durchlaufs werden die Symboltabelle, die Op-Code-Tabelle und die Label-Tabelle beibehalten. In der Op-Code-Tabelle werden Befehlsgröße und Adresse gespeichert. Etikett und Etikettadresse werden in der Etikettentabelle gespeichert. Wenn ein Label gefunden wird, wird sein Name in der Label-Tabelle gespeichert, wenn die Label-Deklaration gefunden wird, dann wird seine Position auch in der Label-Tabelle gespeichert.
Während des 2. Durchgangs erfolgt die Übersetzung von der Ausgangssprache in die Maschinensprache. Befehlsadressen und Labeladressen werden anstelle ihrer Namen aus der Symboltabelle verwendet. Der Compiler weiß nicht, wo das Programm im Speicher ausgeführt wird, daher generiert der Compiler logische Adressen anstelle der absoluten Adresse. Loader verwendet auch die Verlagerungskonstante, um das Verlagerungsproblem zu lösen. Das Problem mit der externen Referenzierung wird durch den Linker während der Kompilierung behoben. Linder verbindet das Objektprogramm mit dem Code für Standardbibliotheksfunktionen.