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

Посилання[ред.]

* Assembler.com.ua(рос.)-сайт присвячений урокам програмування на асемблері.

Примітки[ред.]

  1. «1.1 What Is NASM?». The Netwide Assembler: NASM. Официальный сайт. Процитовано 14 июля 2010. «NASM, is an 80x86 and x86-64 assembler» 
  2. Ассемблеры для Linux: Сравнение GAS и NASM