Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

Jennifer Rexford

Spring 2008

General Information | Schedule | 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


MW 10:00AM-10:50AM, Computer Science Building 105


NumberMeeting TimeMeeting PlacePreceptor
1MW 1:30PM-2:20PMFriend Center 007Dondero
2TTh 1:30PM-2:20PMFriend Center 111Dondero
3TTh 3:30PM-4:20PMComputer Science Building 102Jablin


Jennifer Rexford : Computer Science Building 306 : 609-258-5182 :
Office Hours: ???, or by appointment


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

Thomas Jablin : Computer Science Building 213 : 609-258-7727 :
Office Hours: Th 4:30-5:20, F 3:30-4:20, 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.