Luento 4 Aliohjelmien toteutus

Samankaltaiset tiedostot
Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

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

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

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

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Aliohjelmien toteutus Suoritin ja väylä

Tietokoneen toiminta Copyright Teemu Kerola Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Luento 4 Aliohjelmien toteutus

Kertausluento 2 (lu04, lu05, lu06) Aliohjelmien toteutus Suoritin, väylä, tiedon esitys

Monipuolinen esimerkki

Aliohjelmatyypit. Parametrien tyypit. Aktivointitietue. Aktivointitietuepino. Rekursio. Käyttöjärjestelmäpalvelut. Aliohjelmien toteutus

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

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

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

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

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

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

Tiedon sijainti suoritusaikana. 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)

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

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

C-ohjelmointi: Funktiot. Luento: viikko 2

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Kertausluento luennoista 1-3 1

TITO. C-ohjelmointi, syksy 2008: Funktiot. ltö. Aliohjelmaesimerkki. Esimerkki: potenssiin korotus. Luento 4, pe

C-ohjelmointi, syksy 2008: Funktiot

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

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

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

Jakso 10 Ohjelman suoritus järjestelmässä

Muistihierarkia Kiintolevyt I/O:n toteutus

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

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

Luento 1 Tietokonejärjestelmän rakenne

Luento 12 Yhteenveto. Tavoitteet. Keskeisiä asioita. Mitä hyötyä tästä on? Esimerkkikone: TTK-91 laitteisto. Tietokoneen toiminta 27.4.

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

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

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

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

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

Jakso 10 Ohjelman suoritus järjestelmässä

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

Luento 12 Yhteenveto

Käännös, linkitys ja lataus

Luento 1 Tietokonejärjestelmän rakenne

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

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

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

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

Aktivaatiotietue. Yleiskäsite funktio (aliohjelma) -mekanismin tarvitsemille tiedoille. Kehysosoitin (%fp) missä tiedot ovat

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

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

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

Luento 12 Yhteenveto

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

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

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright 2010

Lyhyt kertaus osoittimista

Luento 12 Yhteenveto

Harjoitustyö: virtuaalikone

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

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

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Järjestelmän ulkoinen muisti I/O

Algoritmit 1. Luento 3 Ti Timo Männikkö

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

11/20: Konepelti auki

Osoitin ja viittaus C++:ssa

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

Tietokoneen toiminta, K Tavoitteet (4)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

C-ohjelmointi, kevät 2006: Funktiot

TITO. Sisältö. C-ohjelmointi, kevät 2006: Funktiot. Aliohjelmaesimerkki. Yleistä. Parametrit. Esimerkki: potenssiin korotus

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

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? 29/01/2001 Teemu Kerola, Copyright 2001

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Transkriptio:

Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit, paluuarvo metodi parametrit, ehkä paluuarvo Konekielen tason vastaavat käsitteet aliohjelma parametrit ja paluuarvo(t) 2 Luento 4, Aliohjelmat 1

Parametrit ja paluuarvo (2) Muodolliset parametrit määritelty aliohjelmassa Tulosta (int x, y) ohjelmointihetkellä Laske(int x): int tietty järjestys ja tyyppi paluuarvot käsittely hyvin samalla tavalla kuin parametreillekin Todelliset parametrit ja paluuarvo todelliset parametrit sijoitetaan muodollisten parametrien Tulosta (5, apu); paikalle kutsuhetkellä suoritusaikana x = Laske( y+234); paluuarvo saadaan paluuhetkellä ja sitä käytetään kuten mitä tahansa arvoa 3 Parametrityypit (4) Arvoparametri välitetään parametrin arvo (eli sen kopio) kutsuhetkellä arvo voidaan lukea alkuperäistä arvoa ei voi muuttaa, mutta arvon kopiota voi muuttaa Viiteparametri välitetään parametrin osoite arvo ja osoite voidaan lukea, arvoa voi muuttaa Nimiparametri välitetään parametrin nimi nimi (merkkijono) kuvataan arvoksi kutsuhetkellä semantiikka määräytyy vasta kutsuhetkellä Swap(i, k); Swap(i, T[i]); 4 Luento 4, Aliohjelmat 2

Arvoparametri (10) Välitetään todellisen parametrin arvo arvon muuttuja, vakio, lauseke, pointteri, olioviite kopio Aliohjelma ei voi muuttaa mitenkään todellisena parametrina käytettyä muuttujaa muuttujan (esim. y) arvo olioviitteen arvo lausekkeen arvo Tulosta (A+3, B) Laske (int y, *ptrx); y = 5; *ptrx = 10 muuta arvoparametrin arvoa aliohjelmassa muutetaan todellisen parametrin arvon kopiota! todellisen parametrin ptrx arvoa ei voi muuttaa osoitinmuuttujan osoittamaa arvoa voidaan muuttaa (osoitinmuuttuja ptrx on siis välitetty arvoparametrina) Javassa ja C:ssä vain arvoparametreja 5 Viiteparametri (5) Välitetään todellisen parametrin osoite muuttujan osoite (tai koodin osoite) Aliohjelma voi muuttaa parametrina annettua muuttujan arvoa Pascalin var parametri vrt. C:ssä arvoparametrina välitetyn osoitinmuuttujan osoittaman arvon (PtrX, ed. kalvo) muuttaminen Summaa (54, Sum) pointteri Summaa (x: int; var cum_sum: int) cum_sum = cum_sum + x; Summaa (6, Kok_lkm) 6 Luento 4, Aliohjelmat 3

Nimiparametri (6) Välitetään todellisen parametrin nimi merkkijono! Algol 60 void swap (name int x, y) yleensä makrot int t; t := x; x := y; y := t; sivuvaikutuksia nimiparametri korvataan todellisella parametrilla joka viittauskohdassa swap(i,j) tekstuaalisesti t := i, i :=j; j := t; Ei käsitellä enää jatkossa. entä: swap (n, A[n]) % n A[n] t := n; n := A[n]; A[n] := t; väärä n 7 Aliohjelmien toteutuksen osat (5) Paluuosoite kutsukohtaa seuraava käskyn osoite Parametrien välitys Paluuarvon välitys Paikalliset muuttujat Rekistereiden allokointi (varaus) kutsuvalla ohjelman osalla voi olla käytössä rekistereitä, joiden arvon halutaan säilyä! pääohjelma, toinen aliohjelma, sama aliohjelma, metodi, käytettyjen rekistereiden arvot pitää aluksi tallettaa muistiin ja lopuksi palauttaa ennalleen 8 Luento 4, Aliohjelmat 4

Aktivointitietue (7) Aliohjelman toteutusmuoto (ttk-91) funktion paluuarvo (tai kaikki paluuarvot) kaikkien (sisäänmeno- ja ulostulo-) parametrien arvot paluuosoite kutsukohdan aktivointitietue kaikki paikalliset muuttujat ja tietorakenteet aliohjelman ajaksi talletettujen rekistereiden alkuperäiset arvot (activation record, activation frame) int funca (int x,y); paluuarvo param x param y vanha PC vanha paik. m. i1 paik. m. i2 vanha R1 vanha R2-2 +1 9 Aktivointitietueiden hallinta (4) Aktivointitietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta (muistista) SP (=R6) osoittaa pinon pinnalle Aktivointitietuepino (R7) osoittaa voimassa olevan AT:n sovittuun kohtaan (ttk-91: vanhan :n osoite) Pinossa olevaa AT:tä rakennetaan ja puretaan käskyillä: PUSH, POP, PUSHR, POPR SP CALL, EXIT (SVC, IRET) Talleta R0-R5 pinoon AT main AT sum AT funca kasvava muistiosoite 10 Luento 4, Aliohjelmat 5

Aliohjelman käytön toteutus (12) Toteutus jaettu eri yksiköille Kutsuva rutiini CALL käsky Kutsuttu rutiini EXIT käsky Kutsuva rutiini varaa tilaa paluuarvolle pinosta laita parametrit (arvot tai osoitteet) pinoon talleta vanha PC ja, aseta uudet PC ja varaa tilaa paikallisille muuttujille talleta käytettävien rekistereiden prolog vanhat arvot pinoon (itse aliohjelman toteutus varsinainen työ) palauta rekistereiden arvot vapauta paikallisten muuttujien tila epilog palauta PC ja vapauta parametrien tila ota paluuarvo pinosta 11 Aliohjelmaesimerkki (13) int fa (int x, y) int z = 5; z = x * z + y; return (z); käyttö: R DC 24 PUSH SP,=0 ; tila paluuarvolle PUSH SP, =200 PUSH SP, R muistista muistiin!! tämänhetkinen, nykyinen T = fa (200, R); arvo=1024 paluuarvo par x=200 par y=24 CALL SP, fa POP SP, R1 STORE R1, T talleta PC, aseta PC, kutsu & paluu palauta, PC 2. operandi aina rekisteri 12 Luento 4, Aliohjelmat 6

Aliohjelmaesimerkki (ei anim) int fa (int x, y) int z = 5; z = x * z + y; return (z); käyttö: R DC 24 PUSH SP,=0 ; ret. value space PUSH SP, =200 PUSH SP, R muistista muistiin!! tämänhetkinen, nykyinen T = fa (200, R); paluuarvo par x=200 par y=24 CALL SP, fa POP SP, R1 STORE R1, T talleta PC, aseta PC, kutsu & paluu palauta, PC 2. operandi aina rekisteri 13 Aliohjelmaesimerkki (11) int fa (int x, y) int z = 5; z = x * z + y; return (z); T = fa (200, R); Kaikki viitteet näihin tehdään suhteessa :hen SP paluuarvo param x param y vanha PC vanha paik. z vanha R1 aliohjelman toteutus: retfa EQU -4 # params parx EQU -3 ks. fa.k91 pary EQU -2 locz EQU 1 # local vars fa PUSH SP, =0 ; alloc Z PUSH SP, R1 ; save R1 LOAD R1,=5; init Z STORE R1, locz () LOAD R1, parx () MUL R1, locz () ADD R1, pary () STORE R1, locz () STORE R1, retfa () POP SP, R1; recover R1 SUB SP, =1 ; free Z EXIT SP, =2 ; 2 param. 14 prolog epilog Luento 4, Aliohjelmat 7

Kaikki viitteet näihin tehdään suhteessa :hen Aliohjelmaesimerkki (ei anim) int fa (int x, y) int z = 5; z = x * z + y; return (z); T = fa (200, R); SP paluuarvo param x param y vanha PC vanha paik. z vanha R1 aliohjelman toteutus: retfa EQU -4 parx EQU -3 pary EQU -2 locz EQU 1 fa ks. fa.k91 PUSH SP, =0 ; alloc Z PUSH SP, R1 ; save R1 LOAD R1,=5; init Z STORE R1, locz () LOAD R1, parx () MUL R1, locz () ADD R1, pary () STORE R1, locz () STORE R1, retfa () POP SP, R1; recover R1 SUB SP, =1 ; free Z EXIT SP, =2 ; 2 param. 15 prolog epilog Viiteparametri esimerkki (2) (Pascal) procb (x, y: int, var pz:int) pz = x * 5 + y; return; procb (200, R, T); käyttö: PUSH SP, =200 PUSH SP, R PUSH SP, =T ; T s address! CALL SP, procb ; T has new value Ei välitetä arvoa T, vaan T:n osoite. Ainoa tapa monisanaiselle parametrille (taulukko, tietue) tai ulostuloparametreille Ero C-kieleen: *pz = x * 5 + y; /* vain arvoparametrejä */ 16 Luento 4, Aliohjelmat 8

Viiteparam. (jatk) (1) procb (x, y: int, var pz:int) pz = x * 5 + y; return; procb (200, R, T); SP param x param y vparam pz vanha PC vanha vanha R1 aliohjelman toteutus: parx EQU -4 ; relative to pary EQU -3 parpz EQU -2 ; call-by-ref procb PUSH SP, R1 ; save R1 LOAD R1, parx () MUL R1, =5 ADD R1, pary () STORE R1, @parpz () POP SP, R1; restore R1 EXIT SP, =3 ; 3 param. ks. procb.k91 prolog epilog 17 Aliohjelma kutsuu aliohjelmaa (1) procc (x, y: int, var pz:int) pz = fa(x,y); return; procc (200, R, T); itse aliohjelman käyttö kuten ennen: PUSH SP, =200 PUSH SP, R PUSH SP, =T ; T s address CALL SP, procc ; T has new value 18 Luento 4, Aliohjelmat 9

Aliohjelma kutsuu funktiota (2) procc (x, y: int, var pz:int) pz = fa(x,y); return; procc (200, R, T); AT kuten ennen: param x param y vparam pz vanha PC vanha vanha R1 SP aliohjelman toteutus: parxc EQU -4 ; relative to paryc EQU -3 parpz EQU -2 ks. procc.k91 procc PUSH SP, R1 ; save R1 ; call fa(parxc, paryc) PUSH SP,=0 ; ret. value PUSH SP, parxc() PUSH SP, paryc() CALL SP, fa POP SP, R1 STORE R1, @parpz () POP SP, R1; restore R1 EXIT SP, =3 ; 3 param. 19 Rekursiivinen aliohjelma (5) Aliohjelma, joka kutsuu itseään Ei mitään erikoista muuten Aktivointitietue hoitaa tilanvarauksen automaattisesti paikallisille muuttujille joka kutsukerralla (uusi AT joka kutsukerralla) Rekursio ei onnistu, jos paikallisten muuttujien tilanvaraus aliohjelman ohjelmakoodin yhteydessä jotkut Fortran versiot Joka kutsukerralla suoritetaan sama koodialue (aliohjelman koodi), mutta dataa varten on käytössä oma aktivointitietue 20 Luento 4, Aliohjelmat 10

Rekursio esimerkki (1) int fpow (n: int) if (n=1) return (1); else return (n * fpower (n-1)); k = fpow (4); kutsu: K DC 0 ; k = fpow (4) PUSH SP, =0 PUSH SP, =4 CALL SP, fpow POP SP, R1 STORE R1, K 21 Rekursion toteutus (2) fpow (n: int) if (n=1) return (1); else return (n * fpow (n-1)); k = fpower (4); SP paluuarvo param n vanha PC vanha vanha R1 parret EQU -3 parn EQU -2 fpow One ks. fpow.k91 PUSH SP, R1 ; save R1 LOAD R1, parn() COMP R1,=1 JEQU One ; return 1? ; return fpow(n-1) * N SUB R1, =1 ; R1 = N-1 PUSH SP, =0 ; ret. value space PUSH SP, R1 CALL SP, fpow POP SP, R1 ; R1 = fpow(n-1) MUL R1, parn() STORE R1, parret() POP SP, R1; restore R1 EXIT SP, =1 ; 1 param. 22 Luento 4, Aliohjelmat 11

KJ-palvelun kutsu (proseduraalisesti) (7) Samalla tavalla kuin aliohjelman kutsu CALL käskyn asemesta SVC Tila paluuarvolle? Parametrit pinoon SVC kutsu IRET paluu Paluuarvo (OK, virhe) pois pinosta tarkistusta varten fok = ReadBlock (fp, 64)... PUSH SP, =0 ;paluuarvo PUSH SP, =FileBuffer PUSH SP, CharCnt PUSH SP, FilePtr SVC SP, =ReadFile POP SP, R1 JNZER R1, FileTrouble 23 M.Wilkes: EDSAC I (1949) -- Luennon 4 loppu -- rekisterit (6W), tyhjiöputkilla käsky- ja datamuisti, 32 elohopeaviiveputkea, 512W à 36b kertolasku 5.4ms, 650 IPS ensimmäinen stored program tietokone 3000 tyhjiöputkea, sähkökulutus 12 kw, tila 5x4m http://www.cl.cam.ac.uk/relics/archive_photos.html 24 Luento 4, Aliohjelmat 12