One of the first modules we took during my first year was a Computer Organisation and Architecture module where we explored how computers work on the low-level.
To put everything we learnt into practice, we built a Y86 Disassembler in C. The mini-project was split into three objectives:
- Decode opcodes to mnemonics,
- Parse operands and registers from instructions,
- Disassemble full Y86 Programs from raw bytecode.
By the time I finished all three tasks I gained deeper appreciation for how things run on the machine level, you can check the project out here :)