Flat Assembler
Vývojář | Tomasz Grysztar |
---|---|
První vydání | březen 2000 |
Aktuální verze | 1.73.32 (4. prosince 2023) |
Operační systém | DOS and IDE, Windows and IDE, Unix-like (Linux, OpenBSD, etc.), MenuetOS, KolibriOS, OctaOS, DexOS and IDE, SkyOS, Solar_OS |
Vyvíjeno v | jazyk symbolických adres |
Typ softwaru | Překladač |
Licence | Freeware/Open source/BSD |
Web | flatassembler.net |
Některá data mohou pocházet z datové položky. |
Flat Assembler (FASM) je volný a otevřený víceprůchodový assembler, vytvořený Tomaszem Grysztarem. Fasm je napsán na principu stejný zdroj, stejný výstup, disponuje nevelkými rozměry a velmi vysokou rychlostí kompilace. Má bohatou a výstižnou makro–syntaxi dovolující automatizovat množství rutinních úkolů.[1][2] Jsou podporovány jak objektové formáty, tak i formáty spustitelných souborů. To ve většině případů dovoluje se obejít bez linkeru. V ostatních případech je třeba pomocné linkery, protože tyto nejsou rozšiřovány spolu s fasm.
Kromě základního souboru instrukcí procesoru a koprocesoru fasm podporuje soubory instrukcí MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a, AVX a 3DNow!, a také EM64T a AMD64 (včetně AMD SVM a Intel SMX).
Kompilace programu v fasm se skládá ze dvou stadií: předzpracování a sestavování.
Předzpracování
Ve stadiu předzpracování se otevírají všechna makra, symbolické konstanty, zpracovávají se směrnice předzpracování. Na rozdíl od stadia sestavování se předzpracování provádí pouze jednou. Mísení obou stadií, předzpracování a sestavování, je rozšířená chyba začátečníků.
Sestavování
Ve stadiu sestavování se specifikuje adresa označení, zpracovávají se dohodnuté pokyny, otevírají se cykly a generuje se přesně program. Fasm je víceprůchodový assembler, který dovoluje vytvářet některé optimalizace, například generování krátkého přechodu na označení místo dlouhého. V době průchodu nemůže kompilátor vždy vyčíslit termíny v předpisech podmínek. V tomto případě dělá nějaký výběr a snaží se kompilovat další. Díky tomu, že adresy označení, vyčíslených na N průchodu se využívají na N+1 průchodu, je tento proces obvykle schůdný.
Formát zápisu instrukcí
Jsou využívány zápisy pokynů Intel syntax. Jediný existující rozdíl od formátu používaného v jiných assemblerech (MASM, TASM v režimu společně s MASM) je, že význam paměťové buňky se vždy označuje jako [label_name]
a prosté label_name
označuje adresu (to znamená pořadové číslo) paměťové buňky. To dovoluje obejít se bez klíčového slova offset
. Také v fasm se při konkretizaci rozměru operandu namísto byte ptr
se píše jednoduché byte
, namísto word ptr
— word
atd. Není dovoleno používat několik hranatých závorek v jednom operandu, obrazně místo [bx][si]
je nutné psát [bx+si]
. Tyto změny syntaxe přispěly k více uniformnímu a lehce čitelnému kódu.
Příklad programu
Příklad programu Windows «Hello, world!», který provádí toto spojení s funkcí MessageBox
a následně se ukončí:
format pe gui 4.0 entry start include 'win32a.inc' start: invoke MessageBox,NULL,message,message,MB_OK invoke ExitProcess,0 message db 'Hello, World!',0 data import library kernel32,'kernel32.dll',\ user32,'user32.dll' include 'api/kernel32.inc' include 'api/user32.inc' end data
Nebo také:
include 'win32ax.inc' .code main: invoke MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK invoke ExitProcess,0 .end main
Složitější varianta s upřesněním sekcí v PE-souboru:
format pe gui entry start include 'win32a.inc' section '.data' data readable writeable message db 'Hello, World!',0 section '.code' code readable executable start: invoke MessageBox,NULL,message,message,MB_OK invoke ExitProcess,0 section '.idata' import data readable writeable library kernel32,'kernel32.dll',\ user32,'user32.dll' import kernel32,\ ExitProcess,'ExitProcess' import user32,\ MessageBox,'MessageBoxA'
Příklad jednoduchého programu ve formátu .COM:
org 100h mov ah,9h mov dx,hello int 21h mov ah,8h int 21h int 20h hello db 13,10,"Hello, World!$"
Příklad jednoduchého programu ve formátu ELF:
format ELF executable 3 entry start segment readable executable start: mov eax,4 mov ebx,1 mov ecx,msg mov edx,msg_size int 0x80 mov eax,1 xor ebx,ebx int 0x80 segment readable writeable msg db 'Hello world!',0xA msg_size = $-msg
Formát výstupních souborů
S pomocí příkazu format
lze vytvořit následující formáty výstupní souborů:
MZ
— spustitelné soubory DOS.PE
— spustitelné soubory Windows (konzolní, grafické přílohy a dynamické knihovny).PE64
— spustitelné soubory 64bitových verzí Windows.
COFF
,MS COFF
,MS64 COFF
— objektové soubory.ELF
,ELF64
— spustitelné soubory v UN*X.ARM
— rozpracováno nadšenci, lze najít na oficiálním fóru.Binary
— soubory volné struktury. Při uvedení 100h (org 100h
), ) lze obdržet výkonný soubor formátu .COM. Takže s pomocíformat binary
lze kompilovat soubory údajů.[3]
Podporované operační systémy
- DOS
- Windows: NT, XP, Vista, 7
- Založené na Linux — přímo, přes systémové vyvolání
- FreeBSD
- Ostatní, založené na libc (UN*X)
- MenuetOS, KolibriOS — nedodává se ve standardním kompletu fasm, dodává se spolu s těmito operačními systémy
Podpora fasm ve vedlejších programových produktech
Definiční soubor podporující zvýraznění syntaxe fasm se dodává spolu se základním kompletem Vim. Využití fasm podporují mnohé specializované IDE, například RadASM, WinAsm Studio, Fresh (speciálně projektovaný pod fasm) atd.
Poznámky
- ↑ Tomasz Grysztar. Flat Assembler Programmer's Manual [online]. [cit. 2008-05-12]. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ Randall Hyde. Which Assembler is the Best? [online]. [cit. 2008-05-18]. Dostupné v archivu pořízeném dne 2007-10-18. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ 3.Téma na oficiálním fóru o tvorbě zobrazení pomocí makro – fasm
Reference
- Oficiální stránka - anglicky
- FASMARM – FASM for ARM processors, v1.24
- FASMLIB 0.8.0 – portable 32-bit x86 asm lib for FASM/MASM/YASM/NASM/GASM
- JaeEditor 1.0 (FASM IDE)
Programovací jazyky | |
---|---|
abecední seznam programovacích jazyků | |
multiparadigmatické | |
strukturované (procedurální) | |
objektové | BETA • Boo • C# • Eiffel • Java (Groovy, Kotlin) • JavaScript • Object Pascal • Objective-C • Smalltalk • VB.NET |
funkcionální | Clean • Ceylon • Erlang • Haskell • J • Lisp • Wolfram Language / Mathematica • Miranda • OCaml • Scheme |
dotazovací | |
logické | Gödel • Prolog |
výukové | |
ezoterické | |
historické | |
další | ABAP • AppleScript • ColdFusion • JSA • Julia • MATLAB • R • Visual Basic (VBScript) • Vimscript • Visual FoxPro |
skriptovací/strojový kód • kompilované/interpretované • interaktivní/dávkové • WYSIWYG |