Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

Vivek Pai

Fall 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


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


Number Meeting Time Meeting Place Preceptor
1 MW 1:30PM-2:20PM Computer Science Building 102 Dondero
2 MW 3:30PM-4:20PM Computer Science Building 102 Dondero
3 TTh 1:30PM-2:20PM Computer Science Building 102 Meola
4 TTh 3:30PM-4:20PM Friend Center 112 Mason
5 MW 7:30PM-8:20PM Friend Center 112 Kim


Vivek Pai : Computer Science Building 322 : 609-258-2086 :

Office Hours: After each lecture, or by appointment


Robert Dondero : Computer Science Building 206 : 609-258-2211 :

Office Hours: MW 2:30PM-3:20PM and MW 4:30PM-5:20PM in Computer Science Building 102 or 206, or by appointment

Wonho Kim : Computer Science Building 216 : 609-258-5389 :

Office Hours: TTh 11:00AM-11:50AM in Computer Science Building 216, or by appointment

Matt Meola : Computer Science Building 415 : 609-258-1798 :

Office Hours: M 1:30PM-2:20PM and TTh 2:20PM-2:50PM in Computer Science Building 415, or by appointment

Thomas Mason : Computer Science Building 223 : 609-258-0254 :

Office Hours: T 4:30PM-5:20PM and F 2:30PM-3:20PM in Computer Science Building 223, 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:


Highly Recommended

All of the books are available in the University bookstore, and are on reserve in the Engineering Library.

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.