NASM
Netwide Assembler (NASM) — асемблер і дизасемблер для архітектури x86. Може використовуватися для написання 16-,32- і 64-бітних програм. NASM вважається одним із найпопулярніших асемблерів для Linux.
NASM може працювати на платформах, відмінних від x86, таких як SPARC і PowerPC, проте код він генерує лише для x86 і x86-64[114].
NASM може компілювати у декілька бінарних форматів, зокрема COFF, Portable Executable, a.out, ELF і Mach-O. NASM також має свій власний бінарний формат під назвою RDOFF.
Така велика кількість підтримуваних бінарних форматів дозволяє кросс-компіляцію для абсолютної більшості систем на платформі x86. Крім того, NASM може створювати плоскі бінарні файли, що дозволяє написання завантажувальника ОС, образи ROM і фактично будь-яку частину операційної системи.
NASM успішно конкурує зі стандартним в Linux і багатьох інших UNIX-системах асемблером gas[115]. Вважається, що якість документації у 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
Примітки[ред. | ред. код]
- ↑ а б в г https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D
- ↑ а б Announcing NASM 2.15 — 2020.
- ↑ а б https://repo.or.cz/nasm.git/tag/03231c40a59533ec28f593f5a549688239a3c637
- ↑ Release 2.11.08 — 2015.
- ↑ Index of /pub/nasm/releasebuilds/2.13
- ↑ Release 2.13 — 2017.
- ↑ http://repo.or.cz/nasm.git/commit/fe2f6de2ee85959747a4e4a99ea43a38509cc3b2
- ↑ Release 2.13.02 — 2017.
- ↑ Release 2.13.03 — 2018.
- ↑ https://repo.or.cz/nasm.git/tag/a73b8be6f0f9e307e3c6131011a30f2fd5b00877
- ↑ https://github.com/netwide-assembler/nasm/releases/tag/nasm-2.14.02
- ↑ https://repo.or.cz/nasm.git/tag/6d78c07e6b0d1602ab096eec29628bfa7afb639c
- ↑ https://github.com/netwide-assembler/nasm/releases/tag/nasm-2.15.01
- ↑ https://nasm.us/doc/nasmdocc.html
- ↑ https://github.com/netwide-assembler/nasm/releases/tag/nasm-2.15.02
- ↑ Release 0.91 — 2002.
- ↑ Release 0.93 — 2002.
- ↑ Release 0.94 — 2002.
- ↑ Release 0.95 — 2002.
- ↑ Release 0.96 — 2002.
- ↑ Release 0.97 — 2002.
- ↑ Release 0.98e — 2002.
- ↑ Release 0.98 — 2002.
- ↑ Release 0.98.03 — 2002.
- ↑ Release 0.98.08 — 2002.
- ↑ Release 0.98.09 — 2002.
- ↑ Release 0.98.11 — 2002.
- ↑ Release 0.98.12 — 2002.
- ↑ Release 0.98.14 — 2002.
- ↑ Release 0.98.15 — 2002.
- ↑ Release 0.98.16 — 2002.
- ↑ Release 0.98.17 — 2002.
- ↑ Release 0.98.18 — 2002.
- ↑ Release 0.98.19 — 2002.
- ↑ Release 0.98.20 — 2002.
- ↑ Release 0.98.21 — 2002.
- ↑ Release 0.98.22 — 2002.
- ↑ Release 0.98.23 — 2002.
- ↑ Release 0.98.24 — 2002.
- ↑ Release 0.98.25 — 2002.
- ↑ Release 0.98.26 — 2002.
- ↑ Release 0.98.30 — 2002.
- ↑ Release 0.98.31 — 2002.
- ↑ Release 0.98.32 — 2002.
- ↑ Release 0.98.33 — 2002.
- ↑ Release 0.98.34 — 2002.
- ↑ Release 0.98.35 — 2002.
- ↑ Release 0.98.36 — 2003.
- ↑ Release 0.98.37 — 2003.
- ↑ Release 0.98.38 — 2003.
- ↑ Release 0.98.39 — 2005.
- ↑ Release 0.99.01 — 2007.
- ↑ Release 0.99.02 — 2007.
- ↑ Release 0.99.03 — 2007.
- ↑ Release 0.99.04 — 2007.
- ↑ Release 0.99.05 — 2007.
- ↑ Release 0.99.06 — 2007.
- ↑ Release 2.00 — 2007.
- ↑ Release 2.01 — 2008.
- ↑ Release 2.02 — 2008.
- ↑ Release 2.03 — 2008.
- ↑ Release 2.03.01 — 2008.
- ↑ Release 2.04 — 2008.
- ↑ Release 2.05 — 2008.
- ↑ Release 2.05.01 — 2008.
- ↑ Release 2.06 — 2009.
- ↑ Release 2.07 — 2009.
- ↑ Release 2.08 — 2010.
- ↑ Release 2.08.01 — 2010.
- ↑ Release 2.08.02 — 2010.
- ↑ Release 2.09 — 2010.
- ↑ Release 2.09.01 — 2010.
- ↑ Release 2.09.02 — 2010.
- ↑ Release 2.09.03 — 2010.
- ↑ Release 2.09.04 — 2010.
- ↑ Release 2.09.05 — 2011.
- ↑ Release 2.09.06 — 2011.
- ↑ Release 2.09.07 — 2011.
- ↑ Release 2.09.08 — 2011.
- ↑ Release 2.09.09 — 2011.
- ↑ Release 2.09.10 — 2011.
- ↑ Release 2.10 — 2012.
- ↑ Release 2.10.01 — 2012.
- ↑ Release 2.10.02 — 2012.
- ↑ Release 2.10.03 — 2012.
- ↑ Release 2.10.04 — 2012.
- ↑ Release 2.10.05 — 2012.
- ↑ Release 2.10.06 — 2012.
- ↑ Release 2.10.07 — 2013.
- ↑ Release 2.10.08 — 2013.
- ↑ Release 2.10.09 — 2013.
- ↑ Release 2.11 — 2013.
- ↑ Release 2.11.01 — 2014.
- ↑ Release 2.11.02 — 2014.
- ↑ Release 2.11.03 — 2014.
- ↑ Release 2.11.04 — 2014.
- ↑ Release 2.11.05 — 2014.
- ↑ Release 2.11.06 — 2014.
- ↑ Release 2.11.07 — 2014.
- ↑ Release 2.12 — 2016.
- ↑ Release 2.12.01 — 2016.
- ↑ Release 2.12.02 — 2016.
- ↑ Release 2.13.01 — 2017.
- ↑ Release 2.14 — 2018.
- ↑ Release 2.14.01 — 2018.
- ↑ Release 2.15.03 — 2020.
- ↑ Release 2.15.04 — 2020.
- ↑ Release 2.15.05 — 2020.
- ↑ https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/
- ↑ Release 2.16 — 2022.
- ↑ The nasm Open Source Project on Open Hub: Languages Page — 2006.
- ↑ 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.](рос.)
|