This program is tentative and subject to change.
Teaching computer architecture to students focused on high-level programming is a challenging task. Such students often struggle with the complexities of this subject, exhibiting difficulties in grasping connections between hardware and software and in understanding low-level concepts. Here, we present the curriculum for an undergraduate course on computer architecture, which combines lectures and practical assignments, covering the main hardware components of the computer system and their interactions. Our description focuses on the practical assignments, of which the first one introduces basic assembly programming, the second one concerns communication with peripheral devices using ports and memory mapping, the third one deals with the interrupt system and the real-time clock, and the last one is related to how the graphics card operates in a graphics mode. We also report that students’ engagement can be increased if the assignments involve programming in a high-level language such as C equipped with a library offering low-level instructions instead of assembly language.