Assembly Language & Machine Code
Assembly is the most direct human-readable way to talk to a processor — one line per instruction, no translation left to guess.
Every processor executes machine code: streams of binary numbers that map directly to operations like 'add these two registers' or 'jump to this address.' Assembly language gives each of those operations a short, readable name (ADD, MOV, JMP) so a person can write and read them without memorizing binary patterns.
Very little modern electronics work is written entirely in assembly, but understanding it explains why a certain C statement takes several clock cycles, or why a compiler chooses one instruction over another. It's also still used in the tiniest slices of firmware — a bootloader, an interrupt handler, or a timing-critical loop.
Assembly is specific to a processor's instruction set: code written for one microcontroller family generally will not run on a different one without being rewritten, which is a big part of why higher-level languages took over for everyday development.
Different chip families use different instruction sets.
Used today mainly for startup code and tight timing loops.