Primary
Assembly Language ○꠹|Definition|1st|20260110205401-00-⌔
Assembly language
In computing, assembly language (alternatively assembler language1 or symbolic machine code),234 often referred to simply as assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence between the instructions in the language and the architecture’s machine code instructions.5 Assembly language usually has one statement per machine code instruction (1:1), but constants, comments, assembler directives,6 symbolic labels of, e.g., memory locations, registers, and macros71 are generally also supported.
The first assembly code in which a language is used to represent machine code instructions is found in Kathleen and Andrew Donald Booth’s 1947 work, Coding for A.R.C..8 Assembly code is converted into executable machine code by a utility program referred to as an assembler. The term “assembler” is generally attributed to Wilkes, Wheeler and Gill in their 1951 book The Preparation of Programs for an Electronic Digital Computer,9 who, however, used the term to mean “a program that assembles another program consisting of several sections into a single program”.10 The conversion process is referred to as assembly, as in assembling the source code. The computational step when an assembler is processing a program is called assembly time.
Because assembly depends on the machine code instructions, each assembly language11 is specific to a particular computer architecture such as x86 or ARM.121314
Sometimes there is more than one assembler for the same architecture, and sometimes an assembler is specific to an operating system or to particular operating systems. Most assembly languages do not provide specific syntax for operating system calls, and most assembly languages can be used universally with any operating system,15 as the language provides access to all the real capabilities of the processor, upon which all system call mechanisms ultimately rest. In contrast to assembly languages, most high-level programming languages are generally portable across multiple architectures but require interpreting or compiling, much more complicated tasks than assembling.
In the first decades of computing, it was commonplace for both systems programming and application programming to take place entirely in assembly language. While still irreplaceable for some purposes, the majority of programming is now conducted in higher-level interpreted and compiled languages. In “No Silver Bullet”, Fred Brooks summarised the effects of the switch away from assembly language programming: “Surely the most powerful stroke for software productivity, reliability, and simplicity has been the progressive use of high-level languages for programming. Most observers credit that development with at least a factor of five in productivity, and with concomitant gains in reliability, simplicity, and comprehensibility.”16
A lot of people say that assembly is a hard computer language to learn because of its complex structure and understanding of computer architecture, such as how the CPU works, how memory is addressed and managed, or how to read and write to IO. It may be hard at the start if you’ve only ever used high-level languages before. Source:17
Today, it is typical to use small amounts of assembly language code within larger systems implemented in a higher-level language, for performance reasons or to interact directly with hardware in ways unsupported by the higher-level language. For instance, just under 2% of version 4.9 of the Linux kernel source code is written in assembly; more than 97% is written in C.18
Printed 2026-06-28.
(echo:: @ ᯤ)
Link to original Footnotes
“Assembler language”. High Level Assembler for z/OS & z/VM & z/VSE Language Reference Version 1 Release 6. IBM. 2014 [1990]. SC26-4940-06. ↩ ↩2
“Assembly: Review” (PDF). Computer Science and Engineering. College of Engineering, Ohio State University. 2016. Archived (PDF) from the original on 2020-03-24. Retrieved 2020-03-24. ↩
Archer, Benjamin (November 2016). Assembly Language For Students. North Charleston, South Carolina, US: CreateSpace Independent Publishing. ISBN 978-1-5403-7071-6. Assembly language may also be called symbolic machine code. ↩
Streib, James T. (2020). “Guide to Assembly Language”. Undergraduate Topics in Computer Science. Cham: Springer International Publishing. doi:10.1007/978-3-030-35639-2. ISBN 978-3-030-35638-5. ISSN 1863-7310. S2CID 195930813. Programming in assembly language has the same benefits as programming in machine language, except it is easier. ↩
Saxon, James A.; Plette, William S. (1962). Programming the IBM 1401, a self-instructional programmed manual. Englewood Cliffs, New Jersey, US: Prentice-Hall. LCCN 62-20615. (NB. Use of the term assembly program.) ↩
Kornelis, A. F. (2010) [2003]. “High Level Assembler – Opcodes overview, Assembler Directives”. Archived from the original on 2020-03-24. Retrieved 2020-03-24. ↩
“Macro instructions”. High Level Assembler for z/OS & z/VM & z/VSE Language Reference Version 1 Release 6. IBM. 2014 [1990]. SC26-4940-06. ↩
Booth, Andrew D; Britten, Kathleen HV (1947). Coding for A.R.C. (PDF). Institute for Advanced Study, Princeton. Retrieved 2022-11-04. ↩
Wilkes, Maurice Vincent; Wheeler, David John; Gill, Stanley J. (1951). The preparation of programs for an electronic digital computer (Reprint 1982 ed.). Tomash Publishers. ISBN 978-0-93822803-5. OCLC 313593586. ↩
Fairhead, Harry (2017-11-16). “History of Computer Languages - The Classical Decade, 1950s”. I Programmer. Archived from the original on 2020-01-02. Retrieved 2020-03-06. ↩
Other than meta-assemblers ↩
“How do assembly languages depend on operating systems?”. Stack Exchange. Stack Exchange Inc. 2011-07-28. Archived from the original on 2020-03-24. Retrieved 2020-03-24. (NB. System calls often vary, e.g. for MVS vs. VSE vs. VM/CMS; the binary/executable formats for different operating systems may also vary.) ↩
Austerlitz, Howard (2003). “Computer Programming Languages”. Data Acquisition Techniques Using PCs. Elsevier. pp. 326–360. doi:10.1016/b978-012068377-2/50013-9. ISBN 9780120683772. Assembly language (or Assembler) is a compiled, low-level computer language. It is processor-dependent since it basically translates the Assembler’s mnemonics directly into the commands a particular CPU understands, on a one-to-one basis. These Assembler mnemonics are the instruction set for that processor. ↩
Carnes, Beau (2022-04-27). “Learn Assembly Language Programming with ARM”. freeCodeCamp.org. Retrieved 2022-06-21. Assembly language is often specific to a particular computer architecture so there are multiple types of assembly languages. ARM is an increasingly popular assembly language. ↩
However, that does not mean that the assembler programs implementing those languages are universal. ↩
Brooks, Frederick P. (1986). “No Silver Bullet—Essence and Accident in Software Engineering”. Proceedings of the IFIP Tenth World Computing Conference. pp. 1069–1076. ↩
https://www.technology.org/how-and-why/is-assembly-language-difficult-to-learn/#:~:text=Assembly%20language%20is%20indeed%20difficult,used%20high%2Dlevel%20languages%20before. ↩
Anguiano, Ricardo. “linux kernel mainline 4.9 sloccount.txt”. Gist. Retrieved 2022-05-04. ↩
Secondary
• • •