Harjoitukset

Tietokoneen toiminta, Ks2004, LH 2

Nämä tehtävät tehdään harjoituksissa 20.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. 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)

  2. Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka tekee saman kuin C ohjelma
            int x=7, y=3, z=170;  /* variables x, y, z */
            main () {             /* main program */
                y = 4;
                x = 528 - 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 */
            }
    

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

  3. Ohjelmassa käytetyt vakiot (esim. luku MAXID=78) voivat sijaita useassa eri paikassa ohjelman suorituksen aikana. Anna ttk-91 koneen symbolisella konekieliset käskyt, joilla rekisterin R1 arvoon lisätään vakion MAXID arvo ja vakion MAXID arvo (78) otetaan käyttöön
    1. muistista (muistipaikasta)
    2. rekisteristä
    3. konekäskystä

    Anna esimerkki tilanteesta, jossa tapa (a) olisi sopivin. Vastaavasti tapauksille b ja c. Perustele esimerkkisi.


     

  4. Henkilörekisterin tietuetyyppi on määritelty pseudokäskyillä  
    	# record person:        3 integer fields 
    	Id   	EQU  0   # relative address within record
    	Age     EQU  1
    	Salary  EQU  2
    

    Tietueet Pekka ja Jussi on varattu muistista alustettuna ja tietue Maija on varattu muistista alustamattonana pseudokäskyillä

    	Pekka	DC   3214   # ID     =  3214
               	DC     35   # AGE    =    35
     		DC  12345   # SALARY = 12345
    	Jussi	DC   8888
    		DC     54
     		DC  14321
    	Maija	DS      3   # initial values not defined


    Esimerkki: Jos R4 osoittaa tietueen Pekka alkuun, niin Pekan palkka saadaan rekisteriin R5 konekäskyllä "LOAD   R5, Salary(R4)".

    Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka

    1. Tulostaa R1:n osoittaman henkilön kaikkien kenttien arvot, kun R1 on ensin alustettu osoittamaan Jussin tietoja konekäskyllä "LOAD   R1, =Jussi".
    2. Asettaa Maijan id:ksi 6666, iäksi 32, ja palkaksi saman kuin mitä Jussilla tällä hetkellä on.
    3. Tulostaa Pekan, Jussin ja Maijan palkkojen summan.
    4. Tulostaa näistä kolmesta tällä hetkellä nuorimman henkilön iän.

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


Teemu Kerola