Harjoitukset
Tietokoneen toiminta, S2004, Harjoitus 3, (16-19.11.2004)
- Täydennä (esimerkkihakemistossa olevaa) ohjelmaa lh_kutsu.k91
toteuttamalla aliohjelma SUBR(X, A, B), joka tulosparametrin X arvoksi arvoparametrien
A ja B neliöiden erotuksen. X välitetään viiteparametrina.
Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Titokoneen avulla.
- [2 htp] Ttk-91 koneen symbolinen konekieli. Kokonaislukuarvoinen taulukko T[8]
on määritelty pääohjelmatasolla. Taulukossa on siis 8 alkiota (alkiot
0,...,7).
- Anna taulukon T määrittely.
- Tee funktio Laske(S, N), joka palauttaa arvonaan
N-alkioisen taulukon S positiivisten alkioiden lukumäärän. Noudata suositusten mukaista
aliohjelmien (funktioiden) toteutustapaa ja kutsumekanismia. Parametri S
on viiteparametri ja parametri N on arvoparametri.
- Anna ttk-91 symbolisen konekielen konekäskyt, joilla
em. funktiota käyttäen tulostetaan (muualla, pääohjelmatasolla
määritellyn) 8 alkioisen taulukon T positiivisten alkioiden lukumäärä. Noudata
suositusten mukaista aliohjelmien kutsumekanismia. Parametri S on
viiteparametri ja parametri N on arvoparametri.
- Miten funktiota Laske tulisi muuttaa, jos se
palauttaisikin taulukon S positiivisten alkioiden lukumäärän sijaan
taulukon S parittomien alkioiden lukumäärän.
- Piirrä aktivointiotietuepino kohdan b) aliohjelman kutsun jälkeen ja juuri ennen aliohjelmasta paluuta.
Alusta taulukko T sopivilla testiarvoilla ja tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Titokoneen
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?
- Tiedon esitys.
- Mikä on desimaalijärjestelmän luvun 88.375 binääriesitys?
- Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa?
- Mikä on desimaalilukujen +43 ja -17 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)
- Tiedon esitys ja lukujärjestelmät.
- Mikä on desimaaliluvun 71.625 IEEE liukulukustandardin mukainen esitys?
-
Mikä on desimaalijärjestelmän luvun 125 esitys heksadesimaalijärjestelmässä.
-
Mikä on desimaalijärjestelmän luvun 125 esitys oktaalijärjestelmässä.
- 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?
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ä.
Päivi Kuuppelomäki