The next level up from machine code, part of a family of low level languages, converted to machine code using an assembler, uses mnemonics rather than binary which makes it easier to use than direct machine code, processor-specific as it directly interacts with the CPU's special purpose registers