Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan erilaisia tietokoneita? 2
Binäärikoodin ja -lukujen kirjoittaminen ei ole ihmisille kovin mielekästä. Siksi kannattaakin miettiä tarkoitukseen sopivaa (ohjelmointi)kieltä, jolla voitaisiin esittää kaikki algoritmit. 3
Tietojenkäsittelyn perusteet 2 Konekielinen ohjelmointi 4
Konekielinen ohjelmointi 5
(Symbolinen) konekieli Boberg J 2010 Ikonen L 2011 Konekielen abstraktiotaso on korkeampi kuin mikro-ohjelmien käskyjen (mutta luonnollisesti matalampi kuin korkeamman tason ohjelmointikielten, kuten C ja Python): Lähempänä ihmisen ajattelutapaa Ei tarvitse välittää mikro-ohjelmoitavan tietokoneen teknisistä yksityiskohdista: mitä seurauksia tästä on? Helpompi käyttää Konekielinen käsky koostuu useammasta mikrokäskystä. 6
Abstrakti konekielikone 3 erikoisrekisteriä: PC (program counter) IR (instruction register) ACC (accumulator, yleiskäyttöinen rekisteri) Päämuisti RAM (konekielen käskyt, käsiteltävä tieto) 7
Konekielen käskyt Symbolinen käsky LOAD M Toiminto ACC <- (M) STORE M (M) <- ACC ADD M ACC <- ACC + (M) SUBTRACT M ACC <- ACC - (M) MULTIPLY M ACC <- ACC * (M) DIVIDE M ACC <- ACC / (M) (kokonaislukujakolasku) JUMP M Hyppää M:ään JUMPZERO M Hyppää M:ään, jos ACC = 0 JUMPNEG M Hyppää M:ään, jos ACC < 0 JUMPSUB M Hyppää M:stä alkavaan aliohjelmaan RETURN M Palaa M:stä alkaneesta aliohjelmasta 8
Konekielen ominaisuuksia Yksiosoitekieli: Toinen operandeista aina jokin muistipaikka M Toinen operandeista aina sama (implisiittisesti) ACC Kaksi- ja kolmiosoitekielissä toinen operandi voi olla muu kuin akku. Kolmiosoitekielissä tuloksen voi viedä tiettyyn muistipaikkaan. 9
Konekielen ominaisuukaia Käskyt talletetaan päämuistiin binäärikoodina. Käskyt suoritetaan yksi kerrallaan peräkkäin, ellei suoritusjärjestystä muuteta erikseen (esim. JUMP M). Sananpituus 16 bittiä, RAM-osoite 12 bittiä (4096 eri osoitetta), joten itse käskyn koodaamiseen on 4 bittiä: Operaatiokoodi ja operandiosa Operaatio suoritetaan operandin osoittamasta päämuistin muistipaikasta löytyvälle datalle (ja akku on toinen operandi, jos toista tarvitaan). Tässä konekieliversiossa lukuvakioita ei ole käytettävissä (tarvittavat vakiot pitää hakea muistipaikasta, mihin ne on talletettu), mutta kieltä voidaan laajentaa sisältämään myös välitön osoitus (LOADI) saadaan vakiot mukaan. 10
Osoitustavat Osoitustapa: tapa, millä konekielen käskyn osoiteosa määrää käskyn todellisen operandin. Osoitustavat: Välitön osoitus Suora osoitus Epäsuora osoitus Indeksoitu osoitus Epäsuora indeksoitu osoitus 11
Osoitustavat Välitön osoitus / Immediate adressing: Käskyn operandiosa on itsessään käsiteltävää tietoa (esim. lukuvakio) LOADI arvo ACC arvo Suora osoitus / Direct addressing: Käsiteltävä tieto operandiosan ilmoittamassa muistiosoitteessa LOAD osoite ACC (osoite) 12
Osoitustavat Epäsuora osoitus / Indirect addressing: Operandiosan ilmoittamasta rekisteristä löytyy muistiosoite, jossa tieto on LOADID rekisteri ACC ((rekisteri)) Indeksoitu osoitus / Indexed addressing: Operandiosan ja indeksirekisterin sisällön summasta saadaan muistipaikan osoite, jossa tieto on LOADIX arvo ACC (arvo+(indeksirekisteri)) Indirect indexed addressing: Operandiosan ilmoittaman muistipaikan ja indeksirekisterin sisältöjen summasta saadaan osoite muistipaikkaan, jossa tieto on. LOADIDX osoite ACC ((osoite)+(indeksirekisteri)) 13
Osoitustavat 14
Suoritusjärjestyksen ohjaus Ehdoton hyppy: JUMP M Ehdollisia hyppyjä: JUMPZER M hyppää osoitteeseen M, jos ACC=0 JUMPNEG M hyppää osoitteeseen M, jos ACC<0 Hyppy aliohjelmaan ja takaisin: JUMPSUB M hyppää osoitteeseen M, josta alkaa aliohjelma RETURN M palaa aliohjelmasta, joka alkoi osoitteesta M 15
Aliohjelman toimintamekanismi Olkoon muistipaikassa mpp käsky JUMPSUB mpa. Silloin muistipaikkaan mpa kirjoitetaan paluuosoite mpp+1 ja suoritus jatkuu osoitteesta mpa+1. Kun suoritus sitten päätyy aliohjelman päättävään käskyyn RETURN mpa, siirtyy kontrolli takaisin paikasta mpa löytyvään paluuosoitteeseen mpp+1. Näin samaa aliohjelmaa voidaan kutsua useasta kohtaa ja kyetään palaamaan takaisin kutsua seuraavaan käskyyn. 16
Esimerkki: 2:n potenssin laskeminen Algoritmi 2:n potenssin laskemiseksi konekielellä. Ohjelma osoitteissa 371380, dataa osoitteissa 381383. M0DULE exp(n) RETURNS 2n arvo := 1 WHILE n > 0 DO n := n - 1 arvo := arvo + arvo ENDWHILE RETURN arvo ENDMODULE 371 372 373 374 375 376 377 378 379 380 381 382 383 LOAD 383 STORE 382 LOAD 381 JUMPZERO 384 SUBTRACT 383 STORE 381 LOAD 382 ADD 382 STORE 382 JUMP 373 n 0 1 Hae ykkönen akkuun Talleta ykkönen (funktion) alkuarvoksi Hae n akkuun Jos n = 0, hyppää muistipaikkaan 384 eli lopeta Vähennä n:stä yksi Talleta n:n uusi arvo ACC arvo ACC arvo + arvo arvo ACC Hyppää iteraation alkuun funktion arvo laskennassa tarvittava lukuvakio 17
Esimerkki: 2x + 2y MODULE summa(x, y) RETURNS 2x+2y RETURN exp(x) + exp(y) ENDMODULE 287 288 289 290 291 292 293 294 295 296 297 298 LOAD 314 STORE 311 JUMPSUB 299 LOAD 312 STORE 316 LOAD 315 STORE 311 JUMPSUB 299 LOAD 312 ADD 316 STORE 316 JUMP 317 Hae x akkuun Talleta x aliohjelman syötteeksi Suorita aliohjelma, ts. laske 2X Hae aliohjelman tulos 2X akkuun Talleta lopputuloksen arvoksi Hae y akkuun Talleta y aliohjelman syötteeksi Suorita aliohjelma, ts. laske 2y Hae aliohjelman tulos 2y akkuun Lisää 2x akun (= 2y) arvoon Talleta lopputulos Lopeta ohjelman suoritus Aliohjelma: 299 0/290/295 alku, paluuosoite 300 LOAD 313 aliohjelman koodi 301 STORE 312 302 LOAD 311 303 JUMPZER 310 304 SUBTRACT 313 305 STORE 311 306 LOAD 312 307 ADD 312 308 STORE 312 309 JUMP 302 310 RETURN 299 paluu pääohjelm. 311 0 aliohjelman syöte 312 0 aliohjelman tulos 313 1 314 x ohjelman syöte x 315 y ohjelman syöte y 316 0 lopputulos 18
Konekielen tulkki mikroohjelmoitavalle tietokoneelle Tulkki on mikro-ohjelma joka ymmärtää ja suorittaa konekielisiä käskyjä. Toimintaperiaate: Hakee käskyn päämuistista Selvittää käskyn sisällön Toteuttaa käskyn Seuraavan käskyn osoitteen on oltava tulkin tiedossa. Symbolisen konekielikoneen rekisterien toteutus mikroohjelmoitavassa tietokoneessa: Rekisteri A ACC Rekisteri MDR (neljä eniten merkitsevää bittiä määräävät käskyn, loput päämuistin osoitteen) IR Rekisteri B ohjelmalaskuri PC 19
Konekielen tulkki mikroohjelmoitavalle tietokoneelle Tulkki Konekielinen ohjelma 20
Yhteenveto Konekieli on tietokonekohtainen ohjelmointikieli (symbolinen vs. binäärinen), mutta kone ei välttämättä vastaa suoraan laitteistoa ja sen komponentteja. Oikeiden tietokoneiden konekieli on monipuolisempaa kuin esimerkkikoneemme. Konekielen tulkkiohjelma on talletettu kiinteästi tietokoneen muistiin muistipaikasta nolla alkaen ja tulkkiohjelmaa aletaan suorittaa asettamalla MPC:hen 0. Korkean tason kielet käännetään konekielelle kääntäjällä ja konekielinen ohjelma suoritetaan tulkin avulla. 21