Ein Einpass-Assembler ist ein Assembler, der den Quellcode nur einmal durchliest und den Maschinencode so generiert. Ein Zwei-Pass-Assembler hingegen liest den Quellcode zweimal durch. Der erste Durchgang besteht darin, eine Symboltabelle zu generieren, die Beschriftungen und Variablen zu ihren Speicheradressen ordnet. Der zweite Durchgang besteht darin, die Symboltabelle zu verwenden, um den Maschinencode zu generieren.
Der Hauptvorteil eines Ein-Pass-Assemblers besteht darin, dass er schneller als ein Zweipass-Assembler ist. Dies liegt daran, dass es den Quellcode nicht zweimal durchlesen muss. Der Hauptnachteil eines Ein-Pass-Assemblers besteht darin, dass er keine Vorwärtsreferenzen lösen kann. Dies bedeutet, dass der Assembler nicht in der Lage ist, den richtigen Maschinencode zu generieren, wenn eine Beschriftung oder Variable verwendet wird, bevor sie definiert ist.
Zwei-Pass-Assembler können Forward-Referenzen lösen, sind jedoch langsamer als Ein-Pass-Assembler. Dies liegt daran, dass sie den Quellcode zweimal durchlesen müssen. Der Hauptvorteil eines Zweipass-Assemblers gegenüber einem Ein-Pass-Assembler besteht darin, dass er einen effizienteren Maschinencode erzeugen kann. Dies liegt daran, dass während des zweiten Durchgangs Zugriff auf die Symboltabelle hat, mit der es den Maschinencode optimieren kann.