NASM

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
NASM
Розробник(и) Саймон Тетхем, Джуліан Холл, Пітер Енвін та ін.
Стабільний випуск 2.09.09 (3 липня 2011 )
Нестабільний випуск 2.10rc6 (6 червня 2011)
Операційна система Windows, DOS, Mac OS, Linux
Тип асемблер
Ліцензія Ліцензія BSD
Сайт nasm.us

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

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

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

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

NASM успішно конкурує зі стандартним в Linux і багатьох інших UNIX-системах асемблером gas[2]. Вважається, що якість документації у 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. «1.1 What Is NASM?». The Netwide Assembler: NASM. Официальный сайт. Архів оригіналу за 2012-02-18. Процитовано 2010-07-14. «NASM, is an 80x86 and x86-64 assembler» 
  2. Ассемблеры для Linux: Сравнение GAS и NASM