This course ended on December 13, 2012

CPSC 220
Introduction to Computer Architecture

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall 2012.

   Instructor:  David J. Eck  (

   Course Handout:

   Monday, Wednesday, Friday, 12:20--1:15 PM, Room Gulick 206A
       Lab: Tuesday, 11:55--1:20, Gulick 208
   Office Hours:
          See "Final Exam" section below for end-of-semester office hours.

Lab Worksheets
Lab 1, August 28
Java Bitwise Operators
Lab 2, September 4
Intro to Logisim
Lab 3, September 11
Machine Language Programming
Lab 4, September 18
Writing a LARC Simulator
Lab 5, September 25
Assembly Programming
Lab 6, October 6
Assembly Language Subroutines
Lab 7, October 16
Memory Circuits
Lab 8, October 23 & 30
Larc in LogiSim
Lab 9, November 6 & 13
Writing an Assembler
Lab 9b, November 13 & 20
Assembler, continued
Lab 10, November 27 and December 4
I/O in Larc

Final Exam: December 13

The final exam is 7:00 PM on Thursday, December 13, in our regular classroom. An information sheet is available.

Office Hours for the End of the Semester:

           Thursday,  December 6:   11:00 -- 4:00
           Friday,    December 7:    2:00 -- 2:50
           Monday,    December 10:  10:30 -- 12:00 and 2:00 -- 3:00
           Tuesday,   December 11:   1:00 -- 3:00
           Wednesday, December 12:  11:00 -- 3:00
           Thursday,  December 13:  11:00 -- 1:15

Fifteenth Week: December 3, 5, and 7

We will finish our discussion of division on Monday. The rest of the day on Monday will be devoted to floating point numbers. On Wednesday and Friday, we will review for the final exam.

For lab on Tuesday, you can continue working on Lab 10. Your work for this lab should be in your homework folder by Saturday morning.

Fourteenth Week: November 26, 28, and 30

On Monday, we will discuss I/O and trap handling in the Larc architecture, and we will prepare for this week's lab, which requires you to implement a system trap handler for Larc. YOu should be sure to read Chapter 7 from the Larc manual, which was handed out in class.

Starting on Wednesday, we will return to a topic that we skipped over earlier in the term: floating point numbers and multiplication and division of integers. This material is covered in Chapter 3 of the textbook.

Thirteenth Week: November 19

There is no class on Wednesday or Friday this week, because of Thanksgiving break. On Monday, we will continue talking about I/O, including I/O in the Larc architecture.

Happy Thanksgiving!

Twelfth Week: November 12, 14, and 16

On Monday, we will discuss the work that you will have to do for the second part of Lab 9. For the rest of the week, the topic will be input/output systems. Unfortunately, the chapter in the book on I/O systems is not very useful for us. So, the main reading will be Chapter 7 of the Larc Manual; I will hand out a copy of that in class on Wednesday.

Eleventh Week: November 5,7, and 9

We start a new two-week lab this week — writing an assembler for Larc. We will spend Monday, at least, talking about this lab. After that, we will start looking at caching and the memory hierarchy. As with pipelining, we will go for a general understanding of caching rather than a detailed knowledge of how it is implemented. The memory hierarchy is covered in Chapter 5 of the textbook. You should read sections 5.1 and 5.2.

Tenth Week: October 29, and 31; November 2

There is a test on Friday, November 2. An information sheet is available

We will just a bit more time on Monday talking about pipelining, and we will look at a working implementation of Larc in Logisim. Aside from that, on Monday and Wednesday, we will review for the test and we will start preparing for the next lab assignment, which will be to write a Larc assembler in Java.

Ninth Week: October 22, 24, and 26

We begin a two-week lab on Tuesday, in which you will construct a Larc CPU in LogiSim that can execute Larc machine language programs, with the exception of traps. On Monday, we will continue to prepare for that lab. From that we will move on to pipelining in CPU architectures. For an introduction to pipelining, read Section 4.6 in the textbook.

Eighth Week: October 15, 17, and 19

This week, we will look at sequential logic circuits, which we will use primarily to build memory circuits. We will then talk about how the register file for Larc can be constructed, and we will look at how all of the main components of Larc -- memory, register file, ALU, PC -- can be wired together.

The lab for this week uses LogiSim to build memory circuits.

The basic material on sequential logic and memory circuits can be found in Appendix C of the textbook, sections C-7 and C-8. (Appendix C is on the CD that comes with the text.) The construction of a MIPS computer, paralleling what we are doing with Larc, is in Chapter 4, Sections 1 through 4.

Seventh Week: October 10 and 12

Because of Fall break, there are are no classes on Monday or Tuesday this week. There is no lab this week. Work from the assembly programming labs, Lab 5 and Lab 6, is due next Tuesday, October 16.

We will discuss the MIPS ISA in class this week. MIPS is described in detail in Chapter 2 of the textbook, which covers many of the same topics that we have looked at in the context of Larc. You should read Sections 2.9 and 2.10, which will complete the reading from Chapter 2. (You should also read earlier sections of Chapter 2, if you have not done so.)

After looking briefly at MIPS on Wednesday, we will discuss alternative architectures on Friday. The reading is the first five pages of Section 2.20, a short section on the history of computer architectures, which is on the CD that accompanies the textbook.

Sixth Week: October 1, 3, and 5

We will talk about subroutines and how they are implemented in LARC assembly language, using a stack of activation records. The MIPS version of all this is in Section 2.8 of the textbook, where subroutines are called "procedures." Once we have finished with subroutines in LARC, we will talk about MIPS and other possibilities for assembly languages. You should read Sections 2.5 through 2.8.

In addition to our regular lab, we will have an extra lab this week on Friday, during class time. In Tuesday's lab period, you can work on Labs 4 and 5. Lab 4 is due by 9:00 AM on Friday. Lab 5 and Lab 6 will be due together at the next regular lab, Tuesday, October 16.

Fifth Week: September 24, 26, and 28

There is a test on Friday, September 28. An information sheet is available.

We will continue working with the LARC assembly language in class and in lab this week. There is no additional reading, but you might want to read ahead to Sections 2.5, 2.6, and 2.7 of the textbook. After covering LARC, I plan to spend some time on other architectures, including the full MIPS architecture. Sections 2.5, 2.6, and 2.7 cover some of the same things that we have been doing with LARC, but using MIPS instead of LARC.

Fourth Week: September 17, 19, and 21

This week, we move from the Larc machine language to Larc assembly language. The reading for this material is Chapters 5 and 6 of the Larc Manual. Copies of those chapters will be handed out in class. You should also read Section B.1 from Appendix B in the textbook, as a general introduction to assemblers and linkers.

For lab this week, you will write a program that simulates the Larc computer.

Note: The first test in the course comes up next week, on Friday, September 28.

Third Week: September 10, 12, and 14

We will continue working on the machine language (or "instruction set architecture") of the Larc model computer. In lab on Tuesday, you will write some machine language programs and run them with a Larc simulator. (Next week in lab, you will write a simulator.) By the end of the week, we will start looking at the full MIPS instruction set architecture.

You should finish reading Chapters 3 and 4 from the Larc manual, if you haven't already done so. You should also read Sections 2.3 and 2.4 from the textbook (and review 2.2).

Second Week: September 3, 5, and 7

We will do a little more work with logic gates and binary numbers (including negative numbers, and we will begin the study of the machine language for the Larc model computer. As part of this, we will start thinking about how a circuit might be built that could execute machine language instructions, but you won't fully understand that until much later in the course.

You should read sections C1, C2, C3, and 2.4 from the textbook. I will also hand out a reading on Wednesday consisting of Chapters 3 and 4 from the Larc lab manual

This week's lab introduces the Logisim logic circuit simulation program and asks you to use it to build some basic circuits.

First Week: August 27, 29, and 31

Welcome to the course!

This week will be an introduction to the ideas of computer architecture and assembly language. You should read the following sections from the textbook: Chapter 1, Sections 1 and 2; Chapter 2, Sections 1 and 2. The class handout is also a reading assignment.

We have a lab after only one day of class, so we will have to spend part of the first class meeting preparing for the lab. The lab asks you to use the bitwise and bit shift operators (&, |, ^, ~, <<, >>, and >>>) in a Java program. We will discuss these operators in class on Monday, and there will be some information about the operators in the lab worksheet.

There is also a homework assignment, which you will turn in at the start of class on Wednesday.

Note that there is new version of Linux in the labs this semester. You can find some basic information about it on the About Linux page,