Monipuolinen esimerkki

Samankaltaiset tiedostot
Jakso 4 Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

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

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

Jakso 4 Aliohjelmien toteutus

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

Luento 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

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

Aliohjelmien toteutus Suoritin ja väylä

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

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

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

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

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

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

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

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Kertausluento luennoista 1-3 1

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

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

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

Luento 2 TTK-91 tietokone ja sen simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91 (1) TTK-91 laitteisto

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

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

Lyhyt kertaus osoittimista

1. Keskusyksikön rakenne

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Harjoitustyö: virtuaalikone

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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

Tiedon sijainti suoritusaikana. 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 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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

C-ohjelmointi: Funktiot. Luento: viikko 2

Tietorakenteet ja algoritmit

Osoitin ja viittaus C++:ssa

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Muistihierarkia Kiintolevyt I/O:n toteutus

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

C-ohjelmointi, syksy 2008: Funktiot

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

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

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Ohjelmoinnin perusteet Y Python

58131 Tietorakenteet ja algoritmit (syksy 2015)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

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

Jakso 10 Ohjelman suoritus järjestelmässä

ITKP102 Ohjelmointi 1 (6 op)

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

1. Omat operaatiot 1.1

7. Näytölle tulostaminen 7.1

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin peruskurssi Y1

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit

ITKP102 Ohjelmointi 1 (6 op)

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

Transkriptio:

Monipuolinen esimerkki Lopuksi monipuolinen esimerkki, jossa ohjelmisto koostuu pääohjelmasta ja kahdesta aliohjelmasta, joista toinen on proseduuri ja toinen funktio. Funktio Sqrt(int n): int Sqrt(int n) { } return n * n; Proseduuri Summa(int &X, int Y): void Summa(int &X, int Y) { } int Z; Z = A + B; X = Sqr(X) + Y + Z + 5; Erohan näillä on se, että funktiolla on paluuarvo, ja proseduurilla ei ole. A ja B ovat pääohjelman globaaleja muuttujia. Itse pääohjelma pseudokoodina näyttäisi seuraavalta: int A, B; lue luku A; B = Sqr(2); tulosta B; Summa (B, A); tulosta B; Symbolisena konekielenä nämä ohjelmat näyttäisivät seuraavilta:

Pääohjelma: A DS 1 Alustetaan minitaulukko A ( A DS 1 luo yhden alkion kokoisen taulukon). B DS 1 Ja alustetaan minitaulukko B. Main IN R3, =KBD Luetaan näppäimistöltä arvo rekisteriin R3... STORE R3, A...ja tallennetaan se muuttujaan A (tai jos ihan tarkkoja ollaan, taulukko A:n ensimmäisen, ja ainoan, alkion arvoksi). PUSH SP, =0 Varataan paluuarvolle paikka. PUSH SP, =2 Pushataan vakio 2 pinoon (halusimmehan laskea kahden toisen potenssin Sqr-funktiolla). CALL SP, Sqr Kutsutaan Sqr-funktiota. POP SP, R2 Sqr funktio talletti paluuarvolle varattuun paikkaan laskennan tuloksen, joten popataan se nyt rekisteriin R2. STORE R2, B Ja talletetaan funktion palauttama arvo muuttujaan B. OUT R2, =CRT Ja tulostetaan se vielä näytölle. Koska B:n arvo on jo rekisterissä R2, sitä olisi ihan turha ensin ladata rekisteriin LOAD-käskyllä. PUSH SP, =B Laitetaan B:n osoite pinoon (viiteparametri proseduurille Summa). PUSH SP, A Laitetaan A:n arvo pinoon (arvoparametri proseduurille Summa). CALL SP, Summa Kutsutaan Summa:a. LOAD R2, B Proseduuri Summa laittoi laskentansa tuloksen suoraan muuttujaan B, joten mitään ei tarvitse popata (eikä voidakaan, koska Summa ei pushannut mitään pinoon), ladataan vain muuttujan arvo suoraan rekisteriin. OUT R2, =CRT Ja tulostetaan B:n arvo näytölle. SVC SP, =HALT Loppu.

Aliohjelmat: Funktio Sqr: n EQU -2 Sqr_Ret EQU -3 Kuten edellisistä esimerkeistä (yksinkertainen aliohjelma ja parametrit aliohjelmassa) varmaan muistat, pinossa välitetyt parametrit löydetään suhteessa FP:n arvoon. Ne ovat kohdassa FP-2 ja siitä taaksepäin, riippuen kuinka monta parametria on. Paikat 0 ja -1 olivat ne vanhan PC:n ja vanhan FP:n arvot. Paluuarvo on pinossa ennen parametrejä, joten sen paikan osoite on yhden pienempi kuin ensimmäisen parametrin. Koska tässä tapauksessa on vain yksi parametri kohdassa FP-2, paluuarvon paikka löytyy kohdasta FP- 3. Sqr LOAD R3, n(fp) Ladataan rekisteriin pinosta haettu n... MUL R3, R3...josta sitten lasketaan n * n. STORE R3, Sqr_Ret(FP) Ja tämä talletetaan paluuarvon paikkaan pinossa. EXIT SP, =1 Eikä sitten muuta. Poistutaan aliohjelmasta ja potkaistaan samalla se välitetty parametri ulos pinosta siirtämällä pino-osoitinta, jotta ohjelma löytää oikean vanhan PC:n arvon palatessaan pääohjelmaan.

Proseduuri Summa: X EQU -3 Y EQU -2 Z EQU 1 Nimetään X:n paikka pinossa suhteessa FP:hen. Nimetään Y:n paikka pinossa suhteessa FP:hen. Nimetään Z:n paikka koodissa suhteessa FP:hen. Z on aliohjelman oma (paikallinen) muuttuja, siksi sen paikka on positiivinen. Teoriassa tätä ei olisi ollut pakko laittaa pinoon, oltaisiin voitu myös luoda muuttuja. Mutta käytetään nyt pinoa kun se on kuitenkin aliohjelma Eipähän se muuttuja jää sitten haahuilemaan pääohjelmatasolla. Kun on paikallinen niin pitäisi hyvä tyylin mukaan pysyä aliohjelman sisällä. Summa PUSH SP, =0 Varataan muuttujalle Z tilaa pinosta. Se että sille luotiin edellisessä (pseudo)käskyssä paikka ei vielä tehnyt pinolle mitään. LOAD R1, A Ladataan A (pääohjelmatason muuttuja) rekisteriin R1. ADD R1, B A = A + B (B on myös pääohjelmatason muuttuja). STORE R1, Z(FP) Talletetaan saatu arvo Z:aan (eli annetaan osoitteeksi Z:n paikka FP rekisterin suhteen), jolloin saadaan Z = A + B. PUSH SP, =0 Valmistaudutaan kutsumaan funktiota Sqr laittamalla sen paluuarvolle paikka pinoon. PUSH SP, @X(FP) Tämä onkin hivenen monimutkaisempi. Sqr-funktiollehan piti antaa arvoparametri n, jonka neliön se laskee. Haluamme antaa sille X:n arvon, mutta Summa sai vain X:n osoitteen (viiteparametri). Ei hätää, koska tiedämme X:n osoitteen, käytämme vain kaksinkertaista muistinoutoa, jolla saamme X:n arvon. CALL SP, Sqr POP SP, R3 Kutsutaan Sqr-funktiota. Sqr laittoi paluuarvonsa pinoon, joten popataan se pois.

ADD R3, Y(FP) Lisätään Sqr-funktion palauttamaan arvon Y:n arvo. ADD R3, =5 Ja lisätään edelliseen summaan vielä 5. Jolloin rekisterissä R3 on summa Sqr(5) + Y + 5. ADD R3, Z(FP) Ja lisätään vielä Z:n arvo, jolloin rekisterissä on Sqr(5) + Y + Z + 5. STORE R3, @X(FP) Ja sitten talletetaan koko summa viiteparametrina annettuun osoitteeseen, eli tässä tapauksessa muuttujan B arvoksi (koska pääohjelmatasolla Summaa kutsuttiin parametreilla (B, A)). SUB SP, =1 Pudotetaan paikallinen muuttuja pois pinosta. Koska niitä oli vain yksi, vähennetään pino-osoittimen arvosta yksi. Jos niitä olisi ollut kaksi, vähennettäisiin kaksi, jne. EXIT SP, =2 Ja poistutaan aliohjelmasta, taas antaen toiseksi operandiksi aliohjelmalle annettujen parametrien määrän, että ne voidaan poistaa pinosta.