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.)
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.
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.
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 will be assigned roughly as follows:
- Homeworks and projects: 30%
- Mini-research paper: 10%
- Quizzes: 8%
- Service and partipation: 4%
- Midterms: 24%
- Final exam: 24%
- Late Policy: unless otherwise indicated, assignments and projects are due at the beginning of class on their due date. Some homework may be submitted electronically, and have evening due dates.
- Cheating vs. Collaboration: Collaboration, as an aid to learning, is highly encouraged. Cheating is just as highly discouraged.
The university more or less requires that each course present you (students) with a clear definition of unacceptable behavior. Here it is for this course: cheating is any effort made to earn points without actually doing the work those points represent or understanding the material to the degree those points indicate. Not cheating is anything you do that helps you understand the course material (not just the solution to a single problem, but the underlying information on which the solution rests). If you're unsure about any particular activity, please ask. Finally, be sure to read the department's academic conduct policy.