Sistemski softver/Februar 2023
Pređi na navigaciju
Pređi na pretragu
Ispit u februarskom roku 2023. godine održan je 10. februara i trajao je dva sata.
1. zadatak
Postavka
Odrediti vrednost pri obradi od strane asemblera za hipotetičku mašinu (ukoliko vrednost nije poznata napisati znak pitanja) i indeks klasifikacije za svaki izraz u okviru izvornog asemblerskog koda datog u nastavku.
BEG
USE LAB1
ORG 0x60
SCT DAT
LAB2 DC LAB1
DC 7 + LAB2
SCT TXT
LAB3 LDA LAB2 - 1
ADX * - LAB3
END
Rešenje
Jako sličan zadatak pojavio se na drugom kolokvijumu 2022. godine, gde je rešen.
2. zadatak
- Isti zadatak kao iz junskog roka 2022. godine.
3. zadatak
- Isti zadatak kao iz avgustovskog roka 2022. godine.
4. zadatak
Postavka
Posmatra se emulator za HYPO mašinu zasnovan na dinamičkoj rekompilaciji. Emulator je predviđen za izvršavanje na amd64 arhitekturi.
- Prikazati kod kojim je neophodno završiti svaki prevedeni blok bez ikakvih optimizacija po pitanju čuvanja vrednosti registara, u slučaju kada iz bloka ima samo jedan izlaz (na kraju bloka se ne nalazi instrukcija uslovnog skoka).
- Prikazati kod koji je na početku svakog prevedenog bloka potrebno umetnuti kako bi se blok korektno izvršio bez obzira što se između prethodnog i posmatranog bloka izvršavao i kod emulatora.
- Prikazati izmene koje u prethodno prikazanim segmentima koda nastanu ukoliko emulator po saznanju da je odredišni blok preveden maksimalno optimizuje kod po pitanju uštede vremena na instrukcije za čuvanje i restauraciju vrednosti registara, kao i na kod za povratak u emulator (koji više nije potreban).
- Da li je prilikom prevođenja koda moguće u potpunosti odstraniti kod za čuvanje i restauraciju vrednosti registara u opštem slučaju? Ako da, kako? Ako ne, zašto?
Rešenje
lahf mov savedCPZ, ah mov savedA, al mov savedX, cl lea rdi, hypoMEM+n call branchHelper
mov al, savedA mov cl, savedX mov ah, savedCPZ sahf
- Potrebno je izmeniti kod pod a) izbacivanjem poslednje dve linije i dodavanje instrukcije jmp, koja skače na odredišni blok.
lahf mov savedCPZ, ah mov savedA, al mov savedX, cl jmp blkX # lea rdi, hypoMEM+n # call branchHelper
- Ne možemo da znamo šta će se sve dešavati između prelaska sa jednog na drugi blok, samim tim nema garancije da će vrednosti registara ostati nepromenjene. Zbog toga, nije moguće u opštem slučaju otkloniti restauraciju.