ОРТ2/Јул 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

Поставка

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

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

Битови 7 и 6 првог бајта инструкције су 11 за све инструкције скока. Код инструкција условног скока битови 5 и 4 првог бајта инструкције су 00, док код инструкција безусловног скока битови 5 и 4 првог бајта инструкције су 11. Инструкција условног скока је инструкција условног скока уколико постоји пренос/позајмица (JC), а инструкције безусловног скока су инструкција безусловног скока (JMP) и инструкција скока на потпрограм (JSR). Битовима 3 до 0 првог бајта инструкције специфира се код операције и на основу тога су за инструкције JC, JMP и JSR усвојени кодови операције 11000000, 11110000 и 11110001, респективно. Инструкције JC, JMP и JSR се реализују као апсолутни скокови, при чему је адреса дата другим и трећим бајтом инструкције. Дужина инструкција је 3 бајта.

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

Бит 5 првог бајта инструкције је 0 за безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP) и повратка из потпрограма (RTS). Битовима 4 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP и RTS усвојени кодови операција 00000000, 00000001 и 00000011, респективно. Дужина инструкција је 1 бајт.

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

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

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

1. (К2) (20)

  1. Написати израз за генерисање сигнала gradr који је активан уколико прочитана инструкција има грешку при адресирању.
  2. Написати изразе за генерисање сигнала свих начина адресирања. IR регистар се попуњава од виших ка нижим битовима.
  3. Написати изразе за генерисање сигнала операција и то само за JC и NOT.
  4. Нацртати дијаграм тока фаза формирања адресе и читања операнда и фазе извршавање инструкције.

2. (К3) (20)

  1. Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH, ADDR и EXEC) инструкција NOT 000Dh.
  2. Дати су почетни садржаји регистара и индикатора: PC=1000h, SP=3000h, ACC=0001h, R0=0002h, R1=030Ch, R2=10A2h, R3=FAE3h, 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
ВРЕДНОСТ 30 20 F0 10 06 10 00 31 00 00
ЛОКАЦИЈА 100A 100B 100C 100D 100E 100F 1010 1011 1012 1013
ВРЕДНОСТ 13 32 00 00 13 C0 00 10 01 52
ЛОКАЦИЈА 1014 1015 1016 1017 1018 1019 101A 101B 101C 101D
ВРЕДНОСТ 22 41 F0 00 03 E3 21 B8 10 13

Решење

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

Битови IR31..24 Класа инструкције
31 30 29 28 27 26 25 24
1 1 0 0 Код операције
Условни скок
1 1 1 1 Код операције
Безусловни скок
0 0 0 Код операције Безадресне инструкције
0 0 1 1 Код операције Адресне инструкције
Битови IR31..24 Инструкција
2. бајт 3. бајт 4. бајт Дужина
31 30 29 28 27 26 25 24
Условни скок
1 1 0 0 0 0 0 0 JC ст.
мл. / 3 б
Безусловни скок
1 1 1 1 0 0 0 0 JMP ст.
мл. / 3 б
1 1 1 1 0 0 0 1 JSR ст.
мл. / 3 б
Безадресне инструкције
0 0 0 0 0 0 0 0 PUSH / / / 1 б
0 0 0 0 0 0 0 1 POP / / / 1 б
0 0 0 0 0 0 1 1 RTS / / / 1 б
Адресне инструкције
0 0 1 1 0 0 0 0 LD Адр.
0 0 1 1 0 0 0 1 ST Адр.
0 0 1 1 0 0 1 0 NOT
Адр.
0 0 1 1 0 0 1 1 LSL Адр.
0 0 1 1 0 1 0 0 JADR Адр.
Битови 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 б

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

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

Меморија

#
Адресе у меморији са којих је учитана инструкција IR31..24
IR23..16 IR15..8 IR7..0 Инструкција PC
1 1000, 1001 30 20 LD R0
1002
2 1002, 1003, 1004 F0 10 06 JMP 1006h 1005
3 1006 00 PUSH 1007
4 1007, 1008, 1009, 100A 31 00 00 13 ST 0013h 100B
5 100B, 100C, 100D, 100E 32 00 00 13 NOT 0013h 100F
6 100F, 1010, 1011 C0 00 10 JC 0010h 1012
7 1012 01 POP 1013
#
Адресе у меморији или регистри
са којих је учитана адреса операнда
Адресе у меморији или регистри
са којих је учитан операнд
Операнд Нови садржај регистара опште намене
1 0002
2
3
4
5 0013, 0014 0002
6
7
#
Меморијске адресе којима се
приступа у овој фази
Акумулатор
N Z V C Нови садржај регистара и меморијских локација
који су промењени у овој фази
1 0002 0 0 0 0
2 0002 0 0 0 0 PC = 1006
3 3000, 3001 0002 0 0 0 0 MEM[3000] = 00, MEM[3001] = 02, SP = 3002
4 0002 0 0 0 0 MEM[0013] = 00, MEM[0014] = 02
5 FFFD 1 0 0 0
6 FFFD 1 0 0 0
7 3001, 3000 0002 0 0 0 0 SP = 3000