Jakso 4 Aliohjelmien toteutus

Samankaltaiset tiedostot
Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

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

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

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

Luento 4 Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Aliohjelmien toteutus Suoritin ja väylä

Monipuolinen esimerkki

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

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

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.

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

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

C-ohjelmointi: Funktiot. Luento: viikko 2

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

C-ohjelmointi, syksy 2008: Funktiot

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Jakso 10 Ohjelman suoritus järjestelmässä

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)

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)

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

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

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

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

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

Muistihierarkia Kiintolevyt I/O:n toteutus

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 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

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

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

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

Osoitin ja viittaus C++:ssa

C-ohjelmointi, kevät 2006: Funktiot

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

Järjestelmän ulkoinen muisti I/O

Käännös, linkitys ja lataus

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Kertausluento luennoista 1-3 1

Luento 12 Yhteenveto

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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

Algoritmit 1. Luento 3 Ti Timo Männikkö

Lyhyt kertaus osoittimista

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 12 Yhteenveto

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

Tulkinta ja emulointi

Luento 1 Tietokonejärjestelmän rakenne

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

TIETORAKENTEET JA ALGORITMIT

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

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

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

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

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

11/20: Konepelti auki

Tietokoneen toiminta, K Tavoitteet (4)

Luento 1 Tietokonejärjestelmän rakenne

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

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

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

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)

7. Oliot ja viitteet 7.1

C-ohjelmointi, kevät t 2006: Funktiot. Luento 4, ti Tiina Niklander

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Luento 12 Yhteenveto

Transkriptio:

Jakso 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

Parametrit ja paluuarvo (2) Muodolliset parametrit määritelty aliohjelmassa tietty järjestys ja tyyppi paluuarvot käsittely hyvin samalla tavalla kuin parametreillekin Todelliset parametrit ja paluuarvo tod. parametrit sijoitetaan muodollisten parametrien paikalle kutsuhetkellä Tulosta (int x, y) Laske(int x): int Tulosta (5, apu); x = Laske( y+234); paluuarvo saadaan paluuhetkellä ja sitä käytetään kuten mitä tahansa arvoa 3

Arvoparametri (10) Tulosta (A+3, B) Välitetään todellisen parametrin arvo muuttuja, vakio, lauseke, pointteri, olioviite Aliohjelma ei voi muuttaa mitenkään todellisena parametrina käytettyä muuttujaa muuttujan X tai B arvo olioviitteen arvo lausekkeen arvo muuta muodollisen parametrin arvoa aliohjelmassa muutetaan todellisen parametrin arvon kopiota! osoitinmuuttuja parametrin ptrx arvoa ei voi muuttaa osoitinmuuttujan osoittamaa arvoa voidaan muuttaa Javassa ja C:ssä vain arvoparametreja arvon kopio Tulosta (int y, *ptrx); { y = 5; *ptrx = 10 4

Viiteparametri (4) Välitetään todellisen parametrin osoite muuttujan osoite Aliohjelma voi muuttaa parametrina annettua muuttujan arvoa Pascalin var parametri Summaa (54, Sum) pointteri Summaa (x: int; var cum_sum: int) { cum_sum = cum_sum + x; 5

Nimiparametri (4) Välitetään todellisen parametrin nimi merkkijono! Algol 60 C:n makrot sivuvaikutuksia nimiparametri korvataan todellisella parametrilla joka viittauskohdassa Ei käsitellä enää jatkossa. void swap (name int x, y) { int t; t := x; x := y; y := t; swap (n, A[n]) % n A[n] t := n; n := A[n]; A[n] := t; väärä n 6

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 7

MAIN CALL SP, ALIEKA SVC SP, =HALT ALIEKA CALL SP, ALITOKA Aliohjelmat voivat olla sisäkkäisiä aliohjelmaan siirtyminen aliohjelmasta paluu aliohjelman tarvitsemat tiedot EXIT SP,1 ALITOKA Aliohjelman ympäristö eli aktivointitietue EXIT, SP,2 11.8.2000 Liisa Marttinen, Kesä 2000 8

Aktivointitietue (6) Aliohjelman toteutusmuoto (ttk-91) kaikkien ulostuloparametrien arvot kaikkien (sisäänmeno) parametrien arvot paluuosoite kutsukohdan aktivointitietue aliohjelman ajaksi talletettujen rekistereiden arvot kaikki paikalliset muuttujat ja tietorakenteet int funca (int x,y); paluuarvo param x param y vanha PC vanha FP vanha R1 vanha R2 paik. m. i1 paik. m. i2 9

Aktivointitietueiden hallinta (4) Aktivointitietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta SP (=R6) osoittaa pinon pinnalle Aktivointitietuepino FP (R7) osoittaa voimassa olevan AT:n sovittuun kohtaan (ttk-91: vanhan FP:n osoite) Pinossa olevaa AT:tä rakennetaan ja puretaan käskyillä: PUSH, POP, PUSHR, POPR CALL, EXIT Talleta R0-R5 pinoon FP SP AT main AT sum AT funca kasvava muistiosoite 10

11

Aliohjelman käytön toteutus (12) Kutsuva rutiini CALL käsky Kutsuttu rutiini EXIT käsky Kutsuva rutiini Toteutus jaettu eri yksiköille varaa tilaa paluuarvolle pinosta laita parametrit (arvot tai osoitteet) pinoon talleta PC ja FP talleta käytettyjen rekistereiden arvot pinoon varaa tilaa paikallisille muuttujille (itse aliohjelman toteutus) vapauta paikallisten muuttujien tila palauta rekistereiden arvot palauta PC ja FP vapauta parametrien tila ota paluuarvo pinosta prolog epilog 12

Aliohjelmaesimerkki (13) int fb (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 FP T = fb (200, R); FP arvo=1024 paluuarvo par x=200 par y=24 CALL SP, fa POP SP, R1 STORE R1, T talleta PC, FP aseta PC, kutsu & paluu palauta FP, PC 2. operandi aina rekisteri 13

Aliohjelmaesimerkki (ei animm) int fb (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 FP T = fb (200, R); FP paluuarvo par x=200 par y=24 CALL SP, fa POP SP, R1 STORE R1, T talleta PC, FP aseta PC, kutsu & paluu palauta FP, PC 2. operandi aina rekisteri 14

Aliohjelmaesimerkki (11) int fa (int x, y) { int z = 5; Kaikki viitteet näihin tehdään suhteessa FP:hen z = x * z + y; return (z); T = fa (200, R); FP SP paluuarvo param x param y vanha PC vanha FP vanha R1 paik. z aliohjelman toteutus: retfa EQU -4 parx EQU -3 pary EQU -2 locz EQU 2 fa ks. fa.k91 PUSH SP, R1 ; save R1 PUSH SP, =0 ; alloc Z LOAD R1,=5; init Z STORE R1, locz (FP) LOAD R1, parx (FP) MUL R1, locz (FP) ADD R1, pary (FP) STORE R1, retfa (FP) SUB SP, =1 ; free Z POP SP, R1; recover R1 EXIT SP, =2 ; 2 param. prolog epilog 15

Aliohjelmaesimerkki (ei anim) int fa (int x, y) { int z = 5; Kaikki viitteet näihin tehdään suhteessa FP:hen z = x * z + y; return (z); T = fa (200, R); FP SP paluuarvo param x param y vanha PC vanha FP vanha R1 paik. z aliohjelman toteutus: retfa EQU -4 parx EQU -3 pary EQU -2 locz EQU 2 fa ks. fa.k91 PUSH SP, R1 ; save R1 PUSH SP, =0 ; alloc Z LOAD R1,=5; init Z STORE R1, locz (FP) LOAD R1, parx (FP) MUL R1, locz (FP) ADD R1, pary (FP) STORE R1, retfa (FP) SUB SP, =1 ; free Z POP SP, R1; recover R1 EXIT SP, =2 ; 2 param. prolog epilog 16

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ä taulukkoa T (ja sen kaikkia alkioita), vaan ainoastaan T:n osoite (yksi arvo) Ero C-kieleen: *pz = x * 5 + y;????? 17

Viiteparam. (jatk) (1) procb (x, y: int, var pz:int) { pz = x * 5 + y; return; procb (200, R, T); FP SP param x param y vparam pz vanha PC vanha FP vanha R1 aliohjelman toteutus: parx EQU -4 ; relative to FP pary EQU -3 parpz EQU -2 procb PUSH SP, R1 ; save R1 LOAD R1, parx (FP) MUL R1, =5 ADD R1, pary (FP) STORE R1, @parpz (FP) POP SP, R1; restore R1 EXIT SP, =3 ; 3 param. ks. procb.k91 prolog epilog 18

Aliohjelma kutsuu funktiota (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 19

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 FP vanha FP vanha R1 SP aliohjelman toteutus: parxc EQU -4 ; relative to FP 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(fp) PUSH SP, paryc(fp) CALL SP, fa POP SP, R1 STORE R1, @parpz (FP) POP SP, R1; restore R1 EXIT SP, =3 ; 3 param. 20

Rekursiivinen aliohjelma (4) Aliohjelma, joka kutsuu itseään Ei mitään erikoista muuten Aktivointitietue hoitaa tilanvarauksen automaattisesti paikallisille muuttujille joka kutsukerralla Joka kutsukerralla suoritetaan sama koodialue (aliohjelman koodi), mutta dataa varten on käytössä oma aktivointitietue 21

Rekursio esimerkki (1) 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 22

Rekursion parret EQU -3 parn EQU -2 ks. fpow.k91 toteutus (2) fpow PUSH SP, R1 ; save R1 fpow (n: int) { if (n=1) return (1); else return (n * fpow (n-1)); k = fpower (4); FP SP paluuarvo param n vanha PC vanha FP vanha R1 One LOAD R1, parn(fp) 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(fp) STORE R1, parret(fp) POP SP, R1; restore R1 EXIT SP, =1 ; 1 param. 23

-- Jakson 4 loppu -- [Tane99] 24