y86-64 konekieli¶
Osaamistavoitteet: y86-konekielen toteutus ja miten se peilautuu y86-assembly-kieleen.
Konekieli on laitteistoriippuvainen esitystapa tietokoneohjelmalle suorittimen suoraan ymmärtämällä kielellä. Konekieli määritellään käskykanta-arkkitehtuurin kautta, jonka toteutusta suorittimen digitaalipiireillä kutsutaan mikroarkkitehtuuriksi. Suorittimen arkkitehtuuri koostuu siis käskykanta-arkkitehtuurista ja mikroarkkitehtuurista. Mikroarkkitehtuurissa on kaksi osaa: tiedonkäsittelyosa (engl. datapath) ja kontrolliosa, joka toteuttavat suorittimen toiminnan tarvitseman sekvenssilogiikan. Konekielen käskyt toteutetaan rekisterisiirtoina ja mikro-operaatioina rekistereissä olevalle datalle.
Edellisessä materiaalissa kävimme läpi y86-assemblykielen käskyt. Tässä kappaleessa esitämme niitä vastaavan konekielen käskykannan.
Käskykanta-arkkitehtuuri¶
Käskykanta-arkkitehtuuri (engl. Instruction set architecture, ISA) kuvaa siis konekielen toteutuksen suorittimen arkkitehtuurissa, mutta paljon muutakin.
Käskykanta-arkkkitehtuuri koostuu seuraavista osa-alueista:
- Tietotyypit
- Suorittimen tila
- Rekisterit
- Osoitusmuodot
- Muistin arkkitehtuuri: virtuaalinen muistiavaruus
- Keskeytysten ja poikkeustilanteiden käsittelyn
- Ulkoiset liitynnät (I/O): rekisterit, osoiteavaruus
- Käskykanta, jossa käskyt jaetaan seuraavasti
- Aritmeettiset operaatiot
- Loogiset operaatiot
- Siirto-operaatiot
- Ohjelman suoritusta ohjaavat käskyt
Sama käskykanta-arkkitehtuuri voidaan toteuttaa erilaisilla mikroarkkitehtuureilla. Esimerkkinä x86- tai Intelin IA-32- ja IA-64-käskykanta-arkkitehtuurit, joille on lähes identtiset toteutukset eri valmistajien suorittimissa: Intel, AMD, SPARC, jne.
Konekielen käskyt¶
Konekielen käskyt koostuvat kahdesta osasta:
- Operaatiokoodi (engl. opcode), joka kertoo suoritettavan käskyn / (mahdollisesti) funktion
- Operandit : vakioarvo / muisti / rekisteri eri osoitusmuodoissa
Operandeihin liittyen jokaisella rekisterillä on oma numerokoodinsa (alla kuvassa harmaa heksaluku). y86:sessa koodi on nelibittinen, jolla saadaan esitettyä kaikki 15 rekisteriä. Lisäksi yhdellä tavulla saadaan esitettyä käskyn molemmat operandit, lähderekisteri (engl. source) ja tulosrekisteri (kohderekisteri, engl. destination). Numero
0xF
tarkoittaa tyhjää operandia, eli rekisteri-operandia ei käskyssä tarvita, kun operandi on vakioarvo tai muistista haettu arvo.Jokaista konekielen käskyä vastaa 1-10 tavua seuraavasti.
r1
ja r2
ovat lähde- ja kohderekisterit. Käskyn ensimmäinen kaksiosainen tavu kertoo käskyn operaatiokoodin, jonka ensimmäinen osa käskytyyppi ja toinen osa käskyn toiminto (funktio). Tästä lisää seuraavassa materiaalissa. Huomatkaa samankaltaisten käskyjen hierarkinen ryhmittely.
Seuraavat tavut kertovat käskyn operandit.
- Kahden rekisteri-operandin tapauksessa operandien kuvaamiseen riittää yksi tavu.
- Vakiota tai muistiosoitteita käytettäessä tarvitaan lisäksi 8 tavua 64-bittisen arvon kuvaamiseen. Tässä tavujärjestys on little endian. Tällöin toinen rekisterioperandi, eli se mitä ei käskyssä tarvita, on merkitty koodilla
F
. - Siirtymä tarkoittaa epäsuorassa muistiosoituksessa mahdollisesti olevaa numeroarvoa, josta ja rekisterin arvosta varsinainen muistiosoite lasketaan.
Mikäli konekielen käskyn operaatiokoodi tai operandit ovat virheellisiä, suoritin aiheuttaa poikkeuksen
INS
. Jos muistiosoitteessa on virhe, aiheutuu siitä poikkeus ADR
. Erillistä poikkeuksien käsittelijämekanismia y86-prosessorissa ei ole, vaan kaikki poikkeukset pysäyttävät sen toiminnan.
Myöskään ulkoisia I/O-liittymiä ei ole, mutta ne voitaisiin teoriassa kuvata osana muistiavaruutta.
Esimerkkejä.
Assembly | Konekielen käsky | Selitys |
cmovg %rax,%rcx | 2601 | cmovg=26 rax=0 rcx=1 |
irmovq $0x1234,%rsi | 30f63412000000000000 | irmovq=30 F=ei-reg rsi=6 vakioarvo=1234 |
addq %rdi,%rax | 6070 | addq=60 rdi=7 rax=0 |
jne 0x3c | 743c00000000000000 | jne=74 osoite=3c |
ret | 90 | ret=90 |
pushq %rbx | a03f | pushq=a0 rbx=3 F= ei-reg |
Lopuksi¶
Käskykanta-arkkitehtuuri on yleisesti ohjelmoijan näkökulma suorittimen toteutukseen digitaalisina komponentteina. Tässä lyhyessä materiaalissa ja aiemmassa assembly-kielen materiaalissa esitettiin y86-64-prosessorin käskykanta-arkkitehtuuri.
Anna palautetta
Kommentteja materiaalista?