Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Assembly language
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Low-level programming language family}} {{Use dmy dates|date=March 2020|cs1-dates=y}} {{Infobox programming language | name = Assembly language | logo = <!-- Filename only --> | logo caption = | screenshot = Motorola 6800 Assembly Language.png | screenshot caption = Typical ''secondary output'' from an assembler—showing original assembly language (right) for the [[Motorola]] [[MC6800]] and the assembled form | paradigm = [[Imperative programming|Imperative]], [[Unstructured programming|unstructured]], often [[metaprogramming]] (through [[Macro (computer science)|macros]]), certain assemblers are [[structured programming|structured]] or [[object-oriented programming|object-oriented]] | family = | designer = <!-- or: | designers = --> | developer = <!-- or: | developers = --> | released = {{start date and age|1947|df=yes}} | latest release version = | latest release date = <!-- {{start date and age|YYYY|MM|DD|df=yes}} --> | typing = None | scope = | programming language = | platform = | operating system = | license = | file ext = <code>.asm</code>, <code>.s</code>, <code>.S</code>, <code>.inc</code>, <code>.wla</code>, <code>.SRC</code> as well as several others depending on the assembler | file format = <!-- or: | file formats = --> | website = <!-- {{URL|www.example.com}} --> | implementations = | dialects = | influenced by = | influenced = }} In [[computer programming]], '''assembly language''' (alternatively '''assembler language'''<ref name="IBM_2014_ASM"/> or '''symbolic machine code'''),<ref name="Ohio_2016"/><ref name="Archer_2016"/><ref name="Streib 2020 p. ">{{cite book | last=Streib | first=James T. | title=Undergraduate Topics in Computer Science | chapter=Guide to Assembly Language | publisher=Springer International Publishing | publication-place=Cham | year=2020 | isbn=978-3-030-35638-5 | issn=1863-7310 | doi=10.1007/978-3-030-35639-2 | page= | s2cid=195930813 | quote=Programming in assembly language has the same benefits as programming in machine language, except it is easier.}}</ref> 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 [[computer architecture|architecture's]] [[machine code]] [[instruction set architecture|instructions]].<ref name="Saxon_1962"/> Assembly language usually has one [[Statement (computer science)|statement]] per machine instruction (1:1), but constants, [[Comment (computer programming)|comments]], assembler [[Directive (programming)|directives]],<ref name="Kornelis_2010"/> symbolic [[Label (computer science)|labels]] of, e.g., [[memory location]]s, [[processor register|registers]], and [[Macro instruction|macros]]<ref name="IBM_2014_Macro"/><ref name="IBM_2014_ASM"/> are generally also supported. The first assembly code in which a language is used to represent machine code instructions is found in [[Kathleen Booth|Kathleen]] and [[Andrew Donald Booth]]'s 1947 work, ''Coding for A.R.C.''.<ref>{{cite book |last1=Booth |first1=Andrew D |last2=Britten |first2=Kathleen HV |title=Coding for A.R.C. |date=1947 |publisher=Institute for Advanced Study, Princeton |url=https://albert.ias.edu/bitstream/handle/20.500.12111/7941/Booth_Britten_Coding_for_ARC_1947.pdf?sequence=1&isAllowed=y |access-date=4 November 2022}}</ref> Assembly code is converted into executable machine code by a [[Utility software|utility program]] referred to as an ''[[Assembler (computing)|assembler]]''. The term "assembler" is generally attributed to [[Maurice Wilkes|Wilkes]], [[David Wheeler (computer scientist)|Wheeler]] and [[Stanley Gill|Gill]] in their 1951 book ''[[The Preparation of Programs for an Electronic Digital Computer]]'',<ref name="Wilkes_1951"/> who, however, used the term to mean "a program that assembles another program consisting of several sections into a single program".<ref name="Fairhead_2017"/> 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 language<ref group=nb>Other than meta-assemblers</ref> is specific to a particular [[computer architecture]].<ref name="OS360_2011"/><ref name="Austerlitz 2003 pp. 326β360">{{cite book | last=Austerlitz | first=Howard | title=Data Acquisition Techniques Using PCs | chapter=Computer Programming Languages | publisher=Elsevier | year=2003 | doi=10.1016/b978-012068377-2/50013-9 | pages=326β360 | isbn=9780120683772 | quote=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.}}</ref><ref name="Carnes 2022">{{cite web |last=Carnes |first=Beau |date=2022-04-27 |title=Learn Assembly Language Programming with ARM |url=https://www.freecodecamp.org/news/learn-assembly-language-programming-with-arm/ |url-status=live |access-date=2022-06-21 |website=freeCodeCamp.org |language=en-US |quote=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.}}</ref> 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 (programming languages)|syntax]] for operating system calls, and most assembly languages can be used universally with any operating system,<ref group=nb>However, that does not mean that the assembler programs implementing those languages are universal.</ref> as the language provides access to all the real capabilities of the [[Processor (computing)|processor]], upon which all [[system call]] mechanisms ultimately rest. In contrast to assembly languages, most [[high-level programming language]]s are generally [[porting|portable]] across multiple architectures but require [[Interpreter (computing)|interpreting]] or [[Compiler|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."<ref name="Brooks_1986_NSB"/> 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 (programming language)|C]].<ref name="Anguiano_kernel_sloccount">{{Cite web | author-last=Anguiano | author-first = Ricardo | title=linux kernel mainline 4.9 sloccount.txt |url=https://gist.github.com/ricardoanguiano/18125b7eb3f26cf83724fb60662bdd2c |access-date=2022-05-04 |website=Gist |language=en}}</ref>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)