Tietokoneen toiminta kesä -99

Laskuharjoitus 4 (keskiviikko 11.8.)


1. Vastaa seuraaviin kysymyksiin:
a) Mihin ympäristöosoitinta FP käytetään? Miksi sitä tarvitaan?
b) Miten pinoa käytetään aliohjelmien yhteydessä? Millä muulla tavalla parametrit voisi välittää?
c) Mitä toimintoja on suoritettava aliohjelmaan siirryttäessä?
d) Mitkä näistä toiminnoista suoritetaan CALL- ja EXIT-käskyjen yhteydessä?
e) Mitä eroavat toisistaan arvo- ja viiteparametri sekä funktio ja proseduuri? Mitä tarkoitetaan metodilla?

2. Muistipaikat 100-200 sisältävät kukin edeltävän paikan osoitteen (osoitteessa 200 on 199, 199:ssä 198 jne.). Mitä saavat aikaiseksi seuraavat peräkkäiset käskyt? LOAD R2,@150 LOAD R3,10(R2) LOAD R2,@10(R2)

3. Laadi symbolisella konekielellä ohjelma, joka etsii suurimman 20 *20 kokoisen taulukon diagonaalilla olevista positiivista luvuista ja tulostaa luvun näytölle.

4. Kirjoita alla olevat lauseet TTK-91:n symbolisella konekielellä. Muista koodata myös staattiseen tilanvaraukseen tarvittavat kääntäjän ohjauskäskyt.

         int lkm = 77; 
         int Summa, i, j; 
         int Taulu[lkm]; 

         if (i > j) i = -1 else  i = 54321; 

         Summa = 0; 
         for (i = lkm/2; i > 0; i--)   Summa = Summa + Taulu[i]; 

         Summa = 0; 
         do {  Summa = Summa +360} 
               while (Summa >= j); 

5. 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 pinosta.

6. Laadi TTK-91:n symbolisella konekielellä aliohjelma Unpack3, joka sijoittaa kolme lukua annetulle muistialueelle seuraavassa kuvatun säännön mukaisesti. Aliohjelmalla ei ole paluuarvoa, sen kutsuparametrit välitetään rekistereissä ja sen tulee säilyttää kaikissa rekistereissä kutsuhetken mukaiset sisällöt. Voit olettaa, etteivät parametrien arvot ole virheellisiä.

Rekisterissä R3 annetaan positiivinen vakio tai nolla. R4 sisältää numerokolmikon eli luvun väliltä 000 ja 999. Riippuen siitä, onko R3:ssa nolla, R4:n numerokolmikosta muodostetaan samassa järjestyksessä kolme lukua seuraavasti:
R3==0:jokaisesta numerosta suoraan vastaava luku 0..9
R3!=0:jokainen numero kerrotaan kolmella ja tuloihin 0..27 lisätään R3:n arvo.
Saadut luvut sijoitetaan yhtenäiselle muistialueelle, jonka alkuosoite välitetään R5:ssä.

Esimerkkejä aliohjelman Unpack3 toiminnasta:

    kutsuparametrit        muisti kutsun jälkeen

 R3:0   R4:456  R5:100 ==> 100:4   101:5   102:6 

 R3:50  R4:103  R5:200 ==> 200:53  201:50  202:59 

 R3:80  R4:072  R5:355 ==> 355:80  356:101 357:86