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
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
- ↑The nasm Open Source Project on Open Hub: Languages Page— 2006.
- ↑http:// 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.](рос.)