PARSER/MOD wr/R PASS_1/MOD wr/R PASS_2/MOD wr/R STRUCT/TXT wr/R SYMBOLS/MOD wr/R
TEST1/LST wr/R TEST1/MAC wr/R TEST1/TXT wr/R TEST2/LST wr/R TEST2/MAC wr/R
TEST2/TXT wr/R TEST3/LST wr/R TEST3/MAC wr/R
The files *.LST are the actual output of the assembler, marked with [incorrect] where the output was incorrect.
There are many different things I would have done with this program if I hadn't been writing it for a University assignment. Looking through it now it leaps out how being forced to document it in the specified style and name certain modules and functions as specified crippled it.
For example, it would have been (and still is) my natural inclination to name the exported functions in SYMBOL.MOD something like Label* or Symbol*, not enter_label(), find_label(), get_label() and init_list(). I mean, init_list() doesn't even hint that it is anything to do with symbols or labels!
I wrote this at University after having already been writing assembly language programs, including assemblers and disassemblers, for at least four years! And yet, I have a certain fondness for this project. I recently wrote a PDP-11 assembler from scratch in BBC BASIC which will run on a variety of platforms. It is very close to how I would have written this assembler if allowed to.