copyright Steve J. Hodges

CS 24 Fall 2018

Course Information

Learning Outcomes

In this course you will learn to:

  1. Develop small assembly language programs that demonstrate basic computer organization.
  2. Analyze basic strategies and design compromises of computer organization and design.
  3. Investigate the role played by the operating system and compiler technology in computer organization and design.


  1. Design and implement assembly language programs using machine instructions, addressing modes, subroutines, macros and interrupts to solve problems of simple complexity.
  2. Compare and contrast the basic relationship between hardware and software design.
  3. Analyze the basic computer architecture using engineering principles and quantitative cost/performance trade-offs.
  4. Design an ALU by understanding the basics of computer binary arithmetic and logic including addition, multiplication and division floating point representation.
  5. Illustrate the basics of logic design including gates, truth tables and combinatorial logic.

Course Objective

CS 24 is a computer engineering course for computer science majors. Its purpose is to give a fundamental understanding of the organization of computer system. Topics covered include assembly language, the role of instruction sets, computer arithmetic, processors, and i/o systems. Some programming (machine language and assembly language) is required and the hardware labs will require some simple C programming, but the majority of the assignments are written homework problems.

Course Textbook

Computer Organization and Design: The Hardware/Software Interface, 5th Edition,
Patterson & Hennessy, Morgan Kaufmann (MIPS hardware)

SPIM simulator

We will be using the SPIM simulator to run our MIPS assembly language programs. I like the 8.x command line SPIM series, it's a bit old though, and there are other MIPS emulators that you might prefer such as the current version of SPIM QtSPIM v9.1.17, or MSU MARS v 4.5. You will need to install and learn at least one of these programs so that you can run and test your MIPS programs this semester. You shouldn't have any portability issues if you stick to the SPIM/MIPS conventions described in class and the textbook.

Arduino Development Environment

You will be writing simple programs for the hardware labs (Arduino Duemilanove based.) We will be using version 1.8.7 (or whatever the current version is) of the Arduino Development Environment, which is available for OS X, Linux, and Windows. You will need to install this free software on your computer. This can be a tricky install, possibly needing drivers to be able to connect to the Arduino board over USB.


You are responsible for the assigned reading, the weekly self-scheduled lab hours, and what is discussed in each class meeting, including announcements, regardless of your attendance. If you are unable to make it to some or all of a class period, you should arrange to have someone else in the class take notes for you. Keeping up with the assigned reading and the course lectures is important for successful completion of the course programming assignments and exams. You should have the necessary materials to take notes during class.

During class I expect that you will take notes. I recommend paper notes. Use of laptops during class is discouraged. If you use a laptop or other screen during class, please sit towards the back to minimize disruption, and only use the device for note taking, and not for unrelated activities or for working on homework during class time.

Please do not contact me via email regarding the content of a class meeting that you missed.

You are responsible for keeping backup copies of your class work.

This course requires active participation each day of class so it is important for you to attend every class session, arrive on time, and come prepared. Your participation not only enhances your own learning, it benefits other students in the class.

You are responsible for knowing how to calculate your grade (given your raw scores) in this class. Here is a document that describes how to calculate a weighted average. (.pdf) I am also happy to review the arithmetic needed to do this if you come to see me during any of my lab or office hours.


You may obtain a letter grade (A, B, C, D, or F), or you may choose instead to take the class for pass/no pass. The latter option means that your grade for this course will be pass if you score at least 70.0% overall and no pass if you don't. If you do not specify a preference, you will receive a letter grade. To request the pass/no-pass option, make sure to complete your request online via Web Advisor/eForms before the deadline. Those who earn 90.0% or more of the possible points will get an A, 80.0% B, 70.0% C, 60.0% D, and lower F.

Flexible Lab Hours

I will assign weekly exercises (at the class orientation) for you to complete during the semester from the sample problems in your textbook. These exercises will help you learn the course material, review important programming concepts, and prepare for your programming projects and exams. Arranged hours are "class time" and all students are expected to meet this number of hours per week to fulfill the requirements of this course. The work you do each week during your required lab time and the number of hours you completed each week will be uploaded to the courses Canvas site. During the first week or two of class, I'll review the procedures used to complete and track your required lab time (4 hours and 5 minutes per week.) Five percent of your grade comes from the completion of these exercises. Please let me know if you have any questions regarding the online lab portion of the class.

Homework Assignments

This class will have approximately 8 to 12 homework assignments. There will likely be two or three SPIM assembly language programming assignments, one or two hardware labs that will require you to build simple hardware projects (and program them with simple C programs using the Arduino hardware platform,) and the rest written homeworks containing problems from the textbook chapters. The homework assignments will comprise 35% of your final grade. The written homework assignments and the programming assignments must be completed individually. The Arduino labs can be done in pairs or individually.

Your homework assignments will be submitted via email to and must follow some submission guidelines.

Written homeworks (including hardware lab reports) must be computer generated (using such tools as a word processor, spreadsheet, coding environments, digital cameras, and drawing, diagramming, graphing, or layout programs) and will be submitted in .pdf formatted attachments. Written homeworks will be uploaded via the class Canvas website before the deadlines for full credit, or within 24 hours late for half credit.

Late assignments will be accepted at the instructor's discretion for a maximum of half credit. If your work is not complete by the due date, submit whatever portion you have completed and proceed to the next assignment.

Cheating, Plagiarism and Collusion

Review this page on Academic Integrity

It is useful is to collaborate with others. On the other hand, you are unlikely to learn the material unless you do your own work. Please ask me for guidance if you are uncertain about where to draw the line in collaboration.


There will be a midterm and a final exam. Exams will be closed-book written exams. Exams must be taken when given except by prior arrangement with me. Each exam contributes 30% to your final grade.

Consulting with me

If you need some extra help, or need to consult with me regarding any course-related matter, please feel welcome to contact me during my scheduled lab or office hours. My lab and office hours provide times that are specifically reserved for helping you outside of the lecture. Make an appointment if you cannot come during my scheduled lab or office hours. My lab and office hours are shown on my web page.

This is a difficult course. Almost everybody is going to get “stuck” at some point in the semester. When this happens please don't hesitate to get some help. A little bit of help can save you hours of pounding your head against the wall. I have regular office hours and lab hours or you can send me email or call me.

Getting help

Here's a link to instructor and tutor hours.

Seven Keys for Academic Success

  1. Study With and Get to Know Other Students
  2. Use a Study Schedule and Time Management Strategies
  3. Come to Every Class Session
  4. Communicate with Your Instructor
  5. Expect to Use Textbooks and Readings
  6. Set Academic Goals
  7. Support Services Are Here for You - Free!

Find out more about the seven keys!

Student Equity

Here's a link to the Cabrillo Office of Student Equity website.


For help with financial aid, counseling, or general information, please visit the Veterans Information Center (Room 914.)

AB540, DACA, and Undocumented Students

Cabrillo College is a "sanctuary campus."
The Dream Resource coordinator can help clarify any questions you may have as well as provide information about college, resources, clubs, and scholarships. Please contact Adela Naranjo-Bernabe, 477-3379, (Aptos Room 104; Watsonville Room A123.)

Campus Resources

Please come see me if you have questions about the resources and support that is available on campus.
Some of the resources on Campus (one page; .pdf)


All students needing accommodations should inform the instructor as soon as possible. Veterans may qualify for accommodations. Wounded Warriors may have acquired injuries that, through the American with Disabilities Act (ADA), entitles the use of accommodations to ensure equal opportunity for students with verified disabilities. To determine if you qualify or if you need assistance with an accommodation please contact the Accessibility Support Center(Room 1073, 479-6379,) or the Learning Skills Program (Room 1073, 479-6220.)