Briefly described in only three words, Yasm is a modular assembler project, but it is actually a complete rewrite of the Netwide Assembler project, designed from the ground up to to support multiple instruction sets (x86 and amd64 at the moment), accept both GAS and NASM syntaxes, as well as to output binary, ELF64, ELF32, Mach-O 32/64-bit, COFF, RDOFF2 and Windows 32/64-bit object formats.
User visible features
User visible features include full-featured parsing and lexing of the NASM and GAS syntaxes, initial support for the TASM syntax, support for 64-bit integer constants, internationalization support using gettext, a simple 2-pass optimizer, and support for 64-bit (amd64) instruction set architectures, which can be enabled using the “-m amd64” option or by selecting an explicit 64-bit object format output.
It allows for 64-bit and higher integer constants, including math operations, support a wide range of object formats, including COFF, Binary, RDOFF2, ELF32, ELF64, Win32, Win64, as well as 64-bit and 32-bit Mach-O object file outputs. In addition, it supports the CodeView, DWARF2 and STABS debugging formats, runs on UNIX and Linux operating systems, as well as Microsoft Windows and DOS.
Internal features include a GAS and NASM syntax lexers that are written with the re2c tool, recursive-descent parser functionality for both the GAS and NASM syntaxes, architecture-specific instruction parsers, a tiny collection of portable and useful functions, such as strdup, mergesort and strcasecmp, as well as a standard set of assembler test input files.
Under the hood and availability
The project is available for download only as a source archive, which forces the user to manually configure and compile the program prior to installation. The best part of a source archive is that it can be installed on any GNU/Linux operating system, as opposed to pre-built binary packages that are designed for a certain type of distribution.