Системски софтвер/Фебруар 2023
Пређи на навигацију
Пређи на претрагу
Испит у фебруарском року 2023. године одржан је 10. фебруара и трајао је два сата.
1. задатак
Поставка
Одредити вредност при обради од стране асемблера за хипотетичку машину (уколико вредност није позната написати знак питања) и индекс класификације за сваки израз у оквиру изворног асемблерског кода датог у наставку.
BEG
USE LAB1
ORG 0x60
SCT DAT
LAB2 DC LAB1
DC 7 + LAB2
SCT TXT
LAB3 LDA LAB2 - 1
ADX * - LAB3
END
Решење
Јако сличан задатак појавио се на другом колоквијуму 2022. године, где је решен.
2. задатак
- Исти задатак као из јунског рока 2022. године.
3. задатак
- Исти задатак као из августовског рока 2022. године.
4. задатак
Поставка
Посматра се емулатор за HYPO машину заснован на динамичкој рекомпилацији. Емулатор је предвиђен за извршавање на amd64 архитектури.
- Приказати код којим је неопходно завршити сваки преведени блок без икаквих оптимизација по питању чувања вредности регистара, у случају када из блока има само један излаз (на крају блока се не налази инструкција условног скока).
- Приказати код који је на почетку сваког преведеног блока потребно уметнути како би се блок коректно извршио без обзира што се између претходног и посматраног блока извршавао и код емулатора.
- Приказати измене које у претходно приказаним сегментима кода настану уколико емулатор по сазнању да је одредишни блок преведен максимално оптимизује код по питању уштеде времена на инструкције за чување и рестаурацију вредности регистара, као и на код за повратак у емулатор (који више није потребан).
- Да ли је приликом превођења кода могуће у потпуности одстранити код за чување и рестаурацију вредности регистара у општем случају? Ако да, како? Ако не, зашто?
Решење
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
- Потребно је изменити код под а) избацивањем последње две линије и додавање инструкције jmp, која скаче на одредишни блок.
lahf mov savedCPZ, ah mov savedA, al mov savedX, cl jmp blkX # lea rdi, hypoMEM+n # call branchHelper
- Не можемо да знамо шта ће се све дешавати између преласка са једног на други блок, самим тим нема гаранције да ће вредности регистара остати непромењене. Због тога, није могуће у општем случају отклонити рестаурацију.