perjantai 29. kesäkuuta 2007

Können Sie ASM sprechen?

Tunnen itseni petetyksi, isosti.

Koko kooderin urallani kaksi asiaa on näyttänyt täysin mahdottomilta, mutta molemmat paljastuneet myöhemmin pelkiksi flopeiksi. Ensimmäinen näistä, tiedostojenkäsittely, vaikutti alkuun yliluonnollisen mystiseltä ja ylitsepääsemättömän hankalalta. Pienikin toive kavereilta hi-score-listojen tallennukseen pikkupeleissäni nosti kylmän hien pintaan ja sai ahdistumaan kuin teini-ikäisen tämän ensimmäisessä työhaastattelussa.

Myöhemmin tiedostojenkäpistely paljastui suureksi flopiksi ja kyse olikin vain kolmen API-kutsun käytöstä (useimmissa käyttämissäni ohjelmistoympäristöissä):
- open
- write/read
- (flush &) close

Just. Nyttemmin ottaa pannuun (siis viimeiset 6 vuotta) kun entiset YAT:in (Yet Another Tetris) hi-scoret eivät ole turvassa backupin, backupin, backupin, backupilla, jossakin zip-paketissa itse sorsan kanssa. Nykyään ei myöskään sen näköseen sorsaan koske edes metrisellä tikulla, eli toistaiseksi päivityksiä ei ole luvassa.

Toinen suuri mysteeri, Assembler-kielet, paljastui suureksi flopksi viime yönä, lukiessani tuoreinta kirjaani: "Inside the Machine" (J. Stokes, No Starch Press, 11/2006).


x86-koneiden ISA (Instruction Set Architecture), eli nk. konekieli, tai "äärimmäinen low-level-ohjelmointi", tuottaakin loppujen lopuksi koodia emulaattorille. Tai ainakin melkein.

Selvisi, että nykypäivän x86-ISA:n (ja sen laajennukset) toteuttavat hardwaret on näköjään harvoin ISA:n "näkösiä". Prosessoreissa on nimittäin Decode-niminen vaihe, jonka läpi "konekieleksi" käännetyt ohjelmat ajetaan, ja tämä puolestaan tuottaa sitä ihan aitoa, prosessorin syvimmän ytimen ymmärtävää konekieltä.

Selvisi myös, että x86-yht.sop. ytimissä on enemmän rekistereitä, kun ISA käyttäjälleen paljastaa. Stokesin kirjassa esimerkkinä käytetyssä virtuaalikoneessa näitä on nelinkertainen määrä (No Morjens!) ja niitä ohjataan erillisen rekisteritaulun kautta ALU:lle (Arithmetic Logic Unit).

Siis v*ttu kelatkaa, kenenkään meistä ei ois enää Pentiumin keksimisen jälkeen tarvinut välittää legacy-x86:sta ollenkaan. Jostain kumman syystä Intel kuitenkin päätti tehdä peliliikkeen, ja säilyttää (silloin tuotannollisesti varsin kalliin) tuen vanhan koodin ajoon.

Ja tässä asenteeni x86:n ASM:n yrsiyttä kohtaan muuttui, sekä jouduin nostamaan hattua mainosmiehille ja markkina-analyytikoille ehkä ensimmäistä kertaa elämässäni. Tuskin olisi tätäkään tekstiä Core 2 Duo:n voimalla kirjoitettu, mikäli insinöörit olisivat saaneet päättää, tuetaanko x86:tta, vai käytetäänkö se 30% piikiekon pinta-alasta vaikkapa isompaan välimuistiin (cache) tai laajempaan pipelineen.

Amen.

Ei kommentteja: