Comparison of assemblers
This is a list of assemblers: computer programs that translate assembly language source code into binary programs. Some assemblers are components of a compiler system for a high level language and may have limited or no usable functionality outside of the compiler system. Some assemblers are hosted on the target processor and operating system, while other assemblers (cross-assemblers) may run under an unrelated operating system or processor. For example, assemblers for embedded systems are not usually hosted on the target system since it would not have the storage and terminal I/O to permit entry of a program from a keyboard. An assembler may have a single target processor or may have options to support multiple processor types. Very simple assemblers may lack features, such as macros, present in more powerful versions.
As part of a compiler suite
- GNU Assembler (gas): GPL: many target instruction sets including ARM architecture, Atmel AVR, x86, x86-64, Freescale 68HC11, Freescale v4e, Motorola 680x0, MIPS, PowerPC, IBM System z, TI MSP430, Zilog Z80.
- SDAS (fork of ASxxxx Cross Assemblers and part of the Small Device C Compiler project): GPL: several target instruction sets including Intel 8051, Zilog Z80, Freescale 68HC08, PIC microcontroller.
- The Amsterdam Compiler Kit (ACK) targets many architectures of the 1980s, including 6502, 6800, 680x0, ARM, x86, Zilog Z80 and Z8000.
- LLVM targets many platforms, however emits no per-target assembly language, instead more high-level typed intermediate representation assembly-like language used.
- Some others self-hosted native-targeted language implementations (like Go, Free Pascal, SBCL) have their own assemblers with multiple targets. They may be used for inline assembly inside language, or even included as a library, but not always suitable for standalone application - no command-line tool exists, or only intermediate representation used as a source, or support for targets very limited.
Single target assemblers
6502 assemblers
680x0 assemblers
Assembler | Developer | FOSS | License | Instruction set | Host platform | Development active |
---|---|---|---|---|---|---|
ASM-One Macro Assembler | Rune Gram-Madsen | No | Free | Motorola 680x0 | Commodore Amiga | No |
GNU Assembler | GNU Project | Yes | Free | Motorola 680x0 | various | |
vasm | Volker Barthelmann, Frank Wille | No | Proprietary | Motorola 680x0 | various | Yes |
rmac | James Hammons, George Nakos, Landon Dyer | Yes | Free | MOS Technology 6502 | Linux, Windows, macOS | Yes |
ARM assemblers
Assembler | Developer | FOSS | License | Instruction set | Host platform |
---|---|---|---|---|---|
GNU Assembler | GNU Project | Yes | Free | ARM | various |
vasm | Volker Barthelmann, Frank Wille | No | Free | ARM | various |
Mainframe Assemblers
POWER, PowerPC, and Power ISA assemblers
Assembler | Developer | FOSS | License | Instruction set | Host platform |
---|---|---|---|---|---|
GNU Assembler | GNU Project | Yes | GNU GPL | POWER, PowerPC 74xx, PowerPC 970 | All platforms supported by GNU Binutils |
IBM AIX assembler | IBM | No | Proprietary | POWER | IBM AIX |
vasm | Volker Barthelmann, Frank Wille | No | Free | POWER, 40x, 440, 460, 6xx, 7xx, 7xxx, 860, Book-E, e300 and e500 | various |
x86 assemblers
- ^ Part of the MINIX 3 source tree, but without obvious development activity.
- ^ Developed by Interactive Systems Corporation in 1986 when they ported UNIX System V to Intel iAPX286 and 80386 architectures. Archetypical of ATT syntax because it was used as reference for GAS. Still used for The SCO Group's products, UnixWare and OpenServer.
- ^ Home site appears inactive. Also offered as part of FreeBSD Ports, in bcc-1995.03.12.
- ^ Active, supported, but unadvertised.
- ^ Developed in 1982 at MIT as a cross-assembler, it was picked up by Interactive Systems Corporation in 1983 when they developed PC/IX under IBM contract. The syntax was later used as base for ACK assembler, to be used in MINIX 1.x toolchain.
- ^ RosAsm project on WebArchive.org.
- ^ Part of the C++Builder Tool Chain, but not sold as a stand-alone product, or marketed since the CodeGear spin-off; Borland was still selling it until then. Version 5.0, the last, is dated 1996.
- ^ Turbo Assembler was developed as Turbo Editasm by Uriah Barnett from Speedware Inc (Sacramento, CA) between 1984 and 1987, then later sold to, or marketed by, Borland as their Turbo Assembler.
- ^ Last stable version 1.3.0 was released in August 2014, and low maintenance since then: https://github.com/yasm/yasm
x86-64 assemblers
Assembler | Developer | Operating system | FOSS | License | Development active |
---|---|---|---|---|---|
FASM | Tomasz Grysztar | DOS, Unix-like, Windows | Yes | BSD | Yes |
GAS | GNU Project | DOS, OS/2, Unix-like, Windows | Yes | GNU GPL | Yes |
MASM | Microsoft | DOS, OS/2, Windows|Xenix | No | Commercial | Yes |
NASM | Simon Tatham, Julian Hall, Hans Peter Anvin, et al. | DOS, Linux, macOS, OS/2, Windows | Yes | BSD | Yes |
Open Watcom Assembler | Watcom | DOS, FreeBSD, Linux, OS/2, Windows | approved by OSI, but not by FSF | Sybase Open Watcom Public | Yes |
POASM | Windows, Windows Mobile | No | Freeware | Yes | |
TCCASM | Fabrice Bellard | Unix-like, Windows | Yes | GNU LGPL | Yes |
Yasm[3] | DOS, Unix-like, Windows | Yes | BSD | Yes |
Z80 assemblers
Assembler | Developer | Operating system | FOSS | License | Development active |
---|---|---|---|---|---|
Microsoft MACRO-80 | Microsoft | CP/M, ISIS-II, TRSDOS, TEKDOS, MSX-DOS | No | Commercial | No |
Zeus Assembler | Crystal Computing | No | Commercial | No | |
z80asm | Unix-like, Windows | Yes | GNU GPL | No | |
sjasmplus | Unix-like, Windows | Yes | BSD | Yes |
Other single target assemblers
Assembler | Developer | FOSS | License | Instruction set | Host platform |
---|---|---|---|---|---|
Autocoder | IBM | Free | IBM 1400 series | IBM 1401, 1440, 1460 | |
Babbage | No | Proprietary | GEC 4000 series | GEC 4000 series | |
MACRO-10 | Digital Equipment Corporation | Free | PDP-10 | PDP-10 | |
MACRO-11 | Digital Equipment Corporation | Free | PDP-11 | PDP-11 | |
vasm | Volker Barthelmann, Frank Wille | No | Free | Zilog Z80, Motorola 6800 family | various |
GPASM | James Bowman, Craig Franklin, David Barnett | Yes | GNU GPL | PIC microcontroller | many |
MIPS | Free | MIPS | MIPS | ||
Symbolic Optimal Assembly Program (SOAP) | IBM | Free | IBM 650 | IBM 650 | |
Technical Assembly System (TASS) | Free | IBM 650 | IBM 650 | ||
Symbolic Programming System (SPS)[4] | Gary Mokotoff | Free | IBM 14xx, 1620, 1710 | IBM 1401, 1440, 1460, 1620, 1710 | |
ASMB, ASBL, NSBL - Numeric op codes, used for 1900 Operating System Executive |
No | Proprietary | ICL 1900 | ICL 1900 | |
GINerator mnemonic opcodes, used for GEORGE (operating system) |
No | Proprietary | ICL 1900 | ICL 1900 | |
PLAN mnemonic opcodes, used for commercial 1900 programs |
No | Proprietary | ICL 1900 | ICL 1900 | |
Single Address Assembly Language (SAAL) | Free | UNIVAC 1005 | UNIVAC 1005 | ||
Sleuth | Free | UNIVAC 1107 | EXEC, EXEC II, EXEC 8 | ||
Meta Assembler (MASM) | Free | UNIVAC 1100/2200 series | UNIVAC EXEC 8 | ||
UTMOST | ? | UNIVAC III | UNIVAC III | ||
Other
Assembler | Developer | FOSS | License | Instruction set | Host platform |
---|---|---|---|---|---|
The Macroassembler AS | Alfred Arnold | Free | 29xxx, AVR, 65816, ACE, F2MC-8L, F2MC-16L, HMCS400, 6301, 6309, H8/300(H), H8/500, SH7000 / SH7600 / SH7700, HuC6280, PPC403GA, 4004/4040, 8008, MCS-48, MCS-41, MCS-51, MCS-251, MCS-96/196/296, 8080/8085, [ | Win32, DOS/DPMI, DOS (no longer maintained), OS/2 (no longer maintained), Linux | |
Meta-Symbol | Scientific Data Systems (SDS) | Free | SDS Sigma series | BTM, UTS, CP-V | |
Meta Assembler (MASM) | UNIVAC | Free | UNIVAC 1100/2200 series | UNIVAC EXEC 8 | |
ASxxxx Cross Assemblers | Alan R. Baldwin | Yes | GNU GPL | 1802, S2650, SC/MP, MPS430, 6100, 61860, 6500, 6800(6802/6808), 6801(6803/HD6303), 6804, 6805, 68HC(S)08, 6809, 68HC11, 68HC(S)12, 68HC16, 740, 78K/0, 78K/0S, 8008, 8008S, 8048(8041/8022/8021), 8051, 8085(8080), AT89LP, 8X300(8X305), DS8XCXXX, AVR, EZ80, F2MC8L/FX, F8/3870, Game Boy(sm83), H8/3xx, Cypress PSoC(M8C), PIC, Rabbit 2000/3000, ST6, ST7, ST8, Z8, Z80(HD64180), and Z280 series | Win32, DOS, Linux, Android |
Notes and references
- Modification of IBM's Assembler F
- The Yasm Modular Assembler Project
- The Yasm Modular Assembler Project
- SPS is actually a family of assemblers for disparate machines.