ОРТ2/К2 2022
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Други колоквијум 2022. године одржан је 11. децембра 2022. и трајао је 1h30min.
Поставка
Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 2¹⁶ бајтова. Ширина меморијске речи је 1 бајт. Процесор је са једноадресним форматом инструкција. Адресе и подаци су дужине 16 бита и заузимају по две суседне меморијске локације, при чему се старији бајт налази на вишој, а млађи бајт на нижој адреси.
У процесору постоји регистар програмског бројача PC дужине 2 бајта, адресни регистар меморије MAR дужине 2 бајта, прихватни регистар податка меморије MDR дужине 1 бајт, прихватни регистар инструкције IR дужине 4 бајта, акумулатор A дужине 2 бајта, прихватни регистар податка B дужине 2 бајта, регистри опште намене R0 до R15 дужине 2 бајта, програмска статусна реч PSW дужине 1 бајт. Инструкције су дужине 1, 2, 3 или 4 бајта.
Битови 7, 6, 5 првог бајта инструкције су 000 за све инструкције скока. Код инструкција условног скока битови 4 и 3 првог бајта инструкције су 00, док код инструкција безусловног скока битови 4 и 3 првог бајта инструкције су 11. Инструкција условног скока је инструкција условног скока уколико резултат није био нула (JNZ), а инструкција безусловног скока је инструкција безусловног скока (JMP). Битовима 2 до 0 првог бајта инструкције специфицира се код операције и на основу тога су за инструкције JNZ и JMP усвојени кодови операције 00000000 и 00011000 респективно. Инструкције JNZ и JMP се реализују као апсолутни скокови, при чему је адреса дата другим и трећим бајтом инструкције при чему је млађи бајт адресе скока дат другим, а старији бајт трећим бајтом. Дужина инструкција је 3 бајта.
Битови 7, 6, 5 првог бајта инструкције су 001 за све адресне и безадресне инструкције.
Бит 4 првог бајта инструкције је 0 за све безадресне инструкције. Безадресна инструкција је инструкција повратка из потпрограма (RTS). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога за инструкцију RTS је усвојен код операције 00100000. Дужина инструкције је 1 бајт.
Бит 4 првог бајта инструкције је 1 за све адресне инструкције. Адресне инструкције су инструкције преноса у акумулатор (LD), инструкције преноса из акумулатора (ST), логичка инструкција комплементирања операнда која смешта резултат у акумулатор (NOT), инструкција логичког ротирања операнда за једно место улево преко бита преноса (ROLC), инструкција безусловног скока на потпрограм чија је адреса дата срaчунатом адресом (JSR), инструкција стављања садржаја операнда на стек (PUSHG) и инструкција скидања операнда са стека (POPG). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога за инструкције LD, ST, NOT, ROLC, JSR, PUSHG и POPG усвојени су кодови операција 00110000, 00110001, 00110010, 00110011, 00110100, 00110101, 00110110 респективно. Дужина инструкција је 2 или 4 бајта и зависи од специфицираног начина адресирања. Инструкција PUSHG је дозвољена само са непосредним и регистарским директним адресирањем, а инструкција POPG је дозвољена само са регистарским директним адресирањем. У случају да се ове инструкције јаве са неким другим адресирањима (не са горе наведеним) онда инструкције треба да буду без дејства.
Начини адресирања су специфицирани битовима 7, 6 и 5 другог бајта инструкције и то на следећи начин: 000 – меморијско директно адресирање (memdir), 001 – регистарско директно адресирање (regdir), 010 – регистарско индиректно адресирање (regind), 011 – релативно адресирање са помeрајем (pcrel) и 100 – непосредно адресирање (immed). Код меморијског директног адресирања 16 битна адреса меморијске локације дата је трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкције је 4 бајта. Код регистарског директног и регистарског индиректног адресирања, користи се неки од регистара опште намене R0 до R15 специфицираних битовима 3 до 0 другог бајта. Бит 4 се не користи. Дужина инструкције је 2 бајта. Код релативног адресирања са померајем трећи и четврти бајт инструкције садрже 16 битни померај који је дат као целобројна величина без знака. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 4 бајта. Код непосредног адресирања 16 битни операнд дат је трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 4 бајта.
Стек расте према вишим меморијским локацијама, а регистар SP указује на прву слободну меморијску локацију. Процесор нема могућност обраде прекида.
а) Написати израз за генерисање сигнала adr2 који је активан уколико је прочитана инструкција адресна инструкција дужине два бајта и branch3 [1] који је активан уколико је прочитана инструкција инструкција условног скока дужине три бајта.
б) Написати изразе за генерисање сигнала свих начина адресирања. IR регистар се попуњава од нижих ка вишим бајтовима. [2]
в) Написати изразе за генерисање сигнала операција и то само за JNZ и ROLC.
г) Нацртати дијаграм тока фазе формирања адресе и читања операнда и фазе извршавања инструкције.