Background
Programming
- Machine code is the raw bytes executed by a CPU; pain for humans to write
- Assembly is a text representation of machine code; easy for humans to write
- Programs called assemblers translates that text to machine code
- High-level languages (like C++) are translated by a compiler to assembly, and then translated to machine code
CPUs
- Executes sequential bytes of machine code (instructions) each cycle
- Clock speed (e.g., 4GHz) refers to the number of cycles/second
- Registers are fast (access time: <1 cycle), named values easily accessible in machine code. Extremely limited number (<32 per core)
- The bitness (e.g., 64-bit) usually refers to the number of bits in a normal register
- Main memory is slow (access time: 100s-10,000s cycles) and often difficult to access in machine code. Often 8-128GB total in a computer
- An Instruction Set Architecture (ISA) is an abstract model of a CPU describing supported instructions, available registers, and interactions with main memory E.g., x86-64 is the ISA Intel implements across its different concrete CPU hardware implementations
- Assembly language targets a particular ISA, not a specific CPU
- Complex Instruction sets (CISC) perform many operations per instruction, variable byte count / instruction
- For example: Load into register A from memory address in register X, multiple A by B, then add C
- Reduced Instruction sets (RISC) perform one operation per instruction, fixed byte count / instruction
- For Example: Add register A to B