Netwide Assembler - Netwide Assembler
![]() | tento článek příliš spoléhá na Reference na primární zdroje.Únor 2012) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
![]() | |
Původní autoři | Simon Tatham, Julian Hall |
---|---|
Vývojáři | H. Peter Anvin, et al. |
První vydání | Říjen 1996 |
Stabilní uvolnění | 2.15.03 / 18. července 2020 |
Úložiště | ![]() |
Operační systém | Unixový, Okna, OS / 2, MS-DOS |
K dispozici v | Angličtina |
Typ | x86 assembler |
Licence | 2-doložka BSD |
webová stránka | www |
The Netwide Assembler (NASM) je assembler a demontážník pro Intel x86 architektura. Lze jej použít k psaní 16-bit, 32-bit (IA-32 ) a 64-bit (x86-64 ) programy. NASM je považován za jeden z nejpopulárnějších asemblerů pro Linux.[1]
NASM původně napsal Simon Tatham s pomocí Juliana Halla. Od roku 2016[Aktualizace], je udržován malým týmem vedeným H. Peter Anvin.[2] to je open-source software vydáno za podmínek zjednodušené (2-klauzule) Licence BSD.[3]
Funkce
NASM může vydávat několik binárních formátů, včetně COFF, OMF, a.out, Spustitelný a propojitelný formát (ELF), Mach-O a binární soubor (.bin, obraz binárního disku, použitý ke kompilaci operační systémy ) kód nezávislý na poloze je podporováno pouze pro ELF soubory objektů. NASM má také svůj vlastní binární formát s názvem RDOFF.[4]
Rozmanitost výstupních formátů umožňuje přesměrování programy prakticky na jakýkoli operační systém (OS) x86. NASM také může vytvářet ploché binární soubory, použitelné pro psaní zavaděče, pamět pouze pro čtení (ROM) a v různých aspektech vývoje OS.[4] NASM může běžet na platformách jiných než x86 jako křížový assembler, jako PowerPC a SPARC, i když nemůže generovat programy použitelné těmito stroji.
NASM používá variantu Syntaxe sestavy Intel namísto AT&T syntax.[5] Rovněž se vyhýbá funkcím, jako je automatické generování segment přepíše (a související direktivu ASSUME), kterou používá MASM a kompatibilní assemblery.[4]
Příklady programů pro různé operační systémy
Tohle je "Ahoj světe!" program pro DOS operační systém.
sekce .textorg 0x100 mov ah, 0x9 mov dx, Ahoj int 0x21 mov sekera, 0x4c00 int 0x21sekce .dataAhoj: db 'Ahoj světe!', 13, 10, '$'
Ekvivalentní program pro Linux:
globální _Startsekce .text_Start: mov eax, 4 ; psát si mov odliv, 1 ; stdout mov ecx, zpráva mov edx, msg.len int 0x80 ; write (stdout, msg, strlen (msg)); xor eax, msg.len ; invertovat návratovou hodnotu z write () xchg eax, odliv ; hodnota pro exit () mov eax, 1 ; výstup int 0x80 ; výstup(...)sekce .datazpráva: db "Ahoj světe!", 10.len: ekv $ - zpráva
Příklad podobného programu pro Microsoft Windows:
globální _hlavníexterní _MessageBoxA @ 16externí _ExitProcess @ 4sekce kód use32 třosel=kód_hlavní: tlačit dword 0 ; UINT uType = MB_OK tlačit dword titul ; LPCSTR lpCaption tlačit dword prapor ; LPCSTR lpText tlačit dword 0 ; HWND hWnd = NULL volání _MessageBoxA @ 16 tlačit dword 0 ; UINT uExitCode volání _ExitProcess @ 4sekce data use32 třosel=data prapor: db 'Ahoj světe!', 0 titul: db 'Ahoj', 0
Níže je uveden 64bitový program pro Apple OS X který zadá stisk klávesy a zobrazí jej na obrazovce
globální _Startsekce .data Řetězec dotazu: db "Zadejte znak:" query_string_len: ekv $ - Řetězec dotazu out_string: db „Máte vstup:“ out_string_len: ekv $ - out_stringsekce .bss in_char: resw 4sekce .text_Start: mov rax, 0x2000004 ; vložte zápisový systémový volací kód do registru rax mov rdi, 1 ; řekněte jádru, aby používalo stdout mov rsi, Řetězec dotazu ; rsi je místo, kde jádro očekává, že najde adresu zprávy mov rdx, query_string_len ; a rdx je místo, kde jádro očekává, že najde délku zprávy Syscall ; číst v postavě mov rax, 0x2000003 ; číst systémové volání mov rdi, 0 ; stdin mov rsi, in_char ; adresa úložiště, deklarovaná v sekci .bss mov rdx, 2 ; získejte 2 bajty z bufferu jádra (jeden pro návrat vozíku) Syscall ; zobrazit uživateli výstup mov rax, 0x2000004 ; napište systémové volání mov rdi, 1 ; stdout mov rsi, out_string mov rdx, out_string_len Syscall mov rax, 0x2000004 ; napište systémové volání mov rdi, 1 ; stdout mov rsi, in_char mov rdx, 2 ; druhým bajtem je použít návrat vozíku očekávaný v řetězci Syscall ; ukončit systémové volání mov rax, 0x2000001 ; ukončit systémové volání xor rdi, rdi Syscall
Propojení
Zásadně výstupy NASM soubory objektů, které obvykle nejsou samy o sobě proveditelné. Jedinou výjimkou jsou ploché binární soubory (např. .COM )[4] které jsou při moderním použití inherentně omezené. Chcete-li přeložit soubory objektu do spustitelných programů, je vhodné linker musí být použity, například Vizuální studio Nástroj „LINK“ pro Windows nebo ld pro unixové systémy.
Rozvoj
První vydání, verze 0.90, bylo vydáno v říjnu 1996.[3]
Dne 28. Listopadu 2007 byla vydána verze 2.00 s přidáním podpory pro x86-64 rozšíření.[2] Vývojové verze se nenahrávají SourceForge.net; místo toho jsou ohlášeni GitHub s binárními snímky dostupnými z webové stránky projektu.
K dispozici je také vyhledávač dokumentace NASM.[6]
V červenci 2009, od verze 2.07, byl NASM vydán pod licencí BSD Simplified (2-clause). Dříve proto, že NASM bylo licencováno pod LGPL, vedlo to k vývoji Yasmu, úplného přepsání NASM pod Nová licence BSD. Yasm nabídl podporu pro x86-64 dříve než NASM. Přidala také podporu pro GNU Assembler syntax.
RDOFF
Vyvinul | Julian Hall |
---|---|
Typ formátu | Formát souboru objektu |
Kontejner pro | Kód objektu |
Přemístitelný formát dynamických objektů (RDOFF) vývojáři používají k testování integrity výstupních schopností souborů objektů NASM. Je silně založen na vnitřní struktuře NASM,[7] v podstatě se skládá z hlavičky obsahující a serializace volání funkce výstupního ovladače následované řadou sekcí obsahujících spustitelný kód nebo data. Nástroje pro použití formátu, včetně linkeru a zavaděče, jsou součástí distribuce NASM.
Do vydání verze 0.90 v říjnu 1996 podporoval NASM výstup pouze spustitelných souborů plochého formátu (např. DOS Soubory COM ). Ve verzi 0.90, Simon Tatham přidána podpora pro výstupní rozhraní objekt-soubor a pro soubory DOS .OBJ pouze pro 16bitový kód.[8]
NASM tak chyběl 32bitový formát objektu. Aby se tento nedostatek vyřešil a jako cvičení pro naučení se rozhraní objekt-soubor vytvořil vývojář Julian Hall první verzi RDOFF, která byla vydána v NASM verze 0.91.[8]
Od této počáteční verze došlo k jedné velké aktualizaci formátu RDOFF, která přidala indikátor délky záznamu do každého záznamu záhlaví,[9] umožnění programům přeskakovat záznamy, jejichž formát nerozpoznávají, a podpora více segmentů; RDOFF1 podporoval pouze tři segmenty: text, data a bss (obsahující neinicializovaná data).[7]
Viz také
Reference
- ^ Ram Narayan. „Linux assemblers: A comparison of GAS and NASM“. Archivovány od originál dne 3. října 2013.
dva z nejpopulárnějších assemblerů pro Linux, GNU Assembler (GAS) a Netwide Assembler (NASM)
- ^ A b „The Netwide Assembler“. Citováno 27. června 2008.
- ^ A b „Historie verzí NASM“. Citováno 3. srpna 2019.
- ^ A b C d „Manuál NASM“. Archivovány od originál dne 23. února 2009. Citováno 15. srpna 2009.
- ^ Randall Hyde. „NASM: The Netwide Assembler“. Archivovány od originál dne 12. září 2010. Citováno 27. června 2008.
- ^ „NASM Doc Search Engine“. Archivovány od originál dne 23. ledna 2010. Citováno 14. září 2009.
- ^ A b „Manuál NASM kap. 6“. Citováno 27. června 2008.
- ^ A b „NASM CVS“. 8. června 2008. Citováno 27. června 2008.
- ^ „V1-V2.txt“. 4. prosince 2002. Citováno 27. června 2008.
Další čtení
- Jeff Duntemann (2000). Jazyk sestavení krok za krokem. J Wiley and Sons. ISBN 0-471-37523-3.
externí odkazy
- Oficiální webové stránky
- Netwide Assembler na SourceForge.net
- Speciální edice pro Win32 a BeOS.
- Srovnání GAS a NASM na IBM
- „Netwide Assembler“. Volný kód.: převodník mezi zdrojovým formátem asemblerů NASM a PLYN