1. Vastaa seuraaviin kysymyksiin:
a) Käskyjen suoritus koostuu useasta vaiheesta. Mitä vaiheet ovat?
b) Missä määrin eri vaiheita voitaisiin suorittaa samanaikaisesti /limittäin?
c) Mitkä tilanteet aiheuttavat keskeytyksen? Miten keskeytys havaitaan ja mitä sitten tapahtuu?
d) Miksi käännös tehdään kahdessa vaiheessa?
e) Mihin tarvitaan linkittäjää ja lataajaa?
2. Esitä prosessorin rekisterien tasolla miten suoritetaan seuraavat käskyt:
a) MUL R2,@5
b) DIV R2,@R5
c) SUB R5,5(R5)
d) JPOS R5, 100
3. Voisiko esimerkkitietokoneessa TTK-91 aliohjelmien kutsurakenteen aktivointitietueiden käsittelyineen toteuttaa ilman käskyjä CALL ja EXIT? Miten tämä onnistuisi (mikäli se siis olisi mahdollista)?
4. Esitä kuvan avulla, kuinka seuraavan Java-luokan kahdelle ilmentymälle varataan tilaa muistista. Oletetaan muuttujien tilanvarauksen alkavan keskusmuistin muistipaikasta 10000 ja olkoon muistisanan pituus 4 tavua. Kokonaisluvut esitetään 32 bitillä, loogiset arvot yhdellä bitillä.
class DataStructures{ int i = 0; static int j; private int k; boolean [] A = new boolean[15000]; int[][] B = new int[4][3]};
5. Suunnittele, miten suuria joukkoja (esim. kokonaislukujoukot) voitaisiin tehokkaasti esittää konekielitasolla.
6. Alla on annettu Fibonaccin luvut laskeva ohjelma (pääohjelma ja rekursiivinen aliohjelma; F0 = 1, F1 = 1, Fn = F(n-1)+F(n-2). Toimiiko ohjelma? Jos ei, niin korjaa se. Jos toimii, simuloi sitä. Kuinka monta kertaa funktiota F itse asiassa kutsutaan, jos m=3?
m DS 1 1: LaskeF IN R1, =KBD 2: STORE R1, m 3: PUSH SP, =0 4: PUSH SP, R1 5: CALL SP, F 6: POP SP, R2 7: OUT R2, =CRT N EQU -2 F_RET EQU -3 8: F LOAD R1, N(FP) 9: JNZER R1, *+4 10: ADD R1, =1 11: STORE R1, F_RET(FP) 12: JUMP LOPPU 13: COMP R1, =1 14: JNEQU *+3 15: STORE R1, F_RET(FP) 16: JUMP LOPPU 17: LOAD R2, R1 18: SUB R2, =1 19: LOAD R3, R2 20: SUB R3, =1 21: PUSH SP, =0 22: PUSH SP, R2 23: CALL SP, F 24: POP SP, R2 25: PUSH SP, =0 26: PUSH SP, R3 27: CALL SP, F 28: POP SP, R3 29: ADD R2, R3 30: STORE R2, F_RET(FP) 31: LOPPU EXIT SP, =1