In generale un compito svolto nel primo passo di un traduttore a due passi è quello di memorizzare tutte le definizioni macro ed espandere le chiamate ogni volta che se ne incontra una. Decidendo che le implicazioni macro non devono precedere le loro chiamate, alla fine del primo passo si è si creata una tabella delle definizioni macro, ma le macro non sono state espanse. E' necessario quindi rileggere il programma nuovamente per effettuare l'espansione delle macro ( e quindi avere un macroassemblatore a tre passi) oppure effettuare l'espansione delle macro durante il secondo passo.