Use of two pass assembler?
A two-pass assembler reads through the source code twice. Each
read-through is called a pass.
On pass one the assembler doesn't write any code. It builds up a
table of symbolic names against values or addresses.
On pass two, the assembler generates the output code, using the
table to resolve symbolic names, enabling it to enter the correct
values.
The advantage of a two-pass assember is that it allows forward
referencing in the source code because when the assembler is
generating code it has already found all references.