Tietokoneen toiminta, K2003, LH 2
Nämä tehtävät käsitellään harjoituksissa viikolla 13, 24-28.3.2003- 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.
- Mitkä ohjelman Simple tiedot (esim. muuttujien arvot) haluttaisiin pitää laiterekistereissä koko ohjelman suorituksen ajan. Miksi? Anna esimerkkejä.
- Mitkä ohjelman Simple tiedot haluttaisiin pitää muistissa koko ohjelman suorituksen ajan. Miksi? Anna esimerkkejä.
- Mitkä ohjelman Simple tiedot haluttaisiin pitää joskus rekisterissä ja joskus muistissa ohjelman suorituksen aikana. Miksi? Anna esimerkkejä.
- Mitkä ohjelman Simple tietojen ei tarvitse sijaita missään ohjelman suorituksen aikana? Miksi? Anna esimerkkejä. (Tämä ei ole trikkikysymys)
- Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka tekee saman kuin
C ohjelma
int x=7, y=3, z=5; /* variables x, y, z */ main () { /* main program */ y = 4; x = 7 + x * z; if (x < 40) { y = x - 67 + z; } else { 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.
- 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. - 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
- muistista (muistipaikasta)
- rekisteristä
- konekäskystä (sen ADDR kentästä)
Anna esimerkki tilanteesta, jossa tapa (a) olisi sopivin. Vastaavasti tapauksille b ja c. Perustele esimerkkisi.
- 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
- Tulostaa R1:n osoittaman henkilön kaikkien kenttien arvot, kun R1 on ensin alustettu osoittamaan Jussin tietoja konekäskyllä "LOAD R1, =Jussi".
- Asettaa Maijan id:ksi 6666, iäksi 32, ja palkaksi saman kuin mitä Jussilla tällä hetkellä on.
- Tulostaa Pekan, Jussin ja Maijan palkkojen summan.
- 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