CS-40 - Machine Structure and Assembly Language Programming
Storage of information in computer memories, including:
Bits and their significance
Differing interpretations of bits as numbers characters, etc
Encodings of C language types on AMD 64 architectures including both unsigned and signed (two's complement) representations; floating-point representations, etc.
Bit masking operations, use of flags, and packing of multiple values into a single word
Conversions between hex, binary and decimal representations
Big endian and little endian storage conventions: you should be able to explain the differences, and to predict the bytes that will actually be stored, e.g. for some given integer or float
Interfaces and abstraction: why they are important, and programming techniques for implementing them
Use of void pointers and incomplete structures for information hiding and abstraction
Hansons's conventions for interface and ADT programming
Polymorphism, including boxed and unboxed representations
Invariants and why they matter
The representation of programs in memory
Code (text) segments, static initialized and uninitialized data, heap, stack, etc.
The phases of program building: preprocessing, compilation, assembing, linking, etc. and how they work to create an executable program
Locality and caching
Assembler programming for x86-64 (AMD 64)
Emulation and the Universal Machine
Refactoring to improve code structure
Performance and optimization
Strategies for testing
Valgrind
qcachegrind