Netwide Assembler: Rozdiel medzi revíziami
kopa chyb mne sa to opravovat nechce, ked neviem neprekladam |
upravené |
||
Riadok 1: | Riadok 1: | ||
⚫ | '''Netwide Assembler''' ('''NASM''') je multiplatfomný kompilátor programovacieho jazyka assembler s podporou [[architektúra (informatika)|architektúry]] [[x86]] a [[x84-64]] s podporou mnohých výstupných formátov. NASM podporuje všetky inštrukčné sady vrátane nedokumentovaných a vrátane špecifických inštrukcií niektorých procesorov. Okrem vlastného prekladača má aj veľmi omedzený dissassembler s názvom ndisasm. |
||
{{na úpravu}} |
|||
⚫ | '''Netwide Assembler''' ('''NASM''') je |
||
Výhodou NASM je možnosť spojiť ho s inými programovacími jazykmi na mnohých platformách a pod mnohými kompilátormi, bez toho |
Výhodou NASM je možnosť spojiť ho s inými programovacími jazykmi na mnohých platformách a pod mnohými kompilátormi, bez toho aby ste museli svoje assemblerovské kódy prepisovať z dôvodu zmeny syntaxe. Podporuje napríklad Linuxové formáty [[ELF]], [[a.out]], ďalej Windowsovské formáty [[COFF]] (používa GCC kompilátor a DJGPP kompilátor), win32 (Microsoftný formát používaný MS Visual Studiom pre 32 bitové prostredie), win64 (formát MS Visual Studia pre 64 bitové prostredie), DOSovské formáty obj (pre MS-DOS programy), a mnohé ďalšie. |
||
NASM je [[Slobodný softvér|free software]] (licencia [[GNU General Public License|GPL]]) program. |
|||
NASM je šírený pod BSD licenciou. |
|||
Priaznivým dôsledkom toho, že NASM je |
Priaznivým dôsledkom toho, že NASM je písaný kompletne v jazyku C, je, že je možné ho použiť a preložiť prakticky na ľubovolnú platformu. Je možné ho teda používať v [[MS-DOS|DOSe]], [[OS/2]], [[Microsoft Windows|Windows]], [[Linux]]e aj [[BSD]]. Na ďalšie platformy ho možno ľahko preložiť. Pracuje dokonca aj na platformách s inou architektúrou, než je [[x86]] a [[x84-64]], čím umožňuje aj krížový preklad na rozdiel od napríklad [[FASM]], ktorý je písaný v assembleri, a krížový preklad neumožňuje, rovnako tak je omnoho ťažšie portovať ho na iné platformy. |
||
Používa |
Používa tradičný [[Intel]] syntax, na rozdiel od napríklad [[GNU Assembler]]a používajúceho [[AT&T]] syntax (ktorý však na požiadanie tiež vie Intel syntax). Hlavným rozdielom medzi týmito syntaxami je poradie operandov inštrukcie a spôsob zápisu dereferencie. Na rozdiel od [[GNU Assembler]]a je určený pre programovanie, zatiaľčo [[GNU Assembler]] bol koncipovaný len pre strojový preklad v pozadí GCC a nepočítalo sa s priamym používaním. |
||
Jeho súčasťou je pomerne silný makrojazyk optimalizovaný pre potreby |
Jeho súčasťou je pomerne silný makrojazyk optimalizovaný pre potreby assemblera (zatiaľčo GNU Assembler makrojazyk nemá a maximálne umožňuje použiť preprocesor C). Makrojazyk NASM je však trochu komplikovaný a nie vždy celkom konzistentný. Jeho makrojazyk nie je tak silný, ako napríklad makrojazyk [[Microsoft Assembler|MASM]] – ten však podporuje len MS Visual Studio a Windows. |
||
NASM má možnosť generovať do výsledného skompilovaného súboru |
NASM tiež má možnosť generovať do výsledného skompilovaného súboru aj ladiace informácie, ale táto možnosť nie je ešte v NASM plne implementovaná. V súčasnosti podporuje túto možnosť len pri elf formáte a obj formáte pre Borland prekladače. |
||
NASM |
NASM bol historicky prvým kompilátorom assemblera, ktorý ponúkol širokú použiteľnosť spolupráce s mnohými kompilátormi, a tiež prenositelnosť na mnoho platforiem. Vzhľadom k výhodám, ktoré ponúka jeho licencia a k výhodám, ktoré vznikli v dôsledku toho, že je napísaný v programovacom jazyku C sa stal veľmi široko rozšíreným assemblerovským kompilátorom v open source svete. Tým sa stal tiež široko testovaným a prevereným. |
||
;Príklad syntaxe: |
;Príklad syntaxe: |
||
<source lang="asm"> |
<source lang="asm"> |
||
mov al,[es:esi] |
mov al,[es:esi] ; Do registru al uloží hodnotu na adrese es:esi |
||
mov eax,label |
mov eax,label ; Do registru eax sa uloží offset návestia label |
||
push cs |
push cs ; Skopírovanie selektoru cs do ds |
||
pop ds |
pop ds |
||
mov eax,[label] |
mov eax,[label] ; Do registru eax sa uloží hodnota na offsete ds:label, teda 1234h |
||
mov ax,4C00h |
mov ax,4C00h ; Ukončenie aplikácie v MS-DOS/Windows |
||
int 21h |
int 21h |
||
label: dd 1234h |
label: dd 1234h |
||
Riadok 80: | Riadok 79: | ||
</source> |
</source> |
||
== |
== Externé odkazy == |
||
* [http://nasm.sourceforge.net/ Stránka projektu] |
* [http://nasm.sourceforge.net/ Stránka projektu] |
||
[[Kategória: |
[[Kategória:Prekladače]] |
||
[[Kategória:Asemblery|Netwide Assembler]] |
|||
[[cs:Netwide Assembler]] |
[[cs:Netwide Assembler]] |
Verzia z 09:07, 8. august 2011
Netwide Assembler (NASM) je multiplatfomný kompilátor programovacieho jazyka assembler s podporou architektúry x86 a x84-64 s podporou mnohých výstupných formátov. NASM podporuje všetky inštrukčné sady vrátane nedokumentovaných a vrátane špecifických inštrukcií niektorých procesorov. Okrem vlastného prekladača má aj veľmi omedzený dissassembler s názvom ndisasm.
Výhodou NASM je možnosť spojiť ho s inými programovacími jazykmi na mnohých platformách a pod mnohými kompilátormi, bez toho aby ste museli svoje assemblerovské kódy prepisovať z dôvodu zmeny syntaxe. Podporuje napríklad Linuxové formáty ELF, a.out, ďalej Windowsovské formáty COFF (používa GCC kompilátor a DJGPP kompilátor), win32 (Microsoftný formát používaný MS Visual Studiom pre 32 bitové prostredie), win64 (formát MS Visual Studia pre 64 bitové prostredie), DOSovské formáty obj (pre MS-DOS programy), a mnohé ďalšie.
NASM je free software (licencia GPL) program.
Priaznivým dôsledkom toho, že NASM je písaný kompletne v jazyku C, je, že je možné ho použiť a preložiť prakticky na ľubovolnú platformu. Je možné ho teda používať v DOSe, OS/2, Windows, Linuxe aj BSD. Na ďalšie platformy ho možno ľahko preložiť. Pracuje dokonca aj na platformách s inou architektúrou, než je x86 a x84-64, čím umožňuje aj krížový preklad na rozdiel od napríklad FASM, ktorý je písaný v assembleri, a krížový preklad neumožňuje, rovnako tak je omnoho ťažšie portovať ho na iné platformy.
Používa tradičný Intel syntax, na rozdiel od napríklad GNU Assemblera používajúceho AT&T syntax (ktorý však na požiadanie tiež vie Intel syntax). Hlavným rozdielom medzi týmito syntaxami je poradie operandov inštrukcie a spôsob zápisu dereferencie. Na rozdiel od GNU Assemblera je určený pre programovanie, zatiaľčo GNU Assembler bol koncipovaný len pre strojový preklad v pozadí GCC a nepočítalo sa s priamym používaním.
Jeho súčasťou je pomerne silný makrojazyk optimalizovaný pre potreby assemblera (zatiaľčo GNU Assembler makrojazyk nemá a maximálne umožňuje použiť preprocesor C). Makrojazyk NASM je však trochu komplikovaný a nie vždy celkom konzistentný. Jeho makrojazyk nie je tak silný, ako napríklad makrojazyk MASM – ten však podporuje len MS Visual Studio a Windows.
NASM tiež má možnosť generovať do výsledného skompilovaného súboru aj ladiace informácie, ale táto možnosť nie je ešte v NASM plne implementovaná. V súčasnosti podporuje túto možnosť len pri elf formáte a obj formáte pre Borland prekladače.
NASM bol historicky prvým kompilátorom assemblera, ktorý ponúkol širokú použiteľnosť spolupráce s mnohými kompilátormi, a tiež prenositelnosť na mnoho platforiem. Vzhľadom k výhodám, ktoré ponúka jeho licencia a k výhodám, ktoré vznikli v dôsledku toho, že je napísaný v programovacom jazyku C sa stal veľmi široko rozšíreným assemblerovským kompilátorom v open source svete. Tým sa stal tiež široko testovaným a prevereným.
- Príklad syntaxe
mov al,[es:esi] ; Do registru al uloží hodnotu na adrese es:esi
mov eax,label ; Do registru eax sa uloží offset návestia label
push cs ; Skopírovanie selektoru cs do ds
pop ds
mov eax,[label] ; Do registru eax sa uloží hodnota na offsete ds:label, teda 1234h
mov ax,4C00h ; Ukončenie aplikácie v MS-DOS/Windows
int 21h
label: dd 1234h
Hello world
Hello world pre 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 pre 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 pre 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