Harjoitukset

Tietokoneen toiminta, Syksy 2004, Harjoitus 2, (9-12.11.2004)

  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 a=7, c=4, m=15, i=4, i0=4,
        k=0, n=0, j=1, p=0; /* variables a,c, i, i0, k, n, j, p */
    main(){               /*main program, basic linear congruential
    algorithm */
      scanf("%d", &n);    /* read an integer into n */
      scanf("%d", &p);    /* read an integer into p */
      while (k < n) {
            if (i0 == i)  /* if the value of i0 is same as the value of i
    */
              j=1;
            if (p==1)       /* print only random numbers */
              printf("%d \n", i);  /* print i */
            else
              printf("%d %d %d\n", k, j, i);  /* print k, j, i */
            i = (a * i + c ) % m; /* take module m from expression inside
    () */
            k++; j++;      /* increment 1 into k and j */
                   }
    }
    

    Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Titokoneen avulla. Kokeile antaa syötteiksi esimerkiksi n=17 ja p=1. (Tällöin tuloksena pitäisi tulla luvut 4 2 3 10 14 12 13 5 9 7 8 0 4 2 3 10 14)

  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. Kuntavaalien tulosten tietuetyyppi on määritelty pseudokäskyillä  
    	
                   ; record party:  4 integer fields
                   Places  EQU 0    ; relative address within record
                   Votes   EQU 1
                   Change  EQU 2
                   VoteC   EQU 3
    

    Tietueet SDP ja KESK on varattu muistista alustettuna ja tietue KOK on varattu muistista osittain alustettuna pseudokäskyillä

    	
                    SDP     DC  2585    ; Places = 2585
                    s1      DC  575822  ; Votes  = 575822
                    s2      DC  26      ; Change = 26
                    s3      DC  64452   ; VoteC  = 64452
                    KESK    DC  4425
                    k1      DC  543885
                    k2      DC  -200
                    k3      DC  15566
                    KOK     DC  2078
                    kok1    DC  521412
                    kok2    DS  1       ; initial values not defined
                    kok3    DS  1       ; initial values not defined
    
    Huom! Muuttujanimiä s1, s2, s3, k1, k2,k3, kok1, kok2 ja kok3 ei saa käyttää ohjelmassa. Ne on kirjoitetttu vain koska Titokone simulaattori tulkitsee virheelliseksi pelkän DC komennon ilman symbolin nimeä. Myös 2 viimeistä muistin varausta voitaisiin ttk91-koneen mukaan tehdä DS 2, mutta titokone varaa virheellisesti vain yhden muistipaikan.


    Esimerkki: Jos R4 osoittaa tietueen SDP alkuun, niin SDP:n paikkojen muutos verrattuna vuoden 2000 kuntavaalitulokseen saadaan rekisteriin R5 konekäskyllä "LOAD   R5, Change(R4)".

    Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka

    1. Tulostaa R1:n osoittaman tietueen kaikkien kenttien arvot, kun R1 on ensin alustettu osoittamaan Keskustan(KESK) tietoja konekäskyllä "LOAD   R1, =KESK".
    2. Asettaa Kokoomuksen(KOK) äänimäärän muutokseksi 57919 ja paikkojen muutokseksi 24 paikkaa enemmän kuin SDP:llä (laske ohjelmallisesti).
    3. Tulosta SDP:n, Keskustan ja Kokoomuksen saamien paikkojen summa kuntavaaleissa 2004 ja 2000.
    4. Tulosta näistä kolmesta puolueesta vuonna 2000 vähiten paikkoja saaneen paikkamäärä.

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


Päivi Kuuppelomäki