CSE 378: Machine Organization and Assembly Language Programming

Autumn 2003
Course Overview


Course Goals

Computers are physical devices as well as mechanisms for expressing abstract representations and relationships.   The magic that we can do in software is constrained in many ways by how computers, as machines, are designed and organized.  This course is intended to strengthen your intuitions about what a computer is, what it can do, and how it does it.  We do this by looking at how fundamental hardware building blocks are put together to make a working system (the "organization"); the facade which the system presents to the programmer at the lowest level (the "architecture"); and to a lesser extent the lowest levels of system software which make the system minimally tractable.  At each point, there is a myriad of overlapping and often conflicting goals and contraints.  Design decisions are difficult and the practical implications of a decision may be unforeseeable and yet longlasting and profound.  Exploring trade-offs will be a constant theme of the course, using analytical methods as well as considering historical examples.

The course titleincludes the phase "...and assembly language."  Assembly language is not a language in  the same sense that C or Java is.  Rather, it is a more-or-less direct reflection of the architecture of the machine it runs on.  We use assembly language in this course to give us concrete experience with an architecture, not for the sake of building complex and interesting software artifacts, although that is possible and in an earlier age was often done.   The MIPS assembly language is used because it is covered in the textbook, and because it is very reasonable compared to some obvious alternatives (like the Intel 86 family).

By the end of the quarter, you should understand not only the fundamentals of how machines are built (and why they're built that way), but also the fundamentals of how computer systems operate. (And you may have learned a bit of C along the way as well.)

Homework

There will be homework. In all cases, the goal of the homework is to help motivate you to learn the material, and to help verify that you have done so. There will be primarily three kinds of homework: SMOK/Cebollita projects, programming in assembly language (on a simulated MIPS machine), and written questions from the book or our own imagination.

Courseware and Labs

Most of the tools run on Windows platforms.  A Unix or Linix system made be needed for some homework.  All of the CSE undergraduate lab machines have been rebuilt upon relocation to the Allen Center.  The software should be there, but hasn't been verified yet.

Class Participation and service

I'd like this to be an interactive class. Interaction with the instructor and the TA in class and during office hours is highly encouraged.  In addition, you are encouraged to engage in activities or investigations which will benefit the class as a whole.  This "service" can take many forms.  We will talk about it as the course progresses.

Mini-Research Paper

Many interesting topics will arise related to the material of the course which are too marginal or specialized to cover in class.  You will be asked to identify such a topic of real interest to you, research it, and write up the information and/or present it in class.  Typically these topics will concern some actual hardware or technology, a commercial product, an industry standard, etc. 

Exams

There will be two midterm exams and a final exam (see the course calendar for dates). Exam questions may take a variety of forms.  There will be short quizzes as well, both in lecture and in section.

Grades

Grades will be assigned roughly as follows:

Policies