Tietokoneen toiminta, kevät 2004

Harjoitus 6

Käsitellään harjoitusryhmissä tiistaina 8.6.2004.

Varaudu harjoituksiin etukäteen tutustumalla käsiteltävään asiaan ja yrittämällä itse tehdä tehtäviä niin paljon kuin mahdollista. Harjoitustilaisuudessa tehtävät 'viimeistellään' ryhmissä.

  1. Nimen sidonta
    Ohjelmassa käytetyn nimen sidonta sen lopulliseen arvoon voi tapahtua ainakin seuraavien tapahtumien yhteydesssä: ohjelman kirjoitusaikana, käännösaikana, linkityksen aikana, latauaaikana, kantarekisterin (tai muun KJ-rekisterin) asetuksen aikana tai konekäskyn suoritusaikana. Milloin seuraavisen esimerkkien nimien sidonta tapahtuu? Perustele.
     
            operaatio                  nimet
      a)     ADD  R1, parX (FP)       R1?, ParX?  FP? ADD?
      b)  XX DC   456789              XX?
      c)     CALL SP, IO.Print        Print?
      d)  DD EQU  65                  DD?
      e)  locX = 3456789;             locX? c-kielen muuttuja
      
    Kussakin tapauksessa perustele, miksi sidonta ei voisi tapahtua aikaisemmin tai myöhemmin.

  2. Java-ohjelmia (tavukoodia) voidaan suorittaa (ainakin) neljällä eri tavalla: tulkitsemalla, tavallisella käännöksellä, Just-In-time -käännöksellä tai suoraan Java-suorittimella.
    1. Anna esimerkkejä tilanteesta, jolloin tulkitseminen olisi parempi kuin muut vaihtoehdot. Perustele, miksi muut tavat olisivat huonompia.
    2. Anna vastaavat esimerkit ja perustelut tilanteista, jolloin muut e.m. vaihtoehdoista olisivat parhaita vaihtoehtoja.
    3. Mikä olisi paras vaihtoehto (Java) ohjelmoinnin harjoitustyön suorittamiseen? Miksi?
    4. Mitä prosesseja järjestelmässä tarvitaan ohjelman suoritushetkellä, jos Java ohjelmaasi MyProg suoritetaan 1) tulkitsemalla, 2) tavallisella käännöksellä, 3) Just-In-Time -käännöksellä tai 4) suoraan Java-suorittimella?

  3. Kertausta ohjelman suorittamisesta (kokeessa usein kysyttyä)
    1. Kuvaa prosessorin rekistereiden tasolla, miten tehdään käskynouto.
    2. Esitä prosessorien rekisterien tasolla, miten suoritetaan käskyt:
                 LOAD R2, =100
                 COMP R2, @10(R2)
                 JNLES away
                  ....
            away  ....
       
    3. Jos muistipaikkoihin 100-300 on talletettu ko. muistipaikan osoite eli paikassa 100 on luku 100, paikassa 101 luku 101 jne, niin hypätäänkö ohjelmassa osoitteeseen away vai ei?

  4. Kertausta tiedon esitysmuodoista.
    1. Muuta luku 109.625 binäärimuotoon.
    2. Esitä luku -42 kahden komplementtimuodossa.
    3. Mitä desimaalilukua 32-bittinen IEEE:n standardin mukainen liukulukuesitys 0xC1600000 (heksadesimaaliluku) tarkoittaa?

  5. Kertausta aliohjelmista.
    Kokonaislukuarvoinen taulukko T[40] on määritelty pääohjelmatasolla. Taulukossa on siis 40 alkiota (alkiot 0,...,39).
    1. Anna taulukon T määrittely.
    2. Tee funktio Laske(S, N), joka palauttaa arvonaan N-alkioisen taulukon S positiivisten alkioiden lukumäärän. Noudata suositusten mukaista aliohjelmien (funktioiden) toteutustapaa ja kutsumekanismia. Parametri S on viiteparametri ja parametri N on arvoparametri.
    3. Anna ttk-91 symbolisen konekielen konekäskyt, joilla em. funktiota käyttäen tulostetaan (muualla, pääohjelmatasolla määritellyn) 40 alkioisen taulukon T positiivisten alkioiden lukumäärä. Noudata suositusten mukaista aliohjelmien kutsumekanismia. Parametri S on viiteparametri ja parametri N on arvoparametri.
    4. Miten funktiota Laske tulisi muuttaa, jos se palauttaisikin taulukon S positiivisten alkioiden lukumäärän sijaan taulukon S parittomien alkioiden lukumäärän.
    5. Piirrä aktivointiotietuepino kohdan b) aliohjelman kutsun jälkeen ja juuri ennen aliohjelmasta paluuta

  6. Palautetta kurssista
    1. Kurssin tavoitteena on tarjota perustiedot tietokoneen toiminnasta 2 ov:n mittaisella kurssilla. Tarjosiko kurssi mielestäsi tähän tavoitteeseen sopivan peruspaketin? Mikä osa kurssin materiaalista tuntui turhalta ja tarpeettomalta? Mitä tärkeitä asioita kurssilta puuttui? Mistä asioista olisit halunnut tietää enemmän?
    2. Saitko kurssin perusteella mielestäsi riittävän selkeän ja kattavan kuvan tietokoneen toiminnasta? Mitkä asiat tuntuivat turhan vaikeilta ja monimutkaisilta? Luettele mielestäsi kolme vaikeinta asiaa. Mitkä asiat taas tuntuivat helpoilta?
    3. Muita kommentteja kurssista.
    4. Vastaa myös seuraaviin kysymyksiin
      1. Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän asti aikaa?
        Luentojen seuraamiseen? Harjoituksiin? Itseopiskeluun?
      2. Kuinka paljon aikaa käytit harjoituksiin valmistautumiseen ennen harjoitustilaisuutta? Kuinka paljon aikaa käytit itsellesi vaikeiden kohtien selvittämiseen harjoitustilaisuuden jälkeen?
      3. Kuinka suureen osaan luennoista osallistuit? (100%, 90%, ...)
      4. Jos osallistuit lähes kaikkiin luentoihin, niin opitko perusasiat luennoilla vai pitikö niitä vielä kovasti opiskella kirjoista?
      5. Käytitkö englanninkielisiä oppikirjoja? Kuinka paljon?