CS 205 System Programming and Architecture

Introduces how high-level software runs on a computer system. Covers C programming and the assembly that C code becomes. Presents the fundamentals of computer architecture and how instructions and data are represented at the machine level. Provides experience analyzing compiled code to build necessary skills for future work in cybersecurity, operating systems, compilers, and other CS topics involving low-level computation.

Credits

4

Prerequisite

CS 161C or CS 161N or CS 161P (or CS 133C or CS 133N or CS 133P)  

Course Learning Outcomes

Upon successful completion of this course, the student will be able to:
1. Describe the major components of computer architecture; explain their purposes and interactions and the instruction execution cycle
2.Describe a basic instruction set architecture, including the arithmetic, logic, and control instructions; user and control registers; and addressing modes
3. Do simple arithmetic in hexadecimal, decimal, and binary notation, and convert among these notations
4. Explain how data types such as integers, characters, pointers, and floating point numbers are represented and used at the assembly level
5. Write C language programs that use control structures, functions, IO, arrays, and dynamic memory
6. Describe each step of the compilation process by which C language programs are transformed into machine code
7. Explain how high-level programming constructs such as arrays, structures, loops, and stack-based function calls are implemented in machine code. Recognize and reverse engineer the same
8. Demonstrate and use a debugger to analyze program flow, inspect register and stack contents
9. Identify and fix performance issues in C programs that are caused by machine level concepts
10. Explain how the information in this course is important within the overall context of computer science