Tietokoneen toiminta, kevät 2001

Harjoitus 4

Käsitellään harjoitusryhmissä maanantaina 28.5.2001.

  1. 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.

  2. 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?

  3. Esitä prosessorin rekisterien tasolla miten suoritetaan seuraavat käskyt:
    1. MUL R2,@5
    2. STORE R2,@R5
    3. SUB R5,5(R5)
    4. JPOS R5, 100
    5. SVC SP,=11 ;palvelupyyntö HALT 1
    6. 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?

  4. Lukujärjestelmien muunnoksia
    1. Muunna seuraavat binäärijärjestelmän luvut kymmen- ja heksadesimaalijärjestelmiin: 110111, 1100.011
    2. Muunna seuraavat kymmenjärjestelmän luvut binäärijärjestelmään: 107, 0.625, 2.75

  5. Komplementtiluvut.
    1. Suorita laskutoimitus 34 - 47 kahden komplementtimuodossa.
    2. Mitä hyötyä kahden komplementtimuodosta on? Olisiko yhden komplementtimuoto yhtä hyödyllinen?
    3. Mistä tiedät, onko kahden komplementtimuodossa esitetty luku positiivinen vai negatiivinen?
    4. Mikä on pienin ja suurin kokonaisluku, jonka voi kahden komplementtimuotoa käyttäen esittää 32 bitillä?

  6. Liukulukujen esittäminen
    1. Esitä luku 47.875 bittitasolla IEEE:n yksinkertaisen tarkkuuden liukulukuna.
    2. Muunna seuraavat yksinkertaisen tarkkuuden liukuluvut kymmenjärjestelmän luvuiksi:
                0 10000000 11000000000000000000000 
                0 10000010 10010000000000000000000