Um montador de passagem única é aquele que lê o código-fonte apenas uma vez, gerando código de máquina à medida que avança. Um montador de duas passagens, por outro lado, lê o código-fonte duas vezes. A primeira etapa é gerar uma tabela de símbolos, que mapeia rótulos e variáveis para seus endereços de memória. A segunda etapa é usar a tabela de símbolos para gerar o código da máquina.
A principal vantagem de um montador de uma passagem é que ele é mais rápido que um montador de duas passagens. Isso ocorre porque ele não precisa ler o código-fonte duas vezes. A principal desvantagem de um montador de passagem única é que ele não pode resolver referências futuras. Isso significa que se um rótulo ou variável for usado antes de ser definido, o montador não conseguirá gerar o código de máquina correto.
Os montadores de duas passagens podem resolver referências diretas, mas são mais lentos que os montadores de uma passagem. Isso ocorre porque eles precisam ler o código-fonte duas vezes. A principal vantagem de um montador de duas passagens sobre um montador de uma passagem é que ele pode produzir código de máquina mais eficiente. Isso porque ele tem acesso à tabela de símbolos durante a segunda passagem, o que permite otimizar o código da máquina.