Jump to content

Netwide Assembler: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
Added link for intel2gas which converts from nasm to gas
Line 109: Line 109:
* [http://www.nasm.us/ NASM website]
* [http://www.nasm.us/ NASM website]
* [http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html A comparison of GAS and NASM] at [[IBM]]
* [http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html A comparison of GAS and NASM] at [[IBM]]
* [http://freshmeat.net/projects/intel2gas/ intel2gas] : a converter between the source format of the NASM and [[GNU Assembler|GAS]] assemblers


{{X86_assembly_topics}}
{{X86_assembly_topics}}

Revision as of 19:06, 11 May 2011

Netwide Assembler
Original author(s)Simon Tatham, Julian Hall
Developer(s)H. Peter Anvin, et al.
Stable release
2.09.07 / March 12, 2011 (2011-03-12)
Preview release
2.10rc4 / February 28, 2011 (2011-02-28)
Repository
Operating systemMicrosoft Windows, Unix-like, OS/2, Mac OS, DOS
Available inEnglish
Typex86 assembler
License2-clause BSD
Websitehttp://www.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. NASM is considered to be one of the most popular assemblers for Linux[1].

NASM was originally written by Simon Tatham with assistance from Julian Hall, and is currently maintained by a small team led by H. Peter Anvin.[2] It is available as free software under the terms of the simplified (2-clause) BSD license.[3]

Features

NASM can output several binary formats including COFF, Portable Executable, a.out, ELF and Mach-O, though position-independent code is only supported for ELF object files. NASM also has its own binary format called RDOFF.[4]

The variety of output formats allows one to retarget programs to virtually any x86 operating system. In addition, NASM can create flat binary files, usable in writing boot loaders, ROM images, and various facets of OS development.[4] NASM can run on non-x86 platforms, such as SPARC and PowerPC, though it cannot output programs usable by those machines.

NASM uses variation of Intel assembly syntax instead of AT&T syntax.[5] It also avoids features such as automatic generation of segment overrides (and the related ASSUME directive) used by MASM and compatible assemblers.[4]

Examples of programs for various operating systems

This is a Hello world program for the DOS operating system.

section .text
org 0x100
	mov	ah, 0x9
	mov	dx, hello
	int	0x21

	mov	ax, 0x4c00
	int	0x21

section .data
hello:	db 'Hello, world!', 13, 10, '$'

An example of a similar program for Microsoft Windows:

global _start
extern _MessageBoxA@16
extern _ExitProcess@4

section code use32 class=code
_start:
	push	dword 0      ; UINT uType = MB_OK
	push	dword title  ; LPCSTR lpCaption
	push	dword banner ; LPCSTR lpText
	push	dword 0      ; HWND hWnd = NULL
	call	_MessageBoxA@16
 
	push	dword 0      ; UINT uExitCode
	call	_ExitProcess@4
 
section data use32 class=data
	banner:	db 'Hello, world!', 0
	title:	db 'Hello', 0

An equivalent program for Linux:

section .data
msg:	db	"Hello, world!", 10
.len:	equ	$ - msg

section .text
global _start
_start:
	mov	eax, 4 ; write
	mov	ebx, 1 ; stdout
	mov	ecx, msg
	mov	edx, msg.len
	int	0x80

	mov	eax, 1 ; exit
	mov	ebx, 0      
	int	0x80

Linking

NASM principally outputs object files, which are generally not executable in and of themselves. The only exception to this are flat binaries (e.g., .COM)[4] which are inherently limited in modern use. To translate the object files into executable programs, an appropriate linker must be used, such as the Visual Studio "LINK" utility for Windows or ld for UNIX-like systems.

Development

On 28 November 2007, version 2.00 was released, adding support for x86-64 extensions.[2] The development versions are not uploaded to SourceForge.net; instead, they are checked in to the project's own Git repository with binary snapshots available from the project web page.

A search engine for NASM docs is also available.[6]

See also

References

  1. ^ Ram Narayan. "Linux assemblers: A comparison of GAS and NASM". two of the most popular assemblers for Linux, GNU Assembler (GAS) and Netwide Assembler (NASM)
  2. ^ a b "The Netwide Assembler". Retrieved 27 June 2008.
  3. ^ "NASM Version History". Retrieved 19 July 2009.
  4. ^ a b c d "NASM Manual". Retrieved 15 August 2009.
  5. ^ Randall Hyde. "NASM: The Netwide Assembler". Retrieved 27 June 2008.
  6. ^ "NASM Doc Search Engine". Retrieved 14 September 2009.

Further reading

  • Jeff Duntemann (2000). Assembly Language Step by Step. J Wiley and Sons. ISBN 0471375233.