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