You’re in the right place if you’re looking to understand computer systems from the bottom up. We’ll start with digital design, work our way up to a simple 4-bit CPU, and then explore RISC as well as CISC architectures such as MIPS and x86. You’ll learn how computers actually work, how they are programmed in assembly, and how systems software allows us to turn these chunks of silicon into useful devices.
Catalog Description: We study the design and performance of a variety of computer systems from simple 8-bit micro-controllers through 32-bit RISC architectures all the way to the ubiquitous x86 CISC architecture. We’ll start from logic gates and digital circuits before delving into arithmetic and logic units, registers, caches, memory, stacks and procedure calls, pipelined execution, super-scalar architectures, memory management units, etc. Along the way we’ll study several typical instruction set architectures and review concepts such as interrupts, hardware and software exceptions, serial and other peripheral communications protocols, etc. A number of programming projects, frequently done in assembly language and using various processor simulators, round out the course.
Prerequisite(s): 600.120: Intermediate Programming. (For some assignments, 600.226: Data Structures is also useful.)
Policies: Please read the general course policies and take them to heart. Additional policies specific to this course may be posted at a later date.
There is no required text. However, it is strongly recommended that you get yourself a text book anyway. The following two are both excellent, but neither covers exactly what we’ll do in the course, and both cover things that we’ll never mention.
Note that most editions will do, you don’t necessarily need the latest and therefore most expensive one. Neither text has a lot of detail on digital design, but we’ll try to supplement the lectures with plenty of links to help you out.
Please check the individual assignments for due dates and the structure your solutions should have. See our Piazza site for detailed submission instructions.
If you have an opinion on these assignments, be it good or bad, please let us know about it. We’re always trying to make these things more enjoyable (if that’s an applicable term? :-).
This is not a schedule. It’s a “log” of what we did, roughly, in each lecture. Don’t expect it to turn into a schedule, it won’t.
staticto make file-scope declarations “private” (see also linkage, chanting the powers of two, positional number systems (decimal, binary, octal, hexadecimal)
DATpseudo instruction (to put data into memory)
sasassembler in C; yes, even Peter writes horrible code sometimes…