Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

David August

Fall 2007

General Information | Schedule | Lecture Notes | Assignments | Announcements | Policies

Course Summary

The purpose of this course is to provide the fundamental background necessary to understand, design and implement the components of programming systems. Examples of such components include text editors, assemblers, compilers, loaders, interpreters, and portions of operating systems. The course is divided into three major parts: machine organization and assembly language programming, program design and development, and software tools.

Administrative Information


TTh 10:00AM-10:50AM, Computer Science Building 104


NumberMeeting TimeMeeting PlacePreceptor
1MW 1:30PM-2:20PMComputer Science Building 102Dondero
2TTh 1:30PM-2:20PMComputer Science Building 102Dondero
2aTTh 1:30PM-2:20PMFriend Center 112Poole
3TTh 3:30PM-4:20PMFriend Center 112Raman
4MW 7:00PM-7:50PMFriend Center 109Badam


David August : Computer Science Building 209 : 609-258-2085 :
Office Hours: after each lecture, or by appointment


Robert Dondero : Computer Science Building 206 : 609-258-2211 :
Office Hours: MTWTh 2:30PM-3:20PM, or by appointment

Anirudh Badam : Computer Science Building 317 : 609-258-1796 :
Office Hours: F 4:30PM-6:20PM, or by appointment

Lindsey Poole : Computer Science Building 318b : 609-258-7170 :
Office Hours: F 12:00Noon-1:50PM, or by appointment

Arun Raman : Computer Science Building 223 : 609-258-0254 :
Office Hours: TTh 4:30PM-5:20PM, or by appointment

Undergraduate Coordinator:

Donna O'Leary : Computer Science Building 410 : 609-258-1746 :

Lab Teaching Assistants:

Available in the Friend Center 016 and 017 computer labs. A Lab Teaching Assistant Schedule provides details.


COS 126. More specifically, you should have substantial programming experience using some high-level programming language such as Java. Prior experience with the C programming language is helpful but not essential.

Textbooks and Other Reading

The course uses these textbooks. Note that not all of them are required:

  1. C Programming: A Modern Approach, K. N. King, Norton & Co. 1996. The book covers the C programming language. It is required.
  2. The Practice of Programming, Brian W. Kernighan and Rob Pike, Addison-Wesley 1999. The book covers program and programming style. It is required.
  3. Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron, Prentice-Hall 2003. The book describes computer systems from the point of view of a C programmer. In particular, it covers Intel architecture and assembly language, and some additional pertinent topics. Either this book or (4) is required, but this book is preferred.
  4. Programming from the Ground Up, Jonathan Bartlett 2004. The book covers Intel architecture and assembly language. It is freely available through the Web. As noted previously, either this book or (3) is required, but (3) is preferred.
  5. Programming with GNU Software, Michael K. Loukides & Andrew Oram, O'Reilly 1997. The book covers the GNU programming environment. Specifically, it contains one chapter on each of the programming tools that we use throughout the course. It is not required, but is highly recommended.
  6. The C Programming Language (second edition), Brian W. Kernighan and Dennis M. Ritchie, Prentice-Hall 1988. The book covers the C programming language. It is a reasonable alternative to (1). It is not required.
  7. C: A Reference Manual (fifth edition), Samuel P. Harbison & Guy L. Steele, Prentice-Hall 2002. The book is the definitive reference manual on the C programming language. It is not required.
  8. C Interfaces and Implementations, David R. Hanson, Addison-Wesley 1996. The book contains many examples of the abstract data type (ADT) style of programming that we use in the course. It is not required.

Books (1), (2), (3), and (5) are available in the University bookstore. All of the books except (4) are on reserve in the Engineering Library. You may use different editions of the textbooks, but if so then you are responsible for figuring out any changes in section numbers for the readings.

The course uses these manuals, for reference only:

  1. IA32 Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture
  2. IA32 Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual
  3. IA32 Intel Architecture Software Developer's Manual, Volume 3: System Programming Guide
  4. Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification
  5. Using as, the GNU Assembler

All are freely available through the Web.

Academic Regulations

The Policies regarding collaboration and plagiarism are similar to those in COS 126. Please read them.