Hack assembler is also known as the two-pass assembler. The assembly program contains symbols in their code, to read those codes it is necessary for the hack assembler to go over the code twice. When generating the code, there may be a goto command that requires the program to jump to a specific destination even before such destination is defined in the program. In the first pass, the assembler will find all the symbols and create a symbol table with all the symbols and their corresponding destination (ROM address) without generating code. In the second pass, the assembler will use the symbol table to substitute the symbols for their destination so the final binary code can be generated.