Turing complete: instructions are data, one machine can do anything Simulator: int[8] registers; int pc; int[] memory; while(true) { instruction inst = memory[pc]; pc += 1; goto End; switch(inst) { case "add x y": register[y] += register[x]; break case "jump x": pc = register[x]; break; ... } End: print("Ha ha! We skipped the switch completely!"); } Program Registers: 8 of them each 4 bytes long each can be addressed in parts %eax - 4 byte %ax - 2 byte %ah %al - 1 byte Special-purpose registers: PC - program counter (what instruction to read next) Condition codes when we do math, some special registers are set (like "operands were equal") when we goto, we can use operators that care about the CCs jge address ; will only jump if the CCs suggest the last comparison was >= Jumps - methods/functions/subroutines/procedures/if/while/do/switch Moves - = symbol Math - math (+-*/%&|^~! and so on) There are no types (almost) in assembly But there is a stack... see drawing