ОРТ2/К2Н 2022
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 216. Ширина меморијске речи је 1 бајт. Процесор је са једноадресним форматом инструкција. Адресе и подаци су дужине 16 бита и заузимају по две суседне меморијске локације, при чему се старији бајт налази на нижој, а млађи бајт на вишој адреси.
У процесору постоји регистар програмског бројача PC дужине 2 бајта, адресни регистар меморије MAR дужине 2 бајта, прихватни регистар податка меморије MDR дужине 1 бајт, прихватни регистар инструкције IR дужине 4 бајта, акумулатор A дужине 2 бајта, прихватни регистар податка В дужине 2 бајта, регистри опште намене R0 до R31 дужине 2 бајта, индексни регистар XR дужине 2 бајта, програмска статусна реч PSW дужине 1 бајт. Инструкције су дужине 1, 2, 3 или 4 бајта.
Битови 7, 6 и 5 првог бајта инструкције су 000 за све инструкције скока. Код инструкција условног скока бит 4 првог бајта инструкције је 0, док код инструкција безусловног скока бит 4 првог бајта инструкције је 1. Инструкција условног скока је инструкција условног скока уколико постоји пренос/позајмица (JC), а инструкције безусловног скока су инструкција безусловног скока (JMP) и инструкција скока на потпрограм (JSR). Битовима 3 до 0 првог бајта инструкције специфицира се код операције и на основу тога су за инструкције JC, JMP и JSR усвојени кодови операције 00000000, 00010000 и 00010001, респективно. Инструкције JC, JMP и JSR се реализују као апсолутни скокови, при чему је адреса дата другим и трећим бајтом инструкције. Дужина инструкција је 3 бајта.
Битови 7, 6 и 5 првог бајта инструкције су 111 за све адресне и безадресне инструкције.
Бит 4 првог бајта инструкције је 0 за безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP) и повратка из потпрограма (RTS). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP и RTS усвојени кодови операција 11100000, 11100001 и 11100010, респективно. Дужина инструкција је 1 бајт.
Битови 4 првог бајта инструкције је 1 за адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), аритметичка инструкција одузимања која смешта резултат у акумулатор (SUB), инструкција ротирања операнда једно место улево кроз бит C која смешта резултат у акумулатор (ROLC) и инструкција безусловног скока на срачунату адресу (JADR). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, SUB, ROLC и JADR усвојени кодови операција 11110000, 11110001, 11110010, 11110011 и 11110100 респективно. Дужина инструкција је 2, 3 или 4 бајта и зависи од специфицираног начина адресирања.
Начини адресирања су специфицирани битовима 7, 6 и 5 другог бајта инструкције и то на следећи начин: 000-меморијско директно адресирање (memdir), 001-регистарско директно адресирање (regdir), 010-регистарско индиректно адресирање(regind), 011-индексно адресирање са померајем (xrpom) и 100-непосредно адресирање (immed). Код меморијског директног адресирања 16 битна адреса меморијске локације је дата трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 4 бајта. Код регистарско директног и регистарског индиректног адресирања, користи се неки од регистара опште намене R0 до R31 специфицираних битовима од 4 до 0 другог бајта. Дужина инструкција је 2 бајта. Код индексног адресирања са померајем трећи бајт инструкције садржи 8 битни померај који је дат као целобројна величина са знаком. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 3 бајта. Код непосредног адресирања 16 битни операнд дат је трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 4 бајта.
Стек расте према нижим меморијским локацијама, а регистар SP указује на последњу заузету меморијску локацију. Процесор нема могућност обраде прекида.
- Написати израз за генерисање сигнала gradr који је активан уколико прочитана инструкција има грешку при адресирању. У фази читања инструкције уколико је након прочитане инструкције активан овај сигнал, прескаче се извршавање прочитане инструкције и наставља се са читањем наредне инструкције.
- Који је резултат извршавања инструкције SUB 1000h, ако се на адреси 1000h налази податак 82h, а на адреси 1001h податак 23h? Почетна вредност акумулатора је C004h. Написати вредност акумулатора и бита N, Z, V и C након извршавања инструкције.
- Написати изразе за генерисање сигнала свих начина адресирања. IR регистар се попуњава од виших ка нижим битовима.
- Написати изразе за генерисање сигнала операција само за POP и ROLC.
- Нацртати дијаграм тока фазе формирања адресе и читања операнада и фазе извршавање инструкције. Потребно је навести у којем тренутку треба да се ажурира који бит PSW регистра наводећи: UPDATE PSWN - уколико треба да се ажурира стање бита PSWN, UPDATE PSWZ - уколико треба да се ажурира стање бита PSWZ, UPDATE PSWC - уколико треба да се ажурира стање бита PSWC, UPDATE PSWV - уколико треба да се ажурира стање бита PSWV. Није потребно дефинисати како се вредност којег бита рачуна.