Tietokoneen toiminta, kevät 2005

Harjoitus 2

Käsitellään harjoitusryhmissä keskiviikkona 25.5.2005. Tehtävät 1-5 on tehtävä etukäteen kotona ja tehtävä 6 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. 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. Missä fyysisesti erilaisissa tietokoneen komponenteissa ohjelman Simple muuttujan X arvo voi sijaita (TTK-91 koneessa) ohjelman suoritettaessa? Anna kaksi vaihtoehtoa. Perustele vastauksesi.

    Anna seuraaviin kysymyksiin vastaukset TTK-91 koneen osalta erikseen kullekin em. kahdelle vaihtoehdolle.

    1. Millä konekäskyillä X:n arvon voi tulostaa?
    2. Millä konekäskyillä X:n osoitteen voi tulostaa?
    3. Millä konekäskyillä X:n arvoksi asetetaan luku 4567?
    4. Millä konekäskyillä X:n osoitteeksi asetetaan luku 130?
    5. Millä konekäskyillä X:n arvon ollessa suurempi kuin 20 hypätään osoitteeseen YLI20.
    6. Millä konekäskyillä X:n arvo voidaan tallettaa muistiin muuttujan Y arvoksi?

  2. Korkean tason kieli vs. symbolinen konekielen käskyt. Minkälaisen korkean tason kielen ohjelmakohdan toteuttamiseen voitaisiin käyttää TTK-91 koneen (pseudo)konekäskyä
    1. SUB
    2. MOD
    3. OR
    4. XOR
    5. COMP
    6. JUMP
    7. JNGRE
    8. DC
    Anna esimerkki kustakin tapauksesta.
    Miten pseudokonekäskyt eroavat tavallista konekäskyistä?

  3. Esitä allaolevat käskyt TTK-91 käskyrakenteen mukaan kokonaislukuina (ei siis tarvitse muuttaa biteiksi):
      a.  MUL R1, R5
      b.  LOAD R3, =Puppu
      c.  ADD R5, Puppu(R1)
      d.  STORE R1, Puppu
      e.  JUMP @Puppu(R1)
      f.  SUB R3, @Link(FP)
      g.  POP SP, R5
    
    Olkoon symbolin Puppu arvo 127 ja symbolin Link arvo 4. Käskyrakenne löytyy Häkkisen monisteesta tai luentokalvoista. Operaatioiden koodit on esitetty TTK-91-koneen käskyluettelossa. .
    Kerro myös, mitä kukin käsky tekee ja erityisesti, kuin ka monta muistiviitettä se suorittaa.

  4. Muistin osoitusmuodot.
    Selvitä, mikä on kunkin käskyn tehollinen osoite eli se ohjelmatason osoite, johon käsky kohdistaa talletuksen tai muistista noudon. Tehollinen osoite saadaan indeksoinnin jälkeen. Kun teholliseen osoitteeseen lisätään BASE-rekisterin arvo saadaan fyysinen muistiosoite. Anna muuttuneen rekisterin sisältö tai muuttuneen muistipaikan osoite ja sisältö. Jos jokin käsky ei ole laillinen, kerro minkä takia näin on. Oletetaan, että jokaisessa kohdassa alkutilanteena on:
     R0= 104       MEM[10] = 200
     R1 = 10       MEM[11] = 300
     R2 =201       MEM[200] = 6000
     R3=   2       MEM[201] = 11
                   
     One EQU 1
     
    1. LOAD R4, 200
    2. LOAD R3, One(R1)
    3. LOAD R3, =One(R1)
    4. STORE R0, One(R1)
    5. STORE R2, @9(R3)
    6. LOAD R0, @R1
    7. LOAD R1, @R1
    8. STORE R1, @R1
    9. STORE R0, R1
    10. STORE R2, =One
    11. LOAD R1, @R2(R3)

  5. Tilarekisteri SR
    1. Milloin ja miten tilarekisterin eri bitteihin kirjoitetaan arvoja?
    2. Milloin ja miten tilarekisterin eri bittien arvoja tutkitaan?
    3. Mitkä konekäskyt kirjoittavat tilarekisteriin?
    4. Mitkä konekäskyt lukevat tilarekisteriä?

  6. Ohjelman 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.
    4. Testaa Titokoneella koodisi toimivuus.