**نتواید اسمبلر** (به انگلیسی: Netwide Assembler) یا به اختصار **نسم** (به انگلیسی: NASM) یک اسمبلر و دی‌اسمبلر برای معماری اینتل ایکس۸۶ است. از این اسمبلر می‌توان برای نوشتن برنامه‌های ۱۶-بیتی، ۳۲-بیتی و ۶۴-بیتی استفاده کرد. نسم به عنوان یکی از محبوب‌ترین اسمبلرها برای لینوکس و دیگر سیستم‌عامل‌های شبه یونیکس مانند بی‌اس‌دی شناخته می‌شود. نسم در ابتدا توسط سیمون تاتام و با همکاری ژولیان هال نوشته شد و در حال حاضر توسط تیم کوچکی به رهبری پیتر انوین نگه‌داری می‌شود. نسم یک نرم‌افزار آزاد است و تحت پروانه بی‌اس‌دی عرضه می‌شود. نسم قادر به تولید کردن انواع مختلفی از فایل‌های باینری از جمله COFF, ELF, a.out, Mach-O و پرونده دودویی (دیسک تصویر باینری که برای کامپایل سیستم‌عامل‌ها استفاده می‌شود) است. با این حال، نسم تنها می‌تواند برای قالب ELF کد مستقل از جایگاه (به انگلیسی: position-independent code) تولید کند. همچنین نسم یک قالب باینری مخصوص به خود به نام RDOF دارد.

تنوع قالب‌های خروجی که نسم قادر به تولید آنهاست، به برنامه‌ها اجازه می‌دهد تا تقریباً بر روی همه سیستم‌عامل‌های اکس۸۶ retarget شوند. به علاوه، نسم می‌تواند فایل‌های باینری مسطح تولید کند که این گونه فایل‌ها برای نوشتن بوت لودرها، تصاویر ROM، و دیگر وجوه توسعه سیستم‌عامل استفاده می‌شوند. نسم می‌تواند بر روی سکوهای غیر اکس۸۶ نظیر پاورپی‌سی و اسپارک هم اجرا شود، هر چند که نمی‌تواند برنامه‌هایی که مخصوص این ماشین‌ها هستند را تولید کند. سینتکس مورد استفاده در نسم، گونه‌ای از سینتکس اسمبلی اینتل است و نسم از سینتکس AT&T استفاده نمی‌کند.

پیوند دادن
----------

نسم تنها فایل‌های مقصود را تولید می‌کند که این فایل‌ها به تنهایی قابل اجرا نیستند. برای تبدیل کردن این فایل‌های مخصوص به برنامه قابل اجرا، باید از یک برنامه خاصی به نام پیوندده استفاده کرد. برای مثال ابزاری به نام LINK در نرم‌افزار ویژوال استودیو یا برنامه ld در سیستم‌عامل‌های شبه یونیکس این کار را انجام می‌دهد.

مثال
----

یک برنامه Hello World برای سیستم‌عامل ام‌اس-داس:

```
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, '$'

```

مثالی مشابه برای مایکروسافت ویندوز:

```
global \_main
extern \_MessageBoxA@16
extern \_ExitProcess@4

section code use32 class=code
\_main:
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

```

و معادل همین برنامه برای لینوکس:

```
global \_start

section .text
\_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

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

```

منابع
-----

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. ↑  "The Netwide Assembler". Retrieved 2008-06-27.
3. ↑  "NASM Version History". Retrieved 2009-07-19.
4. 1 2  "NASM Manual". Archived from the original on 23 February 2009. Retrieved 2009-08-15.

* مشارکت‌کنندگان ویکی‌پدیا. «Netwide Assembler». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۶ شهریور ۱۳۹۲.

| * ن
* ب
* و
موضوعات اسمبلی ایکس۸۶ |
| --- |
| موضوعات | 
* زبان اسمبلی
* مقایسه اسمبلرها
* دی‌اسمبلر
* مجموعه دستورالعمل ریزپردازنده
* زبان برنامه‌نویسی سطح پایین
* زبان ماشین
* میکرواسمبلر
* زبان اسمبلی ایکس۸۶

 |
| اسمبلرهای ایکس۸۶ | 
* A86/A386
* FASM
* GAS
* HLA
* MASM
* NASM
* TASM
* WASM
* YASM

 |
| مسائل برنامه‌نویسی | 
* پشته فراخوانی
* فلگ‌ها
	+ Carry
	+ Overflow
	+ Zero
* آپ‌کد
* شمارنده برنامه
* ثبات
* قراردادهای فراخوانی ایکس۸۶
* فهرست دستورهای ایکس۸۶
* ثبات‌های ایکس۸۶

 |