Assembly language
A notation with “a very strong correspondence between the instructions in the language and the architecture’s machine code instructions” — roughly one statement per instruction. What an assembler adds over hand-written binary is not abstraction but bookkeeping: mnemonics for opcodes, labels so addresses need not be computed by hand, directives, and macros for textual reuse. Kathleen Booth is credited with inventing assembly language from work begun in 1947; EDSAC’s bootstrap carried an assembler in late 1948, with David Wheeler credited as the first.
T2 — third-party encyclopaedic.
The floor of every other page in this wiki
Assembly is the case where the axes on programming-language all read null for the same reason. No memory management: the program is the memory management. No concurrency model, no runtime, no type system worth the name. Not one of those is an omission — they are the things a language provides instead of this, so the corpus’s four questions can be restated as “what does the language do that assembly makes you do yourself”.
It also inverts the portability story. Every other source here treats “runs anywhere” as a goal, whether through a document (c), a VM (java, clojure), or emitting somebody else’s language (typescript). Assembly is tied to one instruction set — x86, ARM — and a different processor family means a rewrite. Portability is exactly the thing high-level languages were invented to buy.
Where it survives, and the argument about whether it should
Kernels and bootloaders, embedded targets with no good compiler, interrupt handlers and drivers, inner loops in graphics and signal processing, reverse engineering, and cryptography that needs constant-time execution — the last being a case where the compiler’s freedom to optimize is itself the hazard. The proportions are documented rather than asserted: Linux 4.9 was about 2% assembly and over 97% C.
The standing debate is whether hand-written assembly still beats an optimizing compiler. The article’s answer is mostly no, with counterexamples, plus a deflating observation — modern CPUs sit idle much of the time behind cache misses and I/O, so the optimization usually is not where the time goes. That is the corpus’s first source arguing that a language-level performance claim is the wrong question, and it is worth holding next to every “fast” on a front page here.
Teaching is the other survival. Binary arithmetic, stack discipline, interrupts, memory layout and
compiler design are hard to learn without it, which is why it is in most CS and EE curricula — the
seam with ../engineering-education-wiki runs right here.
Related
programming-language · c · memory-management-model · type-system · java ·
synthesis · (cross-spoke: ../bit-manipulation-wiki for the instruction-level tricks,
../engineering-education-wiki for assembly as curriculum)