Перейти до вмісту

NASM

Матеріал з Вікіпедії — вільної енциклопедії.
NASM
Типмова програмування
Мова асемблера x86
асемблер і компілятор
АвторСаймон Тетхем
РозробникHans Peter Anvind
Платформаx86
Операційна системакросплатформова програма, Linux, Mac OS Classicd, Windows, DOS, KolibriOS і Berkeley Software Distribution
Мова програмуванняC[1]
Ліцензія2-clause BSD Licensed[2]
Репозиторій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.](рос.)