ICS 51 - Introduction to Computer Organization

2019 Fall 2020 Winter 2020 Fall 2021 Winter 2021 Fall 2022 Winter 2022 Fall 2023 Fall

This course is a first introduction to computer system organization and assembly language programming. It examines a computer system from two different points of view: a programmer’s view and a computer designer’s view.

From the programmer’s view, the course describes how programs written in a high-level language, such as C or Java, get translated into machine (or assembly language) instructions which the hardware executes directly. It also explains why a general-purpose computer is designed the way it is and the influence of electronics on this design and its performance. From the designer’s view, the course introduces the basic elements used in designing a computer, such as logic elements, functional units, memory subsystems, and I/O and the control for these subsystems. It presents a basic control unit which makes it possible for the computer to execute programs.

Our study of a computer is performed based on abstraction levels. The relationship between different levels is hierarchical and helps abstract away the details of the levels below. This grouping into a level and its abstraction to a higher level establishes a hierarchical relationship between elements of the computer system. This relationship aids in understanding the hardware and its programming by breaking it into more easily understandable sub-components.

In our study of computer organization, the following levels and their relationships are discussed (top to bottom):

  • Application programs
  • Assembly Language programs
  • Instruction Set Architecture
  • Computer Organization
  • Digital Logic
  • Hardware

Topics covered include:

  • Assembly Language Programming (MIPS)
  • Number Representations: Signed Magnitude, 1’s complement, 2’s complement, Floating Point
  • Digital Logic Design and Basic Logic Gates, including Multiplexors and Decoders
  • Adders and Arithmetic Logic Units
  • Single-cycle Datapath
  • Memory Organization

MIPS Assembly Labs & Programming Assignments cover the following topics:

  • Basic Instruction Set: Register Purpose/Usage, Syscalls
  • Function Calls (parameter passing through registers and stack) and Activation Records
  • Register Conventions
  • Memory Organization and Access
  • Stack Management and Usage
  • 1D and 2D arrays (Row-major vs Column-major order)
  • Memory-mapped I/O (MMIO) and File I/O

Past Projects include:

  • Number Base conversions and bit manipulation
  • String Manipulation functions
  • Cryptography Cipher and Compression schemes
  • Recursive functions
  • VT100 display with ANSI escape codes
  • 2D Board-based games: Minesweeper, Battleship, Wordle, Chess, Go