Home | Forum | DAQ Fundamentals | DAQ Hardware | DAQ Software
Input Devices | Data Loggers + Recorders | Books | Links + Resources
Lab Exercises for a Computer Architecture Course
ARM Register Definitions and Calling Sequence
Hardware engineering has shifted the use of discrete electronic components to the use of programmable devices. Consequently, programming has become much more important. Programmers who understand how hardware operates and a few basic hardware principles can construct software systems that are more efficient and less prone to errors. Consequently, a basic knowledge of computer architecture allows programmers to appreciate how software maps onto hardware and to make better software design choices. A knowledge of the underlying hardware is also a valuable aid in debugging because it helps programmers pinpoint the source of problems quickly.
The text is suitable for a one-semester undergraduate course. In many Computer Science programs, a course on computer architecture or computer organization is the only place in the curriculum where students are exposed to fundamental concepts that explain the structure of the computers they program. Unfortunately, most texts on computer architecture are written by hardware engineers and are aimed at students who are learning how to design hardware. This text takes a different approach: instead of focusing on hardware design and engineering details, it focuses on programmers by explaining the essential aspects of hardware that a programmer needs to know. Thus, topics are explained from a programmer's point of view, and the text emphasizes consequences for programmers.
This guide is divided into five parts. Part I covers the basics of digital logic, gates, data paths, and data representation. Most students enjoy the brief look at the underlying hardware (especially because the text and labs avoid minute hardware details). Parts II, III, and IV cover the three primary aspects of architecture: processors, memories, and I/O systems. In each case, the sections give students enough background to understand how the mechanisms operate and the consequences for programmers without going into many details. Finally, Part V covers the advanced topics of parallelism, pipelining, power and energy, and performance.
Appendix 1 describes an important aspect of the course: a hands-on lab where students can learn by doing. Although most lab problems focus on programming, students should spend the first few weeks in lab wiring a few gates on a breadboard. The equipment is inexpensive (we spent less than fifteen dollars per student on permanent equipment; students purchase their own set of chips for under twenty dollars).
Appendix 2 provides a quick introduction to x86 assembly language and the x64 extensions. Many professors teach x86 and have requested that it be included. The material is in an appendix, which means that professors who choose to focus on a RISC assembly language (e.g., the ARM architecture) can use it for comparison.
Updated: Thursday, April 27, 2017 17:49 PST