Käsitellään harjoitusryhmissä keskiviikkona 29.5.2002.
Kurssilla on sata oppilasta. Peräkkäisiiin muistipaikkoihin 100, ..., 199
on talletettu kunkin oppilaan pistemäärät. Kirjoita symbolisella konekielellä
ohjelma, joka tulostaa oppilaiden pistemäärien keskiarvon.
Aliohjelma ja pääohjelma
Laadi aliohjelma Summa, joka laskee taulukkoon eli peräkkäisiin
muistipaikkoihin talletettujen lukujen summan. Aliohjelmalle välitetään
aktivointitietuessa eli pinossa parametreina taulukon osoite sekä taulukon
koko. Myös laskettu summa palautetaan pinossa.
Laadi pääohjelma Pisteet, joka kutsuu aliohjelmaa Summa laskemaan
taulukkoon Taulu [0:50] talletettujen koepisteiden summan ja tulostaa
pistemäärien keskiarvon. Voit olettaa, että pisteet on jo valmiiksi talletettu
taulukkoon.
Näytä pinon sisältö juuri ennen aliohjelmakutsua, aliohjelman aloittaessa,
juuri ennen aliohjelmasta paluuta, heti paluun jälkeen ja juuri ennen
pääohjelman lopetuskäskyä.
Laadi TTK-91:n symbolisella konekielellä pääohjelma ja aliohjelma Vaihda,
joka vaihtaa parametriensa X ja Y arvon:
APU = X;
X = Y;
Y = APU;
Välitä parametrit aktivointitietueessa. Piirrä myös kuva
aktivointitietuepinosta.
Rekursiivinen aliohjelma
Käännä seuraava rekursiivinen aliohjelma konekielelle:
static long Duo(int n) {
if n < 1 then return 1 else
return Duo(n-1)+n+1;
}
Kirjoita myös yksinkertainen pääohjelma, jossa kutsutaan metodia Duo
arvolla n = 3.
Näytä, miten aktivointitietuepino muuttuu aliohjelman suorituksen aikana.
Kuvaa prosessorin rekistereiden tasolla, miten käskynouto tehdään.
Miksi ohjausyksikkö kasvattaa jokaisen käskynoudon yhteydessä käskyosoitinta?
Mitä tapahtuisi, jos tätä ei tehtäisi? Voitaisiinko käskyosoittimen kasvatus
tehdä vasta käskyn suorituksen jälkeen?
Esitä prosessorin rekisterien tasolla, miten suoritetaan seuraavat käskyt:
MUL R2,@5
STORE R2,@R5
SUB R5,5(R5)
JPOS R5, 100
SVC SP,=11 ;palvelupyyntö HALT 1
Mitä eri keskeytyksiä tai poikkeustilanteita tehtävän käskyjen suorituksen aikana voi tapahtua? Miten keskeytykset havaitaan? Miten niihin reagoidaan? Missä tapauksessa keskeytyksen jälkeen on mahdollista jatkaa saman ohjelman suorittamista?