CS 429: Spring, 2017
Computer Organization and Architecture

Instructor: Dr. Bill Young

Unique numbers: 51990, 51995 Class time: MW 8-9:45am; Location: GDC 2.216
Unique numbers: 52000, 52005, 52010 Class time: MW 10-11:45am; Location: GDC 2.216
Instructor Office: GDC 7.810; Phone: 471-9782; Email: byoung at cs.utexas.edu
Instructor Office Hours: Tues. 1:30-3:30pm and by appointment

TA: Michael Feilbach; Email: mfeilbach at utexas.edu; TA Office Hours: Wednesdays 11:30am-1pm, GDC 1.302, Desk 2
TA: Adrian Trejo; Email: atrejo at cs.utexas.edu; TA Office Hours: Monday and Wednesday 1-2pm, GDC 1.302, Desk 4/5
TA: Vivek Pradhan; Email: vivek.k.pradhan at utexas.edu; TA Office Hours: Mondays 3-4:30pm, GDC 1.302, Desk 2
Proctor: Alfred Zhong; Email: alfredzhong at utexas.edu; Proctor Office Hours: by appointment
This website: www.cs.utexas.edu/users/byoung/cs429/syllabus429.html

Important Class Announcements:

Breaking news important to the class will be posted here. Consult this spot often.

For those who took the final exam, they've been graded and the scores are available on Canvas. If you didn't take the exam, it will appear on Canvas as a 0. Don't worry about that; my grading script will compute the correct average. Also, this doesn't include the two extra points for the course evaluation. Those will be added by my grading script. Except for a few lab grades that are being re-considered, this essentially closes out the semester. There will not be a general make-up exam given. If you have any issues, be sure to contact me ASAP. Best of luck to all of you!

Dr. Young's office is in the south wing. You have to take the south elevator, because the two towers don't connect on the 7th floor.

Feel free to email me (Send me an email message), but please put "CS429" in the header, since I'm also teaching CS361 this semester.

Course Description:

CS429 is the first course in the systems core sequence required of all UT CS majors. It describes how computers operate at a fairly low level of abstraction. For example, we'll consider: Understanding these fundamentals thoroughly is absolutely essential to your future success in computer science. The material of this course is quite detailed and requires careful and diligent study. If you are not willing to put in the time and effort required to master this material, you probably should reconsider your decision to major in Computer Science.

The UT College of Natural Sciences recently published Vision and Recommendations for 21st Century Undergraduate Education (June, 2016). It contains these words:

"Research on learning shows that transformative education requires teaching methods that engage students in productive intellectual struggles. Students must personally grapple with scientific and mathematical concepts to develop a deep understanding of core principles. They must be given opportunities to overcome obstacles and failure to develop an acceptance of ambiguity and a willingness to persevere."
In this class, you won't succeed unless you do some struggling, grappling and persevering, and accept ambiguity! Not everything will be spelled out for you and there are a number of skills you'll have to acquire on your own. You will be asked to complete some very challenging assignments. In some cases you will be expected to use tools and techniques that are not discussed in class. That is not to say that help is not available; just that we expect you to be proactive about learning. This is a skill you must acquire now, because you'll need it for your entire academic and professional career. Toto, I don't think we're in high school anymore!

The students that do well in this class are survivors. This class is a lot of work, and it is important to keep current. The material in this class is cumulative; it can be quite difficult to catch up if one falls behind. It is important to keep turning in homework and coming to class. Here are some general hints for succeeding in this and other classes: Hints for Success.

We will be discussing several different programming languages in this course: C, x86 assembly language, and Y86 assembly language. You will be writing programs in at least C and x86.

If you want to know what this course is like, I suggest you watch this short video: An Apt Metaphor for CS429.

Weekly Discussion Sections:

Students are encouraged to attend a weekly discussion section, but it's not terribly important which you attend. They will mainly be help sessions. Note that the Friday sections run from 9am to 4pm, in UTC 1.144 (not the rooms listed in the course schedule. You are welcome to drop in at any time during the day.

Using Piazza: We will be using Piazza for class communication. The Piazza system is highly catered to getting you help fast and efficiently from classmates, the TAs, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. Don't post code and other items on Piazza that give away solutions to homework or labs, unless you post them privately (visible only to yourself and the instructors.)

If you turn off the notifications and miss an important posting, you are responsible. If you have any problems or feedback for the developers, email team at piazza.com. Because of some issues in past semesters, posts may be anonymous to the class, but not to the instructors. I expect that posts will be pertinent and respectful. Don't use Piazza as a place to vent or trash anyone.


You are expected to have taken and passed the following courses (or equivalent) with a grade of at least C-: Computer Science 311 (or 313K) or 311H (or 313H); and Computer Science 314 (or 315) or 314H (or 315H). If you don't have the prerequisites, be sure to clear it with the CS department or risk being dropped from the class.


The required text book for this class is Computer Systems, A Programmer's Perspective by Randal E. Bryant and David O'Hallaron, Prentice Hall, 2016 (Third Edition). You need to get the 3rd edition, which is substantially different from the 2nd edition. Note that this book is also used in CS439, so don't sell it back at the end of the semester if you plan on continuing in CS.

Since we will be programming some in C, I recommend that you have access to The C Programming Language, second edition, by Brian Kernighan and Dennis Ritchie, Prentice Hall Software Series. This is available on-line. There are also many Web pages devoted to C-language programming. A nice tutorial intro to C is here: C Tutorial. Java programmers should have no problem with the subset of C that we will use.

Class Schedule and Slides:

The class schedule is here: schedule. This schedule is approximate; some dates may change. Rely on the assignment handouts, not on this schedule for assignment due dates.

All of the class slides will be made available via links below as we cover new material. You are welcome to print them out or view them on-line. Slides are in PDF form. They are derived from slides originally developed for the course by Bryant and O'Hallaron and modified by me and other professors. They are used with permission.

The following is a tutorial on C generated by a UT grad student: C Tutorial

Slides on C: 4up-PDF  PDF

Slideset 1: Introduction to Computer Systems 4up-PDF PDF

Slideset 2: Bits and Bytes 4up-PDF PDF

Slideset 3: Integers 4up-PDF PDF

Slideset 4: Floating Point 4up-PDF PDF

Slideset 5: Digital Logic 4up-PDF PDF

In-class Exam 1 covers through slideset 5.

Slideset 6: ISA I 4up-PDF PDF

Slideset 7: ISA II 4up-PDF PDF

Slideset 8: ISA III 4up-PDF PDF

Slideset 9: ISA IV 4up-PDF PDF

Slideset 10: ISA V 4up-PDF PDF

Slideset 11: ISA VI 4up-PDF PDF

In-class Exam 2 covers through slideset 11 (probably).

Slideset 12: Datapath I 4up-PDF PDF

Slideset 13: Datapath II 4up-PDF PDF

Slideset 14: Pipelining I 4up-PDF PDF

Slideset 15: Pipelining II 4up-PDF PDF

Slideset 16: Pipelining III 4up-PDF PDF

There is no slideset 17 this semester.

Slideset 18: Storage Technology 4up-PDF PDF

Slideset 19: Cache I 4up-PDF PDF

Slideset 20: Cache II 4up-PDF PDF

Here's the cache problem from a previous semester's final that I went over in class Wednesday: Cache Problem.

Slideset 21: Optimization I 4up-PDF PDF

Profiling example: Fib profile.

Slideset 22: Optimization II 4up-PDF PDF

Slideset 23: Amdahl's Law 4up-PDF PDF

Slideset 24: Linking I and II 4up-PDF PDF

No Laptops:

If you want to use laptops, cell phones, or other electronic devices, please step out of the class. In previous semesters I've had complaints from students that use of laptops was distracting to other students.


For the past two semesters, I have been making some videos that you might find helpful. Generally, they cover small snippets of class material that some students find confusing. I'll make them available over the course of the semester as we address the related topics.

Big Endian vs. Little Endian
Representing Unsigned Integers
Representing Signed Integers
Why Sign Extension Works
Same Bits, Different Interpretations
Representing Normalized FP Numbers
Representing Denorms and Special FP Values
Round to Even
Multiplying Floating Point Numbers
Adding Floating Point Numbers
Assembly Language Programming: Swap
IA32 Push instruction
IA32 Pop instruction
Array Indexing
Using x86 Condition Codes
Handling Data Hazards in the Y86 Pipeline
Cache Reading
Handling Cache Misses


There will be three in-class exams of approximately one and one half hours each. See the schedule for dates. There will be no makeups on in-class exams, but I will drop the lowest of these three scores. Exams are cumulative but will focus very heavily on the material since the previous exam.

We will have a combined final exam, meaning that both classes will take it at the same time. The final exam is optional for anyone who has taken all three in-class exams and is willing to take the (normalized) average of all three exams as their final exam score.

This works as follows: If you take all three in-class exams and are happy with the average (of all three), you can substitute that for the final exam score. For example, suppose you receive (normalized) scores of 100, 90, and 80 on the three exams. Your average for the in-class exams is 95 (dropping the lowest score of 80), which counts 30% of your grade. If you choose not to take the final exam, your score on that is 90 (the average of all three), which counts 20% of your grade. If you skip any of the in-class exams, you must take the final. If you do take the final, the score on that test will be your final exam score, no matter how well you did on the in-class exams. I.e., taking the final exam could lower your grade.

The final exam is scheduled for May 11, 7-10pm in CLA 0.126. Most of probably will opt-out. But if you decide to take it and have a documented conflict, we can arrange an alternative time, which may not be the makeup time listed by the registrar. Don't just assume that you can show up at the posted makeup time and that someone will be there to give you the test. Please discuss with me if you think you might have to take the final and you have a documented conflict.

We may also have a few pop quizzes over the course of the semester. They will be counted along with the 15% of your grade from weekly homeworks. There will be no makeup for quizzes, but they individually count very little, so don't freak out if you miss one. Quizzes can cover any material we've covered previously in the class, but will usually only cover recent material.


Written homework will be assigned nearly every week. Answers must be submitted on Canvas and will not be accepted late. You may discuss written assignments with classmates and get help from the instructors; but submit your own work. This is an easy portion of your grade so make the most of it.

You will have around 5-6 labs over the course of the semester. You must work alone on all labs. The due dates will be clearly marked. For labs, you will have 3 total grace days available which you can use over the course of the semester. You'd do well to save them as long as possible to deal with illnesses and personal emergencies.

Labs are generally posted on Canvas and Piazza.

Homework 1: due 2/3

Homework 2: due 2/10

Homework 3: due 2/17.

Homework 4: due 2/24.

Homework 5: due 3/3.

Homework 6: due 3/10.

Homework 7: due 3/24.

Homework 8: due 3/31.

Homework 9: due 4/7.

Homework 10: due 4/14.

Homework 11: due 4/21.

Homework 12: due 4/28.

Getting help:

It is a good idea to post your questions on Piazza, so that others can comment and also see the answer. General questions and questions about tests can be directed to Dr. Young. The TAs manage and grade the labs and are your best source of information on those. Weekly homeworks are generally graded by the proctor; direct questions there for homeworks.


You are strongly encouraged to come to class. Attendance will not be checked, but my experience suggests strongly that students who regularly miss class do poorly.

Computation of Your Grade:

The weighting of the grades for the various aspects of the course are as follows:

Component Percent
In class exams (one dropped) 30%
Final Exam 20%
Homework and Quizzes15%
Labs 35%

Canvas attempts to compute a running average course grade as individual scores are entered. You should totally ignore that. I'm not making any effort to get Canvas to weight things appropriately, drop low scores, etc. If you want to know how you're doing in the class, compute the score yourself.

Grades for the entire course tentatively will be averaged using the weighting below:

Course score Grade
[87... 90)A-
[85... 87)B+
[80... 85)B
[77... 80)B-
[75... 77)C+
[70... 75)C
[67... 70)C-
[65... 67)D+
[60... 65)D
[ 0... 60)F

This is tentative. The grades may be curved and may be a bit more generous than this. They will certainly not be less generous. That is, if you have a 90 you are guaranteed an A; but somone who gets an 89 may also get an A, depending on the final distribution of grades in the class.

A course grade of at least C- is required for this course to count toward a UT CS degree.

Scholastic Dishonesty:

Academic dishonesty will not be tolerated. See http://www.cs.utexas.edu/academics/conduct for an excellent summary of expectations of a student in a CS class.

All work must be the student's own effort. Work by students in previous semesters is not your own effort. Don't even think about turning in such work as your own, or even using it as a basis for your work. We have very sophisticated tools to find such cheating and we use them routinely. It's far better to get a 0 on an assignment than to cheat.

Also, don't post your work on any publicly available site, such as GitHub. It's understandable that you're proud of your work, but this just invites copying for students this semester and in subsequent semesters. If someone copies your work, even without your knowledge, you will both be liable to punishment. Here's what Mike Scott said when I mentioned this issue to him:

I have submitted cases to SJS for past students who have posted code from CS314 and CS312 to public repos and current students used it to cheat. Not much SJS can do grade wise, but it is recorded and they often have to write an essay about the matter.
I plan to follow Mike's lead here. There are other services such as BitBucket that have private repositories; you can grant access to instructors and to potential employers.

No deviation from the standards of scholastic honesty or professional integrity will be tolerated. Scholastic dishonesty is a serious violation of UT policy; and will likely result in an automatic F in the course and may result in further penalties imposed by the department or by the university. Don't do it! If you are caught, you will regret it. And even if you're not caught, you're still a cheater.

Students with Disabilities:

Students with disabilities may request appropriate academic accommodations from the Division of Diversity and Community Engagement, Services for Students with Disabilities, 471-6259, http://www.utexas.edu/diversity/ddce/ssd.

Typically, students allowed extra time or a quiet testing environment will take exams in a conference room on GDC 7S at the same time as the regular exam. One of the TAs will proctor. If you have arranged such accommodations, get me your SSD letter well in advance of the test since to arrange. Please be flexible with respect to time, etc.

Grad Students Clearing Architecture Background Requirement

If you're a grad student who needs to complete your background requirement in Architecture by exam, I'm happy to help you with that. You can do as little as take the final exam for CS429 with a grade of at least 80%. But be aware that the exams for this class (or any class) are idiosyncratic and assume that the person taking the test is also taking the class. For example, there are questions about x86 syntax and calling conventions. You could be a world-class expert on MIPS or ARM architecture and not do well on the exam. My suggestions is to study the appropriate sections of the Bryant and O'Hallaron book, review the class slides, and take the three in-class exams. (BTW: this semester, I've made the final optional for students who take all three in-class exams. I'll give you the same option. If you get 80% average on the three in-class exams, I'll count that as clearing your background requirement.)

Some Interesting Links:

Complete x86 registers
Nice x86 IA32 reference
Lucy Pipelining Example
PC-relative addressing.
x86 Instruction Manual
Comparing signed and unsigned
Resources on processors and optimization
Blog on x86 coding
How a CPU Works
Which Engineers Make the Most
Replace Hard Drives with DRAM
CS students in demand
Layout of a Program in Memory
Disk drive at work
Cache Associativity Cartoon
Ender's Game a Reality
Status of Moore's Law
Good PDP-8 reference
Nice intro to GDB
Thoughts on Endianess
x86 cheat sheet
Primer on Y86
Decimal to FP guide
x86 Assembly Guide
Moore's Law Dead?
Unix, C Hoaxes?
5 Things to Know
Indiana U. Career Overview
Jobs Prospects
Top 10 Jobs for CS Majors
Jobs with High Pay
Cities with Most CS Jobs