COMP-3003 Details
COMP 3003 - Comp. Org (Foundation Course)
Course description
This course covers the overall structure of computers, and how to program a CPU. Specific topics are:
- Components of a generic computer, and how they work together
- Motivation for binary usage, number bases (decimal and binary)
- Binary arithmetic: addition, subtraction
- Number representation in computers, signed vs. unsigned, two’s complement
- Binary operations: multiplication, division, bitwise
- Other numeric representations, hexadecimal, floating point (IEEE-754)
- CPU operation details, instruction set architecture, registers and memory access
- Assembly language 1: MARIE, opcodes, arguments, registers
- Building simple programs MARIE, memory access, memory layout
- Program stack, stack implementation, and stack frames for functions
- Assembly language 2: Y86, introduction, ISA overview
- Writing/reading programs in Y86, using the built-in stack operations, function implementation
- Caching and memory hierarchy
- Virtual memory, paging and segmentation
- Pipelining in CPUs, how it works, stalls and recovery
- Putting it all together, HLL to Assembly and Back Again (x86)
Course learning objectives
Students that complete this course should have a strong foundational understanding of how computers work down to the CPU level. They will then be able to do the following:
- Given a CPU ISA, be able to translate binary programs into high level assembly and understand basic program operation.
- Given a CPU ISA, implement basic programs in high level assembly and convert them into hexadecimal or binary.
- Understand how memory access is performed in a CPU, identify immediate, relative and offset addressing.
- Identify stack operations and stack frames in memory, understand how values are passed to/from functional blocks using the stack and/or registers.
- Be able to convert between arbitrary positional number systems (e.g., hexadecimal, binary and decimal)
- Know how numbers are stored in computers, and their associated limitations and tradeoffs, such as the difference between signed and unsigned representations, and floating point.
- Explain memory hierarchy in modern computers and the reason for various levels of memory, the different types of caches and how cache lookups are performed.
- Understand the reasons for virtual memory, the difference between paging and segmentation, and the relative strengths and weaknesses of each.
- Fundamentally grasp how programs are stored, loaded, and executed on a CPU.
- Describe how a program is transformed from a text file in a high level language into binary code the a CPU can execute.