Netwide Assembler
Template:Short description Template:Primary sources Template:Use dmy dates {{#invoke:Infobox|infobox}}Template:Template other{{#invoke:Check for unknown parameters | check | showblankpositional=1 | unknown = Template:Main other | preview = Page using Template:Infobox software with unknown parameter "_VALUE_"|ignoreblank=y | AsOf | author | background | bodystyle | caption | collapsetext | collapsible | developer | discontinued | engine | engines | genre | included with | language | language count | language footnote | latest preview date | latest preview version | latest release date | latest release version | latest_preview_date | latest_preview_version | latest_release_date | latest_release_version | licence | license | logo | logo alt | logo caption | logo upright | logo size | logo title | logo_alt | logo_caption | logo_upright | logo_size | logo_title | middleware | module | name | operating system | operating_system | other_names | platform | programming language | programming_language | released | replaced_by | replaces | repo | screenshot | screenshot alt | screenshot upright | screenshot size | screenshot title | screenshot_alt | screenshot_upright | screenshot_size | screenshot_title | service_name | size | standard | title | ver layout | website | qid }}Template:Main other
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.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
It was originally written by Simon Tatham with assistance from Julian Hall. Template:As of, it is maintained by a small team led by H. Peter Anvin.<ref name="Homepage">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> It is open-source software released under the terms of a simplified (2-clause) BSD license.<ref name="VersionHistory">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
FeaturesEdit
NASM can output several binary formats, including COFF, OMF, a.out, Executable and Linkable Format (ELF), Mach-O and binary file (.bin, binary disk image, used to compile operating systems), though position-independent code is supported only for ELF object files. It also has its own binary format called RDOFF.<ref name="Manual">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
The variety of output formats allows retargeting programs to virtually any x86 operating system (OS). It can also create flat binary files, usable to write boot loaders, read-only memory (ROM) images, and in various facets of OS development.<ref name="Manual"/> It can run on non-x86 platforms as a cross assembler, such as PowerPC and SPARC, though it cannot generate programs usable by those machines.
NASM uses a variant of Intel assembly syntax instead of AT&T syntax.<ref name="Hyde">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> It also avoids features such as automatic generation of segment overrides (and the related ASSUME directive) used by MASM and compatible assemblers.<ref name="Manual"/>
DevelopmentEdit
NASM version 0.90 was released in October 1996.<ref name="VersionHistory"/>
Version 2.00 was released on 28 November 2007, adding support for x86-64 extensions.<ref name="Homepage"/> The development versions are not uploaded to SourceForge.net, but are checked into GitHub with binary snapshots available from the project web page.
In July 2009, as of version 2.07, NASM was released under the Simplified (2-clause) BSD license. Previously, because it was licensed under LGPL, it led to development of Yasm, a complete rewrite of under the New BSD License. Yasm offered support for x86-64 earlier than NASM. It also added support for GNU Assembler syntax.
RDOFFEdit
Relocatable Dynamic Object File Format (RDOFF) is used by developers to test the integrity of NASM's object file output abilities. It is based heavily on the internal structure of NASM,<ref name = "manual">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> essentially consisting of a header containing a serialization of the output driver function calls followed by an array of sections containing executable code or data. Tools for using the format, including a linker and loader, are included in the NASM distribution.
Until version 0.90 was released in October 1996, NASM supported output of only flat-format executable files (e.g., DOS COM files). In version 0.90, Simon Tatham added support for an object-file output interface, and for DOS .OBJ files for 16-bit code only.<ref name="CVS">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
NASM thus lacked a 32-bit object format. To address this lack, and as an exercise to learn the object-file interface, developer Julian Hall put together the first version of RDOFF, which was released in NASM version 0.91.<ref name="CVS"/>
Since this initial version, there has been one major update to the RDOFF format, which added a record-length indicator on each header record,<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> allowing programs to skip over records whose format they do not recognise, and support for multiple segments; RDOFF1 only supported three segments: text, data and bss (containing uninitialized data).<ref name = "manual"/>
The RDOFF format is strongly deprecated and has been disabled starting in NASM 2.15.04.Template:R
See alsoEdit
ReferencesEdit
Further readingEdit
External linksEdit
- Template:Official website
- Template:Sourceforge
- Special edition for Win32 and BeOS.
- A comparison of GAS and NASM at IBM
- Template:Freshmeat: a converter between the source format of the assemblers NASM and GAS