This is a final project for a class written in C.
The assembly parser takes a version of assembly language designed for this class with 29 instructions and four directives and translates it into an executable .obj file which can then be fed into and “run” by the simulator program, producing a trace file of the program's execution. The project allows for the use of data memory and TRAP functions, allowing it to simulate device “input” and “output” and calls to an operating system, which can also be written for the simulator in assembly.
Writing this pair of programs gave me a deeper understanding for some important low-level concepts such as string parsing, file reading and writing, and program input and output. Crucial to this project was also an understanding of computer architecture, and the point of the class was to work up from the level of transistors to a working computer to the C programming language.
The low-level concepts from this class gave me a greater appreciation for the entire technology stack, and this class was my motivation for adding my Electrical Engineering double major. I've continued with this passion by taking a graduate computer architecture and design class, an operating systems class I'm currently taking, and a microprocessor class, where I made the Cybersynth, which I talk more about on its project page.