Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Samankaltaiset tiedostot
Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

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

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) 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

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

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

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Muistihierarkia Kiintolevyt I/O:n toteutus

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

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

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

Järjestelmän ulkoinen muisti I/O

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

Tiedon sijainti suoritusaikana. Luento 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 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

C-ohjelmointi: Funktiot. Luento: viikko 2

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)

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

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)

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

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, syksy 2008: Funktiot

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Luento 12 Yhteenveto

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

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

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

1. Keskusyksikön rakenne

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

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

Muistihierarkia Kiintolevyt I/O:n toteutus

Luento 12 Yhteenveto

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

Kertausluento luennoista 1-3 1

Luento 12 Yhteenveto

Algoritmit 1. Luento 3 Ti Timo Männikkö

Aliohjelmat. 1 Kutsusekvenssit. Antti-Juhani Kaijanaho 5. helmikuuta 2007

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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)

Luento 1 Tietokonejärjestelmän rakenne

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

Tietokoneen toiminta, K Tavoitteet (4)

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

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

Osoitin ja viittaus C++:ssa

Harjoitustyö: virtuaalikone

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

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

Jakso 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

ITKP102 Ohjelmointi 1 (6 op)

Lyhyt kertaus osoittimista

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

Luento 1 Tietokonejärjestelmän rakenne

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

Jakso 10 Ohjelman suoritus järjestelmässä

C++11 lambdat: [](){} Matti Rintala

Käännös, linkitys ja lataus

Luento 9 Järjestelmän ulkoinen muisti

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

C-ohjelmointi, kevät 2006: Funktiot

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Muistihierarkia (4) Luento 9 Järjestelmän ulkoinen muisti

Muistihierarkia (4) Luento 9 Järjestelmän ulkoinen muisti

Tietorakenteet ja algoritmit

Transkriptio:

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivaatiotietue (AT) AT-pino, rekursio 1

Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit (sisäänmeno- ja ulostuloparametrit) funktio parametrit, paluuarvo metodi parametrit, ehkä paluuarvo Konekielitason vastaava käsite aliohjelma parametrit ja paluuarvo(t) 2

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

Parametrityypit Arvoparametri Välitetään todellisen parametrin arvo (eli sen kopio) kutsuhetkellä Arvo voidaan lukea Alkuperäistä arvoa ei voi muuttaa, mutta arvon kopiota voi muuttaa Viiteparametri Välitetään todellisen parametrin osoite Arvo ja osoite voidaan lukea, arvoa voi muuttaa osoitteen avulla Aliohjelma voi muuttaa pääohjelman dataa Nimiparametri (yleensä vain tulkittavissa skriptikielissä) Välitetään todellisen parametrin nimi (merkkijono) Nimi (merkkijono) kuvataan arvoksi kutsuhetkellä Semantiikka määräytyy vasta kutsuhetkellä swap(i, j) -- makro, nimiparametrit tmp = i; i = j; j = tmp; swap(x, y); swap(k, T[k]); tmp = x; x = y; y = tmp; tmp = k; k = T[k]; T[k] = tmp; 4 Keskustele

Aliohjelmien toteutuksen osat Paluuosoite kutsukohtaa seuraavan käskyn osoite Parametrien välitys Paluuarvon välitys Paikalliset muuttujat Rekisterien varaus (allokointi) Kutsuva ohjelman osa haluaa säilyttää käyttämiensä rekisterien arvot! pääohjelma, toinen aliohjelma, sama aliohjelma, metodi, Aliohjelman pitää aluksi tallettaa (muistiin) käytettävien rekisterien arvot ja lopuksi palauttaa ne ennalleen 5

Aktivaatiotietue (Aktivointitietue) Aliohjelman toteutus (ttk-91) funktion paluuarvo (tai kaikki paluuarvot) kaikkien (sisäänmeno- ja ulostulo-) parametrien arvot paluuosoite kutsukohdan aktivaatiotietue kaikki paikalliset muuttujat ja tietorakenteet aliohjelman ajaksi talletettujen rekistereiden alkuperäiset arvot (activation record, activation frame) int funca (int x,y); pino paluuarvo param x param y vanha PC vanha paik. m. i1 paik. m. i2 vanha R1 vanha R2 6-2 +1 SP kasvava muistiosoite

Aktivaatiotietuepino muistissa Aktivaatiotietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta (muistista) SP (eli R6) osoittaa pinon pinnalle Aktivaatiotietuepino (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 CALL, EXIT (SVC, IRET) Talleta arvo pinoon SP linkki Talleta R0-R5 pinoon AT main kutsuu AT sum AT funca kasvava muistiosoite 7

Aliohjelmakutsun toteutus 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 vanhat arvot pinoon (itse aliohjelman toteutus varsinainen työ) palauta rekistereiden arvot vapauta paikallisten muuttujien tila palauta PC ja vapauta parametrien tila ota paluuarvo pinosta prolog epilog 8

tämänhetkinen, nykyinen Aliohjelmaesimerkki (13) int fa (int x, y) { int z = 5; } z = x * z + y; return (z); T = fa (200, R); arvo=1024 paluuarvo par x=200 par y=24 käyttö: R DC 24 PUSH SP,=0 ; tila paluuarvolle PUSH SP, =200 PUSH SP, R CALL SP, fa POP SP, R1 STORE R1, T muistista muistiin!! talleta PC, aseta PC, kutsu & paluu palauta, PC vapauta par tila 2. operandi aina rekisteri Keskustele 9

(ei animointia) int fa (int x, y) { int z = 5; } Aliohjelmaesimerkki 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 10

Aliohjelmaesimerkki (12) int fa (int x, y) { int z = 5; } Kaikki viitteet näihin tehdään suhteessa :hen 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 # return value parx EQU -3 # params 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. Keskustele 11 prolog epilog

(ei animointia) Aliohjelmaesimerkki int fa (int x, y) { int z = 5; } Kaikki viitteet näihin tehdään suhteessa :hen 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 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. 12 prolog epilog

Viiteparametri Kutsu T = fb(r, S, T) R DC 24 S DC 56 T DC 77 pt DC 0 ; pointer LOAD R1, =T ; initialize pt STORE R1, pt PUSH SP,=0 ; tila paluuarvolle PUSH SP, R ; arvoparametri PUSH SP, =S ; viiteparametri PUSH SP, pt; viiteparametri CALL SP, fb POP SP, R1 STORE R1, T Y ja Z ovat viiteparametreja: retfb EQU -5 ; paluuarvo parx EQU -4 ; arvoparametri vpary EQU -3 ; viiteparam vparz EQU -2 ; viiteparam fb PUSH SP, R1 ; save R1 LOAD R1, parx () MUL R1, @vpary () ADD R1, @vparz () STORE R1, retfb () POP SP, R1; recover R1 EXIT SP, =3 ; 3 param. Muuttujan S osoite Osoitinmuuttujan pt arvo on muuttujan T osoite 13

KJ-palvelun kutsu (proseduraalisesti) (Esim.) samalla tavalla kuin aliohjelman kutsu CALL käskyn asemesta SVC (SuperVisor Call) Tila paluuarvolle? Parametrit pinossa vai rekistereissä? (palvelukohtaisesti) SVC kutsu Kutsuttavan rutiinin numero operandina 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, =ReadBlock POP SP, R1 JNZER R1, FileTrouble Keskustele 14

Kutsuva rutiini CALL käsky Kutsuttu rutiini EXIT käsky Kutsuva rutiini Aliohjelmakutsu Toteutus jaettu eri yksiköille 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 vanhat arvot pinoon (itse aliohjelman toteutus varsinainen työ) palauta rekistereiden arvot vapauta paikallisten muuttujien tila palauta PC ja vapauta parametrien tila ota paluuarvo pinosta prolog Keskustele 15 epilog

Aktivaatiotietuepino muistissa Aktivaatiotietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta (muistista) SP (=R6) osoittaa pinon pinnalle Aktivaatiotietuepino (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 CALL, EXIT (SVC, IRET) Talleta R0-R5 pinoon SP X AT main Xsum Y AT sum AT funca kasvava muistiosoite Keskustele 16

M. Wilkes: EDSAC (1949) -- Loppu -- rekisterit (6 kpl), tyhjiöputkilla käsky- ja datamuisti, 32 elohopeaviiveputkea, kukin 32 kpl 18b sanaa (n. 2 Kb) 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 17