Strikerfi I
09.12.41


Lokaprf 13. desember 1995


Leyfileg hjlparggn: Kennslubkur og fyrirlestrantur


1. [10%] Ba til 2 GB haran disk me 20 pltum (skrifa allar hliar) ar sem hgt er a lesa allt a 154KB msek. vi bestu astur. Ef gert er r fyrir a geirarnir su 70 og a hver eirra geymi 512 bti, lsi rum eiginleikum disksins (snningshraa, fjlda spora) og tli leitartma (access time) disksins.


2. [15%] Segjum a i eigi a hanna reiknieiningu fyrir IEEE fleytitlur. Eitt af markmiunum er a engir aukastafir (aukabitar er lklega rttara or) tapist vi reikniagerir. Ef unni er me 64-bita fleytitlur hve str urfa gistun a vera til a hgt s a geyma eim niurstur ageranna + ea * me fullri nkvmni? En ef gjrvinn vinnur eingngu me 32-bita fleytitlur?
Athugi a i urfi raun a hanna njar gerir fleytitalna me meiri bitafjlda og annari skiptingu milli sva en einfld nkvmni (32 bitar) og tvfld nkvmni (64 bitar). Einnig urfi i a rttlta a r gerir geti geymt niurstur ageranna fullri nkvmni og noti til ess lgmarksfjlda bita.


3. [10%] 8086 smalamlinu er skipunin xlat. Hn yfirleitt notu til a n gildi r tflu. Skipunin bst vi a DS:BX bendi tfluna og a AL innihaldi vsi (index) inn tfluna. Eftir framkvmd xlat inniheldur AL gildi sem er tflunni. stan fyrir nafninu xlat er a a m mynda sr a skipunin varpi (translate) gildinu AL yfir ntt gildi.
Ein mguleg notkun tflu er til a reikna heiltlu-kvaratrt fyrir gildi bilinu 0 til 255.
a)
Sni hvernig hgt er a leysa a vandaml me xlat skipuninni.
b)
Leysi sama vandaml n notkunar xlat.
i urfi ekki a ba til alla tfluna, sni bara fyrstu gildin henni.


4. [20%] Hr a nean er C++ kdi fyrir fall sem leitar me helmingunarleit a gildinu x vektornum f. Falli er skrifa endurkvmt, sem er lklega ekki hravirkasta tgfan, en er stutt og einfld. Skrifi eins fall 8086-smalamli. a verur a vera endurkvmt og kallanlegt r Borland C++ (.e., verur a mehndla staflaramma rtt).
          // Notkun:	k = leita(f, i, j, x);
          // Fyrir:	f[i..j-1] er svi  f, sem raa er  vaxandi r
          // Eftir:	i <= k <= j, f[i..k-1] < x <= f[k..j-1]

          int leita( int f, int i, int j int x ) {
              if( j-i < 1 ) return i;
              int m = (i+j)/2;
              if( f[m] < x )
                  return leita(f, m+1, j, x);
              else
                  return leita(f, i, m, x);
          }


5. [10%] Gjrvi nokkur hefur 6 repa ppun og 2 bihlf (.e., nstu tvr skipanir eftir hopp-skipun framkvmast alltaf). Hr a nean er forritsbtur fyrir ennan gjrva. Hvaa gildi hefur b lokin? Ef i urfi a gefa ykkur einhverjar forsendur um hegun ppunnar taki r skrt fram.
           load      b, 0
           load      a, 1
           cmpb, >   b, 0, yfir        ; ef b > 0  hoppa  yfir
           cmpb, <>  a, b, ut          ; ef a <> b  hoppa  ut
   yfir    inc       b                 ; hkka b um 1
           add       b, 2              ; hkka b um 2
           utdec     b                 ; lkka b um 1


6. [10%] Hugmyndir um hvernig hgt s a auka hraa rgjrvum nta sr oft eiginleika sem aeins tilteknar gerir forrita hafa. Hinn aukni hrai myndi aallega koma fram ess konar forritum. Hvernig a kvea hvort framkvma eigi breytinguna gjrvanum? Hvaa ttir koma ar vi sgu? Er hgt a meta af einhverri nkvmni?


7. [15%] Skrifi falli hr a nean sem PA-RISC smalamlsfall, sem fr inn tv gildi %arg0 og %arg1 og skilar margfeldi eirra %ret0.
          // Notkun:	k = margf(i, j);
          // Fyrir:	i og j eru heiltlur  0
          // Eftir:	k er i*j

          int margf( int i, int j ) {
              int m = 0;
              while( i!=0 ) {
                  if( i%2 == 1 ) m = m+j;
                  j = 2*j;
                  i = i/2;
              }
              return m;
          }


8. [10%] Gefi er a Pentium rgjrvinn hefur tv 8KB innri skyndiminni (skipana og gagna) sem bi eru me tvr lnur mengi og a lnustrin er 32 bti. Vistfng Pentium eru 32 bitar.
a)
Lsi essum skyndiminnum aeins nnar (skiptingu vistfangs, o.fl.)
b)
Sni forrit ( Pascal, C, ea sauakda) sem ntir sr upplsingarnar um ger skyndiminnisins til a hgja gjrvanum (.e., klekkja skyndiminninu!)