Assembler
This article is about a computing term. See Assembler (disambiguation) for other meanings.
An assembler is a computer program for translating assembly language — essentially, a mnemonic representation of machine language — into object code. A cross assembler (see cross compiler) produces code for one processor, but runs on another.
As well as translating assembly instruction mnemonics into opcodes, assemblers provide the ability to use symbolic names for memory locations (saving tedious calculations and manually updating addresses when a program is slightly modified), and macro facilities for performing textual substitution — typically used to encode common short sequences of instructions to run inline instead of in a subroutine.
Assemblers are far simpler to write than compilers for high-level languages, and have been available since the 1950s. Modern assemblers, especially for RISC based architectures, such as MIPS, Sun SPARC and HP PA-RISC, optimize instruction scheduling to exploit the CPU pipeline efficiently.
High-level assemblers provide high-level-language abstractions such as advanced control structures, high-level procedure/function declarations and invocations, and high-level abstract data types including structures/records, unions, classes, and sets.
Hundreds of assemblers have been written; some notable examples include:
- ASEM-51 (http://plit.de/asem-51/) for the Intel MCS-51 (http://developer.intel.com/design/mcs51/) family of microcontrollers
- A56 - for Motorola DSP56000 DSPs (DSP56k series)
- FAP - for IBM 709, 7090 and 7094 mainframes
- FASM - open source IA-32 assembler
- GAS (GNU Assembler) - open source, available for many architectures
- HLASM (High Level Assembler) - for mainframes
- MACRO-11 - for DEC PDP-11
- MACRO-32 - for DEC VAX
- MASM (Macro/MS Assembler) - x86 assembler from Microsoft
- NASM (Netwide Assembler) - open source x86 assembler
- PAL-III - for DEC PDP-8
- TASM (Turbo Assembler) - x86 assembler from Borland
- RosASM- 32 bit Assembler (The Bottom Up Assembler which is free and GPLed)
- MI - "Machine Interface," the closest thing the AS/400 has to an assembler, which includes many features normally found only in high-level languages, and is actually the assembler language for a virtual machine.
It is important to note that each assembler has its own dialect within processor groups. Sometimes, some assemblers can read other assembler's dialect, for example, TASM can read old MASM code, but not the reverse. FASM and NASM have similar syntax, but each support different macros that could make them difficult to translate to each other. The basics are all the same, but the advanced features will differ.
Also, Assembly can be portable across different operating systems on the same type of CPU. Calling conventions between Windows and Linux differ slightly to none at all, and is possible to gain the same amount of portability between Linux and Windows as it is possible to gain the same amount of portability in higher languages, such as C++ and C. It is possible to even link assembly with C libraries, and write assembly code that compiles on any Operating System of the same CPU. Again, the portability is limited to the same CPU, and not across operating systems.
de:Assembler (Begriffsklärung) es:Ensamblador fr:Programme assembleur he:אסמבלר pl:Asembler ru:Ассемблер sv:Assembler