ОРТ2/К2Н 2023

Извор: SI Wiki
< ОРТ2
Датум измене: 8. фебруар 2023. у 17:00; аутор: KockaAdmiralac (разговор | доприноси) (Formatiranje)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

Поправни други колоквијум 2023. године одржан је 21. јануара и трајао је 90 минута.

Поставка

Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 216 бајтова. Ширина меморијске речи је 1 бајт. Процесор је са једноадресним форматом инструкција. Адресе и подаци су дужине 16 бита и заузимају по две суседне меморијске локације, при чему се старији бајт налази на вишој, а млађи на нижој адреси.

У процесору постоји регистар програмског бројача PC дужине 2 бајта, адресни регистар меморије MAR дужине 2 бајта, прихватни регистар податка меморије MDR дужине 1 бајт, прихватни регистар инструкције IR дужине 4 бајта, акумулатор A дужине 2 бајта, прихватни регистар податка B дужине 2 бајта, регистри опште намене R0 до R15 дужине 2 бајта, индексни регистар XR дужине 2 бајта, програмска статусна реч PSW дужине 1 бајт. Инструкције су дужине 1, 2, 3 или 4 бајта.

Битови 7, 6, 5 првог бајта инструкције су 000 за све инструкције скока. Код инструкција условног скока битови 4 и 3 првог бајта инструкције су 00, док код инструкција безусловног скока битови 4 и 3 првог бајта инструкције су 11. Инструкција условног скока је инструкција условног скока уколико резултат није био нула (JNZ), а инструкција безусловног скока је инструкција безусловног скока (JMP) и инструкција скока на потпрограм (JSR). Битовима 2 до 0 првог бајта инструкције специфицира се код операције и на основу тога су за инструкције JNZ, JMP и JSR усвојени кодови операције 00000000, 00011000 и 00011001 респективно. Инструкције JNZ, JMP и JSR се реализују као апсолутни скокови, при чему је адреса дата другим и трећим бајтом инструкције при чему је млађи бајт адресе скока дат другим, а старији бајт трећим бајтом. Дужина инструкција је 3 бајта.

Битови 7, 6, 5 првог бајта инструкције су 001 за све адресне и безадресне инструкције.

Бит 4 првог бајта инструкције је 0 за све безадресне инструкције. Безадресна инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњење акумулатора садржајем са стека (POP), повратак из потпрограма (RTS) и инструкција преноса из акумулатора у индексни регистар (STXR). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкцијe PUSH, POP, RTS и STXR усвојени кодови операција 00100000, 00100001, 00100010 и 00100011 респективно. Дужина инструкције је 1 бајт.

Бит 4 првог бајта инструкције је 1 за све адресне инструкције. Адресне инструкције су инструкције преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), аритметичка инструкција сабирања која смешта резултат у акумулатор (ADD), инструкција логичког померања удесно за једно место (LSR). Битовима 3 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога за инструкције LD, ST, ADD, LSR усвојени су кодови операција 00110000, 00110001, 00110010, 00110011 респективно. Дужина инструкција је 2 или 4 бајта и зависи од специфицираног начина адресирања.

Начини адресирања су специфицирани битовима 7, 6 и 5 другог бајта инструкције и то на следећи начин: 000 – меморијско директно адресирање (memdir), 001 – регистарско директно адресирање (regdir), 010 – регистарско индиректно адресирање (regind), 011 – индексно адресирање са помeрајем (xrpom) и 100 – непосредно адресирање (immed). Код меморијског директног адресирања 16 битна адреса меморијске локације дата је трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкције је 4 бајта. Код регистарског директног и регистарског индиректног адресирања, користи се неки од регистара опште намене R0 до R15 специфицираних битовима 3 до 0 другог бајта. Бит 4 се не користи. Дужина инструкције је 2 бајта. Код индексног адресирања са померајем трећи бајт инструкције садржи 8 битни померај који је дат као целобројна величина са знаком. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 3 бајта. Код непосредног адресирања 16 битни операнд дат је трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкција је 4 бајта.

Стек расте према вишим меморијским локацијама, а регистар SP указује на прву слободну меморијску локацију. Процесор нема могућност обраде прекида.

  1. Написати израз за генерисање сигнала gradr који је активан уколико прочитана инструкција има грешку при адресирању.
  2. Написати изразе за генерисање сигнала свих начина адресирања. IR регистар се попуњава од виших ка нижим битовима.
  3. Који је резултат извршавања инструкције ADD 1000h, ако се на адреси 1000h налази податак A2h, а на адреси 1001h податак B3h? Почетна вредност акумулатора је A004h. Написати вредност акумулатора и бита N, Z, C и V након извршавања инструкције.
  4. Написати изразе за генерисање сигнала операција и то само за JNZ и LSR.
  5. Нацртати дијаграм тока фазе формирања адресе и читања операнда и фазе извршавања инструкције. Сматрати да се сигнал грешке gradr при адресирању проверава у првој фази.

Решење

Кодови операција

Сигнали

Дијаграми тока

ADDR

EXEC