Harjoitukset

Tietokoneen toiminta, S2004, Harjoitus 3, (16-19.11.2004)

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

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

  2. [2 htp]  Ttk-91 koneen symbolinen konekieli. Kokonaislukuarvoinen taulukko T[8] on määritelty pääohjelmatasolla. Taulukossa on siis 8 alkiota (alkiot 0,...,7).
    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) 8 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.

    Alusta taulukko T sopivilla testiarvoilla ja 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 88.375 binääriesitys?
    2. Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa?
    3. Mikä on desimaalilukujen +43 ja -17 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)

  5. Tiedon esitys ja lukujärjestelmät.
    1. Mikä on desimaaliluvun 71.625 IEEE liukulukustandardin mukainen esitys?
    2. Mikä on desimaalijärjestelmän luvun 125 esitys heksadesimaalijärjestelmässä.
    3. Mikä on desimaalijärjestelmän luvun 125 esitys oktaalijärjestelmässä.
    4. 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ä.


Päivi Kuuppelomäki