1
|
- Muuttujat
- Tietorakenteet
- Kontrolli
- Optimointi
- Tarkistukset
|
2
|
- Muistissa (=keskusmuistissa)
- iso
- hidas
- data-alueella vai konekäskyssä vakiona?
- Rekisterissä
- Probleemi: milloin muuttujan X arvo pidetään muistissa ja milloin
rekisterissä?
- missä päin muistia? miten siihen viitataan?
|
3
|
- Tieto muistissa
- muistiosoitteen (esim. 0x6F123456 tai 3459321) avulla
- symbolin (esim. HenkTunn tai X) avulla symbolista konekieltä
käytettäessä – symbolin arvo on muistiosoite
- HenkTunn = 0x6F123456, X = 3459321
- Tieto välimuistissa
- samalla tavalla kuin jos tieto olisi muistissa
- viittaushetkellä ei tiedetä, kummasta paikasta tieto lopulta löytyy tai
kauanko viittaamiseen kuluu aikaa!
- Tieto rekisterissä
- rekisterin osoitteen (esim. 6 tai 18) avulla
- symb. konekieli: R3, FP, F5, I2, jne
- Tieto konekäskyssä (vakiona)
- oletusarvoisesti, käskyssä on vain yksi paikka tiedolle
|
4
|
- Muuttujan X osoite on 230
- Muuttujan X arvo on 12
- Symbolin X arvo on 230
- symbolit ovat yleensä olemassa
vain käännösaikana
- virheilmoituksia varten symbolitaulua pidetään joskus yllä myös
suoritusaikana
|
5
|
- Muuttujan X osoite on 230
- Muuttujan X arvo on 12
- Osoitinmuuttujan
(pointterin) Xptr osoite on 225
- Osoitinmuuttujan Xptr arvo on 230
- Osoitinmuuttujan Xptr osoittaman kokonaisluvun arvo on 12
|
6
|
- Muuttujia samalla tavoin kuin kokonaislukuarvoiset muuttujatkin
- muistissa olevalla osoitinmuuttujalla on osoite
- Arvo on jonkun tiedon osoite muistissa
- globaalin yksi- tai monisanaisen tiedon osoite
- muuttuja, taulukko, tietue, olio
- keosta (heap, joskus ”kasa”) dynaamisesti (suoritusaikana) varatun
tiedon osoite
- Pascalin tai Javan ”new” operaatio
palauttaa varatun muistialueen osoitteen
(tai virhekoodin, jos operaatiota ei voi toteuttaa)
- aliohjelman tai metodin osoite
|
7
|
- Globaalit muuttujat ja muut globaalit tietorakenteet sijaitsevat ttk-91
koneen muistissa ohjelmakoodin jälkeen
- muuttujat
- tilan varaus
- viittaaminen
|
8
|
|
9
|
|
10
|
- Globaali data
- varataan ohjelman latauksen yhteydessä
- kaikkialla viitattavissa nimen (osoitteen) avulla
- Dynaaminen data
- varataan tarvittaessa keosta suorituksen aikana
- vapautetaan kun ei enää tarvita
- viittaus varauksen jälkeen osoitteen avulla
- Aliohjelmien paikallinen data
- varataan pinosta kutsuhetkellä
- vapautetaan rutiinista paluun yhteydessä
- viittaus aliohjelman sisällä osoitteen avulla
|
11
|
- Rekisteri (nopein)
- kääntäjä päättää milloin muuttujan arvo on rekisterissä
- Välimuisti (nopea)
- laitteisto hoitaa automaattisesti joillekin muistialueille
- Muisti (hidas)
- kääntäjä/lataaja valitsee sijaintipaikan
- globaali data ohjelman latauksen yhteydessä
- vakiot konekäskyssä
- ohjelma sijoittaa suoritusaikana
- aliohjelmien paikalliset muuttujat, parametrit
- käyttöjärjestelmä sijoittaa suoritusaikana
- dynaaminen data keossa suorituksen aikana
- Levy, levypalvelin (liian hidas, ei mahdollista)
- vaatii käyttöjärjestelmän varusohjelmien apua
|
12
|
- Aritmeettinen lauseke
- miten tehdä laskutoimitukset?
- Yksinkertaiset tietorakenteet
- yksiulotteiset taulukot, tietueet
- Kontrolli – mistä seuraava käsky?
- valinta: if-then-else, case
- toisto: for-silmukka, while-silmukka
- aliohjelmat, virhetilanteet
- Monimutkaiset tietorakenteet
- listat, moniulotteiset taulukot
|
13
|
|
14
|
|
15
|
|
16
|
- Ehdoton hyppy
- JUMP, CALL ja EXIT, SVC ja IRET
- Hyppy perustuen laiterekisterin arvoon (vrt. 0)
- Hyppy perustuen aikaisemmin asetetun tilarekisterin arvoon
- COMP
- JEQU, JGRE, …
- Ongelma vai etu: ttk-91:ssä kaikki ALU käskyt asettavat tilarekisterin
(implisiittinen ”COMP Rj, =0”)
- ADD, SUB, MUL, DIV, NOT, AND, OR, XOR,
SHL, SHR
|
17
|
|
18
|
|
19
|
- For-step-until -silmukka
- Do-until -silmukka
- Do-while -silmukka
- While-do –silmukka
- ...
|
20
|
|
21
|
|
22
|
- Kääntäjän viimeinen vaihe
- voi olla 50% käännösajasta
- Tavallisen koodin generointi
- alustukset, lausekkeet, kontrollirakenteet
- Optimoidun koodin generointi
- käännös kestää (paljon) kauemmin
- suoritus tapahtuu (paljon) nopeammin
- milloin globaalin/paikallisen muuttujan X arvo kannattaa pitää
rekisterissä ja milloin ei?
- missä rekisterissä X:n arvo kannattaa pitää?
- joskus R1:ssä, joskus R5:ssa?
|
23
|
|
24
|
- Suoritin tarkistaa käskyn suoritusaikana
- ”automaattinen”
- integer overflow,
divide by zero, ...
- Generoidut konekäskyt tarkistavat ja explisiittisesti aiheuttavat
keskeytyksen tai käyttöjärjestelmän palvelupyynnön tarvittaessa
- ”manuaalinen”
- index out of bounds, bad method, bad operand
- ihan mitä vain haluat testata!
|
25
|
|
26
|
|
27
|
- Ohjelmointikieli voi tukea suoraan moni-ulotteisia taulukoita
- Toteutus konekielitasolla aina (useimmissa arkkitehtuureissa)
yksiulotteinen taulukko
- vain yksi indeksirekisteri konekäskyssä
- Moniosainen toteutus
- laske alkion osoite yksi-ulotteisessa taulukossa ja käytä indeksoitua
tiedonosoitusmoodia
- TAI: laske alkion osoite muistissa ja käytä epäsuoraa
tiedonosoitusmoodia
|
28
|
|
29
|
- Talletus riveittäin
- Talletus sarakkeittain
|
30
|
|
31
|
- 2-ulotteinen taulukko T, jonka jokainen alkio on tietue, jossa neljä
kenttää:
- pituus
- ikä
- viime vuoden palkka kunakin kuukautena
- viime vuoden töissäolopäivien lukumäärä
kunakin kuukautena
- Talletustapa?
- Viitteet?
- Tarkistukset?
|
32
|
|
33
|
- Ensimmäinen toimiva ”todellinen” tietokone
- ohjelma ja data samassa muistissa
- Maurice Wilkes,
Cambridge University
- 1949
- 256 sanan muisti
- 35-bitin sanat
|
34
|
|
35
|
|
36
|
|