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
Примітки
- ↑ The nasm Open Source Project on Open Hub: Languages Page — 2006.d:Track:Q124688
- ↑ 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.](рос.)