Gyors

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. szeptember 10-én felülvizsgált verziótól ; az ellenőrzésekhez 10 szerkesztés szükséges .

lapos szerelő

Képernyőkép a FASM-ről a mellékelt példák kódjával
Típusú fordítóprogram
Fejlesztő Tomasz Gryshtar
Beírva Assembly nyelv
Operációs rendszer Unix-szerű operációs rendszer , Microsoft Windows , MS-DOS , DOS , Linux , OpenBSD , MenuetOS és KolibriOS
Első kiadás 1999
legújabb verzió 1.73.30 [1] (2022. február 21. ) ( 2022-02-21 )
Generált fájlformátumok Végrehajtható és linkelhető formátum , COFF és hordozható végrehajtható
Engedély 2 szakaszos BSD-licenc [2]
Weboldal flatassembler.net

A fasm ( a flat as se m bler rövidítése ) egy ingyenes többlépcsős assembler , amelyet Tomasz Grysztar írt . A fasm önálló [1] , eredetileg a TASM -mel lett összeállítva, és 1999. május 4. óta 0.90-es verzióban építhető natív forrásokból. A fasm kis méretű, és nagyon nagy a fordítási sebessége , gazdag és tágas makró szintaxisa lehetővé teszi számos rutinfeladat automatizálását [3] [4] . Az objektumformátumok és a végrehajtható fájlformátumok egyaránt támogatottak. Ezzel a legtöbb esetben nincs szükség linkerre . Más esetekben harmadik féltől származó linkereket kell használnia, mivel az egyiket nem terjesztik a fasm-mal.

A processzor és társprocesszor alapvető utasításkészlete mellett[ mi? ] , a fasm támogatja az MMX , SSE , SSE2 , SSE3 , SSSE3 , SSE4.1 , SSE4.2 , SSE4a , AVX , AVX-2 , AVX-512 , 3DNow! , további kiterjesztések AES , CLMUL , FMA , FMA4 , XOP , valamint EM64T és AMD64 (beleértve az AMD SVM-et és az Intel SMX-et is).

A fasm minden változata közvetlenül létrehozhat kimeneti fájlokat az assemblerben előre definiált következő formátumokban: objektumfájlok (szabvány a legtöbb assembler számára): végrehajtható és linkelhető formátum (ELF) vagy közös objektumfájlformátum (COFF) (klasszikus vagy a Microsoft specifikációjában), futtatható fájlok (nem igényel további linkereket): MZ , ELF vagy Portable Executable (PE) (WDM illesztőprogramok mellékelve, az MZ DOS csonk konfigurálásának lehetőségével). Az előre beállítotttól eltérő formátumú fájlok generálásához létezik egy bináris fájlformátum, amely teljes ellenőrzést biztosít a programozó számára a kimeneti fájl minden egyes bájtja felett, azonban a programozónak le kell írnia az ilyen fájl teljes szerkezetét, tartalmát és kapcsolatait. fájlt közvetlenül.

A natív célarchitektúrák az IA32 és x86-64 architektúrák . Van egy nem hivatalos fasmarm-kiegészítés , amely ARM és ARM64 natív célarchitektúrákkal rendelkezik. A natívtól eltérő célarchitektúrák megvalósítása hasonló bármely más assembler hasonló megvalósításához – erre a célra makrókat és adatdefiníciós direktívákat használnak.

Összeállítás

A fasm-ban egy program összeállítása három szakaszból áll: előfeldolgozásból, elemzésből és összeállításból.

Előfeldolgozás

Az első szakasz (előfeldolgozás ) 1 lépésben történik, először a forrásszöveg tokenizálása, majd az összes processzor direktíva felismerése és feldolgozása, az összes makró és az összes szimbolikus állandó kibővítése. Mivel ehhez a szakaszhoz nincsenek további átadások, az ebben a szakaszban feldolgozott nyelvi elemeket használat előtt deklarálni kell.

Elemzés

A második szakasz, ebben a szakaszban a tokenek további osztályozása történik (mivel még a tokenek típusai és a velük szemben támasztott követelmények is kissé eltérnek az előfeldolgozás és összeszerelés szakaszában), egyes tokenek esetében további tulajdonságstruktúrák jönnek létre, amelyek később az összeszerelés során használható.

Összeszerelés

Az összeállítási szakaszban meghatározzák a címkecímeket , feldolgozzák a feltételes direktívákat, megnyitják a hurkokat, és előállítják a tényleges programot. A fasm egy többlépéses assembler, amely lehetővé teszi bizonyos optimalizálások elvégzését (például rövid ugrást generál egy címkére egy hosszú helyett). Az áthaladás során a fordító nem mindig értékeli ki a kifejezést feltételes direktívákban. Ebben az esetben választ, és megpróbálja tovább fordítani. Mivel az N. lépésben kiszámított címkecímeket az N+1. lépésben használják, ez a folyamat általában konvergál.

Történelem

A projektet 1999-ben Tomasz Grysztar ( lengyelül: Tomasz Grysztar ) indította el, aki akkor még diák volt. A forráskódja teljes egészében TASM assembly nyelven íródott . A 0.90-es verziótól (1999. május 4.) a fasm assembler önellátóvá vált (forráskódját az anyanyelvi dialektushoz igazították, és maga a fasm assembler állította össze). 2000 márciusában a fasm megjelent az interneten.

Kezdetben a fasm csak 16 bites lapos valós módból futott . Ezután hozzáadták a 32 bites támogatást, és ezen felül a DPMI támogatást . A forráskódot átírták, így könnyen áthelyezhető bármely 32 bites címzést támogató x86 operációs rendszerre. Windowsra, majd Linuxra portolták.

Alapelvek

A Fasm hajlamos az előfeldolgozó direktívák lehető legkisebb halmazát használni, pl. előre definiált direktívákban tilos új direktívákat bevezetni, amelyek funkcionalitása meglévő direktívakészlettel érhető el. Ez alól kivételt képeznek a történelmileg felcserélhető irányelvek.

A Fasm egy multi-pass assembler optimista előrejelzéssel, i.e. az első lépésben az assembler feltételezi, hogy minden utasítás a lehető legkisebb formáját ölti. A többszörös átadás lehetővé teszi a kifejezések korlátlan ideig történő használatát, mielőtt deklarálásra kerülnének.

A Fasm nem tartalmazza a nem használt eljárások deklarációit a kimeneti fájlban (makrók segítségével).

A kimeneti fájl tartalma csak a forráskód tartalmától függ, és nem függ az operációs rendszer környezetétől vagy a parancssorban átadott paraméterektől. Azok számára, akiknek ez az elv kényelmetlen volt a win32 számára, kifejlesztették az FA wrappert , amely lehetővé teszi egy másik fájl csatlakoztatását a fájlhoz nem közvetlenül a kódban, hanem a parancssorban.

A fasm forráskódja közvetlenül beépíthető egy végrehajtható fájlba, megkerülve a közbenső objektumfájlok létrehozásának és összekapcsolásának szakaszait.

Összeállítási folyamat

A forráskód összeállítása több, egymástól elszigetelt szakaszban történik.

A kimenet konvertálása a kívánt formátumba

A kimeneti adatok blokkjait a formátumhoz szükséges fejlécekkel keretezzük, feldolgozzuk az adatokat, fejléc kapcsolatokat, ellenőrző összegeket, blokkméreteket számolunk... Kimeneti fájl generálódik.

Utasítás formátuma

Az utasítások írására az Intel szintaxisát használják.

Az egyetlen lényeges különbség a többi assemblerben ( MASM , TASM MASM kompatibilitási módban TASM) elfogadott formátumhoz képest, hogy a memóriacella értéke mindig a következővel van írva [label_name], hanem egyszerűen label_namea cella címét (vagyis a sorozatszámát) jelenti. Ez lehetővé teszi a kulcsszó nélkül offset. Szintén a fasm-ban, amikor egy operandus méretét újradefiniálják, byte ptregyszerűen a , a  - bytehelyett stb. helyett írják . Nem szabad több szögletes zárójelet használni egy operandusban - ezért helyette . Ezek a szintaktikai változtatások egységesebb és könnyebben olvasható kódot eredményeztek. word ptrword[bx][si][bx+si]

Programpélda

Egy példa Windows program Hello, world! ”, amely kinyomtatja ezt az üzenetet egy függvénnyel MessageBox, és a következővel végződik:

formátum pe gui 4 .0 bejegyzés kezdete tartalmazza a ' win32a.inc ' start: invoke MessageBox , NULL , message , message , MB_OK invoke ExitProcess , 0 üzenet db ' Hello , World ! ' , 0 adatimportálási könyvtár kernel32 , ' kernel32.dll ' , \ user32 , ' user32.dll ' tartalmazza az ' api / kernel32.inc ' include ' api / user32.inc ' végadatokat _

Vagy így:

include ' win32ax.inc ' .code main: invoke MessageBox , NULL , ' Hello , World ! ' , ' Fasm üzenetdoboz : ' , MB_OK invoke ExitProcess , 0 .end main _

Egy bonyolultabb változat, a PE-fájl szakaszainak pontosításával :

formátum pe gui bejegyzés kezdete tartalmazza a " win32a.inc " szakasz ' .data ' adat olvasható írható üzenet db ' Hello , World ! ' , 0 szakasz ' .code ' kód olvasható futtatható start: invoke MessageBox , NULL , message , message , MB_OK invoke ExitProcess , 0 szakasz ' .idata ' adatok importálása olvasható írható könyvtár kernel32 , ' kernel32.dll ' , \ user32 , ' user32.dll ' import kernel32 , \ ExitProcess , ' ExitProcess ' import user32 , \ MessageBox , ' MessageBoxA '

Példa egy egyszerű konzolprogramra .COM formátumban :

org 100h _ mov ah , 9 h mov dx , hello int 21 h mov ah , 8 h int 21 h int 20 h hello db 13 , 10 , " Hello , World ! $ "

Példa egy egyszerű programra ELF formátumban .

formátum ELF végrehajtható 3 bejegyzés kezdete szegmens olvasható végrehajtható kezdés: mov eax , 4 mov ebx , 1 mov ecx , msg mov edx , msg_size int 0x80 mov eax , 1xor ebx , ebx int 0x80_ _ szegmens olvasható írható msg db ' Helló világ ! ' , 0xA msg_size = $-msg

Kimeneti fájl formátum

A direktíva formatsegítségével a következő kimeneti fájlformátumokat adhatja meg:

  • MZ- DOS  futtatható fájlok .
  • PE- Windows  futtatható fájlok (konzol, grafikus alkalmazások és dinamikus könyvtárak).
    • PE64 - a Windows 64 bites verzióinak futtatható fájljai.
  • COFF, MS COFF, MS64 COFF objektumfájlok.
  • ELF, Unix-szerű rendszerekenELF64  futtatható fájlok .
  • ARM — a rajongók fejlesztése [5] .
  • Binary - tetszőleges szerkezetű fájlok. A 100h ( ) eltolás megadása .COMorg 100h formátumú végrehajtható fájlt eredményez . Az adatfájlokat a [6] segítségével is összeállíthatja .format binary

Operációs rendszerek

Alkalmazás

FASM nyelven írt operációs rendszerek:

  • DexOS, Ville Turijanmaa
  • MenuetOS – Ville Turijanmaa 32 bites és 64 bites grafikus operációs rendszerei
  • KolibriOS – a MenuetOS elágazása

A FASM-et háttérösszeállítóként használó fordítók:

FASM alapú IDE:

  • A Fresh egy közösség által támogatott projekt, amelyet John Found alapított

A fasm támogatása harmadik féltől származó szoftverekben

A fasm szintaxistámogató fájl az alap Vim csomaggal érkezik .

A fasm használatát számos speciális IDE támogatja, mint például a RadASM , a WinAsm Studio , a Fresh (kifejezetten a fasm-hez tervezett) stb.

Jegyzetek

  1. 1 2 Flat assembler  letöltése . flatassembler.net . Letöltve: 2019. augusztus 26. Az eredetiből archiválva : 2019. augusztus 31.
  2. https://github.com/tgrysztar/fasm/blob/752cc50465e38a98a2b6ed1161983988e4d5f61a/LICENSE.TXT
  3. Tomasz Grysztar. Flat Assembler programozói kézikönyv  (angol)  (lefelé irányuló kapcsolat) . Letöltve: 2012. május 27. Az eredetiből archiválva : 2012. május 31..
  4. Randall Hyde. Melyik Assembler a legjobb?  (angol)  (elérhetetlen link) . Letöltve: 2012. május 27. Az eredetiből archiválva : 2012. május 31..
  5. FASM ARM  . flatassembler.net .
  6. Hivatalos fórumszál a képek fasm  makróval történő létrehozásáról . Letöltve: 2019. augusztus 26. Az eredetiből archiválva : 2020. augusztus 4..

Linkek