Nopeasti

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 10.9.2022 tarkistetusta versiosta . tarkastukset vaativat 10 muokkausta .

tasainen kokoaja

Kuvakaappaus FASM:sta mukana toimitettujen esimerkkien koodilla
Tyyppi kääntäjä
Kehittäjä Tomasz Gryshtar
Sisään kirjoitettu kokoonpanokieli
Käyttöjärjestelmä Unix-tyyppinen käyttöjärjestelmä , Microsoft Windows , MS-DOS , DOS , Linux , OpenBSD , MenuetOS ja KolibriOS
Ensimmäinen painos 1999
uusin versio 1.73.30 [1] (21. helmikuuta 2022 ) ( 21-02-2022 )
Luodut tiedostomuodot Suoritettava ja linkitettävä muoto , COFF ja kannettava suoritettava
Lisenssi 2 lausekkeen BSD-lisenssi [2]
Verkkosivusto flatassembler.net

fasm ( lyhenne sanoista flat as se m bler ) on ilmainen monivaiheinen kokoonpano , jonka on kirjoittanut Tomasz Grysztar . fasm on itsenäinen [1] , käännettiin alun perin TASM :n kanssa ja se on pystytty rakentamaan alkuperäisistä lähteistä 4. toukokuuta 1999 lähtien versiossa 0.90. fasm on kooltaan pieni ja sillä on erittäin korkea käännösnopeus , siinä on rikas ja tilava makrosyntaksi , jonka avulla voit automatisoida monia rutiinitehtäviä [3] [4] . Sekä objektimuotoja että suoritettavia tiedostomuotoja tuetaan. Tämä eliminoi linkkerin tarpeen useimmissa tapauksissa . Muissa tapauksissa sinun on käytettävä kolmannen osapuolen linkittäjiä, koska niitä ei jaeta fasmin kanssa.

Prosessorin ja apuprosessorin peruskäskysarjan lisäksi[ mitä? ] , fasm tukee MMX , SSE , SSE2 , SSE3 , SSSE3 , SSE4.1 , SSE4.2 , SSE4a , AVX , AVX-2 , AVX-512 , 3DNow! , lisälaajennukset AES , CLMUL , FMA , FMA4 , XOP ja EM64T ja AMD64 (mukaan lukien AMD SVM ja Intel SMX).

Kaikki fasmin muunnelmat voivat luoda suoraan tulostiedostoja seuraavissa muodoissa, jotka on määritetty valmiiksi assemblerissä: objektitiedostot (vakio useimmille assemblereille): suoritettava ja linkitettävä muoto (ELF) tai yhteinen objektitiedostomuoto (COFF) (klassinen tai Microsoftin määrittelyssä), suoritettavat tiedostot (ei vaadi lisälinkkejä): MZ , ELF tai Portable Executable (PE) (WDM-ohjaimet mukana, mahdollisuus määrittää MZ DOS stub). Jos haluat luoda tiedostoja muussa kuin esiasetetun muodossa, on olemassa binääritiedostomuoto, joka antaa ohjelmoijalle täyden hallinnan tulostiedoston jokaisesta tavusta, mutta ohjelmoijan on kuvattava tällaisen tiedoston koko rakenne, sisältö ja suhteet. tiedosto suoraan.

Alkuperäiset kohdearkkitehtuurit ovat IA32- ja x86-64-arkkitehtuurit . On epävirallinen fasmarm-lisäosa , jossa on alkuperäiset ARM- ja ARM64-kohdearkkitehtuurit . Muiden kuin alkuperäisen kohdearkkitehtuurien toteutus on samanlainen kuin samanlainen toteutus missä tahansa muussa assemblerissä - makroja ja datamäärittelydirektiivejä käytetään näihin tarkoituksiin.

Kokoelma

Ohjelman kääntäminen fasmissa koostuu kolmesta vaiheesta: esikäsittelystä, jäsentämisestä ja kokoonpanosta.

Esikäsittely

Ensimmäinen vaihe (esikäsittely ) suoritetaan yhdellä kertaa, ensin lähdeteksti tokenisoidaan, sitten kaikki prosessorin direktiivit tunnistetaan ja käsitellään siinä, kaikki makrot ja kaikki symboliset vakiot laajennetaan. Koska tässä vaiheessa ei ole ylimääräisiä läpäisyjä, kaikki tässä vaiheessa käsitellyt kielielementit on ensin ilmoitettava ennen kuin niitä voidaan käyttää.

Jäsennetään

Toisessa vaiheessa, tässä vaiheessa, tapahtuu tokenien lisäluokitus (koska jopa tokenien tyypit ja niille asetetut vaatimukset esikäsittely- ja kokoonpanovaiheissa ovat hieman erilaiset), joillekin tokeneille luodaan lisäominaisuusrakenteita, jotka käyttää myöhemmin asennuksen aikana.

Kokoonpano

Kokoonpanovaiheessa määritetään tarraosoitteet , käsitellään ehdolliset käskyt, avataan silmukat ja luodaan varsinainen ohjelma. fasm on monivaiheinen kokoaja, jonka avulla se voi tehdä joitain optimointeja (esimerkiksi luoda lyhyen hypyn etikettiin pitkän hypyn sijaan). Siirron aikana kääntäjä ei välttämättä aina arvioi lauseketta ehdollisissa direktiiveissä. Tässä tapauksessa se tekee jonkin valinnan ja yrittää kääntää lisää. Koska N:nnessä kierrossa laskettuja tarraosoitteita käytetään N+1:ssä, tämä prosessi yleensä konvergoi.

Historia

Projektin aloitti vuonna 1999 Tomasz Grysztar ( puola: Tomasz Grysztar ), joka oli silloin opiskelija. Sen lähdekoodi on kirjoitettu kokonaan TASM- kokoonpanokielellä . Alkaen versiosta 0.90 (4. toukokuuta 1999), fasm assembleristä tuli omavarainen (sen lähdekoodi mukautettiin äidinkieleen ja fasm assembler itse kokosi). Maaliskuussa 2000 fasm julkaistiin Internetissä.

Aluksi fasm toimi vain 16-bittisessä litteässä reaalitilassa . Sitten lisättiin 32-bittinen tuki ja sen lisäksi DPMI- tuki . Lähdekoodi on kirjoitettu uudelleen niin, että se voidaan helposti siirtää mihin tahansa x86-käyttöjärjestelmään, joka tukee 32-bittistä osoitusta. Se siirrettiin Windowsiin ja sitten Linuxiin.

Periaatteet

Fasm pyrkii käyttämään pienintä mahdollista esikäsittelyohjeiden joukkoa, ts. ennalta määrätyssä direktiivijoukossa ei saa ottaa käyttöön uusia direktiivejä, joiden toiminnallisuus voidaan saavuttaa olemassa olevilla direktiiveillä. Poikkeuksia ovat historiallisesti keskenään vaihdettavat direktiivit.

Fasm on monivaiheinen kokoaja, jolla on optimistinen ennuste, ts. ensimmäisellä kerralla kokoaja olettaa, että kaikki ohjeet ovat pienimmässä mahdollisessa muodossaan. Multi-passing mahdollistaa myös lausekkeiden käytön loputtomasti ennen niiden ilmoittamista.

Fasm ei sisällä käyttämättömien proseduurien ilmoituksia tulostiedostossa (toteutettu makrojen kautta).

Tulostiedoston sisältö riippuu vain lähdekoodin sisällöstä, ei käyttöjärjestelmäympäristöstä tai komentorivillä välitetyistä parametreista. Niille, joille tämä periaate oli hankala win32:lle, kehitettiin FA -kääre , jonka avulla voit yhdistää toisen tiedoston tiedostoon ei suoraan koodissa, vaan komentorivin kautta.

Fasmin lähdekoodi voidaan rakentaa suoraan suoritettavaan tiedostoon ohittaen väliobjektitiedostojen luomisen ja linkittämisen vaiheet.

Kokoonpanoprosessi

Lähdekoodin kääntäminen tapahtuu useissa vaiheissa, jotka on eristetty toisistaan.

Tulosteen muuntaminen pyydettyyn muotoon

Tulostiedon lohkot kehystetään muotoon tarvittavilla otsikoilla, käsitellään dataa ja otsikkosuhteita, lasketaan tarkistussummat, lohkokoot... Luodaan tulostiedosto.

Ohjeen muoto

Ohjeiden kirjoittamiseen käytetään Intelin syntaksia .

Ainoa merkittävä ero muissa kokoajissa (MASM, TASM MASM-yhteensopivuustilassa) käytettävään formaattiin on se , että muistisolun arvo kirjoitetaan aina muodossa [label_name], mutta label_namese tarkoittaa yksinkertaisesti solun osoitetta (eli sarjanumeroa). Näin voit tehdä ilman avainsanaa offset. Myös fasmissa operandin kokoa määritettäessä byte ptrse kirjoitetaan yksinkertaisesti :n bytesijaan , tilalle word ptr - jne word. Yhdessä operandissa ei saa käyttää useita hakasulkeita - joten [bx][si]sinun on kirjoitettava sen sijaan [bx+si]. Nämä syntaksin muutokset johtivat yhtenäisempään ja helpommin luettavaan koodiin.

Ohjelmaesimerkki

Esimerkki Windows-ohjelmasta Hei, maailma! ”, joka tulostaa tämän viestin funktiolla MessageBoxja päättyy:

muoto pe gui 4 .0 merkinnän alku sisältää ' win32a.inc ' aloita: kutsu MessageBox , NULL , viesti , viesti , MB_OK kutsu ExitProcess , 0 viesti db ' Hei , maailma ! ' , 0 tietojen tuontikirjasto kernel32 , ' kernel32.dll ' , \ user32 , ' user32.dll ' sisältää ' api / kernel32.inc ' sisältää ' api / user32.inc ' lopputiedot _ _

Tai näin:

include ' win32ax.inc ' .code main: invoke MessageBox , NULL , ' Hei , Maailma ! ' , ' Fasm - viestilaatikko : ' , MB_OK kutsu ExitProcess , 0.end main _

Monimutkaisempi versio PE-tiedoston osioiden selvennyksellä :

muoto pe gui -merkinnän alku sisältää ' win32a.inc ' osio ' .data ' tiedot luettavissa kirjoitettavissa viesti db ' Hei , maailma ! ' , 0 osa ' .code ' koodi luettavissa suoritettava aloita: kutsu MessageBox , NULL , viesti , viesti , MB_OK kutsu ExitProcess , 0 osio ' .idata ' tuo data luettava kirjoitettava kirjasto kernel32 , ' kernel32.dll ' , \ user32 , ' user32.dll ' tuonti kernel32 , \ ExitProcess , ' ExitProcess ' tuonti user32 , \ MessageBox , ' MessageBoxA '

Esimerkki yksinkertaisesta konsoliohjelmasta .COM -muodossa :

org 100h _ mov ah , 9 h mov dx , hei int 21 h mov ah , 8 h int 21 h int 20 h hei db 13 , 10 , " Hei , maailma ! $ "

Esimerkki yksinkertaisesta ohjelmasta ELF -muodossa .

muoto ELF suoritettavan 3 merkinnän alku segmentin luettavissa oleva suoritettava tiedosto aloitus: mov eax , 4 mov ebx , 1 mov ecx , msg mov edx , msg_size int 0x80 mov eax , 1xor ebx , ebx int 0x80_ _ segmentti luettavissa kirjoitettava msg db ' Hei maailma ! ' , 0xA msg_size = $-msg

Tulostustiedostomuoto

Ohjeen avulla formatvoit määrittää seuraavat tulostustiedostomuodot:

  • MZ- DOS -  suoritettavat tiedostot .
  • PE- Windowsin  suoritettavat tiedostot (konsoli, graafiset sovellukset ja dynaamiset kirjastot).
    • PE64 - Windowsin 64-bittisten versioiden suoritettavat tiedostot.
  • COFF, MS COFF, MS64 COFF ovat objektitiedostoja.
  • ELF, ELF64 ovat suoritettavia tiedostoja Unix-tyyppisissä järjestelmissä .
  • ARM — harrastajien kehittäminen [5] .
  • Binary - mielivaltaisen rakenteen tiedostot. 100h ( ) offsetin määrittäminen tuottaa .COMorg 100h - muotoisen suoritettavan tiedoston . Voit myös koota datatiedostoja [6] -sovelluksella .format binary

Käyttöjärjestelmät

Sovellus

FASM-kielellä kirjoitetut käyttöjärjestelmät:

  • Ville Turijanmaa DexOS
  • MenuetOS - Ville Turijanmaan 32- ja 64-bittiset graafiset käyttöjärjestelmät
  • KolibriOS - MenuetOS:n haarukka

Kääntäjät, jotka käyttävät FASM:ää taustakokoonpanona:

FASM-pohjainen IDE:

  • Fresh on John Foundin perustama yhteisön tukema projekti

Tuki fasmille kolmannen osapuolen ohjelmistoissa

Fasm-syntaksin tukitiedosto tulee Vim -peruspaketin mukana .

Fasmin käyttöä tukevat monet erikoistuneet IDE :t , kuten RadASM , WinAsm Studio , Fresh (suunniteltu erityisesti fasmille) jne.

Muistiinpanot

  1. 1 2 Flat assembler  lataus . flatassembler.net . Haettu 26. elokuuta 2019. Arkistoitu alkuperäisestä 31. elokuuta 2019.
  2. https://github.com/tgrysztar/fasm/blob/752cc50465e38a98a2b6ed1161983988e4d5f61a/LICENSE.TXT
  3. Tomasz Grysztar. Flat Assembler Programmer's Manual  (englanniksi)  (downlink) . Haettu 27. toukokuuta 2012. Arkistoitu alkuperäisestä 31. toukokuuta 2012.
  4. Randall Hyde. Mikä Assembler on paras?  (englanniksi)  (linkki ei ole käytettävissä) . Haettu 27. toukokuuta 2012. Arkistoitu alkuperäisestä 31. toukokuuta 2012.
  5. FASM ARM  . flatassembler.net .
  6. Virallinen keskustelupalsta kuvien luomisesta fasm-  makroilla . Haettu 26. elokuuta 2019. Arkistoitu alkuperäisestä 4. elokuuta 2020.

Linkit