ОРТ2/К3 Фебруар 2021

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

Испит у фебруарском року 2021. године одржан је 22. фебруара.

Поставка

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

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

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

Битови 7, 6 и 5 првог бајта инструкције је 001 за све безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP) и инструкција комплементирања садржаја акумулатора (NOT). Битовима 4 до 0 првог бајта инструкције специфира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP и NOT усвојени кодови операција 00100000, 00100001 и 00100010, респективно. Дужина инструкција је 1 бајт.

Битови 7, 6 и 5 првог бајта инструкције имају вредности од 010 до 111 за адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), инструкција аритметичког померања удесно за једно место (ASR), инструкција упоређивања акумулатора са операндом (CMP), инструкција сабирања (ADD) и инструкција одузимања (SUB). На основу тога су за инструкције LD, ST, ASR, CMP, ADD и SUB усвојени кодови операција 010, 011, 100, 101, 110 и 111, респективно. Дужина инструкција је 2 или 3 бајта и зависи од специфичног начина адресирања.

Начини адресирања су специфицирани битовима 4, 3 и 2 првог бајта инструкције и то на следећи начин: 000-меморијско директно адресирање (memdir), 001-меморијско индиректно адресирање (memind), 010-регистарско директно адресирање (regdir), 011-регистарско индиректно адресирање (regind), 100-релативно адресирање са померајем (pcrel), 101-непосредно адресирање (immed) и 110-регистарско индиректно адресирање са преинкрементирањем (preincr). Код меморијског директног и меморијског индиректног адресирања 16 битна адреса меморијске локације је дата другим и трећим бајтом инструкције. Битови 1 и 0 првог бајта инструкције се не користе. Дужина инструкције је 3 бајта. Регистарско директно, регистарско индиректно и регистарско индиректно адресирање са преинкрементирањем користе неке од регистара опште намене R0 до R3 специфициране битовима 1 и 0 првог бајта. Дужина инструкција је 1 бајт. Код релативног адресирања са померајем други бајт инструкције садржи 8 битни померај који је дат као целобројна величина са знаком. Битови 1 и 0 првог бајта инструкције се не користе. Дужина инструкција је 2 бајта. Код непосредног адресирања 16 битни операнд дат је другим и трећим бајтом инструкције. Битови 1 и 0 првог бајта инструкције се не користе. Дужина инструкција је 3 бајта.

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

  1. Пројектовати део операционе јединице процесора (фазе: FETCH, ADDR и EXEC) која је потребна да се изврши инструкција CMP +(R0). Цртати само неопходне компоненте које су потребне за извршавање наведене инструкције.
  2. Дати су почетни садржаји регистара и индикатора: PC=1000h, SP=2000h, ACC=FFF7h, R0=0000h, R1=0001h, R2=0002h, R3=0003h, N=1, Z=0, V=0 и C=0. Индикатори статусне речи на које инструкција не утиче треба да остану непромењени. Извршити 7 сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције - меморијске адресе са којих је прочитана инструкција, садржај регистра IR, инструкцију која је прочитана и нови садржај регистра PC; у фази одређивања адресе операнда и читања операнда - меморијске адресе са којих је прочитана адреса операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови садржај регистара опште намене који су у овој фази промењени; у фази извршавања операције - меморијске адресе којима се у овој фази приступа, садржај акумулатора A и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и меморијских локација који су у овој фази промењени. Резултате представити у табелама 1, 2 и 3 формулара.
Садржај дела меморије из поставке задатка
ЛОКАЦИЈА 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009
ВРЕДНОСТ 07 FF 00 00 21 77 11 00 0A 83
ЛОКАЦИЈА 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
ВРЕДНОСТ 60 00 00 D4 F6 FF 00 0C D4 F6
ЛОКАЦИЈА 100A 100B 100C 100D 100E 100F 1010 1011 1012 1013
ВРЕДНОСТ FF 30 00 08 A0 40 10 19 00 52
ЛОКАЦИЈА 1014 1015 1016 1017 1018 1019 101A 101B 101C 101D
ВРЕДНОСТ 22 E9 84 02 00 11 00 30 E8 E8

Решење

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

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

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

Меморија

# Адресе у меморији са којих је учитана инструкција IR31..24 IR23..16 IR15..8 IR7..0 Инструкција PC
1 1000h, 1001h, 1002h / 60h 00h 00h ST 0000h 1003h
2 1003h, 1004h, 1005h / D4h F6h FFh ADD #FFF6h 1006h
3 1006h,1007h / 00h 0Ch / BN(PC)0Ch 1008h
4 1014h / 22h / / NOT 1015h
5 1015h / E9h / / SUB R1 1016h
6 1016h,1017h,1018h / 84h 02h 00h ASR(0002h) 1019h
7 1019h, 101Ah, 101Bh / 11h 00h 30h JSR 3000h 101Ch
# Адресе у меморији или регистри са којих је учитана адреса операнда Адресе у меморији или регистри са којих је учитан операнд Операнд Нови садржај регистара опште намене
1 / / / /
2 / / FFF6h /
3 / / / /
4 / / / /
5 / / 0001h R1 = 0001h
6 0002h,0003h 0000h,0001h FFF7h /
7 / / / /
# Меморијске адресе којима се приступа у овој фази Акумулатор N Z V C Нови садржај регистара и меморијских локација који су промењени у овој фази
1 0000h, 0001h FFF7h 1 0 0 0 MEM[0000h] = F7h, MEM[0001h] = FFh
2 / FFEDh 1 0 0 1 /
3 / FFEDh 1 0 0 1 PC = 1014h
4 / 0012h 0 0 0 1 /
5 / 0011h 0 0 0 0 /
6 / FFFBh 1 0 0 1 /
7 2000h, 2001h FFFBh 1 0 0 1 MEM[2000h] = 1Ch , MEM[2001h] = 10h, SP = 2002h, PC = 3000h