Intel 8086

Intel 8086 (eräissä Intelin omissa teksteissä "iAPX 86") on Intelin vuonna 1978 kehittämä mikroprosessori. 8086 käyttää sisäisesti 16-bittistä tekniikkaa ja siinä on 16-bittinen oheislaiteväylä. 8086 oli ensimmäinen x86-arkkitehtuurin suoritin. Se suunniteltiin edeltäjänsä Intel 8080:n pohjalta, jonka assembly-kielinen lähdekoodi voitiin pienellä vaivalla muuttaa 8086:lle.
Intel 8086:n kellotaajuudet olivat välillä 5 MHz ja 10 MHz.
8086 ei tukenut liukulukumatematiikkaa vaan siihen tarvittiin erillinen lisäprosessori. Yleisin oli Intel 8087, mutta myös Weitek tarjosi omaa malliaan eri käskykannalla.
NEC kloonasi 8086:n ja tuotti NEC V20-, V25- ja V30 -malleja.
8086:n kehityksen lähtökohtana oli Datapoint 2200 -tietokone/pääte. Laite oli suunniteltu ennen mikroprosessoria, joten suoritin on toteutettu TTL-logiikkapiireillä. Datapoint pyysi Inteliä ja Texas Instrumentsia toteuttamaan koko piirilevyn yhdellä mikropiirillä. Datapoint 2200:n arkkitehtuurin mukaan TI toteutti TMX 1795 -suorittimen vuonna 1971 ja Intel 8008 -suorittimen vuonna 1972. Datapoint kuitenkin hylkäsi molemmat toteutukset. TI ei löytänyt omalle suorittimilleen käyttöä, mutta Intel päätti myydä 8008:ta. 8008:n seuraajia olivat 8080 (1974) ja 8085 (1976). Intel päätti 1975 kehittää uuden 8800-suorittimen 1980-luvun vaatimuksia vastaamaan. Projektista tuli liian kunnianhimoinen ja monimutkainen ja se viivästyi. Tämän vuoksi Intel kehitti pikaisesti 16-bittisen 8086:n 8080:n pohjalta.
Säästääkseen kustannuksia Intel kehitti prosessorista myös 8-bittisellä ulkoisella väylällä varustetun version, jolle annettiin nimeksi Intel 8088. IBM valitsi 8088-prosessorin IBM PC -tietokoneensa suorittimeksi, josta juontaa suoritinperheen yleisyys.
Ominaisuudet.
Prosessorin ohjelmointi on melko monimutkaista. Siinä on neljä melkein yleiskäyttöistä 16-bittistä rekisteriä ja neljä indeksirekisteriä, joista yksi varataan pinorekisteriksi. Monet käskyt toimivat jonkun tietyn rekisterin kanssa, mikä vaikeuttaa rekisterien varausta. Yksi konekielikäsky vie 1–6 tavua.
8086 on aikaisekseen monimutkainen mikroprosessori ja sisältää 29 000 transistoria. 16-bittinen ALU tukee aritmeettisia, boolelaisia loogisia operaatioita ja bittien siirtoja tavussa. ALU ei toteuta kerto- tai jakolaskua, vaan nämä tapahtuvat mikrokoodilla bittisiirtojen ja lisäysten/vähennysten avulla, ja ovat hitaita. Suorittimen mikrokoodi vie suuren osan suorittimen pinta-alasta mutta mahdollistaa suorittimen suhteellisen monimutkaiset ominaisuudet kuten merkkijonojen kopioinnin.
8086:n suunnittelu osui aikaan, jolloin RAM-muistin nopeus oli jäämässä suorittimien jälkeen. 8086 on mahdollisesti ensimmäinen mikroprosessori, jossa käskyt haetaan muistista etukäteen ennen niiden suoritusta ("prefetch"). 8086 sisältää 6 tavun esihakupuskurin (8 bitin muistiväylällä varustetussa 8088:ssa 4 tavua), mikä riitti parantamaan suorittimen suorituskykyä 50 %. Ominaisuus on toteutettu rengaspuskurina ja se hyödyntää myös suorittimen ohjelmalaskuria, jonka arvosta vähennetään tarvittaessa puskurissa olevien tavujen määrä esimerkiksi suhteellisia hyppykäskyjä käytettäessä tai aliohjelmakutsun paluuosoitetta tarvittaessa. Hyppykäskyn yhteydessä esihakupuskuri tyhjennetään. Tämä monimutkaisti huomattavasti myös suorittimen muistinkäsittelyä, sillä käskyjen lataus kilpailee ohjelman suorittamien muistihakujen kanssa. Suunnittelijat jakoivat suorittimen kahteen osaan, joista Bus Interface Unit (BIU) suorittaa muistihaut ja Execution Unit (EU) suorittaa konekielikäskyjä.
Yksi haasteista on, kuinka 16-bittisillä rekistereillä voi käsitellä enemmän kuin 64 kilotavua muistia.
Suoritin käyttää segmentoitua muistiavaruutta.
Suorittimen 20-bittinen osoiteavaruus on toteutettu siten, että neljä erillistä segmenttirekisteriä osoittaa 64 kilotavun data-, ohjelmakoodi-, pino-, tai ekstrasegmentin alkuosoitteen 16 tavun tarkkuudella. Indeksirekisterillä puolestaan osoitetaan 64 kilotavua dataa, ohjelmakoodia tai pinoa segmentin sisältä. Muistiosoite saadaan kertomalla segmenttirekisteri 16:lla ja lisäämällä siihen indeksirekisteri. Tämä mahdollistaa osoitettavan muistin määräksi yhden megatavun + 64 kilotavua − 16 tavua. Yhtä muistiosoitetta voi osoittaa jopa 4 096:lla rekisterien yhdistelmällä. Muistiosoitteiden laskenta on toteutettu omalla yhteenlaskupiirillään, joten se ei kuormita suorittimen ALU-yksikköä.
Muistinhallintaa parannettiin 8086:n seuraajissa Intel 80286:ssa ja Intel 80386:ssa, jotka tarjosivat käyttöön lineaarisen (segmentoimattoman) muistimallin ja muistinsuojauksen. Kuitenkin alkuperäiset 8086:n rajoitukset vaikuttivat pitkälle 1990-luvun puoliväliin ja sen jälkeen, koska kaikki MS-DOSin ohjelmat käyttivät uudemmissakin koneissa 8086-yhteensopivaa tilaa. Tästä johtui myös DOSin kuuluisa 640 kilotavun muistirajoitus (DOS antoi osan 1 MB:n muistiavaruudesta oheislaitteiden käyttöön).