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

Tietokoneen toiminta, S2003, LH 2

Nämä tehtävät käsitellään harjoituksissa viikolla 46, 10-14.11.2003
  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ää konekäskyissä sen sijaan, että ne pidettäisiin rekisterissä tai muistissa data-alueella? Miksi? Anna esimerkkejä?
    4. Mitkä ohjelman Simple tiedot haluttaisiin pitää joskus rekisterissä ja joskus muistissa ohjelman suorituksen aikana. Miksi? Anna esimerkkejä.
    5. 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=100;  /* variables x, y, z */
            main () {           /* main program */
                x = x - 67 + z;
    
                if (x < 40) {
                    x = 7 + x * z;
                    y = x - 67 + z;
                    }
                else {
                    x = 7 + x * z;
                    y = x / y - 8;
                    z = 8765;
                    }
                printf ( "%d %d %d \n", x, y, z)  /* print x, y, z */
            }
    

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

     

  3. Tee ttk-91 koneen symbolisella konekielellä n:nnen Fibonacci luvun laskeva ohjelma, joka voisi olla käännös C ohjelmasta
            int n, i, prev, fib, next;  /* variables n, i, prev, fib, next */
            main () {                   /* main program */
                scanf ("%d", &n); /* read n */
    
                i = 1;
                prev = 0;
                fib = 1; 
                
                while (i < n) {
                    next = prev+fib;
                    prev = fib;
                    fib = next;
                    
                    i = i+1;
                    }
    
                printf ( "%d %d \n", n, fib);  /* print n, fib */
            }

    Voit pitää muuttujien arvoja joko muistissa tai rekistereissä.
    Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Koksin avulla.

     

  4. 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ä (sen ADDR kentästä)

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

  5. 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 Koksin avulla.

Varaudu esittämään kaikki Koksiin liittyvät tehtävät mikrotietokoneella harjoitustilaisuudessa. Tuo mukanasi sekä listauksena että levykkeellä kaikki laskuharjoitusta varten tekemäsi ohjelmat.


Teemu Kerola