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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
نتواید اسمبلر
Netwide Assembler.svg
نویسنده(های) اصلی سیمون تاتام، ژولیان هال
توسعه‌دهنده(ها) پیتر انوین
انتشار پایدار ۲٫۱۰٫۰۷ / ۰۲ ژانویه ۲۰۱۳؛ ۵۹۸ روز پیش
وضعیت توسعه در جریان
سیستم‌عامل مایکروسافت ویندوز، شبه یونیکس، داس، اواس/۲ و مک اواس ده
گونه اسمبلر و دی‌اسمبلر
پروانه پروانه بی‌اس‌دی
وب‌گاه www.nasm.us

نتواید اسمبلر (به انگلیسی: 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. ۴٫۰ ۴٫۱ "NASM Manual". Retrieved 2009-08-15. 
  • مشارکت‌کنندگان ویکی‌پدیا، «Netwide Assembler»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۶ شهریور ۱۳۹۲).