This course is an introduction to computer architecture and organization via the programmer's perspective. It treats the computer architecture (a set of design decisions about the CPU organization and structure) as an API.

The theme of this course is "The ABI as an API": the Application Binary Interface exports a particular set of promises and contracts to assemblers, compilers, programmers, systems developers, and OS kernel authors. Because of these promises (i.e., the functionality that a CPU wants to export to user and system programs), the architecture is then forced into certain design decisions. As an example, an instruction's width and the number of bits it dedicates to an opcode has implications for the actual structure of the computer organization itself as well as a concommitant influence on the type and number of instructions that are available to user programs.

Students should emerge from this course with:

  • Knowledge of Computer Organization (general architecture and system resources)
  • An understanding of architectural design concepts and themes (e.g., RISC vs. CISC)
  • Facility with Numerical notations and common number systems
  • Knowledge of an assembly language (e.g., SPARC, x86)
  • Practice with an assembler
  • Practice with a debugger and understanding the execution of assembly-level programs
  • An appreciation of ELF as a contract between a compiler and the CPU, as aided by the OS, for loading and running user--level programs
  • An appreciation for how the properties of a machine architecture influence the job assemblers and compilers do
  • A preliminary understanding of how certain architectural features provide support for or influence the nature of modern operating systems (such as defining memory spaces, servicing important events, and support multiplexing of resources).

Course Description

This course is all about establishing connections between the machine level properties and organization of hardware and the common programming primitives that developers and students take for granted.

The course calendar description says: "An introduction to computing machinery establishing the connection between programs expressed in a compiled language, an assembly language, and machine code, and how such code is executed. Includes the detailed study of a modern CPU architecture, its assembly language and internal data representation, and the relationship between high-level program constructs and machine operations."

Please refer to the course wiki for all course information, policies, and links.