The assembler module is responsible for taking lines of assembly code and processing it to generate equivalent machine code.

It is passed a list of strings which are the lines of the assembly file. Each line is then processed and the information about the line stored in a dictionary.

During processing each line is checked to see if it’s a constant definition, if not, it’s treated as an assembly line and parsed into machine code bytes.

The line is passed to each operation to attempt to generate the machine code bytes. The operations can expect certain tokens on the line to be constants and are identified as such and returned to the assembler. The constants are then validated and identified and the machine code bytes added to the dictionary of information about the line of assembly.

With all the lines processed, machine code bytes generated and constants identified, the assembler checks for overall validity and structure The assembler then performs global operations that need to take the entire assembly code into account:

With these checks, assignments and resolutions complete, the final assembly line dictionaries are returned.