Assembly

Mureakuha

Loikkaa: valikkoon, hakuun

Assembly on ohjelmointikielten alaluokka ja tarkoittaa symbolisia konekieliä. Tietokoneiden ymmärtämät konekielet ovat luvuista koostuva sarja käskyjä. Symbolinen konekieli havainnollistaa konekieltä ohjelmoijaa varten määrittelemällä konekielen toiminnoille kirjoitetun kielen kaltaisen ulkoasun. Assembly-kielessä on siten lähes sama rakenne ja komennot kuin varsinaisessa konekielessä, mutta tekstimuotoisuus mahdollistaa ohjelman lukemisen, kirjoittamisen ja ymmärtämisen. Konekieli ja siis myös assembly ovat sidonnaisia tiettyyn suoritinperheeseen.

Assembly-kielinen ohjelma muutetaan konekielelle assembleriksi nimetyllä kääntäjällä. Samaa laiteympäristöä varten voi olla useita eri syntakseja noudattavaa assembly-kieltä ja niille omat kääntäjänsä. Assembly-kieliä ovat muun muassa Intel x86 Assembly ja AT&T Assembly, jotka ovat molemmat x86-konekielen symbolisia esitysmuotoja. Sen sijaan esimerkiksi ARM-konekielen kirjoittamiseen käytetään ARM-assemblyä.

Assembly-kieli antaa ohjelmoijalle täyden määräysvallan suorittimelle syötettävän komentosarjan suhteen, ja siksi sitä käyttämällä voidaan hyödyntää tietokoneen resurssit tehokkaasti. Assemblyä ei juurikaan käytetä nykyaikaisten PC:n kaltaisten koneiden ohjelmoinnissa, paitsi erityisen laitteistoläheistä ohjelmointia vaativissa tehtävissä, kuten laiteohjaimissa, joskus myös suurta nopeutta vaativien tehtävien optimoinnissa, kuten salauksessa ja videokoodauksessa. Mobiililaitteiden ja muiden pienten sulautettujen järjestelmien ohjelmoinnissa on assemblyllä kuitenkin jonkin verran vahvempi asema. Kokonaisia ohjelmia ei tosin näillekään järjestelmille ole kovin mielekästä ohjelmoida pelkällä assemblyllä.

Korkean tason kielten kääntäjät ovat kehittyneet huomattavasti aikojen kuluessa ja se on vähentänyt tarvetta kirjoittaa konekieltä käsin. Nykyään konekieltä käytetään nostamaan pienten ja usein suoritettavien ohjelman osien nopeutta. Esimerkiksi vektorilaskutoimitukset saatettaisiin ohjelmoida konekielellä laskettavaksi vektorilaskuyksikössä, koska kääntäjä ei syystä tai toisesta tee sitä itse. Tällainen optimointi on yleistä esimerkiksi videopakkauksen purkamisessa. Toisaalta uudet suorittimet ovat sisäiseltä toiminnaltaan niin monimutkaisia, että kääntäjän tuottaman koodin kirjoittaminen käsin nopeammaksi on monesti käytännössä vaikeata tai se ei ole vaivan arvoista. Muistilatenssien kasvaminen on saanut aikaan tilanteen että tietyissä sovelluksissa muutama ylimääräinen laskutoimitus ei sinänsä hidasta ohjelman toimintaa mitenkään, koska suurin osa suoritusajasta kuluu muistin toiminnan odottamiseen. Tällaisissa tapauksissa ei ole hyödyllistä kirjoittaa koodia käsin koska muistin nopeus ei riipu siitä, mikä konekielen on tuottanut.

Lisäksi esimerkiksi tehokkaiden algoritmien ja tietorakenteiden valinta saattaa suurempia kokonaisuuksia assemblyllä kirjoittavalta jäädä pahasti taka-alalle, koska sellaisten algoritmien toteuttaminen voi olla konekielellä liian työlästä.

Puhtaan assembly-kielen käyttöä on perinteisesti puoltanut myös ohjelmakoodin tiiviys verrattuna kääntäjien tuottamaan konekieleen. Etenkin varhaisten tietokoneiden ferriittirengasmuistit, kotitietokoneiden muistit sekä sulautettujen järjestelmien ohjelmamuistit ovat olleet verrattain pieniä ja asettaneet tiukan rajan suoritettavan ohjelman koolle. Assembly-kielellä toteutettuun ohjelmaan voitiin koodata vain sovelluksen tarvitsemat toiminnot, kun taas esimerkiksi FORTRAN- tai Algol-kielellä toteutetut ohjelmat toivat aina mukanaan 'ylimääräistä' koodia. Tyypillinen kokoero oli n. 1/10 'kehittyneimpiin' kieliin nähden.


Tämä artikkeli on alun perin kopioitu Wikipediasta. Sen sisältö julkaistaan GDFL-lisenssin alaisena:
Tämän dokumentin kopiointi, levittäminen sekä muokkaaminen on sallittua GNU Free Documentation Licensen version 1.2 tai uudemman Free Software Foundationin julkaiseman version mukaisesti, ilman muuttumattomuuslauseketta tai kansitekstejä. Tätä koskee vastuuvapaus.
Kopio lisenssistä (englanniksi) löytyy täältä.
Henkilökohtaiset työkalut