Demonstrate ability to understand and program with assembly language.
Demonstrate ability to use a C compiler, an assembler, a disassembler, a debugger, and CPU emulators to develop, debug, test, analyze and optimize programs.
Know how to write more reliable, secure, and efficient software with an understanding of how the software is executed on the underlying architecture.
Demonstrate ability to modify a CPU design to add instructions and to improve the overall efficiency of execution.
Demonstrate understanding of the various abstractions used to manage complexity in computer systems and support application concurrency. e.g. system calls and virtual memory.
Know how application performance can be affected in a target system by memory hierarchy design factors such as cache size, bus width, clock rate and memory speed.
Demonstrate how vulnerabilities in software coding can be exploited in computer security attacks (eg. buffer overflow).
Demonstrate understanding of how peripherals are accessed in a computer system, e.g. polling or interrupt driven I/O.