The goal of this course is to teach you how a computer really works. We begin by discussing transistors, the basic switching elements that constitute modern computers. We then describe how these transistors can be aggregated into more complex units like gates and ALUs and ultimately datapaths that perform computation. Once we have described how we can build a computer we will move on to talking about assembly language and how the computer is programmed at the lowest level. We will spend the second half of the course talking about the C programming language and how the features of this language are mapped onto the lower level assembly constructs.

This class is commonly offered both Fall and Spring semesters. Please check PennInTouch for the current schedule.


See Canvas or Piazza for semester-specific resources, including the office hours schedule, lecture slides, syllabus, and software distributions.


Required Textbook

  • Patt and Patel, "Introduction to Computer Systems", 2nd Edition, available at Penn Bookstore

Recomended Textbook

  • Harbison and Steele, "C: A Reference Manual"
  • Kernighan and Ritchie, "The C Programming Language" - A classic reference by the people that designed C


CIS 110 or CIS 120, and sufficient programming maturity.

Academic Misconduct

The work you submit in this class is expected to be your own. If you submit work that has in part or in whole been copied from some published or unpublished source (including current or former CIS 240 students), or that has been prepared by someone other than you, or that in any way misrepresents somebody else's work as your own, you will face severe discipline by the university. (Adapted from text appearing at the Office of Student Conduct page.)

Although you may talk with your classmates about the assignments, assignments are to be completed individually. To ensure this, make sure you take a break (e.g., watch an episode of Gilligan's Island) after a group study session, before sitting down to start the assignment. This is called the "Gilligan's Island Rule." If you have any questions about what is appropriate, don't hesitate to ask.

Appropriate: Adam doesn't understand whether a homework problem is asking for the answer to be written in machine language or assembly language. He discusses this with Beth to arrive at one or the other.

Appropriate: Beth and Adam do problems together from the "Exercises" section of the textbook. These questions are very similar to some questions on a particular homework. When they work on the homework, they work completely independently.

Inappropriate: Together, Adam and Beth work out each homework problem on a whiteboard; then they separately copy down their work and turn it in.

Inappropriate: Adam completed a programming assignment and it was working perfectly. Just before turning it in, he deleted his program (oops!). Desperate, he asks Beth if he can turn in a copy of her program.

It is important to understand that you must not give any appearance of inappropriate sharing/borrowing of work. It is worth going the extra effort to ensure their are no problems or misunderstandings.

See Penn's Code of Academic Integrity for more information.