ОРТ2/К3 2023

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

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

Поставка

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

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

Битови 7 и 6 првог бајта инструкције су 0 за све инструкције скока. Код инструкција условног скока бит 5 првог бајта инструкције је 0, док код инструкција безусловног скока бит 5 првог бајта инструкције је 1. Инструкција условног скока је инструкција условног скока уколико је резултат негативан (JN), а инструкције безусловног скока су инструкција безусловног скока (JMP) и инструкција скока на потпрограм (JSR). Битовима 4 до 0 првог бајта инструкције специфицира се код операције и на основу тога су за инструкције JN, JMP и JSR усвојени кодови операције 00000000, 00100000 и 00100001, респективно. Инструкције JN, JMP и JSR се реализују као апсолутни скокови, при чему је адереса дата другим и трећим бајтом инструкције. Дужина инструкција је 3 бајта.

Битови 7 и 6 првог бајта инструкције су 1 за све безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP), аритметичко померање удесно за једно место (ASR) и инструкција повратка из потпрограма (RTS). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP, ASR и RTS усвојени кодови операџија 11000000, 11000001, 11000010 и 11000011, респективно. Дужина инструкција је 1 бајт.

Битови 7 и 6 првог бајта иструкције имају вредност 01 за све адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), инструкција преноса из акумулатора у виши бајт регистра опште намене (STRH), инструкција преноса из акумулатора у нижи бајт регистра опште намене (STRL), инструкција логичко „и“ без смештања резултата инструкције у акумулатор (TST), инструкција инкрементирања операнда који смешта резултат само у акумулатор (INC), инструкција безусловног скока на срачунату адресу (JADR) и инструкција сабирања (ADD). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, STRH, STRL, TST, INC, JADR и ADD усвојени кодови операција 01000000, 01000001, 01000010, 01000011, 01000101, 01000110 и 01000111 респективно. Дужина инструкција је 2, 3 или 4 бајта и зависи од специфицираног начина адресирања.

Инструкције STRH и STRL могу једино да се напишу са регистарским директним адресирањем, а ако се инструкција ST напише са регистарским директним адресирањем онда се у нижих осам бита регистра опште намене упише садржај акумулатора (виши бајт регистра опште намене се не мења). У случају да се инструкција LD напише са регистарским директним адресирањем, нижи бајт регистра опште намене се учитава у акумулатор.

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

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

  1. Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција INC (PC) 05h. Потребно је да се нацрта минимална операциона јединица која је довољна да се изврши споменута инструкција.
  2. Дати су садржаји регистара и индикатора PC = 1000h, SP = 2000h, ACC = 7Fh, R0 = 0014h, R1 = 0015h, R2 = 00A2h, R3 = FFE3h, N = 0, Z = 0, V = 0 и C = 0. Индикатори статусне речи на које инструкција не утиче треба да остану непромењени. Извршити 7 сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције – меморијске адресе са којих је прочитана инструкција, садржај регистра IR, инструкцију која је прочитана и нов садржај регистра PC; у фази одређивања адресе операнда и читања операнда – меморијске адресе са којих је прочитана адреса операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови садржај регистара опште намене који су у овој фази промењени; у фази извршавања операције – меморијске адресе којима се у овој фази приступа, садржај акумулатора А и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и меморијских локација који су у овој фази промењени.
Садржај дела меморије из поставке задатка
ЛОКАЦИЈА: 0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h 0008h 0009h
САДРЖАЈ: 10h 01h 00h C1h 21h 77h 11h 00h 0Ah 83h
ЛОКАЦИЈА: 1000h 1001h 1002h 1003h 1004h 1005h 1006h 1007h 1008h 1009h
САДРЖАЈ: 47h A0h 02h 44h A0h 02h 42h 21h 46h 61h
ЛОКАЦИЈА: 810Ah 810Bh 810Ch 810Dh 810Eh 810Fh 8110h 8111h 8112h 8113h
САДРЖАЈ: 40h 00h 00h 02h 43h 20h 40h A0h 01h C0h
ЛОКАЦИЈА: 8114h 8115h 8116h 8117h 8118h 8119h 811Ah 811Bh 811Ch 811Dh
САДРЖAJ: C2h 45h 00h 00h 00h 00h 10h 00h 10h 13h

Решење

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

Битови IR31..24 Класа инструкције
31 30 29 28 27 26 25 24
0 0 0 Код операције Условни скок
0 0 1 Код операције Безусловни скок
1 1 Код операције Безадресне инструкције
0 1 Код операције Адресне инструкције
Битови IR31..24 Инструкција 2. бајт 3. бајт 4. бајт Дужина
31 30 29 28 27 26 25 24
Условни скок
0 0 0 0 0 0 0 0 JN ст. мл. / 3 б
Безусловни скок
0 0 1 0 0 0 0 0 JMP ст. мл. / 3 б
0 0 1 0 0 0 0 1 JSR ст. мл. / 3 б
Безадресне инструкције
1 1 0 0 0 0 0 0 PUSH / / / 1 б
1 1 0 0 0 0 0 1 POP / / / 1 б
1 1 0 0 0 0 1 0 ASR / / / 1 б
1 1 0 0 0 0 1 1 RTS / / / 1 б
Адресне инструкције
0 1 0 0 0 0 0 0 LD Адр.
0 1 0 0 0 0 0 1 ST Адр.
0 1 0 0 0 0 1 0 STRH Адр.
0 1 0 0 0 0 1 1 STRL Адр.
0 1 0 0 0 1 0 0 TST Адр.
0 1 0 0 0 1 0 1 INC Адр.
0 1 0 0 0 1 1 0 JADR Адр.
0 1 0 0 0 1 1 1 ADD Адр.
Битови IR23..16 Адресирање 3. бајт 4. бајт Дужина
23 22 21 20 19 18 17 16
0 0 0 / / / / / Мем. дир. ст. мл. 4 б
0 0 1 R R R R R Рег. дир. / / 2 б
0 1 0 R R R R R Рег. инд. / / 2 б
0 1 1 R R R R R Р.инд.предец. / / 2 б
1 0 0 / / / / / PC релативно pom. / 3 б
1 0 1 / / / / / Непосредно оп. / 3 б
1 1 0 R R R R R Рег. инд. са пом. pom. pom. 4 б

Операциона јединица

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

Меморија

# Адресе у меморији са којих је учитана инструкција IR31..24 IR23..16 IR15..8 IR7..0 Инструкција PC
1 1000h, 1001h, 1002h 47h А0h 02h / ADD #02h 1003h
2 1003h, 1004h, 1005h 44h A0h 02h / TST #02h 1006h
3 1006h, 1007h 42h 21h / / STRH R1 1008h
4 1008h, 1009h 46h 61h / / JADR -(R1) 100Ah
5 8114h C2h / / / ASR 8115h
6 8115h, 8116h, 8117h, 8118h 45h 00h 00h 00h INC 0000h 8119h
7 8119h, 811Ah, 811Bh 00h 10h 00h / JN 1000h 811Ch
# Адресе у меморији са којих је учитана адреса операнда Адресе у меморији са којих је учитан операнд Операнд Нови садржај регистара опште намене
1 / / 02h
2 / / 02h
3 / / /
4 / / / R1=8114h
5 / / /
6 / 0000h 10h
7 / / /
# Меморијске адресе којима се приступа у овој фази Акумулатор N Z V C Нови садржај регистара и меморијских локација који су промењени у овој фази
1 / 81h 1 0 1 0
2 / 81h 0 1 1 0
3 / 81h 0 1 1 0 R1=8115h
4 / 81h 0 1 1 0 PC=8114h
5 / C0h 1 0 1 1
6 / 11h 0 0 0 0
7 / 11h 0 0 0 0