Tietokoneen toiminta syksy -99

Laskuharjoitus 5 (22.-26.11.)

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