CS33: Computer Organization

Announcements | Schedule | Grading | Labs | Integrity | Links


This course takes a bottom-up approach to answering the question of how a computer works. Topics include theoretical models of computation, bits, bytes and data representations, operations on data, digital logic structures, computer memory, assembly and machine code, hardware components, the stack, the operating system, compilers, and the C programming language. We examine the hardware and software components required to go from a program expressed in a high-level programming language like Python or C to the computer actually running the program.

This course assumes completion of CS21 or its equivalent. It is the best entry point for students intending to be CS majors or minors who already have extensive computing experience.

Class information

Professor: Richard Wicentowski
Office: Science Center 251
Phone: (610) 690-5643
Office hours: Wednesday 1:00-3:00 pm or by appointment

Room: Science Center 240
Time: Tuesday, Thursday 1:15pm–2:30pm
Text: Patt, Y. and Patel, S. Introduction to Computing Systems: From bits and gates to C and beyond (2nd edition).



1 Sep 02   Chapters 1-2
  • Representing signed integers in binary
  • Bit-wise logical operations
Sep 04  
  • Representing floating point numbers in binary
  • Hexadecmial numbers
2 Sep 09   Chapter 3
  • Logic gates built from transistors
  • Decoders and Multiplexers
Sep 11 Drop/Add ends (Sep 12)
  • Full adders
  • Programmamble Logic Arrays
  • Storage: R-S Latch, Gated D-Latch
  • Registers and Register Files
  • Circuits with state
3 Sep 16   Chapter 4
  • Instruction processing
Sep 18   Chapter 5
  • Instruction set architecture (ISA)
  • LC-3 Opcodes and addressing modes
  • Introduction to the LC-3 simulator
4 Sep 23  
  • Conditional Branching
  • Loops
  • I/O
Sep 25   Chapter 6
  • JSR(R) and RET
  • Writing functions
5 Sep 30   Chapter 7
  • Assembly language
  • The assembler
Oct 02   Chapter 8
  • I/O
  • Interrupts
6 Oct 07   Chapter 9
  • Traps
  • Call/Return
Oct 09   Chapter 10
  • The Stack

Oct 14

October Holiday

Oct 16

7 Oct 21   Chapter 10 (continued) + quick review  

Oct 23

Midterm exam

8 Oct 28   Chapters 11-12
  • Introduction to C
  • Variables and Operators
Oct 30  
9 Nov 04   Chapters 13-14
  • Control Structures
  • Functions
Nov 06 Last day to declare CR/NC or withdraw with a W (Nov 07)
10 Nov 11   Chapter 16
  • Pointers
  • Arrays
Nov 13  
11 Nov 18   Chapters 17-18
  • Recursion
  • I/O in C
Nov 20  
12 Nov 25   Chapter 19
  • Linked Lists
  • Dynamically Resizeable Arrays

Nov 27


13 Dec 02   Chapter 19 (continued) 10
Dec 04   Chapter 15
  • Debugging
  • gdb How-To
  • valgrind
14 Dec 09   Review and other things

Dec 16

Final exam: Tuesday, Dec 16 from 2:00-5:00 pm


Your overall grade in the course will be determined as follows:
25%Final Exam
20%Midterm Exam
5%Class Pariticipation and Attendance


Lab assignments will typically be assigned on Thursday and be due the midnight before the next Thursday.

You are encouraged to work with a partner on each lab assignment.

You will submit your lab work electronically using the handin33 program. You may submit your a lab multiple times, each submission overwriting the previous one. Only the final submission will be graded.

Late labs will not be accepted except in extreme situations and only if you contact me before the deadline or have made prior arrangements. Even if you do not fully complete an assigment, you may submit what you have done to receive partial credit.

Academic Integrity

Academic honesty is required in all work you submit to be graded. With the exception of your partner on assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work.

You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your assignments in any capacity.

All code you submit must be your own with the following permissible exceptions: code distributed by me as part of the class, code found in the course text book, and code worked on with your assignment partner. You should always include detailed comments that indicates which parts of the assignment you received help on, and what your sources were.

Please see me if there are any questions about what is permissible.

Below are some external links which may be helpful to you.

Basic Unix Commands
Textbook site