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
Посилання[ред.]
* Assembler.com.ua(рос.)-сайт присвячений урокам програмування на асемблері.
Примітки[ред.]
- ↑ «1.1 What Is NASM?». The Netwide Assembler: NASM. Официальный сайт. Процитовано 14 июля 2010. «NASM, is an 80x86 and x86-64 assembler»
- ↑ Ассемблеры для Linux: Сравнение GAS и NASM
|
|||||||||||
