|
CS 314
Computer Organization
|
|
Course Description
Introduction to computer organization and instruction-set architecture -
digital logic design, binary arithmetic, design of central processing unit
and memory, machine-level programming. In addition to machine-level
programming, this course will provide an introduction to the C programming
language in the context of bitwise operations, memory management, pointers
to memory, and translation between C and the x86-64 instruction set
architecture.
Instructor
Eric D. Wills, Ph.D., eric@cs.uoregon.edu
Lectures and Labs
Three 50-minute lectures are delivered each week. Mandatory attendance at a
50-minute lab each week is also required.
Prerequisites
- CS 212 - Computer Science III
- MATH 231 - Elements of Discrete Mathematics I
Textbooks and Readings
- (Required) Computer Systems: A Programmer's Perspective, 3rd Edition
by David R. O'Hallaron Randal E. Bryant
Major Topics
- Bitwise ops, signed/unsigned integer representation: 3 lectures
- Floating-point number representation: 2 lectures
- C, x86-64 programming: 4 lectures
- x86-64 call stack, register conventions: 2 lectures
- Stack vs heap allocation, aggregate data types: 1 lecture
- Computer architecture: 4 lectures
- Compiler-based optimization: 3 lectures
- Memory-based optimization: 4 lectures
Expected Learning Outcomes
Upon successful completion of the course, students will be able to:
- Proficiently use bitwise operators to solve problems efficiently in C.
- Demonstrate knowledge of unsigned, signed, and floating-point number
encodings and binary, decimal, and hexadecimal representations.
- Demonstrate usage of a typical instruction set architecture and
understand the relationship between C code and data-transfer,
arithmetic, and control instructions.
- Demonstrate usage of the call stack, including call/return
instructions, argument passing, local scope, and register conventions.
- Demonstrate knowledge of stack vs heap allocation, array and struct
data types.
- Comprehend the basic functionality of a modern pipelined
microprocessor.
- Demonstrate how various optimization techniques affect assembly code
and therefore program performance.
- Understand the modern memory hierarchy, including caching, and how it
affects performance.
Acquired Skills
Upon successful completion of the course, students will have acquired
the following skills:
- be able to use bitwise operations to efficiently solve problems in C.
- be able to write iterative and recursive algorithms in C and assembly
language.
- be able to debug C code using gdb, debug assembly code using an
interactive assembler/debugger.
- be able to optimize C code with respect to instruction counts,
unpredictable branches, and memory-access patterns.
- be able to implement a basic direct-mapped caching solution.
Course Requirements and Grading
Grading will be based on the following criteria:
Percentage |
Component |
10 |
Attendance quizzes |
15 |
Labs |
35 |
Assignments |
20 |
Midterm exam |
20 |
Final exam |
CS majors and minors must take CS 314 graded; others may take it graded
or P/N.
Grading Scale
A |
A+ >= 97.00* |
A 93.00 - 96.99 |
A- 90.00 - 92.99 |
B |
B+ 87.00 - 89.99 |
B 83.00 - 86.99 |
B- 80.00 - 82.99 |
C |
C+ 77.00 - 79.99 |
C 73.00 - 76.99 |
C- 70.00 - 72.99 |
D |
D+ 67.00 - 69.99 |
D 63.00 - 66.99 |
D- 60.00 - 62.99 |
F |
F 0.00 - 59.99 |
|
|
*Eligibility for 'A+' grades will be based on exam scores; only students
with exam scores in the top 5% of the course will be considered.