Computer Systems Organization
Instructor: Benjamin Goldberg
V22.0201.002 Fall 20010
- Mondays and Wednesdays 3:30pm - 4:45pm
Room 102 Warren Weaver Hall
There are NO required textbooks for this course. You will
be given handouts and links to technical material during the semester.
You will need a reference on the C programming language. In addition
to lots of on-line resources, I recommend the following:
- The C Programming Language, 2nd. ed.
by Brian Kernighan and Dennis Ritchie
Prentice Hall 1988.
Class Mailing List
- Programming Assignments
- Assignment 1, due Monday 9/14
- Assignment 2, due Monday 10/4
- Assignment 3, due Thursday 10/14
- Assignment 4, due Wednesday 10/20
- The Project
The project for this class involves building a
simulated MIPS-like computer system in C. The project has two
phases. Each phase will have several parts, with different due dates. The parts will be
added throughout the rest of the semester. You will have roughly a week to complete
- Phase 1: The Memory Subsystem.
You will be implementing a simulation of a memory subsystem comprising main memory, L2 cache, L1 cache, and a memory subsystem controller for controlling the interaction among the memory devices.
- Phase 2: The CPU
You will be implementing a simulation of a simple MIPS-like CPU, including an ALU, registers,
instruction decoder, etc.
- There will be a short quiz on Wednesday, September 22. See the handout from the first day of class.
- The mid-term exam will be in class on Monday, October 25.
- Materials to help prepare for the mid-term exam:
- Last year's midterm. You can ignore questions 1(g), 1(i), and 2(b).
- Answers to last year's midterm.
- Additional sample mid-term questions (note: the actual mid-term
won't be as long as this).
- Answers to the additional sample mid-term questions.
- Materials to help prepare for the final exam:
Programs written in class
You will need to use the gcc C compiler and the emacs editor
to write your code. You can download GCC and emacs for your computer from
the following sources:
- For Windows:
(click on "install now").
- Cygwin - A UNIX environment for Windows
When asked to select packages, click "devel" and then
scroll down to make sure that the box in the "bin" column
next to "gcc" is checked. This will ensure that gcc is included
with the cygwin installation. Also in "devel", click on the box in
the "bin" column next to"make: The GNU version of the "make" utility".
- Click here
for emacs for Windows.
- For Mac OS X: Download the XCode package from Apple Developer Connection.
You will need to register at the site. A nice version of emacs, Carbon Emacs, can be found
As discussed in class, GCC on Mac OX will not work with assembly in Intel syntax. You can
either work in AT&T syntax, or run Linux or Windows using Boot Camp, Parallels, or VMware.
- For Linux: Most Linux implementations come with gcc and emacs already installed, or with
easily installable gcc and emacs packages. See the documentation for the version of Linux
you are running.
Link to a document entitled "Some Basic Unix Commands", by Donald Hyatt.
Handout from first day of class, including sheet on
powers of 2, logs, binary, and hex
Link to a web page listing the x86 Instruction Set
Link at a A Tiny Guide to Programming in 32-bit x86 Assembly Language from the University of Virginia.
Intel Architecture Software Developers Manual (Intel Syntax for Assembly). It's huge, don't print it out.
386 Assembly Reference Manual (AT&T Syntax)
Debugging with GDB
Another x86 assembly language reference found at the University of Virginia
Link to the Wikipedia page for the x86 FLAGS register
Link to the Wikipedia page for cache memory
Here is a link to Prof. Gottlieb's
201 Course Notes.
Simple explanation of x86 addressing modes
Prof. Grishman's lecture notes on caches for Computer Architecture (contains links to Prof. Gottlieb's lecture notes on caches)
My handwritten lecture notes on caches. These are not so helpful, because they don't discuss multi-word cache lines.
My handwritten lecture notes on digital logic.
An Introduction to Digital Logic at a Swarthmore web site.
- These are NOT the lecture notes for my class. I will be covering different
material. Prof Gottlieb's notes can be used as a valuable reference for C and Assembly programming, though.
- Prof. Gottlieb's guest lectures on C, September 13 and 15, covered up to section 2.7 of his
notes. See these sections for the code he covered in class.