نت‌واید اسمبلر

نتواید اسمبلر  یا به اختصار نسم  یک اسمبلر و دی‌اسمبلر برای معماری اینتل ایکس۸۶ است. از این اسمبلر می‌توان برای نوشتن برنامه‌های ۱۶-بیتی، ۳۲-بیتی و ۶۴-بیتی استفاده کرد. نسم به عنوان یکی از محبوب‌ترین اسمبلرها برای لینوکس و دیگر سیستم‌عامل‌های شبه یونیکس مانند بی‌اس‌دی شناخته می‌شود. نسم در ابتدا توسط سیمون تاتام و با همکاری ژولیان هال نوشته شد و در حال حاضر توسط تیم کوچکی به رهبری پیتر انوین نگه‌داری می‌شود. نسم یک نرم‌افزار آزاد است و تحت پروانه بی‌اس‌دی عرضه می‌شود. نسم قادر به تولید کردن انواع مختلفی از فایل‌های باینری از جمله COFF, ELF, a.out, Mach-O و پرونده دودویی (دیسک تصویر باینری که برای کامپایل سیستم‌عامل‌ها استفاده می‌شود) است. با این حال، نسم تنها می‌تواند برای قالب ELF کد مستقل از جایگاه  تولید کند. همچنین نسم یک قالب باینری مخصوص به خود به نام 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

منابع 

 

ابزارهای برنامه‌نویسی اواس ده
ابزارهای برنامه‌نویسی برای ویندوز
ابزارهای برنامه‌نویسی لینوکس
اسمبلرها
دیس‌اسمبلرها
کامپایلرها و مفسرهای آزاد
نرم‌افزارهای داس
نرم‌افزارهایی که از پروانه بی‌اس‌دی استفاده می‌کنند
نرم‌افزارهای ۱۹۹۶ (میلادی)
اواس ده