Notes
Slide Show
Outline
1
Luento 3
Konekielinen ohjelmointi
(TTK-91, KOKSI)
  • Muuttujat
  • Tietorakenteet
  • Kontrolli
  • Optimointi
  • Tarkistukset
2
Tiedon sijainti suoritusaikana (2)
  • Muistissa (=keskusmuistissa)
    • iso
    • hidas
    • data-alueella vai konekäskyssä vakiona?
  • Rekisterissä
    • pieni
    • nopea
  • Probleemi: milloin muuttujan X arvo pidetään muistissa ja milloin rekisterissä?
    • missä päin muistia? miten siihen viitataan?
3
Miten tietoon 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
Tieto ja sen osoite (2)
  • 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
Tieto ja sen osoite (3)
  • Muuttujan X osoite on 230
  • Muuttujan X arvo on 12
  • Osoitinmuuttujan
    (pointterin) Xptr osoite on 225
  • Osoitinmuuttujan Xptr arvo on 230
    • jonkun tiedon osoite
  • Osoitinmuuttujan Xptr osoittaman kokonaisluvun arvo on 12
6
Osoitinmuuttujat (4)
  • 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
      • osoite ohjelmakoodiin
7
Globaali, kaikkialla näkyvä data (2)
  • Globaalit muuttujat ja muut globaalit tietorakenteet sijaitsevat ttk-91 koneen muistissa ohjelmakoodin jälkeen
    • muuttujat
    • tilan varaus
    • viittaaminen
8
Muistitilan käyttö yhdelle
ttk-91 ohjelmalle P (6)
9
Esimerkki: ohjelman muistin (osoiteavaruuden) käyttö aliohjelman Subr1 suorituksen aikana
10
Muistissa oleva data (2)
  • 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
Tiedon sijainti suoritusaikana (3)
  • 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
Ohjelmoinnin peruskäsitteet
  • 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
Aritmeettinen lauseke (3)
14
Globaalin taulukon
tilan varaus ja käyttö (3)
15
Globaalien tietueiden
tilan varaus ja käyttö (3)
16
Kontrolli - valinta konekielellä (2)
  • Ehdoton hyppy
    • JUMP, CALL ja EXIT, SVC ja IRET
  • Hyppy perustuen laiterekisterin arvoon (vrt. 0)
    • JZER, JPOS, ...
  • 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
If-then-else -valinta (2)
18
Case lauseke (2)
19
Toistolausekkeet (2)
  • For-step-until -silmukka
  • Do-until -silmukka
  • Do-while -silmukka
  • While-do –silmukka
  • ...


20
For lauseke (4)
21
While-do -lauseke (2)
22
Koodin generointi (7)
  • 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
Optimoitu
For lauseke (2)
24
Virhetilanteisiin varautuminen (3)
  • 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
Taulukon indeksitarkistus (1)
26
Taulukon alaindeksi ei ala nollasta (3)
27
Moni-ulotteiset taulukot (2)
  • 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
2-ulotteiset taulukot (6)
29
Moni-ulotteiset taulukot (3)
  • Talletus riveittäin
    • C, Pascal, Java?
  • Talletus sarakkeittain
    • Fortran
30
Linkitetty lista (8)
31
Monimutkaiset tietorakenteet
  • 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
EDSAC
 (Electronic Delay Storage Automatic Computer)
  • Ensimmäinen toimiva ”todellinen” tietokone
    • ohjelma ja data samassa muistissa
    • Maurice Wilkes,
      Cambridge University
    • 1949
    • 256 sanan muisti
      • elohopeasäiliöteknologia
    • 35-bitin sanat
34
EDSAC
35
EDSAC Simulator
36
-- Luennon 3 loppu --