The core theme of this course is “What really happens when software runs?” Provides an overview of C and assembly language programming and reading skills, and how the fundamental parts of C programs map to assembly code and binary representations, and how this assembly is determined by the Instruction Set Architecture of a machine. Introduces functional organization and architecture of digital computers and explores basic systems programming skills and tools to measure and improve program performance.
Course Outcomes
On completion of this course students should be able to:
- Describe the major components of computer architecture; explain their purposes and interactions and the instruction execution cycle.
- Describe a basic instruction set architecture, including the arithmetic, logic, and control instructions; user and control registers; and addressing modes.
- Do simple arithmetic in hexadecimal, decimal, and binary notation, and convert among these notations.
- Explain how data types such as integers, characters, pointers, and floating-point numbers are represented and used at the assembly level.
- Write C language programs that use control structures, functions, IO, arrays, and dynamic memory.
- Describe each step of the compilation process by which C language programs are transformed into machine code.
- 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 same.
- Demonstrate and use a debugger to analyze program flow, inspect register and stack contents.
- Identify and fix performance issues in C programs that are caused by machine level concepts.
- Explain how the information in this course is important within the overall context of computer science.
Prerequisite Courses