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