Netwide Assembler

From Wikipedia, the free encyclopedia

NASM
Original author(s)Simon Tatham, Julian Hall
Developer(s)H. Peter Anvin, Chang Seok Bae, Jim Kukunas, Frank B. Kotler, Cyrill Gorcunov
Initial releaseOctober 1996; 27 years ago (1996-10)
Stable release
2.16.03[1] Edit this on Wikidata / 17 April 2024; 18 days ago (17 April 2024)
Repository
Written inAssembly, C[2]
Operating systemUnix-like, Windows, OS/2, MS-DOS
Available inEnglish
Typex86 assembler
LicenseBSD 2-clause
Websitewww.nasm.us

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.[3]

It was originally written by Simon Tatham with assistance from Julian Hall. As of 2016, it is maintained by a small team led by H. Peter Anvin.[4] It is open-source software released under the terms of a simplified (2-clause) BSD license.[5]

Features[edit]

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.[6]

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.[6] 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.[7] It also avoids features such as automatic generation of segment overrides (and the related ASSUME directive) used by MASM and compatible assemblers.[6]

Sample programs[edit]

A collection of sample programs can be found at Wikibooks:Netwide Assembler sample programs.

Development[edit]

NASM version 0.90 was released in October 1996.[5]

Version 2.00 was released on 28 November 2007, adding support for x86-64 extensions.[4] The development versions are not uploaded to SourceForge.net, but are checked into GitHub with binary snapshots available from the project web page.

A search engine for NASM documentation is also available.[8]

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.

RDOFF[edit]

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,[9] 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.[10]

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.[10]

Since this initial version, there has been one major update to the RDOFF format, which added a record-length indicator on each header record,[11] 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).[9]

The RDOFF format is strongly deprecated and has been disabled starting in NASM 2.15.04.[12]

See also[edit]

References[edit]

  1. ^ "Release 2.16.03". 17 April 2024. Retrieved 23 April 2024.
  2. ^ "NASM, the Netwide Assembler". GitHub. 25 October 2021.
  3. ^ Ram Narayan. "Linux assemblers: A comparison of GAS and NASM". IBM. Archived from the original on 3 October 2013. two of the most popular assemblers for Linux, GNU Assembler (GAS) and Netwide Assembler (NASM)
  4. ^ a b "The Netwide Assembler". Retrieved 27 June 2008.
  5. ^ a b "NASM Version History". Retrieved 3 August 2019.
  6. ^ a b c "NASM Manual". Archived from the original on 23 February 2009. Retrieved 15 August 2009.
  7. ^ Randall Hyde. "NASM: The Netwide Assembler". Archived from the original on 12 September 2010. Retrieved 27 June 2008.
  8. ^ "NASM Doc Search Engine". Archived from the original on 23 January 2010. Retrieved 14 September 2009.
  9. ^ a b "NASM Manual Ch. 6". Retrieved 27 June 2008.
  10. ^ a b "NASM CVS". 8 June 2008. Retrieved 27 June 2008.
  11. ^ "V1-V2.txt". 4 December 2002. Retrieved 27 June 2008.
  12. ^ "Relocatable Dynamic Object File Format (deprecated)".

Further reading[edit]

External links[edit]