Notes
Slide Show
Outline
1
Luento 4
Aliohjelmien toteutus
  • Tyypit
  • Parametrit
  • Aktivointitietue (AT)
  • AT-pino
  • Rekursio
2
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)
3
Parametrit ja paluuarvo (2)
  • 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 sijoite-
      taan muodollisten parametrien
      paikalle kutsuhetkellä suoritusaikana
    • paluuarvo saadaan paluuhetkellä ja sitä käytetään kuten mitä tahansa arvoa
4
Parametrityypit (4)
  • Arvoparametri
    • välitetään parametrin arvo (eli sen kopio) kutsuhetkellä
    • itse parametrin arvoa ei voi muuttaa (mutta sen arvon kopiota 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ä
5
Arvoparametri (10)
  • Välitetään todellisen parametrin arvo
    • muuttuja, vakio, lauseke, pointteri, olioviite
  • Aliohjelma ei voi muuttaa mitenkään todellisena parametrina käytettyä muuttujaa
    • muuttujan (esim. y) arvo
    • olioviitteen arvo
    • lausekkeen arvo
    • 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
6
Viiteparametri (5)

  • Välitetään todellisen parametrin osoite
    • muuttujan osoite (tai koodin osoite)
  • Aliohjelma voi muuttaa parametrina annettua muuttujan arvoa
  • Pascalin var parametri
7
Nimiparametri (6)
  • Välitetään todellisen parametrin nimi
    • merkkijono!
    • Algol 60
    • yleensä makrot
    • sivuvaikutuksia
    • nimiparametri korvataan todellisella parametrilla joka viittauskohdassa tekstuaalisesti
8
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
9
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
10
Aktivointitietueiden hallinta (4)
  • 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)
11
Aliohjelman käytön toteutus (12)
  • 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
      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
12
Aliohjelmaesimerkki (13)
13
Aliohjelma-
esimerkki (11)
14
Viiteparametri esimerkki (2)
15
Viiteparam.
(jatk) (1)
16
Aliohjelma kutsuu aliohjelmaa (1)
17
Aliohjelma kutsuu funktiota (2)
18
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 koodi-
    alue (aliohjelman koodi), mutta dataa varten on käytössä oma aktivointitietue
19
Rekursio esimerkki (1)
20
Rekursion toteutus (2)
21
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
22
-- Luennon 4 loppu --