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.