Multimediaexpo.cz je již 18 let na českém internetu !!
Netwide Assembler
Z Multimediaexpo.cz
(→Hello world: SyntaxHighlight GeSHi funguje na 105 procent !) |
m (1 revizi) |
Aktuální verze z 21. 7. 2013, 13:21
Netwide Assembler (NASM) je multiplatfomní kompilátor programovacího jazyka assembler s podporou architektury x86 a x84-64 s podporou mnoha výstupních formátů. NASM podporuje všechny instrukční sady včetně nedokumentovaných a včetně specifických instrukcí některých procesorů. Kromě vlastního překladače má i velmi omezený dissassembler s názvem ndisasm.
Výhodou NASM je možnost spojit jej s jinými programovacími jazyky na mnoha platformách a pod mnoha kompilátory, aniž byste museli své assemblerovské kódy přepisovat z důvodů změny syntaxe. Podporuje například Linuxové formáty ELF, a.out, dále Windowsovské formáty COFF (používá GCC kompilátor a DJGPP kompilátor), win32 (Microsoftí formát používaný MS Visual Studiem pro 32 bitové prostředí), win64 (formát MS Visual studia pro 64 bitové prostředí), DOSovské formáty obj (pro MS-DOS programy), a mnohé další.
NASM je free software (licence GPL) program.
Příznivým důsledkem toho, že NASM je psaný kompletně v jazyce C, je, že je možné jej použít a přeložit prakticky na libovolnou platformu. Je možné ho tedy používat v DOSu, OS/2, Windows, Linuxu i BSD. Na další platformy ho lze snadno přeložit. Pracuje dokonce i na platformách s jinou architekturou, než je x86 a x84-64, čímž umožňuje i křížový překlad na rozdíl od třeba FASM, který je psán v assembleru, a křížový překlad neumožňuje, stejně tak je mnohem těžší portovat jej na jiné platformy.
Používá tradiční Intel syntaxi, na rozdíl od například GNU Assembleru používajícího AT&T syntax (který ovšem na požádání také umí Intel syntax). Hlavním rozdílem mezi těmito syntaxemi je pořadí operandů instrukce a způsob zápisu dereference. Na rozdíl od GNU Assembleru je určen pro programování, zatímco GNU Assembler byl koncipován pouze pro strojový překlad v pozadí GCC a nepočítalo se s přímým používáním.
Jeho součástí je poměrně silný makrojazyk optimalizovaný pro potřeby assembleru (zatímco GNU Assembler makrojazyk nemá a maximálně umožňuje použít preprocesor C). Makrojazyk NASM je ovšem trochu komplikovaný a ne vždy zcela konzistentní. Jeho makrojazyk není tak silný, jako třeba makrojazyk MASM – ten však podporuje pouze MS Visual Studio a Windows.
NASM také má možnost generovat do výsledného zkompilovaného souboru i ladící informace, ale tato možnost není ještě v NASM plně implementována. V současné době podporuje tuto možnost pouze u elf formátu a obj formátu pro Borland překladače.
NASM byl historicky prvním kompilátorem assembleru, který nabídl širokou použitelnost spolupráce s mnoha kompilátory, a také přenositelnost na mnoho platforem. Vzhledem k výhodám, které nabízí jeho licence a k výhodám, které vznikly v důsledku toho, že je napsán v programovacím jazyce C se stal velmi široce rozšířeným assemblerovským kompilátor v open source světě. Tím se stal také široce testovaným a prověřeným.
- Příklad syntaxe
mov al,[es:esi] ; Do registru al uloží hodnotu na adrese es:esi mov eax,label ; Do registru eax se uloží offset návěští label push cs ; Zkopírování selektoru cs do ds pop ds mov eax,[label] ; Do registru eax se uloží hodnota na offsetu ds:label, tedy 1234h mov ax,4C00h ; Ukončení aplikace v MS-DOS/Windows int 21h label: dd 1234h
Hello world
Hello world pro DOS.
SECTION .text org 0x100 mov ah, 0x9 mov dx, hello int 0x21 mov ah, 0x4c mov al, 0 int 0x21 SECTION .data hello DB "Hello, world!",0xd,0xa,'$'
Hello world pro Windows.
%include 'WIN32N.INC' EXTERN MessageBoxA Import MessageBoxA user32.dll EXTERN ExitProcess Import ExitProcess kernel32.dll SECTION CODE USE32 CLASS=CODE ..start: push UINT MB_OK push LPCTSTR title push LPCTSTR banner push HWND NULL call [MessageBoxA] push UINT NULL call [ExitProcess] SECTION DATA USE32 CLASS=DATA banner db 'Hello, world!',0xD,0xA,0 title db 'Hello',0
Hello world pro Linux.
SECTION .data msg db "Hello, world!",0xa len equ $ - msg SECTION .text global main main: mov eax, 4 mov ebx, 1 mov ecx, msg mov edx, len int 0x80 mov eax, 1 mov ebx, 0 int 0x80
Externí odkazy
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |