NASM — Вікіпедія

NASM
Типмова програмування
Мова асемблера x86
асемблер і компілятор
АвторСаймон Тетхем
РозробникHans Peter Anvind
Платформаx86
Операційна системакросплатформова програма, Linux, Mac OS Classicd, Windows, DOS, KolibriOS і Berkeley Software Distribution
Мова програмуванняC[1]
Ліцензія2-clause BSD Licensed[2], GNU Lesser General Public License і Ліцензія BSD
Репозиторійgithub.com/netwide-assembler/nasm
Вебсайтnasm.us

Netwide Assembler (NASM) — асемблер і дизасемблер для архітектури x86. Може використовуватися для написання 16-,32- і 64-бітних програм. NASM вважається одним із найпопулярніших асемблерів для Linux.

NASM може працювати на платформах, відмінних від x86, таких як SPARC і PowerPC, проте код він генерує лише для x86 і x86-64[3].

NASM може компілювати у декілька бінарних форматів, зокрема COFF, Portable Executable, a.out, ELF і Mach-O. NASM також має свій власний бінарний формат під назвою RDOFF.

Така велика кількість підтримуваних бінарних форматів дозволяє кросс-компіляцію для абсолютної більшості систем на платформі x86. Крім того, NASM може створювати плоскі бінарні файли, що дозволяє написання завантажувальника ОС, образи ROM і фактично будь-яку частину операційної системи.

NASM успішно конкурує зі стандартним в Linux і багатьох інших UNIX-системах асемблером gas[4]. Вважається, що якість документації у NASM вище, ніж у gas. Крім того, асемблер gas використовує синтаксис AT&T, в той час як NASM використовує варіант традиційного для x86-асемблера синтаксису Intel; Intel-синтаксис використовується всіма асемблерами для Windows, наприклад MASM, TASM, FASM.

Історія

[ред. | ред. код]

NASM був створений Саймоном Тетгемом спільно з Джуліаном Голом і в наш час[коли?] розвивається невеликою командою розробників на SourceForge.net. Спочатку він був випущений за умовами власної ліцензії, але пізніше вона була замінена на GNU LGPL. Починаючи з версії 2.07 ліцензія замінена на «спрощену BSD» (BSD з 2 пунктів).

Приклади для різних операційних систем

[ред. | ред. код]

Програма Hello World для операційної системи DOS.

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

Подібна програма для 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 

Аналог для 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 

Примітки

[ред. | ред. код]
  1. The nasm Open Source Project on Open Hub: Languages Page — 2006.
  2. http://www.nasm.us/
  3. 1.1 What Is NASM?. The Netwide Assembler: NASM. Офіційний сайт. Архів оригіналу за 18 лютого 2012. Процитовано 14 липня 2010. NASM, is an 80x86 and x86-64 assembler
  4. Ассемблеры для Linux: Сравнение GAS и NASM [Архівовано 16 серпня 2011 у Wayback Machine.](рос.)