Haluasin tietää kannattaako alkaa harrastamaan Assembler ohjelmointia? Ja haluaisin tarkkaa tietoa minkälaisesta ohjelmointikielestä on kyse.
Kieli siinä missä muukin. Hyvin yksinkertainen loppujen lopuksi.
No kannattaako mitään ohjelmointia harrastaa?
Jos tarkoituksena on saada aikaan ohjelmia, niin Assembly ei välttämättä ole ihan paras vaihtoehto. Kyseessähän on siis symbolinen konekieli, eli jokainen käsky on yhsi prosessorin käsky. Sinänsä pienenkin ohjelman tekeminen on melkoisen vaivalloista mihin tahansa muuhun kieleen verrattuna. Bugien etsintä ei myöskään ole niitä helpoimpia. Toisaalta taas kaikki on mahdollista, joten tekemisiäsi ei rajoiteta juuri mitenkään.
Assemblyyn kannattaa joka tapauksessa jossakin määrin tutustua. Se avaa aivan uusia näkymiä koneen toimintaan ja auttaa ymmärtämään ohjelmointia syvällisemmin. Moniin kysymyksiin löytyy vastaus ja monet ongelmat ratkeavat aivan uusilla tavoilla.
Ennen assemblerin käyttö oli välttämätöntä nopeutta vaativissa ohjelmissa, mutta nykyään siitä ei ole useinkaan mainittavasti hyötyä. Kuitenkaan en tiedä monta yhtä hauskaa ohjelmoinnin aluetta. Kannattaa ainakin vähän perehtyä assemblyyn!
Assemblerin komennot vastaavat suoraan tietokoneen prosessorin ymmärtämiä komentoja, konekieltä. Tämän takia etevä assembler-ohjelmoija saa aikaan nopeampaa ja tiiviimpää koodia kuin yhdenkään toisen ohjelmointikielen käyttäjä. Toisaalta assembler on hyvin matalan tason ohjelmointikieli. Yksinkertaisenkin ohjelman toteuttaminen saattaa vaatia pitkän pätkän koodia, jonka korkeamman tason kielten kääntäjät lisäävät automaattisesti mukaan päästäen ohjelmoijan vähemmällä.
Uutta opeteltavaa on aluksi paljon, mutta asioiden ymmärtäminen on myös palkitsevaa. Tässä vielä muutaman tärkeän x86-assemblyn komennon esittely. Kokonaisten ohjelmien näytteitä löydät koodivinkeistä.
MOV kopioi tietoa rekistereihin ja muistiin JMP hyppää toiseen kohtaan ohjelmassa CMP vertailee kahta lukua ja asettaa vastaavat tilaliput (näin toteutetaan haarautumiset ja silmukat) INT keskeytyskutsu (DOSissa esim. tekstin tulostus näytölle) ADD SUB MUL DIV peruslaskutoimitukset INC DEC lisäys tai vähennys yhdellä AND OR XOR loogiset operaatiot
Jos korkeamman tason kielistä on kokemusta, Assemblyn perusteiden opettelu voi olla ihan palkitsevaa. Ainakin siinä oppii ymmärtämään miten prosessori toimii.
Hyötyä asmista on lähinnä käyttisohjelmoinnissa ja nopeutta vaativissa kohdissa korkeamman tason kielillä toteutetuissa ohjelmissa.
Jonkinlainen suomenkielinen opas löytyy osoitteesta http://www.kolumbus.fi/janne.silvo/jso/asmqrssi.
Kiitos Heikki että annoit tuon osoitteen! Nytt minulla on paljon helpompi lähestyä Assembler ohjelmointia. Kiitos kuuluu myös teille muillekin!
Itse en ole kokenut Assemblyn opettelua tarpeelliseksi. Useimmat raakaa laskentaa vaativat ohjelmat ovat tarpeeksi nopeita C:llä/C++:lla toteutettuna, kun nykyajan kääntäjän osaavat optimoida koodia. Ensisijaisesti kannattaa optimoida algoritmia tehokkaammaksi ja vasta tämän jälkeen ottaa Assembler esille mikäli muu ei auta. Toisaalta oheislaitteiden ohjelmoimiseen on olemassa valmiit, toimiviksi testatut kirjastot.
Tietysti jos aiot tulevaisuudessa ohjelmoida työksesi mobiililaitteita, on konekielen osaaminen välttämätöntä hitaan prosessorin ja rajoitetun muistin takia.
Mobiilivehkeet kun otettiin puheeksi, niin mainittakoon vielä että x86-assembly, josta tässä on keskusteltu, ei suinkaan ole ainoa (luonnollisesti; prosessoreja on erilaisia). Jos haluaa päästä helpommalla käskykannalla, voi kokeilla esim 6502-assemblyä (tai muuta 65xx-sarjalaista, niillä ei taida hirveästi eroa olla). 65xx:llä voi koodailla esim. C64:lle ja NES:lle.
Jos nyt enemmänkin Assembler kiinnostaa niin osta semmoinen kirja kuin Inside Assembler Ohjelmoijan käsikirja, It Press. Kirja on kyllä muistaakseni vähän kalliinpuoleinen.
Ja ainakin TI laskimiin käypi Z80 assy
Aihe on jo aika vanha, joten et voi enää vastata siihen.