Course Overview
Course Goals
- Familiarity with machine-level programming, at a level sufficient to understand and modify compiler output, and to write from scratch small programs using assembly.
-
Understand binary data representations
- chars: ASCII/Unicode
- binary integer representation
- floating point binary formats
- machine language instruction design
-
Understanding high-level hardware including:
- memory- and port-mapped I/O
- interrupts
- MMUs, memory segmentation
- memory cache design
-
Understand low-level OS-level software design
- RTS organization
- Process space layout
-
Appreciation of optimization/speed issues, including:
- avoiding pipeline breaks
- coding to optimize cache use
- floating point coprocessors
- Mastery of Unix commandline interface (since we're using Raspberry Pis).
Course Requirements
- Working Raspberry Pi system with Unix
-
Basic C experience
- Ifs, loops, variables, printf, scanf
Course Assignments
- Frequent assignments involving debugging and optimizing assembly code
- In practice, writing very small assembly blocks, or editing/enhancing compiler-generated assembly is more common
- Additional assignments optimizing C code, especially for cache utilization.
- Possible extra credit assignment using CUDA processor