Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Samankaltaiset tiedostot
Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

Kertausluento luennoista 1-3 1

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (4)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Tiedon sijainti suoritusaikana. Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Luento 5 (verkkoluento 5) Suoritin ja väylä

Luento 2 TTK-91 tietokone ja sen simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91 (1) TTK-91 laitteisto

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: rekisterit

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

Tietokoneen toiminta, K Tavoitteet (4)

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: tietotyypit (2)

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Luento 5 (verkkoluento 5) Suoritin ja väylä

Jakso 10 Ohjelman suoritus järjestelmässä

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Käännös, linkitys ja lataus

Luento 10 Käännös, linkitys ja lataus

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Jakso 10 Ohjelman suoritus järjestelmässä. Käännös Linkitys Dynaaminen linkitys Lataus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 10 Ohjelman suoritus järjestelmässä

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Tietokoneen toiminta (Computer Organization I)

Aihepiiri Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I)

Aihepiiri Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I)

Luento 10 Käännös, linkitys ja lataus. Käännös Linkitys Dynaaminen linkitys Lataus

Tietokoneen toiminta (Computer Organization I)

Lausekielestä suoritukseen (3) Luento 10 Käännös, linkitys ja lataus. Assembler-kielinen käännösyksikkö (2) Käännösyksikkö (4) Objektimoduuli (8)

Luento 10 Käännös, linkitys ja lataus

Tietokoneen toiminta (Computer Organization I)

Aihepiiri Tietokoneen toiminta (Computer Organization I) Tavoitteet (4) Mitä hyötyä tästä on? (4) Kurssien välisiä riippuvuuksia

Tietokoneen toiminta (Computer Organization I)

Jakso 4 Aliohjelmien toteutus

Lausekielestä suoritukseen (3) Luento 10 Käännös, linkitys ja lataus. Assembler-kielinen käännösyksikkö (2) Objektimoduuli (2) Symbolitaulu

Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I) Aihepiiri. Mitä hyötyä tästä on? (3) Tavoitteet. Kurssien välisiä riippuvuuksia

Tietokoneen toiminta (Computer Organization I)

Jakso 5 Suoritin ja väylä

1. Keskusyksikön rakenne

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Jakso 5 Suoritin ja väylä

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Tietokoneen toiminta (Computer Organization I) Mitä hyötyä tästä on? (4) Kurssien välisiä riippuvuuksia. Aihepiiri.

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Jakso 5 Suoritin ja väylä. Suorittimen rakenne Väylän rakenne Käskyjen suoritussykli Poikkeukset ja keskeytykset TTK-91:n ja KOKSI:n rakenne

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Jakso 4 Aliohjelmien toteutus

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 suorittimen rakenne (1) TTK-91 muistin rakenne. Käskyjen nouto- ja suoritussykli (5)

Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright Tavoitteet (4)

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat?

Järjestelmän ulkoinen muisti I/O

Tavoitteet (4) Luento 12 Yhteenveto. Keskeisiä asioita. Mitä hyötyä tästä on? (2) Esimerkkikone: TTK-91 laitteisto suoritin - CPU

Ttk-91 esimerkkitietokone ja sen simulaattori

Luento 5 Suoritin ja väylä

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Tietokoneen toiminta Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright 2010

Transkriptio:

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer) 1

Suorituksenaikainen suorittimen ja muistin sisältö muisti suoritin konekäskyjen suorituspiirit: suoritettava käsky (välimuisti) kirjastorutiinit Suoritettava ohjelma laiterekisterit käyttöjärjestelmä data väylä 2

Ohjelman esitysmuoto: Konekieli Suorittimen konekielen käskykanta määrittelee tietokoneen käskykanta-arkkitehtuurin ISA - Instruction Set Architecture Ohjelma keskusmuistissa konekielisenä (TTK-91) Konekielinen käsky 0: 0000 0010 000 00 000 0000 0000 0110 0100 1: 0000 0010 001 01 000 0000 0000 0110 0100 2: 0001 0100 001 00 000 0000 0000 0000 0000 3: 0010 0010 000 00 000 0000 0000 0000 0110 4: 0000 0001 001 00 000 0000 0000 1110 0100 5: 0000 0000 000 00 000 0000 0000 0000 0000 - opcode - Rj M Ri - ADDR: arvo, osoite - lukuna DEC: 33554532 DEC: 36175972 DEC: 337641472 HEX: 22000006 HEX: 012000E4 HEX: 00000000 3

Ohjelman esitysmuoto: symbolinen konekieli Usein symbolisella konekielellä käsky jaettu osiin (kenttiin) joidenkin kenttien arvot kuvattu symboleilla helpompi ihmisten lukea ja kirjoittaa Symb. konekieli LOAD R2, =100 LOAD R1, 100 DIV R1, R2 JZER 6 STORE R1, X NOP JZER Loop X 228 Konekielinen käsky 0000 0010 010 00 000 0000 0000 0110 0100 0000 0010 001 01 000 0000 0000 0110 0100 0001 0100 001 00 010 0000 0000 0000 0000 0010 0010 000 00 000 0000 0000 0000 0110 0000 0001 001 00 000 0000 0000 1110 0100 0000 0000 000 00 000 0000 0000 0000 0000 Keskustele 4

arvo osoite Symboli (nimi) data käskyt Ohjelman esitysmuotoja osoite sisältö N = I+J+K (Sta16 Fig 13.14) 5

TTK-91 konekieli Operaatio 8 bit Rj 3 b M 2 b Ri 3 b Attribuutti (arvo tai osoite) 16 bittiä Kukin käsky 32 bittiä. Oma operaatiokoodi kullakin käskyllä Käskyn rekisterien ja attribuuttien tulkinta riippuu käskystä ja osoitusmuodosta (M) Tietotyyppi: Vain 32-bittinen kokonaisluku (tai vain bittejä) EI: merkkejä, liukulukuja, totuusarvoja Keskustele 6

Suorittimen toiminta PC=0 alkuarvo start Käskyn nouto IR := mem (PC) Käskyjen noutoja suoritussykli Keskeytysten tarkastaminen (voi muuttaa PC:tä) Ohjelmalaskurin kasvatus PC := PC+1 IR-käskyn suoritus (voi muuttaa PC:tä) (voi sisältää muistiviitteitä) Keskustele 7

Tiedon sijainti suoritusaikana Rekisteri (nopein) kääntäjä (yleensä) päättää, milloin muuttujan arvo on rekisterissä Välimuisti (nopea) laitteisto hoitaa automaattisesti viimeksi käytetyille muistialueille Muisti (hidas) kääntäjä/lataaja valitsee sijaintipaikan globaali data ohj. latauksen yhteydessä (data-alue) vakiot konekäskyssä (koodi-alue) ohjelma sijoittaa suoritusaikana aliohjelman paikalliset muuttujat ja parametrit pinossa käyttöjärjestelmä sijoittaa suoritusaikana dynaaminen data keossa suorituksen aikana Levy, levypalvelin (liian hidas, ei mahdollista) Ladattava muistiin ennen käyttöä 8

Miten tietoon viitataan? Tieto muistissa Muistiosoitteen (esim. 0x6F123456 tai 3459321) avulla Symbolin (esim. HenkNro tai X) avulla symbolista konekieltä käytettäessä ; symbolin arvo on muistiosoite tai tietueen kentän sijainti HenkNro 0x6F123456, X 3459321 Tieto välimuistissa Samalla tavalla kuin jos tieto olisi muistissa Viittaushetkellä ei tiedetä, kummasta paikasta tieto lopulta löytyy tai kauanko viittaamiseen kuluu aikaa! Nopeus jossain rekisterin ja muistin nopeuksien välillä Välimuisteja voi olla usea: L1 (pieni, nopein), L2 (isompi), L3 (isoin) Tieto rekisterissä (heksadesimaali) Rekisterin osoitteen (esim. nro 6 tai 18) avulla (ttk-91: 0-7) Symbolinen konekieli: R3, FP, F5, PS, SR, I2, jne (ttk-91: R0-R7, SP, FP) Tieto konekäskyssä vakiona (suoritushetkellä rekisterissä IR) oletusarvoisesti käskyssä on vain yksi paikka tiedolle (vakio-kenttä) (desimaali) 9

muuttujan X osoite on symbolin X arvo symb.taulu X 230 X DC 12... LOAD R1, =X LOAD R2, X symbolin X arvo muisti 230 int x =12; (muuttujan X osoite) 12345 muuttujan X arvo 12556 Muuttujan X osoite on 230 Muuttujan X arvo on 12 Symbolin X arvo on 230 Tieto ja sen osoite X 230: 128765 12222 symbolit ovat yleensä olemassa 12998 vain käännösaikana virheilmoituksia varten symbolitaulua pidetään joskus yllä myös suoritusaikana 12 10

Ttk-91 ja Ohjelmoinnin peruskäsitteet Aritmetiikka Tietorakenteet Kontrolli, loopit Monimutkaiset tietorakenteet 11

Ohjelmoinnin peruskäsitteet Aritmeettinen lauseke miten tehdä laskutoimitukset? Yksinkertaiset tietorakenteet tiedonosoitusmoodi tukee suoraan yksiulotteiset taulukot, tietueet Kontrolli mistä seuraava käsky? valinta: if-then-else, case toisto: for-silmukka, while-silmukka Aliohjelmat (luento 4), virhetilanteet (keskeytykset) Monimutkaiset tietorakenteet listat, moniulotteiset taulukot 12

Aritmeettinen lauseke (3) tilan varaus A DC 0 B DC 0 C DC 0 int a, b, c; b = 34; a = b + 5 * c; koodi LOAD R1, =34 STORE R1, B... LOAD R1, B LOAD R2, C MUL R2, =5 ADD R1, R2 STORE R1, A tai: LOAD R1,=5 MUL R1,C ADD R1, B STORE R1,A 13

Globaalin (kaikkialla näkyvän) 1-ulotteisen taulukon tilan varaus ja käyttö (3) int X, Y; int Taulu[30]; X = 5; Y = Taulu[X]; X: Y: Taulu: X DC 0 Y DC 0 Taulu DS 30 LOAD R1, =5 STORE R1, X LOAD R1, X LOAD R2, Taulu(R1) STORE R2, Y Optimoiva kääntäjä osaisi jättää pois jälkimmäisen LOAD R1, X käskyn 14

Globaalin tietueen tilan varaus ja käyttö (3) Tietueen osoite on sen ensimmäisen sanan osoite int X; struct Tauno { int Pituus; int Paino; } X = Tauno.Paino X: Tauno: pituus paino Kentän Paino suhteellinen osoite tietueen Tauno sisällä X DC 0 Tauno DS 2 Pituus EQU 0 Paino EQU 1 LOAD R1,=Tauno LOAD R2, Paino(R1) STORE R2, X 15

?? For lauseke for (int i=20; i < 50; ++i) T[i] = 0; Olisiko parempi pitää i:n arvo rekisterissä? Miksi? Milloin? Mikä on i:n arvo lopussa? Onko sitä olemassa? Entä jos toisenlainen toisto-semantiikka? Keskustele T DS 50 I DC 0 LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I STORE R2, T(R1) LOAD R1, I ADD R1, =1 STORE R1, I LOAD R3, I COMP R3, =50 JLES Loop 16 alku runko lisää testaa

While-do -lauseke? X = 14325; Xlog = 1; Y = 10; while (Y < X) { Xlog++; Y = 10*Y } Mitä kannattaa pitää muistissa? LOAD R1, =14325 STORE R1, X LOAD R1, =1 ; R1=Xlog LOAD R2, =10 ; R2=Y While COMP R2, X JNLES Done ADD R1, =1 MUL R2, =10 JUMP While Done STORE R1, Xlog ; talleta tulos STORE R2, Y Mitä kannattaa pitää missä rekisterissä ja milloin? X in R3? Keskustele 17

Taulukon indeksitarkistus for (int i=20; i < 50; ++i) T[i] = 0; I DC 0 T DS 50 ; data Tsize DC 50 ; koko Voisiko toiston kontrollia ja indeksin tarkistusta yhdistää? Optimoiva kääntäjä osaa! LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I JNNEG R1, ok1 SVC SP,=BadIndex ok1 COMP R1, Tsize JLES ok2 ok2 SVC SP, =BadIndex STORE R2, T(R1) LOAD R1, I ADD R1, =1 STORE R1, I ; 50 OK! LOAD R3, I COMP R3, =50 JLES Loop 18

Moniulotteiset taulukot T: Talletus riveittäin C, Pascal, Java? Talletus sarakkeittain Fortran (On muitakin tapoja, esim. Kukin rivi allokoitu erikseen T[i] on rivin i osoite, jne ) 3- tai useampi ulotteiset vastaavalla tavalla! 34 57 76 21 76 23 24 56 876 54 75 777 T: T[0][0]=34 T[1][0]=21 T[2][0]=24 T[3][0]=54 T[0][1]=57 T[1][1] T[2][1] T[...][...] T: T[0][0]=34 T[0][1]=57 T[0][2]=76 T[1][0]=21 T[1][1] T[1][2] T[2][0] T[...][...] 19

Monimutkaisten tietorakenteiden viittaukset int T[10, 20]; T ds 200 Trows equ 10 Tcols equ 20 T[i,j] = 34; Laske ensin viitatun alkion osoite (tietorakenteen sisällä) Tee viittaus indeksointia käyttäen riveittäin Load r1, i Mul r1, =Tcols Add r1, j Load r2,=34 Store r2, T(r1) sarakettain Load r1, j Mul r1, =Trows Add r1, i Load r2,=34 Store r2, T(r1) Keskustele 20

R1: -1 R2: 132 Linkitetty lista R1 R2: 0 R1 R2: 77 R1 R2: 33 First Data Next Data Next Data Next 2-sanainen tietue First=200: 211 list_sum.k91 211: 222: 255: 33 255 55-1 44 222 Data EQU 0 ; suht. osoite Next EQU 1 Sum DC 0 Main LOAD R1, First ; ptrrec JNEG R1, Done LOAD R2,=0 ; sum Loop ADD R2, Data(R1) LOAD R1, Next(R1) JNNEG R1, Loop Done STORE R2, Sum SVC SP, =HALT Virhe, entä jos bugi! tyhjä Missä? lista! 21

Koodin generointi Kääntäjän viimeinen vaihe voi olla 50% käännösajasta Tavallisen koodin generointi alustukset, lausekkeet, kontrollirakenteet Optimoidun koodin generointi käännös kestää (paljon) kauemmin suoritus tapahtuu (paljon) nopeammin milloin globaalin/paikallisen muuttujan X arvo kannattaa pitää rekisterissä ja milloin ei? missä rekisterissä X:n arvo kannattaa pitää? joskus R1:ssä, joskus R5:ssä? 22

-- Loppu -- Elektroniputki logiikka, muisti ENIAC, 1945 Electronic Numerical Integrator and Computer J.W. Mauchly, J.P. Eckert, J. von Neumann 17 468 elektr. putkea 5 000 yht.laskua/sek. 357 kertolaskua/sek 23