Netwide Assembler: Rozdiel medzi revíziami

z Wikipédie, slobodnej encyklopédie
Smazaný obsah Přidaný obsah
priklad syntaxe nebolo prelozene
kopa chyb mne sa to opravovat nechce, ked neviem neprekladam
Riadok 1: Riadok 1:
{{na úpravu}}
'''Netwide Assembler''' ('''NASM''') je multiplatformový kompilátor programovacieho jazyka assembler s podporou [[(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átané nedokumentovaných a vrátane špecifických inštrukcií niektorých procesorov. Okrem vlastného prekladača má aj veľmi obmedzený dissassembler s názvom ndisasm.
'''Netwide Assembler''' ('''NASM''') je multiplatformový 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átané nedokumentovaných a vrátane špecifických inštrukcií niektorých procesorov. Okrem vlastného prekladača má aj veľmi obmedzený dissassembler s názvom ndisasm.


Výhodou NASM je možnosť spojiť jej s inými programovacími jazykmi na mnohých platformách a pod mnohými kompilátory, bez toho, aby sme 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 (Microsoftí formát používaný MS Visual Studiem pre 32 bitové prostredie), win64 (formát MS Visual studia pro 64 bitové prostředí), DOSovské formáty obj (pro MS-DOS programy), a mnohé ďalších.
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 sme 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 širený pod BSD licenciou.
NASM je šírený pod BSD licenciou.


Priaznivým dôsledkom toho, že NASM je napísaný kompletne v programovacom jazyku C, je to, že je ho možné použiť a preložiť prakticky na ľubovolnej platforme. Je možné ho taktiež použiť v [[MS-DOS|DOSu]], [[OS/2]], [[Microsoft Windows|Windows]], [[Linux]]u i [[BSD]]. Na ďalších platformy ho ide ľahko preložiť. Pracuje dokonca i na platformách s inou architektúrou, než je [[x86]] a [[x84-64]], čím umožňuje i krížový preklad na rozdiel napríklad od [[FASM]], ktorý je napísaný v assembleru, a krížový preklad neumožňuje, rovnako tak je omnoho ťažšie portovať ho na iné platformy.
Priaznivým dôsledkom toho, že NASM je napísaný kompletne v programovacom jazyku C, je to, že je ho možné použiť a preložiť prakticky na ľubovolnej platforme. Je možné ho taktiež použiť v [[MS-DOS|DOSe]], [[OS/2]], [[Microsoft Windows|Windows]], [[Linux]]e aj [[BSD]]. Na ďalších platformy ho ide ľahko preložiť. Pracuje dokonca i na platformách s inou architektúrou, než je [[x86]] a [[x84-64]], čím umožňuje i krížový preklad na rozdiel napríklad od [[FASM]], ktorý je napísaný v assembleru, 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 Assembler]]u používajúceho [[AT&T]] syntax (ktorý okrem toho na požiadanie tiež vie Intel syntax). Hlavným rozdielom medzi touto syntaxou je poradie operandov inštrukcie a spôsob zápisu dereference. Na rozdiel od [[GNU Assembler]]u je určení pre programovaní, zatiaľ čo [[GNU Assembler]] bol navrhnutý iba pre strojový preklad v pozadí GCC a nepočítalo sa s priamym používaním.
Používa tradičnú [[Intel]] syntax, na rozdiel od napríklad [[GNU Assembler]]u používajúceho [[AT&T]] syntax (ktorý okrem toho na požiadanie tiež vie Intel syntax). Hlavným rozdielom medzi touto syntaxou je poradie operandov inštrukcie a spôsob zápisu dereference. Na rozdiel od [[GNU Assembler]]u je určení pre programovaní, zatiaľ čo [[GNU Assembler]] bol navrhnutý iba pre strojový preklad v pozadí GCC a nepočítalo sa s priamym používaním.
Riadok 11: Riadok 12:
Jeho súčasťou je pomerne silný makrojazyk optimalizovaný pre potreby assembleru (zatiaľ čo GNU Assembler makrojazyk nemá a umožňuje maximálne použiť len preprocesor C). Makrojazyk NASM je narozdiel od neho trochu komplikovaný a nie vždy celkom konzistentní. Jeho makrojazyk není tak silný, ako napríklad makrojazyk [[Microsoft Assembleru|MASM]] – ten však podporuje iba MS Visual Studio a Windows.
Jeho súčasťou je pomerne silný makrojazyk optimalizovaný pre potreby assembleru (zatiaľ čo GNU Assembler makrojazyk nemá a umožňuje maximálne použiť len preprocesor C). Makrojazyk NASM je narozdiel od neho trochu komplikovaný a nie vždy celkom konzistentní. Jeho makrojazyk není tak silný, ako napríklad makrojazyk [[Microsoft Assembleru|MASM]] – ten však podporuje iba MS Visual Studio a Windows.


NASM má možnosť generovať do výsledného skompilovaného súboru i ladiace informácie, ale táto možnosť nie ešte celkom v NASM implementovaná. V súčastnej dobe podporuje túto možnosť len v elf formátu a obj formátu pre Borland prekladače.
NASM má možnosť generovať do výsledného skompilovaného súboru i ladiace informácie, ale táto možnosť nie ešte celkom v NASM implementovaná. V súčasnej dobe podporuje túto možnosť len v elf formátu a obj formátu pre Borland prekladače.


NASM byl historicky prvým kompilátorom assembleru, ktorý ponúkol širokú použiteľnosť spolupráce s mnohými kompilátory, a tiež nezmyselnosť na mnohých platformách. 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 programovacím jazyku C, sa stal velmi široko rozšíreným assemblerovským kompilátor v open source svete. Tím sa stal také široko testovaným a prevereným.
NASM byl historicky prvým kompilátorom assembleru, ktorý ponúkol širokú použiteľnosť spolupráce s mnohými kompilátory, a tiež nezmyselnosť na mnohých platformách. 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 programovacím jazyku C, sa stal velmi široko rozšíreným assemblerovským kompilátor v open source svete. Tím sa stal také široko testovaným a prevereným.

Verzia z 19:11, 7. august 2011

Netwide Assembler (NASM) je multiplatformový 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átané nedokumentovaných a vrátane špecifických inštrukcií niektorých procesorov. Okrem vlastného prekladača má aj veľmi obmedzený 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 sme 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 šírený pod BSD licenciou.

Priaznivým dôsledkom toho, že NASM je napísaný kompletne v programovacom jazyku C, je to, že je ho možné použiť a preložiť prakticky na ľubovolnej platforme. Je možné ho taktiež použiť v DOSe, OS/2, Windows, Linuxe aj BSD. Na ďalších platformy ho ide ľahko preložiť. Pracuje dokonca i na platformách s inou architektúrou, než je x86 a x84-64, čím umožňuje i krížový preklad na rozdiel napríklad od FASM, ktorý je napísaný v assembleru, 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 Assembleru používajúceho AT&T syntax (ktorý okrem toho na požiadanie tiež vie Intel syntax). Hlavným rozdielom medzi touto syntaxou je poradie operandov inštrukcie a spôsob zápisu dereference. Na rozdiel od GNU Assembleru je určení pre programovaní, zatiaľ čo GNU Assembler bol navrhnutý iba 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 assembleru (zatiaľ čo GNU Assembler makrojazyk nemá a umožňuje maximálne použiť len preprocesor C). Makrojazyk NASM je narozdiel od neho trochu komplikovaný a nie vždy celkom konzistentní. Jeho makrojazyk není tak silný, ako napríklad makrojazyk MASM – ten však podporuje iba MS Visual Studio a Windows.

NASM má možnosť generovať do výsledného skompilovaného súboru i ladiace informácie, ale táto možnosť nie ešte celkom v NASM implementovaná. V súčasnej dobe podporuje túto možnosť len v elf formátu a obj formátu pre Borland prekladače.

NASM byl historicky prvým kompilátorom assembleru, ktorý ponúkol širokú použiteľnosť spolupráce s mnohými kompilátory, a tiež nezmyselnosť na mnohých platformách. 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 programovacím jazyku C, sa stal velmi široko rozšíreným assemblerovským kompilátor v open source svete. Tím sa stal také š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 se uloží offset návestia label
push cs          ; Skopíruje selektor cs do ds
pop ds
mov eax,[label]  ; Do registru eax sa uloží hodnota na offsetu ds:label, tedy 1234h
mov ax,4C00h     ; Ukončení aplikáciu 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

Externí odkazy