Contents

Assignments

Lecture preparation is on the Topics page.

Lab preparation is on the Lab page.

Intros: Introduce yourself.
  • assign: Tuesday 6 September
  • due: Wednesday 7 September
  • Gates: Work with digital logic gates.
  • assign: Tuesday 6 September
  • due: Monday 12 September
  • Zero: Starting from scratch in CS 240.
  • assign: Sunday 11 September
  • due: Thursday 15 September
  • Bits: Manipulate data with bit-level operations.
  • assign: Thursday 15 September
  • checkpoint: Monday 19 September
  • due: Thursday 22 September
  • Circuits: Grow logic circuits and processor components.
  • assign: Thursday 22 September
  • due: Monday 3 October
  • Arch: Inspect and manipulate memories and a processor architecture.
  • assign: Monday 3 October
  • due: Thursday 13 October
  • Pointers: Build a command parser with C pointers and arrays.
  • assign: Tuesday 18 October
  • due: Thursday 27 October
  • x86: Reverse engineer x86 code to navigate an adventure.
  • assign: Thursday 27 October
  • due: Tuesday 8 November
  • Buffer: Smash the stack to understand calling conventions and security concerns.
  • assign: Tuesday 8 November
  • due: Thursday 17 November
  • Malloc: Build a memory allocator.
  • assign: Monday 28 November
  • checkpoint: Wednesday 7 December
  • due: Friday 16 December
  • A note on assignments as of Fall 2020:

    Assignments in versions of this course from Spring 2015 through Spring 2020 integrated the theme of different courses at a school of magic from a popular book series, as we gradually showed that there is no magic inside a computer. The instructors decided it was time to remove this theme in Fall 2020. If you encounter any lingering traces that we missed, please let us know.

    Exams

    HW Exam: Computational Building Blocks
    ISA Exam: Hardware-Software Interface

    Extra Fun

    Parts of these assignments will be used in lab activities, but completing them in full is not required this semester. They are linked here if you are curious to explore further.

    • Cache: Use performance impact to reveal cache dimensions.
    • Shell: Build a shell to explore the process model.