CSE 378: Machine Organization and Assembly Language Programming, Winter 2004
Course Overview


Course Goals

Machine architectures define interfaces - specifications of what can be done and how to make those things happen. Architectures are typically thought of as the lowest level interface in a system, the one defined by the hardware. Complicated software behavior is obtained by layering many interfaces on top of this lowest level one - e.g., the operating system, the language runtime, a set of libraries/packages, and the application code.

This course typically looks down from the architecture interface, concentrating on how to build hardware systems that implement it efficiently. We will do that as well, following the book to concentrate on critical components of the hardware organization, in particular the central processing unit (CPU) and memory subsystem.

More than in most instances of 378, though, I'd like to spend a little time also looking up from the architecture interface, to explain the role of other system components (e.g., compilers, linkers, and the operating system), how their jobs are affected by the architecture, and what the architecture must do to support them.

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.)

Prerequisites

CSE 370 - Especially computer organization and some of the material in the finite state machines topic. In contrast to CSE 370, though, phrases like "high impedance" will never come up in this course.

Java / C - One of the projects may involve "the opportunity" to do some serious Java programming. I'll assume that you know Java. Some projects will definitely involve very modest manipulation of programs written in C--, which is roughly a subset of C. Most of C-- is also roughly a subset of Java, but it includes pointer variables. You shouldn't have to know C right now to deal with this when it comes up, though - this course will make C pointers seem natural...

Cygwin - The project infrastructure requires a Window system to run, but relies on a set of GNU tools, primarily make. It will be useful, but not absolutely necessary, to have had some familiarity with Unix.

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've done so. The majority of the homeworks will be done using SMOK/Cebollita, and are cumulative: each successive homework builds upon the previous one, either directly, as a modification of an earlier machine design, or more indirectly, making use of the key concepts from the earlier homework.

Most of the homeworks will be done in (randomly assigned) teams.

Course Participation

I'd like this to be an interactive class. Interaction with the instructor and the TAs in class and during office hours is highly encouraged. "Appropriate" interaction with each other, say through the class mail list, is also encouraged. (See the Policies section for some guidance on what "appropriate" might mean.)

Exams

The number of midterms equals the number of finals:

Grades

Grades will be assigned roughly as follows:

Policies