Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit? 2012-2013 Lasse Lensu
Loogisia lausekkeita toteuttavien sähköisten piirien avulla voi laskea ja näkökulmasta riippuen voidaan ajatella, että kaikki tietojenkäsittely on laskemista. Muistiin talletettu tieto vaikuttaa tietokoneen toimintaan, joten tietokone ei suorita vain yhtä vakioalgoritmia. 2012-2013 Lasse Lensu
Tietojenkäsittelyn perusteet II Tietokoneen mikro-ohjelmointi
Tietokoneen mikro-ohjelmointi
Tietokoneen mikro-ohjelmointi Boberg J 2010 Mikro-ohjelmoitava tietokone: Rakenne Käytettävissä olevat toiminnot Mikro-ohjelmointi: Pseudokieli (algoritmin esitystapa) Symbolinen mikro-ohjelma (vrt. konekieli) Binäärinen mikro-ohjelma (mikrokäsky esitetään bittijonona, jossa toimintoja vastaavat ohjausbitit ovat 1)
Mikro-ohjelmoitavan tietokoneen toiminnot Tiedonsiirto rekisterien välillä sekä rekisterin ja päämuistin välillä Yhteen- ja vähennyslasku Kahdella kertominen Loogiset vertailut: A<0, A=0 Siirtyminen mikro-ohjelmassa: Siirtyminen seuraavaan käskyyn Ehdollinen ylihyppy (skip) Ehdoton hyppy (jump)
Mikro-ohjelmointi Periaatteessa tavallista ohjelmointia Jokainen mikrokäsky sisältää 5 alikäskyä: Alikäsky / kellon vaihe 5. vaihe: siirtyminen seuraavaan käskyyn Rekisteri kerrallaan väylälle Jokainen mikrokäsky suorittaa haarautumisen tai asetuksen
Esimerkki: ykkösbittien laskeminen Mikro-ohjelma, joka laskee rekisterin D sisällön osoittaman muistipaikan sisällön ykkösbitit rekisteriin C: Koska vain vasemman puolimmaista bittiä pystytään tutkimaan erikseen, täytyy laskenta tehdä siirtämällä lukua aina bitti vasemmalle. Jos luku < 0, niin silloin kyseisen bitin arvo on 1, muutoin 0.
Algoritmi pseudokielellä C:= 0 A:= hae(d) WHILE A <> 0 DO IF A < 0 THEN C:= C+1 ENDIF shiftleft(a) ENDWHILE Korvataan aliohjelmat mikrokäskyillä ja silmukat hyppykäskyillä:
Algoritmi tarkennettuna if: ohi: C := 0 MAR := D MDR := (MAR) A := MDR IF A = 0 THEN jump ohi ENDIF IF A < 0 THEN C := C+1 ENDIF shiftleft(a) jump if
Algoritmi edelleen tarkennettuna C := 0 MAR := D MDR := (MAR) A := MDR if: skip A = 0 jump ohi skip A < 0 C := C+1 shiftleft(a) jump if ohi:
Symbolinen mikro-ohjelma 1: 0+0 C; ; 1+MPC MPC 2: 0+D MAR; (MAR) MDR; 1+MPC MPC 3: MDR+0 A; ; 1+MPC MPC 4: ; ; (A=0) + MPC MPC (ehdollinen hyppy: c19=1) 5: ; ; 1010 2 MPC (ehdoton hyppy: c18=1) 6: ; ; (A<0) + MPC MPC (ehdollinen hyppy: c20=1) 7: 1+C C; ; 1+MPC MPC 8: (0+A) 2 A; ; 1+MPC MPC 9: ; ; 100 2 MPC 10:
Binäärinen mikro-ohjelma Vain ykköset merkitty, muut bitit nollia: o s o i t e 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 1 1 1 1 2 1 1 1 1 1 3 1 1 1 1 4 1 1 5 1 1 1 6 1 1 7 1 1 1 1 1 8 1 1 1 1 1 9 1 1
Esimerkki: kertolasku Mikro-ohjelmoitavan tietokoneen ALU ei sisällä kertolaskua. Kertolasku = toistettu yhteenlasku: Voidaan toteuttaa summana jossa lasketaan yhteen kertoja kappaletta tekijää, esim. 3 x 2 = 2 + 2 + 2. Algoritmi: MDR := 0 WHILE A <> 0 DO MDR := MDR + C A := A 1 ENDWHILE
Muutettu algoritmi ja symbolinen mikrokoodi MDR := 0 1: skip A = 0 jump 5 MDR := MDR + C A := A - 1; jump 1 5: Osoite Mikrokaskyn selvennys Selitys 0 0+0 MDR ; ; 1+MPC MPC MDR:lle alkuarvo; siirry seuraavaan kaskyyn 1 ; ; (A=0) + MPC MPC Haaraudu sen mukaan, onko A = 0 vai ei 2 ; ; 5+0 MPC A = 0 Poistu silmukasta (c1... c8 = 00000101) 3 MDR+C MDR; ; 1+MPC MPC A 0 Lisaa C MDR:aan 4-1+A A ; ; 1+0 MPC Pienenna A:ta, ja hyppaa silmukan alkuun
Algoritmin kompleksisuudesta Toistossa 3 mikrokäskyä (1, 3 ja 4). Kertojan (A) maksimiarvo 2 16 1 suoritettavia käskyjä noin 200 000. Kukin käsky vie 5 kellopulssia miljoona kellojaksoa. Koneen kellotaajuus määrää algoritmin suoritusajan. Voidaanko kertolaskua nopeuttaa? Miten?
Kertolasku koulualgoritmilla Allekkain kertolasku binääriluvuille:
Mikro-ohjelmoitavalle tietokoneelle muutettu algoritmi Algoritmitoteutus vasemmalta oikealle, koska vain ensimmäinen bitti tutkittavissa: Edellisen kalvon osasummat muodostetaan alhaalta ylöspäin. Kerrottava lisätään osasummaan 1 tai 0 kertaa riippuen kertojan bitistä. Vain kaksi lukua summattavissa kerrallaan, joten osasumma lisätään loppusummaan välittömästi. Shift-left -operaatiolla siirretään vanha osasumma ensin vasemmalle.
Muutettu kertolaskualgoritmi Sananpituus 16 16 osasummaa. Laskurin sijaan käytetään valeykköstä A:ssa:
Algoritmin kompleksisuudesta Silmukan pituus on joko 4 (käskyt 4,6,7,8) tai 6 (käskyt 4,5,9,11,12,13) ja jokaisella kierroksella käsitellään yksi bitti 15:stä. Siten suoritetaan enintään 4+15*6+4 = 98 käskyä. Aikavaatimus on lähes vakio eli se ei riipu kertojan suuruudesta: Algoritmi on noin 2000 kertaa edellistä nopeampi.
Yhteenveto Mikro-ohjelmoitavan tietokoneen muistiin talletettu tieto vaikuttaa tietokoneen toimintaan, joten se voi suorittaa erilaisia algoritmeja. Mikro-ohjelmoitavan tietokoneen rakenne (loogisista porteista koostuva laitteisto) määrää sen sisältämät toiminnot kaikki muut toiminnot on toteutettava mikro-ohjelmien avulla. Mikro-ohjelmoinnin esitystavat: Pseudokieli Symbolinen mikro-ohjelma Binäärinen mikro-ohjelma