Helsingin yliopisto - Tietojenkäsittelytieteen laitos
Harjoitukset (näyttö layout) (tulostus layout) (kämmen layout)

Tietokoneen toiminta, S2003, LH 3

Nämä tehtävät käsitellään harjoituksissa viikolla 47, 17-21.11.2003

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

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

  2. Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka
    1. Varaa tilaa 10-alkioiselle taulukolle Arr[10]
    2. Alustaa suoritusaikana taulukon Arr siten, että Arr[i] = i*i*i
    3. Laskee taulukon Arr 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, Arr(R1)".
    4. Tulostaa lasketun summan

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

  3. Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka
    1. Varaa tilaa 10-alkioiselle taulukolle Arr[10]
    2. Alustaa suoritusaikana taulukon Arr siten, että Arr[i] = i*i*i
    3. Alustaa osoitinmuuttujan Aptr osoittamaan taulukon Arr ensimmäiseen alkioon
    4. Tulostaa osoitinmuuttujan Aptr arvon
    5. Laskee taulukon Arr 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".
    6. Tulostaa lasketun summan

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

  4. 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?
    5. Milloin on järkevää sijoittaa pieni vakio muistin vakioalueelle (esim. "XX    DC   35")  sen sijaan, että se sijoitettaisiin käskyyn (esim. "LOAD    R0, =35")?
       
  5. Järjestelmätietojen suojaus ja yhteiskäyttö?
    1. Miten voidaan estää tilanne, jossa käyttäjän ohjelma vahingossa (tahallaan) kirjoittaa käyttöjärjestelmän muistialueelle?
    2. Miten voidaan estää tilanne, jossa käyttöjärjestelmän ohjelma vahingossa (tahallaan) kirjoittaa sellaiselle käyttöjärjestelmän muistialueelle, johon sen ei pitäisi päästä käsiksi lainkaan?
    3. Miten voidaan estää tilanne, jossa käyttöjärjestelmän ohjelma vahingossa (tahallaan) kirjoittaa käyttäjätason ohjelman alueelle ja sotkee kyseisen ohjelman tietoja?
    4. Miten sallitaan tilanne, että käyttäjän ohjelma käyttää tilapäisesti sellaista käyttöjärjestelmän muistialuetta, johon sillä normaalisti ei olisi pääsyoikeutta?
    5. Miten voidaan estää I/O laitetta keskeyttämästä käyttöjärjestelmäohjelman tärkeää toimintoa, kun I/O laite ei edes tiedä mikä ohjelma on kulloinkin suorituksessa saati sitten sitä, milloin jotain tärkeää on tekeillä?

  6. Tiedon esitys.
    1. Mikä on desimaalijärjestelmän luvun 34.324 binääriesitys?
    2. Mitä desimaalijärjestelmän lukua binääriluku 101110.1010 vastaa?
    3. Mikä on desimaalilukujen +21 ja -55 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. Erityisesti, 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?
      Käsittele boolean ja float-tyypit erikseen vastauksessasi.

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ä.

Varaudu esittämään kaikki Koksiin liittyvät tehtävät mikrotietokoneella harjoitustilaisuudessa. Pidä mukanasi levykettä harjoitusta varten tekemiesi ohjelmien tallettamiseen.


Teemu Kerola