Netwide Assembler

功能

NASM 可以输出包括COFF、OMF、a.out、可执行与可链接格式（ELF）、Mach-O 和二进制文件（.bin，二进制磁盘映像，用于编译操作系统）等多种二进制格式，而地址无关代码仅支持ELF对象文件。 NASM 也有自己的称为RDOFF 的二进制格式。
输出格式的广泛性允许将程序重定向到任何x86 操作系统（OS）。 此外，NASM 可以创建浮动二进制文件，它可用于写入引导加载程序、只读存储器（ROM）映像以及操作系统开发的各个方面。 NASM 可以作为交叉汇编程序（如PowerPC和SPARC）在非x86 平台上运行，尽管它不能生成这些机器可用的程序。
NASM 使用英特尔汇编语法的变体而不是AT&T 语法（GNU 汇编器采用的语法）。 它还避免了MASM 和兼容汇编器使用的自动生成段覆盖（以及相关的ASSUME 指令）等功能。

用于各种操作系统的示例程序

这是一个DOS 操作系统下的 "Hello world!" 程序：
section .textorg 0x100
movah, 0x9
movdx, hello
int0x21

movax, 0x4c00
int0x21section .datahello:db 'Hello, world!', 13, 10, '$'
一个类似程序在 Microsoft Windows 下的示例：
global _mainextern _MessageBoxA@16extern _ExitProcess@4section code use32 class=code_main:
pushdword 0      ; UINT uType = MB_OK
pushdword title  ; LPCSTR lpCaption
pushdword banner ; LPCSTR lpText
pushdword 0      ; HWND hWnd = NULL
call_MessageBoxA@16

pushdword 0      ; UINT uExitCode
call_ExitProcess@4section data use32 class=data
banner:db 'Hello, world!', 0
title:db 'Hello', 0
一段 Linux 下的等价程序：
global _startsection .text_start:
moveax, 4 ; write
movebx, 1 ; stdout
movecx, msg
movedx, msg.len
int0x80   ; write(stdout, msg, strlen(msg));

moveax, 1 ; exit
movebx, 0
int0x80   ; exit(0)section .datamsg:db"Hello, world!", 10.len:equ$ - msg
下面是一个用于苹果OS X 的64位程序，用于输入按键并将其显示在屏幕上：
global _startsection .data

query_string:db"Enter a character:  "
query_string_len:equ$ - query_string
out_string:db"You have input:  "
out_string_len:equ$ - out_stringsection .bss

in_char:resw 4section .text_start:

movrax, 0x2000004 ; put the write-system-call-code into register rax
movrdi, 1; tell kernel to use stdout
movrsi, query_string; rsi is where the kernel expects to find the address of the message
movrdx, query_string_len; and rdx is where the kernel expects to find the length of the message 
syscall

; read in the character
movrax, 0x2000003; read system call
movrdi, 0; stdin
movrsi, in_char; address for storage, declared in section .bss
movrdx, 2; get 2 bytes from the kernel's buffer (one for the carriage return)
syscall

; show user the output
movrax, 0x2000004; write system call
movrdi, 1; stdout
movrsi, out_string
movrdx, out_string_len
syscall

movrax, 0x2000004; write system call
movrdi, 1; stdout
movrsi, in_char
movrdx, 2; the second byte is to apply the carriage return expected in the string
syscall

; exit system call
movrax, 0x2000001; exit system call
        xor     rdi, rdi
syscall

链接

NASM 主要输出目标文件（扩展名一般为.obj），这些目标文件通常不能自行执行。唯一的例外是浮动二进制文件（例如 .COM） ，它们在现代使用中固有地受到限制。 要将目标文件转换为可执行程序，必须使用适当的链接程序，例如用于Windows 的 Visual Studio“LINK”实用程序或用于类Unix 系统的ld。

发展

第一版（版本号0.90）发布于1996年10月。
2007年11月28日，2.00版本发布，增加对 x86-64 扩展的支持。 开发版本不再上传到SourceForge.net；相反，它们会被检入到项目自己的Git 存储库中，而其二进制程序的快照可在项目官网上找到。
一个用于NASM 文档的搜索引擎也已可用。
截至2.07版本，NASM 在简化BSD许可证（二句版）下发布。