Computer Science 237
Computer Organization

Williams College
Fall 2005


Instructor: Jim Teresco, TCL 304, 597-4251
Electronic mail: domain:, username: terescoj
Class Web:
Class Hour: Monday-Wednesday-Friday 11:00-11:50, TCL 206
Lab Meetings: Monday or Tuesday 1-2:30, TCL 216 or TCL 217a
Office Hours: Monday 2:30-4, Friday 1-2, and by appointment
Teaching Assistants: Arjun Sharma, Robin Stewart
TA Hours: Thursday and Sunday evenings, TCL 312


Everything on this syllabus is subject to change. Changes will be announced in class and updated in the online version of the syllabus.

Course Objectives

Modern computer systems are designed and implemented as a hierarchy of sophisticated virtual machines. At the high end, these machines are implemented by compilers, interpreters, and operating systems. At the low end, digital logic components and microprogrammed interpreters are used. The goal of this course is to familiarize you with the structure and implementation of the virtual machines found at the lower levels: the digital logic level, the microprogramming level, and the conventional machine language level.



The main text is Structured Computer Organization, Fifth Edition, by Andrew Tanenbaum (Prentice Hall, 2006 (!)). There will also be some readings and reference material from a previous edition of the Tanenbaum book. You are advised to purchase a copy of The C Programming Language, Second Edition, by Kernighan and Ritchie (Prentice Hall, 1988). Both of these are available through Water Street Books, but you are encouraged to seek better prices elsewhere, if you wish. You may also choose to share books (or ignore the text completely).


I expect everyone to attend class and participate in discussions. Supplemental readings are listed on the lecture and reading schedule. Of course you are encouraged to do the reading, but all important topics will be covered in class.

In this course we will be studying related but independent topics. We will switch among these topics frequently throughout the semester. The lectures are organized in this way so that you will have the opportunity to study and understand each topic before we study more advanced aspects of any closely related topic.


Labs are held on Monday and Tuesday afternoons, sometimes in TCL 216 and sometimes in TCL 312b. There will not be formal lab meetings every week, but attendance is required for the formal meetings. Typically, lab assignments will be handed out in class a few days before a lab meeting, you will work on the them during the scheduled lab time and on your own, and you will turn them in a few days later. We will initially be experimenting with the C Language, an important language for any computer scientist to understand thoroughly. C-based exercises will be developed on our Unix system (either our FreeBSD Dells or OS X based Macs). Some C language and all assembly language assignments will be executed on Palm Pilots supported by the prc-tools environment. Logic design projects will be completed using software, or directly on breadboards in TCL 312b. You may develop your lab solutions anywhere (in the lab, your own computers, etc.) but grading will be done using the Computer Science FreeBSD systems unless otherwise specified. It is your responsibility to ensure that your program works on the grading platform. You will have 24-hour access to the labs with your Williams ID.

The last few weeks of the semester will involve a large design project. You will need to dedicate a significant amount of time to the project. Plan ahead.

Most lab assignments will have a written and/or a programming component. The number of points available will vary with the complexity of the assignment. Since the material in this course is highly technical, it is important and beneficial that you freely share information of a technical nature with each other when working on assignments. Therefore, although your work on these assignments must conform to the Honor Code Guidelines for Computer Science Courses concerning laboratory programs, you are trusted to recognize the distinction between sharing information on problems, pitfalls, and debugging tricks; and sharing solutions. Programs will be graded on design, documentation, style, correctness, and efficiency. Answers to questions included in lab assignments are expected to be well-written.

Unless otherwise specified, lab assignments may be turned in with a penalty computed as 1.08h%, where h is the number of hours late. Extensions will only be granted in serious situations and must be arranged through the Dean's office. You can find a C program that prints out a table of the late penalties here. Work turned in after solutions have been made available cannot receive credit.

All assignments and projects are to be submitted electronically unless otherwise specified. Please submit writtren work in portable formats (plain text where appropriate, PDF or postscript when needed, never something like Word documents). If in doubt about a file format, please check. Keep a copy of all submissions for yourself.


A take-home midterm exam will be given in early November. The final exam will scheduled by the registrar's office during exam period. Details about the exams will be made available later in the semester.


Grades will be based on homework/lab assignments and exams, as follows:

Breakdown: Scale:
Homeworks/Labs 25% A+ >= 99% A >= 93% A- >= 90%
Midterm Exam 25% B+ >= 87% B >= 83% B- >= 80%
Final Project 25% C+ >= 77% C >= 73% C- >= 70%
Final Exam 25% D+ >= 68% D >= 65%
E < 65%

Grades for individual assignments and exams are not scaled. Any scaling deemed appropriate will take place at the end of the semester by adjusting the above thresholds. Thresholds may be adjusted downward (thereby raising grades) but will never be adjusted upward.

Computer Science Department Honor Code Guidelines

The Honor Code as it applies to non-programming assignments is outlined in the Student Handbook.

For programming assignments in Computer Science courses, the honor code is interpreted in very specific ways. When a program is assigned, your instructor will identify it as a "practice," "test," "laboratory," or "team" program. The Honor Code applies differently to each with respect to collaboration or assistance from anyone other than the TAs or instructors:

Practice Programs. These are provided to help you gain an understanding of a topic, and are not graded. Guideline: Help on these programs is unrestricted.

Test Programs. Any assignment designated as a test program is to be treated exactly as a take-home, open-book test. You are allowed to read your textbook, class notes, and any other source approved by your instructor. You may not consult anyone other than your instructor. The instructor encourages the asking of questions, but reserves the right not to answer, just as you would expect during an exam. Guideline: Any work that is not your own is considered a violation of the honor code.

Laboratory Programs. Laboratory programs are expected to be the work of the individual student, designed and coded by him or her alone. Help locating errors is allowed, but a student may only receive help in correcting errors of syntax; help in correcting errors of logic is strictly forbidden. Guideline: Assistance from anyone other than the TAs or instructors in the design or coding of program logic will be considered a violation of the honor code.

Team Programs. Team programs are laboratory or test programs to be worked on in teams of two or more students. You are allowed to discuss team programs with your partners, but work with others is otherwise restricted by the appropriate rules above. Guideline: Any work that is not the work of your team is considered a violation of the honor code.

If you do not understand how the honor code applies to a particular assignment, consult your instructor.

Students should be aware of the Computer Ethics outlined in the Student Handbook. Violations (including uninvited access to private information and malicious tampering or theft of computer equipment or software) are subject to disciplinary action.

Guideline: To protect your work dispose of printouts and diskettes carefully, and avoid leaving your programs on hard disks in labs and other public storage areas.

The Department of Computer Science takes the Honor Code seriously. Violations are easy to identify and will be dealt with promptly.