Harjoitukset

Tietokoneen toiminta, Ks2004, LH 3

Nämä tehtävät tehdään harjoituksissa 25.8.2004.

Tee tehtävät yksi kerrallaan haluamassasi järjestyksessä. Tarvittaessa pyydä apua paikalla olevilta ohjaajilta. Halutessasi voit tehdä tehtäviä pienessä ryhmässä, mutta kaikkien tulee silti kirjoittaa omat vastauksensa ja tehdä omat ohjelmansa omalla koneellaan. Saatuasi valmiiksi jonkun tehtävän (joukon tehtäviä), voit pyytää ohjaajaa tarkistamaan suorituksesi.

Ennen pois lähtöäsi varmista vielä, että ohjaajat ovat kirjanneet kaikki tekemäsi tehtävät. Harjoitustehtäviä voi toki tehdä vielä kotonakin, mutta kurssin läpipääsyyn ja arvosanaan vaikuttavat vain harjoitustilanteessa kirjatut tehtävät. Kurssin suoritus edellyttää aktiivisuutta myös harjoitustehtävien suhteen.

  1. Täydennä (esimerkkihakemistossa olevaa) ohjelmaa lh_kutsu.k91 toteuttamalla aliohjelma SUBR(X, A, B), joka tulosparametrin X arvoksi arvoparametrien A ja B erotuksen. X välitetään viiteparametrina.

    Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Koksin avulla
    .

  2. [2 htp] Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka
    1. Varaa tilaa 20-alkioiselle taulukolle Tbl[20]
    2. Alustaa suoritusaikana taulukon Tbl siten, että Tbl[i] = i*i
    3. Laskee taulukon Tbl alkioiden summan siten, että indeksirekisterissä R1 on aina käsiteltävän taulukon alkion indeksi. Uusi alkio ladattaisiin siis R3:een konekäskyllä "LOAD  R3, Tbl(R1)".
    4. Tulostaa lasketun summan
    5. Alustaa osoitinmuuttujan Xptr osoittamaan taulukon Tbl ensimmäiseen alkioon
    6. Tulostaa osoitinmuuttujan Xptr arvon
    7. Laskee taulukon Tbl alkioiden summan siten, että osoitinrekisterissä R2 on aina käsiteltävän taulukon alkion osoite (pointteri). Uusi alkio ladattaisiin siis konekäskyllä "LOAD  R3, @R2".
    8. Tulostaa lasketun summan

    Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Titokoneen avulla.

  3. Ttk-91 koneen konekäskyn osoiteosa on vain 16-bittinen. Tämä asettaa rajoituksia käskyssä olevien vakioiden koolle.
    1. Mikä on suurin positiivinen luku, joka voidaan esittää käskyssä vakiona?
    2. Mikä on pienin negatiivinen luku, joka voidaan esittää käskyssä vakiona?
    3. Miten tulee toimia, jos tarvitaankin suurempaa vakiota? Esimerkiksi lukua 500000?
    4. Entä miten tulisi menetellä, jos tarvitaan suurta vakiota indeksoidun osoitusmoodin kanssa? Esimerkiksi, jos halutaan lukea data osoitteesta (R1)+666666?

  4. Tiedon esitys.
    1. Mikä on desimaalijärjestelmän luvun 43.234 binääriesitys?
    2. Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa?
    3. Mikä on desimaalilukujen +23 ja -75 esitys seuraavissa 16 bitin Big-Endian esitysmuodoissa:
      1. etumerkillinen (sign and magnitude)
      2. kahden komplementti (two's complement)
      3. yhden komplementti (one's complement)
      4. 32767 vakiolisäys (biased by 32767)
    4. Mikä on desimaaliluvun 33.125 IEEE liukulukustandardin mukainen esitys?
    5. Oletetaan, että ohjelmointikielessä MyLan on totuusarvo (boolean) ja liukuluku tietotyypit. Esimerkiksi, siinä voidaan käyttää boolean tai float tyyppisiä muuttujia.

      Ttk-91 koneessa ei kuitenkaan ole tällaisia tietotyyppejä. Voisiko MyLan kielelle tehdä kääntäjän, jonka avulla MyLan kielisiä ohjelmia voisi suorittaa ttk-91 koneessa? Jos voi, niin miten? Jos ei voi, niin miksi ei?

Noudata aliohjelmien ja funktioiden toteutuksessa luennolla esitettyä tapaa aktivointitietueen rakentamiseen ja purkamiseen. Huolehdi, että kaikkien työrekistereiden (R0-R5) arvot ovat samat aliohjelmasta tai funktiosta palatessa kuin ne olivat kutsuhetkellä.


Teemu Kerola