1. Knowledge of representing instructions in the computer: addressing modes; control instruction; procedure call instructions, RISC vs. CISC instruction; pointers vs. arrays; recursive procedures.
2. Knowledge of SIMD instructions/performance; reverse engineering (disassembling) binary executable code into assembly.
3. Ability to optimize compiler-generated assembly code to achieve best performance.
4. Knowledge of timing analysis of compiler-generated code vs. the optimized assembly code.
5. Ability to use CPU ID to obtain information on the processor and the features it supports.
6. Ability to compare architecture of MIPS, Intel, and Spark processors.
7. Knowledge of design and verification in simulation of various computer blocks such as ALU, IO, controller, registers and memory.