ОРТ2/К3 2021

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

Поставка

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

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

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

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

Битови 6 и 5 првог бајта инструкције су 01 за безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP) и декрементирање акумулатора (DEC). Битовима 4 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP и DEC усвојени кодови операција 10100000, 10100001 и 10100010, респективно. Дужина инструкција је 1 бајт.

Битови 6 и 5 првог бајта инструкције су 11 за адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), логичка инструкција "или" (OR), инструкција ротирања операнда једно место удесно која смешта резултат у акумулатор (ROR), инструкција безусловног скока на срачунату адресу (JADR), инструкција сабирања (ADD) и инструкција одузимања (SUB). Битовима 4 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, OR, ROR, JADR, ADD и SUB усвојени кодови операција 11100000, 11100001, 11100010, 11100011, 11100100, 11100101 и 11100110 респективно. Дужина инструкција је 2 или 4 бајта и зависи од специфицираног начина адресирања.

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

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

  1. Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција JADR 1234h.[1]
  2. Дати су почетни садржаји регистара и индикатора: PC=1000h, SP=2000h, ACC = 0002h, R0=00F2h, R1=000Ch, R2=00A2h, R3=FFE3h, N=0, Z=0, V=0 и C=0. Индикатори статусне речи на које инструкције не утиче треба да остану непромењени. Извршити 7 сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције - меморијске адресе са којих је прочитана инструкција, садржај регистра IR, инструкцију која је прочитана и нови садржај регистра PC; у фази одређивања адресе операнда и читања операнда - меморијске адресе са којих је прочитана адреса операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови садржај регистара опште намене који су у овој фази промењени; у фази извршавања операције - меморијске адресе којима се у овој фази приступа, садржај акумулатора A и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и меморијских локација који су у овој фази промењени. Резултате представити у табелама 1, 2 и 3 формулара.
Садржај дела меморије из поставке задатка
ЛОКАЦИЈА 000A 000B 000C 000D 000E 000F 0010 0011 0012 0013
ВРЕДНОСТ 10 01 00 C1 21 77 11 00 0A 83
ЛОКАЦИЈА 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
ВРЕДНОСТ E0 00 00 0A 00 10 09 10 E8 A2
ЛОКАЦИЈА 100A 100B 100C 100D 100E 100F 1010 1011 1012 1013
ВРЕДНОСТ E2 60[2] 00 08 A0 40 10 19 00 52
ЛОКАЦИЈА 1014 1015 1016 1017 1018 1019 101A 101B 101C 101D
ВРЕДНОСТ 21 41 F0 00 03 E3 21 B8 10 13

Решење

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

Битови IR31..24 Класа инструкције
31 30 29 28 27 26 25 24
0 0 Код операције
Условни скок
0 1 Код операције
Безусловни скок
1 0 1 Код операције Безадресне инструкције
1 1 1 Код операције Адресне инструкције
Битови IR31..24 Инструкција
2. бајт 3. бајт 4. бајт Дужина
31 30 29 28 27 26 25 24
Условни скок
0 0 0 0 0 0 0 0 JNZ ст.
мл. / 3 б
Безусловни скок
0 1 0 0 0 0 0 0 JMP ст.
мл. / 3 б
Безадресне инструкције
1 0 1 0 0 0 0 0 PUSH / / / 1 б
1 0 1 0 0 0 0 1 POP / / / 1 б
1 0 1 0 0 0 1 0 DEC / / / 1 б
Адресне инструкције
1 1 1 0 0 0 0 0 LD Адр.
1 1 1 0 0 0 0 1 ST Адр.
1 1 1 0 0 0 1 0 OR
Адр.
1 1 1 0 0 0 1 1 ROR Адр.
1 1 1 0 0 1 0 0 JADR Адр.
1 1 1 0 0 1 0 1 ADD Адр.
1 1 1 0 0 1 1 0
SUB Адр.
Битови 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 / /
/
/ / PC релативно ст.
мл. 4 б
1 0 0 / /
/
/ / Непосредно
ст.
мл. 4 б
1 0 1 R
R R R R Рег. инд. са пом. ст.
мл. 4 б

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

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

Меморија

#
Адресе у меморији са којих је учитана инструкција IR31..24
IR23..16 IR15..8 IR7..0 Инструкција PC
1 1000h, 1001h, 1002h, 1003h E0h 00h 00h 0Ah LD 000Ah
1004h
2 1004h, 1005h, 1006h 00h 10h 09h / JNZ 1009h 1007h
3 1009h A2h / / / DEC 100Ah
4 100Ah, 100Bh, 100Ch, 100Dh E2h 60h 00h 08h OR (PC+08h) 100Eh
5 100Eh A0h / / / PUSH 100Fh
6 100Fh, 1010h, 1011h 40h 10h 19h / JMP 1019h 1012h
7 1019h, 101Ah E3h 21h / / ROR (R1) 101Bh
#
Адресе у меморији или регистри
са којих је учитана адреса операнда
Адресе у меморији или регистри
са којих је учитан операнд
Операнд Нови садржај регистара опште намене
1 / 000Ah, 000Bh 1001h /
2 / / / /
3 / / / /
4 / 1016h, 1017h F000h /
5 / / / /
6 / / / /
7 / 000Ch, 000Dh 00C1h /
#
Меморијске адресе којима се
приступа у овој фази
Акумулатор
N Z V C Нови садржај регистара и меморијских локација
који су промењени у овој фази
1 / 1001h 0 0 0 0 /
2 / 1001h 0 0 0 0 PC = 1009h
3 / 1000h 0 0 0 0 /
4 / F000h 1 0 0 0 /
5 2001h, 2002h F000h 1 0 0 0 MEM[2001h] = F0h, MEM[2002h] = 00h, SP = 2002h
6 / F000h 1 0 0 0 PC = 1019h
7 / 8060h 1 0 0 1 /

Напомене

  1. На колоквијуму је овде писало меморијско индиректно уместо меморијског директног адресирања, и од студената је тако било и тражено да пројектују. У поставци на страници предмета је промењено на меморијско директно.
  2. На колоквијуму је на овом месту писало 30h, и асистенти су касније прошли кроз сале како би напоменули ову грешку. Касније, овај рок је, као једини репрезент овог типа задатка, постављен на страницу предмета, са поменутом грешком.