Harjoitukset
Tietokoneen toiminta, Kesä 2002, LH 3
Nämä tehtävät tehdään harjoituksissa 27.8.2002.
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.
- Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka
- Varaa tilaa 20-alkioiselle taulukolle Tbl[20]
- Alustaa suoritusaikana taulukon Tbl siten, että Tbl[i] = i*i
- Laskee taulukon Tbl alkioiden summan siten, että indeksirekisterissä
R1 on aina käsiteltävän taulukon alkion indeksi. Uusi alkio
ladattaisiin siis rekisteriin R3 konekäskyllä "LOAD R3,
Tbl(R1)".
- Tulostaa lasketun summan
Tässä tehtävässä ei ole tarkoitus käyttää aliohjelmia tai
funktioita. Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla
se Koksin avulla.
- Täydennä (esimerkkihakemistossa olevaa) ohjelmaa lh_arvop.k91
toteuttamalla aliohjelma Simple(A, B, C), joka tulostaa annetun kolmen
parametrin summan. Kaikki kolme parametria välitetään arvoparametreina.
Noudata aliohjelmien ja funktioiden toteutuksessa luennolla esitettyä
tapaa aktivointitietueen rakentamiseen ja purkamiseen. Huolehdi, että
kaikkien työrekistereiden (R0-R5) arvot ovat samat aliohjelmasta tai
funktiosta palatessa kuin ne olivat kutsuhetkellä. Voit kopioida heti
aluksi ohjelmarungon lh_arvop.k91
omaan koksi hakemistoosi ja täydentää siihen aliohjelman Simple.
Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Koksin
avulla.
- Täydennä (esimerkkihakemistossa olevaa) ohjelmaa lh_kutsu.k91
toteuttamalla aliohjelma SUBR(X, A, B), joka tulosparametrin X arvoksi
arvoparametrien A ja B erotuksen. X välitetään viiteparametrina.
Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Koksin
avulla.
- Ttk-91 koneen konekäskyn osoiteosa on vain 16-bittinen. Tämä asettaa
rajoituksia käskyssä olevien vakioiden koolle.
- Mikä on suurin positiivinen luku, joka voidaan esittää käskyssä
vakiona?
- Mikä on pienin negatiivinen luku, joka voidaan esittää käskyssä
vakiona?
- Miten tulee toimia, jos tarvitaankin suurempaa vakiota? Esimerkiksi
lukua 500000?
- Entä miten tulisi menetellä, jos tarvitaan suurta vakiota
indeksoidun osoitusmoodin kanssa? Esimerkiksi, jos halutaan lukea data
osoitteesta (R1)+666666?
- Keksitkö tilannetta, jossa pienikin vakio olisi järkevämpää
tallettaa data alueelle (DC valekäskyllä) sen asemesta, että se (tai
sen kaikki ilmentymät) talletettaisiin konekäskyn vakio-osaan?
- Muistiviitteet.
- Miten monta muistiinviitausta eri ttk-91 koneen konekäskyt voivat
tehdä? Mikä on "huonoin" käsky tässä mielessä? Mikä on
"paras"?
- Kumpi on tärkein tekijä tässä suhteessa, operaatiokoodi, tiedon
osoitusmuoto vai molemmat? Miksi?
- Tiedon esitys.
- Mikä on desimaalijärjestelmän luvun 43.234 binääriesitys?
- Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa?
- Mikä on desimaalilukujen +23 ja -75 esitys seuraavissa 16 bitin
Big-Endian esitysmuodoissa:
- etumerkillinen (sign and magnitude)
- kahden komplementti (two's complement)
- yhden komplementti (one's complement)
- 32767 vakiolisäys (biased by 32767)
- Mikä on desimaaliluvun 33.125 IEEE liukulukustandardin mukainen
esitys?
- Oletetaan, että ohjelmointikielessä MyLan on totuusarvo (boolean) ja
liukuluku tietotyypit. Esimerkiksi, siinä voidaan käyttää boolean
tai float tyyppisiä muuttujia. Ttk-91 koneessa ei kuitenkaan ole
tällaisia tietotyyppejä. Voisiko MyLan kielelle tehdä kääntäjän,
jonka avulla MyLan kielisiä ohjelmia voisi suorittaa ttk-91 koneessa?
Jos voi, niin miten? Jos ei voi, niin miksi ei?
- Tee ttk-91 koneen symbolisella konekielellä ohjelma, joka
- Varaa tilaa 20-alkioiselle taulukolle Tbl[20]
- Alustaa suoritusaikana taulukon Tbl siten, että Tbl[i] = i*i
- Alustaa osoitin muuttujan Xptr osoittamaan taulukon Tbl ensimmäiseen
alkioon
- Tulostaa osoitinmuuttujan Xptr arvon
- Laskee taulukon Tbl alkioiden summan siten, että osoitinrekisterissä
R2 on aina käsiteltävän taulukon alkion osoite (pointteri).
Uusi alkio ladattaisiin rekisteriin R3 siis konekäskyllä
"LOAD R3, @R2".
- Tulostaa lasketun summan
Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Koksin
avulla.
Noudata aliohjelmien ja funktioiden toteutuksessa luennolla esitettyä tapaa
aktivointitietueen rakentamiseen ja purkamiseen. Huolehdi, että kaikkien
työrekistereiden (R0-R5) arvot ovat samat aliohjelmasta tai funktiosta
palatessa kuin ne olivat kutsuhetkellä.
Teemu Kerola