Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Samankaltaiset tiedostot
Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

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

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 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ä

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

Luento 4 Aliohjelmien toteutus

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

Monipuolinen esimerkki

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

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

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

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

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

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

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

C-ohjelmointi: Funktiot. Luento: viikko 2

C-ohjelmointi, syksy 2008: Funktiot

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

Jakso 10 Ohjelman suoritus järjestelmässä

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ä

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

Luento 12 Yhteenveto

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

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

Kertausluento luennoista 1-3 1

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

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

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

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Muistihierarkia Kiintolevyt I/O:n toteutus

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

Harjoitustyö: virtuaalikone

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. Tavoitteet. Keskeisiä asioita. Mitä hyötyä tästä on? Esimerkkikone: TTK-91 laitteisto. Tietokoneen toiminta 27.4.

Osoitin ja viittaus C++:ssa

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

11/20: Konepelti auki

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

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

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

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

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. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

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)

Käännös, linkitys ja lataus

Olio-ohjelmointi Javalla

Luento 12 Yhteenveto

Luento 1 Tietokonejärjestelmän rakenne

C-ohjelmointi, kevät 2006: Funktiot

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

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

Luento 12 Yhteenveto

Lyhyt kertaus osoittimista

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

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

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

TIETORAKENTEET JA ALGORITMIT

Luento 1 Tietokonejärjestelmän rakenne

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

1. Omat operaatiot 1.1

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

Sisältö. 2. Taulukot. Yleistä. Yleistä

ITKP102 Ohjelmointi 1 (6 op)

Transkriptio:

Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit, metodi parametrit, ehkä Konekielen tason vastaavat käsitteet: aliohjelma parametrit ja (t) 2 Parametrit ja (2) Muodolliset parametrit määritelty aliohjelmassa ohjelmointihetkellä tietty järjestys ja tyyppi t käsittely hyvin samalla tavalla kuin parametreillekin Todelliset parametrit ja Tulosta (int x, y) Laske(int x): int todelliset parametrit sijoitetaan Tulosta (5, apu); muodollisten parametrien x = Laske( y+234); paikalle kutsuhetkellä aikana saadaan paluuhetkellä ja sitä käytetään kuten mitä tahansa arvoa Parametrityypit Arvoparametri välitetään parametrin arvo kutsuhetkellä arvoa ei voi muuttaa Viiteparametri välitetään parametrin osoite arvo 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]); 3 4 Arvoparametri (0) parametrina käytettyä muuttujaa muuttujan (esim. Y) arvo olioviitteen arvo lausekkeen arvo Tulosta (A+3, B) Välitetään todellisen parametrin arvo arvon muuttuja, vakio, lauseke, pointteri, olioviite kopio Aliohjelma ei voi muuttaa mitenkään todellisena Laske (int y, *ptrx); y = 5; *ptrx = 0 muuta arvoparametrin arvoa aliohjelmassa muutetaan todellisen parametrin arvon kopiota! Todellisen parametrin ptrx arvoa ei voi muuttaa osoitinmuuttujan osoittamaa arvoa voidaan muuttaa Javassa ja C:ssä vain arvoparametreja Viiteparametri (4) Välitetään todellisen parametrin osoite muuttujan osoite pointteri Aliohjelma voi muuttaa parametrina annettua muuttujan arvoa Pascalin var parametri Vrt. C:ssä arvoparametrina välitetyn osoitinmuuttujan osoittaman arvon (PrtX, ed. kalvo) muuttaminen Summaa (54, Sum) Summaa (x: int; var cum_sum: int) cum_sum = cum_sum + x; Summaa(6, Kok_lkm) 5 6

Nimiparametri (4) Välitetään todellisen parametrin nimi merkkijono! Algol 60 yleensä makrot sivuvaikutuksia nimiparametri korvataan todellisella parametrilla joka viittauskohdassa tekstuaalisesti Ei käsitellä enää jatkossa. void swap (name int x, y) int t; t := x; x := y; y := t; Swap(i,j); OK! 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 arvojen halutaan säilyvän! pääohjelma, toinen aliohjelma, sama aliohjelma, metodi, käytettyjen rekistereiden arvot pitää aluksi tallettaa muistiin ja lopuksi palauttaa ennalleen 8 MAIN CALL, ALIEKA SVC, =HALT ALIEKA CALL, ALITOKA EXIT, ALITOKA EXIT,,2 Aliohjelmat voivat olla sisäkkäisiä aliohjelmaan siirtyminen aliohjelmasta paluu aliohjelman tarvitsemat tiedot (Ali)ohjelman ympäristö eli aktivointitietue 9 Aktivointitietue Aliohjelman toteutusmuoto (ttk-9) kaikkien ulostuloparametrien arvot kaikkien (sisäänmeno) parametrien arvot paluuosoite kutsukohdan aktivointitietue kaikki paikalliset muuttujat ja tietorakenteet aliohjelman ajaksi talletettujen rekistereiden arvot (activation record, activation frame) int funca (int x,y); vanha paika.m. i paik. m. i2 vanha R2-2 + 0 Aktivointitietueiden hallinta (4) Aktivointitietueet (AT) varataan ja vapautetaan dynaamisesti (aikana) pinosta (=R6) osoittaa pinon pinnalle Aktivointitietuepino (R7) osoittaa voimassa olevan AT main AT:n sovittuun kohtaan (ttk-9: vanhan :n osoite) AT sum Pinossa olevaa AT:tä rakennetaan ja puretaan käskyillä: PUSH, POP, PUSHR, POPR CALL, EXIT Talleta R0-R5 pinoon AT funca kasvava muistiosoite ------> ------> koko ohjelman viimeinen käsky tilanvaraukset valekäskyillä Alia:n aktivointitietue - funktion palautusarvo - parametrit - paluuosoite - edellinen aktivointitietue - Alian omat tilanvaraukset Alib:n aktivointitietue - funktion palautusarvo - parametrit - paluuosoite - edellinen aktivointitietue - Alib:n omat varaukset ohjelman alussa KJ asettaa Pinon tila ennen Alib:sta poistumista

Aliohjelman käytön toteutus (2) Toteutus jaettu eri yksiköille Kutsuva CALL käsky Kutsuttu EXIT käsky Kutsuva varaa tilaa lle pinosta laita parametrit (arvot tai osoitteet) pinoon talleta ja ; aseta uudet PC ja varaa tilaa paikallisille muuttujille talleta käytettyjen rekistereiden arvot pinoon (itse aliohjelman toteutus) palauta rekistereiden arvot vapauta paikallisten muuttujien tila palauta PC ja vapauta parametrien tila ota pinosta 3 Aliohjelmaesimerkki (3) tämänhetkinen, nykyinen lle 2045 par x=200 par y=24 vanha aliohjelman käyttö (pää)ohjelmasta: R DC 24 PUSH,=0 ; tilaa lle PUSH, =200 PUSH, R muistista muistiin!! talleta PC, CALL, fa aseta PC, kutsu & paluu palauta, PC POP, R STORE R, T 2. operandi aina rekisteri 4 tämänhetkinen, nykyinen Aliohjelmaesimerkki (ei animm) par x=200 par y=24 käyttö: R DC 24 PUSH,=0 ; tila lle PUSH, =200 PUSH, R CALL, fa POP, R STORE R, T muistista muistiin!! talleta PC, aseta PC, kutsu & paluu palauta, PC 2. operandi aina rekisteri 5 Kaikki viitteet näihin tehdään suhteessa :hen Aliohjelmaesimerkki () vanha paik. z retfa EQU -4 ; parx EQU -3 ;. param. = x pary EQU -2 ; 2. param. = y locz EQU ; paikall. muutt fa PUSH, =0 ; tila Z:lle PUSH, R ; R talteen LOAD R,=5; alusta Z STORE R, locz () LOAD R, parx () MUL R, locz () ADD R, pary () STORE R, retfa () POP, R ; palauta R SUB, =; vapauta Z EXIT, =2 ; 2 param. 6 Kaikki viitteet näihin tehdään suhteessa :hen Aliohjelmaesimerkki (ei anim) vanha paik. z retfa EQU -4 parx EQU -3 pary EQU -2 locz EQU fa ks. fa.k9 PUSH, =0 ; tilaa Z:lle PUSH, R ; talleta R LOAD R,=5; alusta Z STORE R, locz () LOAD R, parx () MUL R, locz () ADD R, pary () STORE R, locz() STORE R, retfa () POP, R; recover R SUB, = ; free Z EXIT, =2 ; 2 param. 7 Viiteparametri esimerkki (2) (Pascal) procb (x, y: int, var pz:int) pz = x * 5 + y; procb (200, R, T); käyttö: PUSH, =200 PUSH, R PUSH, =T ; T s address! CALL, procb ; T has new value Ei välitetä arvoa T, vaan T:n osoite. Ainoa tapa monisanaiselle parametrille (taulukko, tietue) tai ulostuloparametreille. 8

Viiteparam. (jatk) () procb (x, y: int, var pz:int) pz = x * 5 + y; procb (200, R, T); vparam pz vanha parx EQU -4 ; suhteessa :hen pary EQU -3 parpz EQU -2 procb PUSH, R ; R talteen LOAD R, parx () MUL R, =5 ADD R, pary () STORE R, @parpz () POP, R; restore R EXIT, =3 ; 3 param. ks. procb.k9 9 Aliohjelma kutsuu funktiota () procc (x, y: int, var pz:int) pz = fa(x,y); procc (200, R, T); itse aliohjelman käyttö kuten ennen: PUSH, =200 PUSH, R PUSH, =T ; T s address CALL, procc ; T has new value 20 Aliohjelma kutsuu funktiota (2) procc (x, y: int, var pz:int) pz = fa(x,y); procc (200, R, T); AT kuten ennen: vparam pz vanha parxc EQU -4 ; relative to paryc EQU -3 parpz EQU -2 ks. procc.k9 procc PUSH, R ; save R ; call fa(parxc, paryc) PUSH,=0 ; ret. value PUSH, parxc() PUSH, paryc() CALL, fa POP, R STORE R, @parpz () POP, R; restore R EXIT, =3 ; 3 param. 2 Rekursiivinen aliohjelma (4) Aliohjelma, joka kutsuu itseään Ei mitään erikoista muuten Aktivointitietue hoitaa tilanvarauksen automaattisesti paikallisille muuttujille joka kutsukerralla Rekursio ei onnistu, jos paikallisten muuttujien tilanvaraus on aliohjelman ohjelmakoodin yhteydessä jotkut Fortran-versiot Joka kutsukerralla suoritetaan sama koodialue (aliohjelman koodi), mutta dataa varten on käytössä oma aktivointitietue 22 Rekursio esimerkki () (n: int) if (n=) return (); else return (n * (n-)); k = (4); kutsu: K DC 0 ; k = (4) PUSH, =0 PUSH, =4 CALL, POP, R STORE R, K 23 Rekursion toteutus (2) (n: int) if (n=) return (); else return (n * (n-)); k = (4); param n vanha parret EQU -3 parn EQU -2 PUSH, R ; R talteen LOAD R, parn() COMP R,= JEQU One ; ksi? One ; ksi (N-) * N SUB R, = ; R = N- PUSH, =0 ; tilaa l. PUSH, R CALL, POP, R ; R = (N-) MUL R, parn() STORE R, parret() POP, R; palauta R EXIT, = ; param. 24

pääohjelma 4 CALL, = 24 (4):n 3 CALL, = 6 * 4 = 24 (3):n 2 CALL, = 2 *3 = 6 Rekursion kulku (2):n CALL, = *2 =2 (4):n koska parametri =, niin ksi Samalla tavalla kuin aliohjelman kutsu CALL-käskyn asemasta SVC Tilaa lle? Parametrit pinoon SVC-kutsu IRET-paluu Paluuarvo (OK, virhe) pois pinosta tarkistusta varten KJ-palvelun kutsu PUSH, =0; PUSH, =FileBuffer PUSH, CharCnt PUSH, FilePtr SVC, =ReadFile POP, R JNZER R, =FileTrouble... 25 26 -- Jakson 4 loppu -- [Tane99] 27