The course aims at teaching how a higher level programming language (such as C++ or C#) is translated and ultimately executed on the CPU. Topics covered are: rudiments of compilation, assembly language, machine language, CPU architecture, and memory management. The objective is for students to be able to: (i) understand and predict how their programs will become a sequence of machine instructions; (ii) know how to read assembly generated by a compiler; and (iii) know how to automatically generate assembly. At the end of the course the students will be able to program with higher performance awareness, debug through a disassembler, build a high-performance runtime foundation for a general purpose game engine. The course will require two assignments, one on generating assembly, and another on reading and understanding assembly.

The full course description is: HA1-PROG COURSE INFORMATION.pdf.

The following is a list of the slide lectures:
  • LECTURE0.pdf contains a course overview
  • LECTURE1.pdf discusses rudiments of compilation and the relationship between high and low level languages
  • LECTURE 2.pdf illustrates a single step CPU
  • LECTURE 3.pdf extends the CPU from lecture 3 with instruction level parallelism
  • LECTURE 4.pdf moves the focus to memory architectures
  • LECTURE 5.pdf shows how bits are the foundation of all basic data-types

The course is based on three assignments. For more information read assignment 1 description.txt, assignment 2 description.txt, and assignment 3 description.txt. The starting point sources for the assignments can be downloaded from

Last edited Apr 12, 2015 at 3:07 PM by giuseppemag, version 6


No comments yet.