The objective of this course is to explain how computers are designed and how they work. Students are introduced to modern computer principles using a typical processor. They learn how efficient memory systems are designed to work closely with the processor, and how input/output (I/O) systems bring the processor and memory together with a wide range of devices. The course emphasizes system-level issues and understanding program performance. Topics include instructions sets, assembly language, internal data representation, computer arithmetic, processor data path and control, memory hierarchy, pipeline, and parallel processing.