NASM

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
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 /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
org0x100
movah,0x9
movdx,hello
int0x21

movax,0x4c00
int0x21

section.data
hello:db'Hello,world!',13,10,'$'

Подібна програма дляMicrosoft Windows.

global_start
extern_MessageBoxA@16
extern_ExitProcess@4

sectioncodeuse32class=code
_start:
pushdword0;UINT uType = MB_OK
pushdwordtitle;LPCSTR lpCaption
pushdwordbanner;LPCSTR lpText
pushdword0;HWND hWnd = NULL
call_MessageBoxA@16

pushdword0;UINT uExitCode
call_ExitProcess@4

sectiondatause32class=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:
moveax,4;write
movebx,1;stdout
movecx,msg
movedx,msg.len
int0x80

moveax,1;exit
movebx,0
int0x80

Примітки

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