Comparison of assemblers

Last updated

This is an incomplete comparison of assemblers . Some assemblers are components of a compiler system for a high-level programming 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.

Contents

As part of a compiler suite

Single target assemblers

6502 assemblers

AssemblerDeveloper FOSS License Instruction set Host platform
Atari Assembler Editor Shepardson Microsystems No Proprietary MOS Technology 6502 Atari 8-bit family
Atari Macro Assembler Shepardson Microsystems No Proprietary MOS Technology 6502 Atari 8-bit family
EDASM Apple Computer No ? MOS Technology 6502 Apple DOS 3.x
k2asm Andre Kaesmacher, Hauke Brandes, Börje SielingYes Artistic License MOS Technology 6502 Linux, Windows, macOS, possibly other Unices
Lisa Randall Hyde No Proprietary MOS Technology 6502 Apple II series
MAC/65 Optimized Systems Software No Proprietary MOS Technology 6502, WDC 65C02 Atari 8-bit family
Merlin Glen Bredon Yes Public-domain MOS Technology 6502, WDC 65C02 Apple II series
ORCA/M The Byte Works No Proprietary, Free for non-commercial use MOS Technology 6502, WDC 65C02, WDC 65C816 ProDOS 8/16, GS/OS
RMAC James Hammons, George Nakos, Landon DyerYesFree MOS Technology 6502 Linux, Windows, macOS
SynAssembler Synapse Software No Proprietary MOS Technology 6502 Atari 8-bit family
VASM Volker Barthelmann, Frank WilleNoFree MOS Technology 6502 various
xa65 Cameron Kaiser, André FachatYesGPL MOS Technology 6502, WDC 65C02, WDC 65C816 Linux, various
XASM Piotr FusikYesFree MOS Technology 6502 Linux, Windows, macOS

680x0 assemblers

AssemblerDeveloper FOSS License Instruction set Host platform Development active
ASM-One Macro Assembler Rune Gram-Madsen NoFree Motorola 680x0 Commodore Amiga No
GAS GNU Project YesFree Motorola 680x0 variousYes
VASMVolker Barthelmann, Frank WilleNo Proprietary Motorola 680x0 variousYes
RMAC James Hammons, George Nakos, Landon DyerYesFree Motorola 680x0, MOS Technology 6502 Linux, Windows, macOS Yes

ARM assemblers

AssemblerDeveloper FOSS License Host platform ARM64
GAS GNU Project Yes GNU GPL variousYes
TCCASM Fabrice Bellard Yes GNU LGPL Unix-like, Windows Yes
VASMVolker Barthelmann, Frank WilleNoFreevariousNo

Mainframe Assemblers

AssemblerDeveloper FOSS License Instruction set Host platform
Assembly Language for Multics (ALM)Yes MIT GE-645
Honeywell 6180
GE-645
Honeywell 6180
705 Autocoder IBM Free IBM 705
1410/7010 OS Autocoder IBM Free IBM 1410
7010
IBM 1410 Processor Operating System
(1410-PR-155)
7070/7074 Autocoder IBM Free IBM 7070
IBM 7072
7074
7080 Autocoder III IBM Free IBM 7080 IBM 7058 Processor
COMPASS Control Data Corporation Free CDC lower 3000 series CDC MASTER
MSOS
RTS OS
SCOPE
COMPASS Control Data Corporation Free CDC upper 3000 series CDC SCOPE
COMPASS Control Data Corporation Free CDC 6000 series
7600
Cyber 70, 170
CDC Kronos
NOS
NOS/BE
SCOPE
Fortran Assembly Program (FAP)Free IBM 709, 704x, 709x Fortran Monitor System, IBSYS
GCOS Macro Assembly Program (GMAP)Free GE-600 series, Honeywell 6000 series GCOS
Macro Assembly Program (MAP)Free IBM 709, 704x, 709x IBSYS/IBJOB on 709, 704x, 709x
Symbolic Assembly Program (SAP)Free IBM 704 IBM 704
IBM Basic Assembly Language (BAL) IBM Free IBM System/360 IBM BPS/360
ASSIST Penn State University Public Domain Free IBM System/360 MVS
UNIVAC VS/9 Assembler Unisys Proprietary Univac 9060 and 9070 (Similar to IBM System/370) VS/9
BS2000 Assembler H Fujitsu Proprietary Fujitsu Technology Series SE (Similar to IBM System/370) BS2000
z390 Portable Mainframe Assembler Don Higgins GPL FreeSimulated IBM System/370Simulated MVS
IBM High-Level Assembler (HLASM) IBM Proprietary IBM System/370. z/Architecture z/OS, z/VSE, z/VM
IBM Assembler D IBM Free IBM System/360 IBM OS/360
IBM Assembler E IBM Free IBM System/360 IBM OS/360
IBM Assembler F IBM Free IBM System/360 IBM OS/360 and CP-67/CMS
Assembler G University of Waterloo [1] Free IBM System/360 and others (table-driven)IBM OS/360 and CP-67/CMS
IBM Assembler H IBM Proprietary IBM System/360 and System/370 IBM OS/360 and successors
IBM Assembler XF IBM Free IBM System/370 numerous
PL/360 Niklaus Wirth YesFree IBM System/360 IBM OS/360
Meta-Symbol Scientific Data Systems (SDS)Free SDS Sigma series BTM, UTS, CP-V
Xerox Assembly Program (AP) [2] Xerox Data Systems Free SDS Sigma series, Xerox 500 series CP-V CP-R
Meta Assembler (MASM) UNIVAC Free UNIVAC 1100/2200 series UNIVAC EXEC 8

POWER, PowerPC, and Power ISA assemblers

AssemblerDeveloper FOSS License Instruction set Host platform
GAS 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
VASMVolker Barthelmann, Frank WilleNoFree POWER, 40x, 440, 460, 6xx, 7xx, 7xxx, 860, Book-E, e300 and e500various

x86 assemblers

AssemblerDeveloperHost platform FOSS License x86-64Development active
A86/A386 Eric Isaacson Windows, DOS No Proprietary NoNo
ACK Andrew Tanenbaum, Ceriel Jacobs Linux, MINIX, Unix-like Yes BSD since 2003No1985-?
IBM ALP IBM OS/2 No Proprietary NoNo
Intel ASM86 Intel DOS No Proprietary NoNo
AT&T AT&T Unix System V No Proprietary No1985-?
Digital Research RASM-86 Relocating Assembler Digital Research CP/M-86, DOS, Intel's ISIS and iRMX No Proprietary No1978-1992
FASM Tomasz Grysztar Windows, DOS, Linux, Unix-like Yes Simplified BSD with weak copyleft YesYes
GAS GNU Project Unix-like, Windows, DOS, OS/2 Yes GNU GPLv3YesSince 1987
HLA Randall Hyde Windows, Linux, FreeBSD, macOS Yes Public domain NoYes
Open Watcom Assembler
(HJWASM a.k.a. UASM, JWASM, WASM)
Watcom Linux, Windows, DOS, FreeBSD, OS/2 approved by OSI, but not by FSF Sybase Open Watcom Public YesYes
MASM Microsoft Windows, DOS, OS/2 NoMicrosoft EULA YesSince 1981
NASM Simon Tatham, Julian Hall, Hans Peter Anvin, et al. Linux, macOS, Windows, DOS, OS/2 Yes BSD YesYes
POASM Windows, Windows Mobile No Freeware YesYes
Tim Paterson's ASM Tim Paterson 86-DOS, DOS DEBUG No Proprietary No 1979-1983
TASM Borland Windows, DOS No Proprietary No?
TCCASM Fabrice Bellard Unix-like, Windows Yes GNU LGPL YesNo
VASMVolker Barthelmann, Frank WillevariousNoFreeYesYes
86-Assembler for DOS Stephen DuffyDOSYes GPL2 NoNo
Xenix Microsoft Xenix 2.3 and 3.0 (before 1985)No Proprietary No1982-1984
YASM [3] Peter Johnson Windows, DOS, Linux, Unix-like Yes BSD YesYes
  1. ^ Part of the MINIX 3 source tree, but without obvious development activity.
  2. ^ 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.
  3. ^ Active, supported, but unadvertised.
  4. ^ 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.
  5. ^ 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.
  6. ^ Last stable version 1.3.0 was released in August 2014, and low maintenance since then: https://github.com/yasm/yasm

Z80 assemblers

AssemblerDeveloperHost platform FOSS License Development active
Microsoft MACRO-80 Microsoft CP/M, ISIS-II, TRSDOS, TEKDOS, MSX-DOS No Commercial No
Zeus Assembler Crystal Computing ZX Spectrum No Commercial No
z80asm Unix-like, Windows Yes GNU GPL No
sjasmplus Sjoerd Mastijn, Aprisobal, Peter Helcmanovský, ... Unix-like, Windows Yes BSD Yes
Rasm Berge Edouard Unix-like, Windows Yes MIT Yes

Other single target assemblers

AssemblerDeveloper FOSS License Instruction set Host platform
Autocoder IBM Free BM 1401, 1440, 1460 IBM 1401, 1440, 1460
Autocoder IBM Free IBM 1410, 7010 1410/7010 Operating System
(1410-PR-155)
Babbage No Proprietary GEC 4000 series GEC 4000 series
City & Guilds Mnemonic Code City and Guilds of London Institute No ? City & Guilds Computer ICL 1900, Elliot 900
MACRO-10 Digital Equipment Corporation Free PDP-10 PDP-10
MACRO-11 Digital Equipment Corporation Free PDP-11 PDP-11
VAX MACRO Digital Equipment Corporation Proprietary VAX, Alpha OpenVMS
VASMVolker Barthelmann, Frank WilleNoFree Zilog Z80, Motorola 6800 family various
GPASM James Bowman, Craig Franklin, David BarnettYes GNU GPL PIC microcontroller many
MIPS Free MIPS MIPS
Symbolic Optimal Assembly Program (SOAP)IBMFree IBM 650 IBM 650
Technical Assembly System (TASS)Free IBM 650 IBM 650
Symbolic Programming System (SPS) Gary Mokotoff FreeIBM 14xx IBM 1401, 1440, 1460
Symbolic Programming System (SPS)FreeIBM 1620, 1710 IBM 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
SleuthFree UNIVAC 1107 EXEC, EXEC II, EXEC 8
Meta Assembler (MASM)Free UNIVAC 1100/2200 series UNIVAC EXEC 8
UTMOST ? UNIVAC III UNIVAC III

Retargetable/cross-assemblers

AssemblerDeveloper FOSS License Instruction set Host platform
The Macroassembler AS Alfred ArnoldFree29xxx, 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
ASxxxx Cross Assemblers Alan R. BaldwinYes 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

  1. Modification of IBM's Assembler F
  2. Xerox Corporation (1975). Xerox Assembly Program (AP) (PDF). Retrieved June 28, 2023.
  3. The Yasm Modular Assembler Project

Related Research Articles

<span class="mw-page-title-main">Assembly language</span> Low-level programming language

In computer programming, assembly language, 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. Assembly language usually has one statement per machine instruction (1:1), but constants, comments, assembler directives, symbolic labels of, e.g., memory locations, registers, and macros are generally also supported.

A complex instruction set computer is a computer architecture in which single instructions can execute several low-level operations or are capable of multi-step operations or addressing modes within single instructions. The term was retroactively coined in contrast to reduced instruction set computer (RISC) and has therefore become something of an umbrella term for everything that is not RISC, where the typical differentiating characteristic is that most RISC designs use uniform instruction length for almost all instructions, and employ strictly separate load and store instructions.

Pascal is an imperative and procedural programming language, designed by Niklaus Wirth as a small, efficient language intended to encourage good programming practices using structured programming and data structuring. It is named after French mathematician, philosopher and physicist Blaise Pascal.

Turbo Pascal is a software development system that includes a compiler and an integrated development environment (IDE) for the programming language Pascal running on the operating systems CP/M, CP/M-86, and DOS. It was originally developed by Anders Hejlsberg at Borland, and was notable for its very fast compiling. Turbo Pascal, and the later but similar Turbo C, made Borland a leader in PC-based development tools.

<span class="mw-page-title-main">Endianness</span> Order of bytes in a computer word

In computing, endianness is the order in which bytes within a word of digital data are transmitted over a data communication medium or addressed in computer memory, counting only byte significance compared to earliness. Endianness is primarily expressed as big-endian (BE) or little-endian (LE), terms introduced by Danny Cohen into computer science for data ordering in an Internet Experiment Note published in 1980. The adjective endian has its origin in the writings of 18th century Anglo-Irish writer Jonathan Swift. In the 1726 novel Gulliver's Travels, he portrays the conflict between sects of Lilliputians divided into those breaking the shell of a boiled egg from the big end or from the little end. By analogy, a CPU may read a digital word big end first, or little end first.

<span class="mw-page-title-main">Single instruction, multiple data</span> Type of parallel processing

Single instruction, multiple data (SIMD) is a type of parallel processing in Flynn's taxonomy. SIMD can be internal and it can be directly accessible through an instruction set architecture (ISA), but it should not be confused with an ISA. SIMD describes computers with multiple processing elements that perform the same operation on multiple data points simultaneously.

<span class="mw-page-title-main">Netwide Assembler</span> Assembler for the Intel x86 architecture

The Netwide Assembler (NASM) is an assembler and disassembler for the Intel x86 architecture. It can be used to write 16-bit, 32-bit (IA-32) and 64-bit (x86-64) programs. It is considered one of the most popular assemblers for Linux and x86 chips.

The Motorola 68000 series is a family of 32-bit complex instruction set computer (CISC) microprocessors. During the 1980s and early 1990s, they were popular in personal computers and workstations and were the primary competitors of Intel's x86 microprocessors. They were best known as the processors used in the early Apple Macintosh, the Sharp X68000, the Commodore Amiga, the Sinclair QL, the Atari ST and Falcon, the Atari Jaguar, the Sega Genesis and Sega CD, the Philips CD-i, the Capcom System I (Arcade), the AT&T UNIX PC, the Tandy Model 16/16B/6000, the Sun Microsystems Sun-1, Sun-2 and Sun-3, the NeXT Computer, NeXTcube, NeXTstation, and NeXTcube Turbo, early Silicon Graphics IRIS workstations, the Aesthedes, computers from MASSCOMP, the Texas Instruments TI-89/TI-92 calculators, the Palm Pilot, the Control Data Corporation CDCNET Device Interface, the VTech Precomputer Unlimited and the Space Shuttle. Although no modern desktop computers are based on processors in the 680x0 series, derivative processors are still widely used in embedded systems.

Originally, the word computing was synonymous with counting and calculating, and the science and technology of mathematical calculations. Today, "computing" means using computers and other computing machines. It includes their operation and usage, the electrical processes carried out within the computing hardware itself, and the theoretical concepts governing them.

A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running. For example, a compiler that runs on a PC but generates code that runs on an Android smartphone is a cross compiler.

<span class="mw-page-title-main">Zilog Z8000</span> 16-bit microprocessor

The Z8000 is a 16-bit microprocessor introduced by Zilog in early 1979. The architecture was designed by Bernard Peuto while the logic and physical implementation was done by Masatoshi Shima, assisted by a small group of people. In contrast to most designs of the era, the Z8000 did not use microcode which allowed it to be implemented in only 17,500 transistors.

<span class="mw-page-title-main">LLVM</span> Compiler backend for multiple programming languages

LLVM is a set of compiler and toolchain technologies that can be used to develop a frontend for any programming language and a backend for any instruction set architecture. LLVM is designed around a language-independent intermediate representation (IR) that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. The name LLVM originally stood for Low Level Virtual Machine, though the project has expanded and the name is no longer officially an initialism.

In computer programming, an inline assembler is a feature of some compilers that allows low-level code written in assembly language to be embedded within a program, among code that otherwise has been compiled from a higher-level language such as C or Ada.

An intermediate representation (IR) is the data structure or code used internally by a compiler or virtual machine to represent source code. An IR is designed to be conducive to further processing, such as optimization and translation. A "good" IR must be accurate – capable of representing the source code without loss of information – and independent of any particular source or target language. An IR may take one of several forms: an in-memory data structure, or a special tuple- or stack-based code readable by the program. In the latter case it is also called an intermediate language.

In software engineering, retargeting is an attribute of software development tools that have been specifically designed to generate code for more than one computing platform.

<span class="mw-page-title-main">QEMU</span> Free virtualization and emulation software

QEMU is a free and open-source emulator. It emulates a computer's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems. It can interoperate with Kernel-based Virtual Machine (KVM) to run virtual machines at near-native speed. QEMU can also do emulation for user-level processes, allowing applications compiled for one architecture to run on another.

A source-to-source translator, source-to-source compiler, transcompiler, or transpiler is a type of translator that takes the source code of a program written in a programming language as its input and produces an equivalent source code in the same or a different programming language. A source-to-source translator converts between programming languages that operate at approximately the same level of abstraction, while a traditional compiler translates from a higher level programming language to a lower level programming language. For example, a source-to-source translator may perform a translation of a program from Python to JavaScript, while a traditional compiler translates from a language like C to assembly or Java to bytecode. An automatic parallelizing compiler will frequently take in a high level language program as an input and then transform the code and annotate it with parallel code annotations or language constructs.