Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Samankaltaiset tiedostot
Luento 4 (verkkoluento 4) Aliohjelmien toteutus

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

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Jakso 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

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

Tietokoneen toiminta, K Tavoitteet (4)

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

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

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

Muistihierarkia Kiintolevyt I/O:n toteutus

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.

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

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (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

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

Järjestelmän ulkoinen muisti I/O

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

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 12 Yhteenveto

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

C-ohjelmointi, syksy 2008: Funktiot

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

Luento 12 Yhteenveto

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

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

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

Luento 12 Yhteenveto

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

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

1. Keskusyksikön rakenne

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

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 (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

Tietokoneen toiminta, K Tavoitteet (4)

Muistihierarkia Kiintolevyt I/O:n toteutus

Kertausluento luennoista 1-3 1

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

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

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

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 1 Tietokonejärjestelmän rakenne

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

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

Osoitin ja viittaus C++:ssa

Jakso 10 Ohjelman suoritus järjestelmässä

Harjoitustyö: virtuaalikone

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

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

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

Lyhyt kertaus osoittimista

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

Tulkinta ja emulointi

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

ITKP102 Ohjelmointi 1 (6 op)

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. 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

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

Käännös, linkitys ja lataus

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Luento 9 Järjestelmän ulkoinen muisti

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

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

Transkriptio:

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivointitietue (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

Aktivointitietue (activation record, activation frame) Aliohjelman toteutus (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 FP int funca (int x,y); pino paluuarvo param x param y vanha PC vanha FP paik. m. i1 paik. m. i2 vanha R1 vanha R2 6-2 +1 SP kasvava muistiosoite

Aktivointitietuepino muistissa Aktivointitietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta (muistista) 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 (SVC, IRET) Talleta arvo pinoon FP 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 FP, aseta uudet PC ja FP 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 FP vapauta parametrien tila ota paluuarvo pinosta prolog epilog 8

tämänhetkinen, nykyinen FP Aliohjelmaesimerkki (13) int fa (int x, y) { int z = 5; } z = x * z + y; return (z); T = fa (200, R); FP 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, FP aseta PC, kutsu & paluu palauta FP, PC vapauta par tila 2. operandi aina rekisteri Keskustele 9

epilog prolog Aliohjelmaesimerkki (12) 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 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 (FP) LOAD R1, parx (FP) MUL R1, locz (FP) ADD R1, pary (FP) STORE R1, locz (FP) STORE R1, retfa (FP) POP SP, R1; recover R1 SUB SP, =1 ; free Z EXIT SP, =2 ; 2 param. Keskustele 11

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 (FP) MUL R1, @vpary (FP) ADD R1, @vparz (FP) STORE R1, retfb (FP) 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 FP, aseta uudet PC ja FP 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 palauta PC ja FP vapauta parametrien tila ota paluuarvo pinosta Keskustele 15 epilog

Aktivointitietuepino muistissa Aktivointitietueet (AT) varataan ja vapautetaan dynaamisesti (suoritusaikana) pinosta (muistista) 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 (SVC, IRET) Talleta R0-R5 pinoon FP 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