assembly language
Deep down, a processor only understands machine code: long strings of bits that mean things like add register 6 to register 7 and put the answer in register 5. Reading or writing those bits by hand is miserable. Assembly language is a thin, human-readable skin over machine code. Instead of memorizing the bit pattern for add, you write a short mnemonic like add, with names for the registers and small numbers spelled out in decimal. It is the most direct way to speak the machine's own language while still typing words a person can read.
Each line of assembly almost always turns into exactly one machine instruction (this near one-to-one mapping is what makes it assembly rather than a high-level language). A line such as add a0, a1, a2 means take the value in register a1, add the value in register a2, and store the result in register a0. You also get labels (names for places in the code, like loop: or done:) and directives that tell the assembler about data, alignment, and sections. Because it mirrors the instruction set so closely, assembly is specific to one family of machines: RISC-V assembly will not run on an x86 chip, and vice versa.
Assembly matters because it is exactly where software touches the bare metal. You see precisely which registers are used, when memory is read, and how control jumps around. That makes it indispensable for understanding performance, for debugging at the lowest level, and for security work. Be honest, though: almost no one writes whole programs in assembly today, because compilers turn high-level code into assembly that is usually as fast as, or faster than, what a human would write. The lasting value is in reading it, not hand-writing it.
The C statement c = a + b might become, in RISC-V assembly: lw t0, 0(s0) # load a into t0 lw t1, 4(s0) # load b into t1 add t2, t0, t1 # t2 = a + b sw t2, 8(s0) # store result into c Four readable lines, four machine instructions.
One assembly line per machine instruction; the comments after # are for humans and vanish during assembly.
Assembly is not the same thing as machine code: assembly is the readable text, machine code is the raw bits. The assembler is the tool that turns one into the other.