Tietokoneen toiminta, kevät 2003

Harjoitus 2

Käsitellään harjoitusryhmissä keskiviikkona 21.5.2003. Tehtävät tehdään ryhmätöinä harjoitustilaisuudessa. Harjoitustilaisuus palvelee parhaiten omaa ja muidenkin oppimista, jos on etukäteen perehtynyt aihepiiriin ja yrittänyt itse ratkaista tehtäviä.

  1. Muistin osoitusmuodot. Oletetaan, että kullakin käskyllä jatkossa lähtötilanne on luentojakson 2 kalvon 21 (TTK-91 muistin osoitusmoodit) tilanne. Anna kullekin käskylle tehollinen muistiosoite (effective address) ja joko muuttuneen rekisterin sisältö tai muuttuneen muistipaikan osoite ja sisältö. Jos jokin käsky ei ole laillinen, kerro minkä takia näin on.
    1. LOAD R4, 200
    2. LOAD R3, One(R1)
    3. STORE R0, One(R1)
    4. STORE R2, @9(R3)
    5. LOAD R0, @R1
    6. LOAD R1, @R1
    7. LOAD R1, @R2(R3)
    8. STORE R1, @R1
    9. STORE R0, R1
    10. STORE R2, =One

  2. Korkean tason kieli vs. symbolinen konekieli. Oletetaan, että meillä on korkean tason kielellä (C, Java, Pascal) tehty ohjelma Simple, joka on käännetty TTK-91-koneen konekielelle.
    1. Mitkä ohjelman Simple tiedot (esim. muuttujien arvot) haluttaisiin pitää laiterekistereissä koko ohjelman suorituksen ajan. Miksi? Anna esimerkkejä.
    2. Mitkä ohjelman Simple tiedot haluttaisiin pitää muistissa koko ohjelman suorituksen ajan. Miksi? Anna esimerkkejä.
    3. Mitkä ohjelman Simple tiedot haluttaisiin pitää joskus rekisterissä ja joskus muistissa ohjelman suorituksen aikana. Miksi? Anna esimerkkejä.
    4. Mitkä ohjelman Simple tietojen ei tarvitse sijaita missään ohjelman suorituksen aikana? Miksi? Anna esimerkkejä. (Tämä ei ole trikkikysymys)

  3. Tilarekisteri SR
    1. Milloin ja miten tilarekisterin bitteihin kirjoitetaan arvoja?
      Miten tilarekisterin eri bitit eroavat tässä suhteessa?
    2. Milloin ja miten tilarekisterin bittien arvoja tutkitaan?
      Miten tilarekisterin eri bitit eroavat tässä suhteessa?
    3. Mitkä konekäskyt kirjoittavat tilarekisteriin?
    4. Mitkä konekäskyt lukevat tilarekisteriä?

  4. Ohjelma simulointi ja muuttaminen
    1. Simuloi alla olevan ohjelman toimintaa. Mitä ohjelma tulostaa, jos annat syötteeksi syntymäkuukautesi järjestysnumeron? Entä mitä tapahtuu, jos annat syötteeksi negatiivisen luvun?
        Alku  LOAD  R1,=0
              STORE R1,15
              IN    R2,=KBD
              STORE R2,14
              LOAD  R3,15
              ADD   R3,14
              STORE R3,15
              LOAD  R4,14
              SUB   R4,=1
              STORE R4,14
              JPOS  R4,4
              LOAD  R5,15
              OUT   R5,=CRT
        Loppu SVC   SP,=HALT
      
    2. Ohjelmassa on laskettu ihan itse muuttujille osoitteet. Se voidaan kuitenkin jättää kääntäjän murheeksi. Muuta koodia siten, että siitä tulee 'luettavampi' ja siihen on jälkikäteen helpompaa lisätä uusia käskyjä.
    3. Optimoi koodia, ts. poista lopputuloksen kannalta tarpeettomat käskyt.

  5. Tee ttk-91-koneen symbolisella konekielellä ohjelma, joka tekee saman kuin C-ohjelma
            int x=7, y=33, z=5;  /* variables x, y, z */
            main () {           /* main program */
                y = 4;
                x = 52 - y * z;
                if (x < 40) {
                    y = x - 34;
                    }
                else {
                    y = x / y + 4;
                    z = 23;
                    }
                printf ( "%d %d %d \n", x, y, z)  /* print x, y, z */
            }
    

  6. a) Tutustu KOKSI-simulaattoriin lukemalla KOKSI-simulaattorin käyttöohje, joka löytyy kurssin kotisivulta.
    b) Selvitä, kuinka KOKSI-simulaattoria voi käyttää laitoksen koneissa ja kuinka simulaattorin voi asentaa omalle koneelle. Tietoa löytyy esim. tämän kevään Tietokoneen toiminnan luentokurssilta.
    Konekielisten ohjelmien kirjoittaminen ja testaaminen pelkästään paperilla on työlästä ja hankalaa. Niiden tekeminen ja testaaminen Koksi-simulaattorilla on paljon mielekkäämpää. Jos mitenkään mahdollista, niin käytä Koksia. Koksin käyttö ei kuitenkaan ole edellytys kurssin suorittamiseen. Kokeessa on kuitenkin osattava kirjoittaa konekielinen ohjelma paperimuodossa.