One of the courses I took as part of my third-year Engineering Physics requirement was CPEN 312, “Digital Systems and Microcomputers”. In addition to learning about the basics of digital logic, such as binary counting and logic gates, I also did a number of labs involving programming in assembly, Multisim, and VHDL (VHSIC Hardware Description Language).

The code written for these labs was created to be used on the Altera Cyclone V FPGA development board, which was at first programmed using Quartus prime to solve various logic-gate problems. Then, our professor helped us install a 8051 bootloader/simulator onto the FPGA, at which point we started programming in 8051 assembly.  Here’s some of the code I wrote:

In addition to learning to program in assembly, we also went over in-depth the functionality of the famous 8051/8052 family of processors, including how to initialize timers, use external memory, program ISR interrupt subroutines, and more. All in all this was a very good precursor to programming in assembly, and I will definitely be using assembly in my personal projects where execution speed is a requirement.