ОРТ2/Јул 2021
- Овај рок није решен. Помозите 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)
- Написати израз за генерисање сигнала gradr који је активан уколико прочитана инструкција има грешку при адресирању.
- Написати изразе за генерисање сигнала свих начина адресирања. IR регистар се попуњава од виших ка нижим битовима.
- Написати изразе за генерисање сигнала операција и то само за JC и NOT.
- Нацртати дијаграм тока фаза формирања адресе и читања операнда и фазе извршавање инструкције.
2. (К3) (20)
- Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH, ADDR и EXEC) инструкција NOT 000Dh.
- Дати су почетни садржаји регистара и индикатора: 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 б |
Операциона јединица
Меморија
# |
Адресе у меморији са којих је учитана инструкција | 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 |