1100 1000 0000 1000 0000 0
2. [10%] Skrifið 8086 undirforrit sem snýr við streng ('ABC' verður
að 'CBA'). Þegar kallað er á undirforritið inniheldur BX upphafsvistfang
strengsins og AX hefur lengd hans. Forritið má ekki nota neitt aukaminni,
nema á staflanum til að forða þeim gistum sem það notar. Reynið að skrifa
forritið þannig að það verði sem hraðvirkast.
3. [30%] Skrifið 8086 undirforrit sem notar síu Eratosþenesar til
að búa til töflu A, sem segir til um hvort tala sé frumtala
(prímtala). Töfluna á að vera hægt að nota þannig að x er frumtala
ef A[x] = 1, annars er A[x] = 0 og x er ekki
frumtala.
Sían byrjar í 2, segir að hún sé frumtala og síar síðan út aðra hverja
tölu í töflunni. Næsta frumtala er 3 og þá er síuð út þriðja hver tala í
afgangnum af töflunni. Tala 5 er næst, og svo koll af kolli. Hér að neðan
er nánari lýsing á aðferðinni:
A[0]=0 ; 0 og 1 ekki frumtölur
A[1]=0
fyrir i=2 til MAX
A[i]=1 ; Upphaflega allar tölur frumtölur
endir
fyrir i=2 til MAX/2 ; Sía út samsettar tölur
ef A[i]=1 þá
fyrir k=i+i til MAX skref i
A[k]=0
endir
endir
endir
Í ykkar 8086 undirforriti kemur vistfang töflunnar í ES:DI og
stærðin (MAX) í AX.
4. [10%] Hvers vegna eru TSR (Terminate and Stay Resident) forrit
ekki notuð í fjölverka stýrikerfum eins og t.d. UNIX? Er eitthvað þar
sem kemur í staðinn?
5. [10%] Eftirfarandi forrit keyrir á RISC gjörva sem hefur 5 þrepa
pípun (þrepin eru Ná í Skipun, Greina, Ná í Gögn, Framkvæma, Skrifa
Niðurstöðu), 2 biðhólf og gjörvinn gerir ekkert til að stjórna
gagnaárekstrum.
100 nop
101 jmp 100
102 jmp 100
103 jmp 104
104 move R1, 0
Þið megið gera ráð fyrir því að skipanabendi (instruction pointer) sé breytt
í Framkvæmdaþrepi pípunnar. Hvað gerir forritið? Útskýrið hvers vegna.
6. [10%] Ein aðferð sem notuð er af þýðendum til að láta forrit
keyrast hraðar er kölluð "loop unrolling". Hún felst í því að breyta
lykkjum með fastan ítrunarfjölda, t.d. 10, þannig að í stað lykkjunnar
eru skipanirnar inní lykkjunni endurteknar 10 sinnum í forritinu.
Þetta stækkar forritið, en eykur oftast hraðann. a) Hvers vegna?
b) Hvers vegna hefur þessi aðferð lítil áhrif í HP PA tölvunum
og getur jafnvel minnkað hraðann í Cray tölvum?
7. [15%] Tölva hefur 16 MB minni, 1 KB skyndiminni (cache), sem er
mengistengið (set associative) þar sem hvert mengi hefur 2 línur og hver
lína er 8 bæti.
a) Lýsið þessu skyndiminni nánar (fjölda lína, fjölda mengja, hvaða
bitar í vistfangi gegna hvaða hlutverki, hvaða línur í minni fara í hvaða
mengi í skyndiminni, ...)
b) Gjörvinn vill fá aðgang að eftirfarandi eins bætis minnishólfum í
þessari röð:
56C2A0, 8BE829, 78AEA4, 56C2A7, 00C8A1
Í hvaða línusæti og mengi fara línurnar sem náð er í og hvaða línum er
hent út ef þess þarf? Gefið ykkur þær forsendur sem þarf, í viðbót við
það sem kemur fram í dæminu og segið frá þeim.