ОРТ2/К3 Фебруар 2022
Поставка
Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 217 бајтова. Ширина меморијске речи је 2 бајта. Процесор је са једноадресним форматом инструкција. Подаци су дужине 32 бита и заузимају по две суседне меморијске локације, при чему се виших 16 бита налази на нижој а нижих 16 бита на вишој адреси.
У процесору постоји регистар програмског бројача PC дужине 2 бајта, адресни регисгар меморије MAR дужине 2 бајта, прихватни регистар податка меморије MDR дужине 2 бајта, прихватни регисгар инструкције IR дужине 6 бајта, акумулатор А дужине 4 бајта, прихватни регистар податка B дужине 4 бајта, регистри опште намене R0 до R31 дужине 4 бајта, програмска статусна реч PSW дужине 2 бајта. Инструкције су дужине 2, 4 или 6 бајта.
Битови 15, 14, 13, 12, 11, 10 и 9 прва два бајта инструкције су 0000 000 за све инструкције скока. Код инструкција условног скока бит 8 прва два бајта инструкције је 0, док код инструкција безусловног скока бит 8 прва два бајта инструкције је 1. Инструкција условног скока је инструкција условног скока уколико је резултат упоређивања једнак (BEQL), а инструкције безусловног скока су инструкција безусловног скока (JMP) и инструкција скока на потпрограм (JSR). Битовима 15 до 8 прва два бајта инструкције специфициран је код операције инструкције BEQL и на основу тога инструкцији BEQL је усвојен код операције 00000000. Битовима 7 до 0 прва два бајта инструкције BEQL дат је померај у другом комплементу који се користи за релативан скок. Дужина инструкције је 2 бајта. Битовима 7 до 0 прва два бајта инструкције специфицира се код операције за инструкције JMP и JSR. На основу тога су за инструкције JMP и JSR усвојени кодови операција 0000000100000000 и 0000000100000001 респективно. Инструкције JMP и JSR се реализују као апсолутни скокови, при чему је адреса дата са друга два бајта инструкције. Дужина инструкција је 4 бајта.
Битови 15, 14, 13 и 12 прва два бајта инструкције су 0001 за све безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP), аритметичког померања акумулатора у лево (ASL) и повратка из потпрограма (RTS). Битовима 11 до 0 прва два бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP, ASL и RTS усвојени кодови операција 0001000000000000, 0001000000000001, 0001000000000010 и 0001000000000011, респективно. Дужина инструкција је 2 бајта.
Бит 15 прва два бајта инструкције је 1 за адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), аритметичка инструкција сабирања (ADD) и инструкција декрементирања операнда без утицаја на акумулатор (DEC). Битовима 15 до 13 прва два бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, ADD и DEC усвојени кодови операција 100, 101, 110 и 111 респективно. Дужина инструкција је 2, 4 или 6 бајта и зависи од специфицираног начина адресирања.
Начини адресирања су специфицирани битовима 12, 11 и 10 прва два бајта инструкције и то на следећи начин: 000-регистарско индиректно адресирање са померајем (regindpom), 001-непосредно адресирање (immed), 010-регистарско директно адресирање (regdir), 011-меморијско индиректно адресирање (memind) и 100-меморијско директно адресирање (memdir).
Код регистарско директног и регистарског индиректног адресирања са померајем, користи се неки од регистара опште намене R0 до R31 специфицираних битовима од 9 до 5 прва два бајта инструкције. Код регистарско директног адресирања битови 4 до 0 прва два бајта инструкције се не користе, док код регистарског индиректног адресирања са померајем битовима 4 до 0 прва два бајта инструкције је задат померај дат у другом комплементу. Дужина инструкција је 2 бајта.
Код непосредног адресирања 32 битни операнд дат је са друга два и трећа два бајта инструкције. Битови 9 до 0 прва два бајта инструкције се не користе. Дужина инструкција је 6 бајта.
Код меморијског директног и меморијског индиректног адресирања 16 битна адреса меморијске локације је дата са друга два бајта инструкције. Битови 9 до 0 прва два бајта инструкције се не користе. Дужина инструкција је 4 бајта.
Процесор не поседује посебан регистар за стек, већ за ту потребу користи регистар опште намене R31 (нижих 16 бита садрже вредност показивача на врх стека). Стек расте према нижим меморијским локацијама, а регистар R31 указује на последњу заузету меморијску локацију. Процесор нема могућност обраде прекида. Грешке у адресирању се проверавају у фази извршавања операције и уколико је дошло до грешке у адресирању прелази се на читање следеће инструкције.
- Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција DEC (4000h).
- Дати су почетни садржаји регистара и индикатора: PC=1000h, R31=3000h, ACC=FFFF FFFFh, 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 |
---|---|---|---|---|---|---|---|---|---|---|
ВРЕДНОСТ | 0002 | 0000 | 0000 | 0001 | 1002 | C400 | 0000 | 0000 | 0000 | 0000 |
ЛОКАЦИЈА | 0FF6 | 0FF7 | 0FF8 | 0FF9 | 0FFA | 0FFB | 0FFC | 0FFD | 0FFE | 0FFF |
ВРЕДНОСТ | C400 | 0000 | 0003 | 1002 | 1000 | 8C00 | 0000 | B000 | 0008 | 1003 |
ЛОКАЦИЈА | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 |
ВРЕДНОСТ | 1002 | C400 | 0000 | 0002 | 00F5 | C400 | 0000 | 0001 | 1002 | 1003 |
ЛОКАЦИЈА | 2FF7 | 2FF8 | 2FF9 | 2FFA | 2FFB | 2FFC | 2FFD | 2FFE | 2FFF | 3000 |
ВРЕДНОСТ | 0007 | 0006 | 0005 | 0004 | 0003 | 0000 | 0002 | 0001 | 0000 | 0005 |
Решење
Операциона јединица
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Меморија
Р.Б. | Адресе са којих је прочитана инструкција | IR23..16 [h] | IR15..8 [h] | IR7..0 [h] | Прочитана инструкција | Садржај промењених регистара |
---|---|---|---|---|---|---|
1 | 1000h | 1002h | ASL | PC = 1001h | ||
2 | 1001h, 1002h, 1003h | C400h | 0000h | 0002h | ADD #0000 0002h | PC = 1004h |
3 | 1004h | 00F5h | BEQL (PC) F5h | PC = 1005h | ||
4 | 0FFAh | 1000h | PUSH | PC = 0FFBh | ||
5 | 0FFBh, 0FFCh | 8C00h | 0000h | LD (0000h) | PC = 0FFDh | |
6 | 0FFDh, 0FFEh | B000h | 0008h | ST 0008h | PC = 0FFFh | |
7 | 0FFFh | 1030h | RTS | PC = 1000h |
Р.Б. | Адресе са којих је прочитана адреса операнда | Адресе са којих је прочитан операнд | Операнд | Садржај промењених регистара |
---|---|---|---|---|
1 | ||||
2 | 0000 0002h | |||
3 | ||||
4 | ||||
5 | 0000h | 0002h, 0003h | 0000 0001h | |
6 | ||||
7 |
Р.Б. | Адресе којима се приступа у фази извршавања | А [h] | N | Z | V | C | Садржај промењених регистара и меморијских локација [h] |
---|---|---|---|---|---|---|---|
1 | FFFF FFFEh | 1 | 0 | 0 | 1 | ||
2 | 0000 0000h | 0 | 1 | 0 | 1 | ||
3 | 0000 0000h | 0 | 1 | 0 | 1 | PC = 0FFAh | |
4 | 2FFEh, 2FFFh | 0000 0000h | 0 | 1 | 0 | 1 | MEM[2FFFh] = 0000h, MEM[2FFEh] = 0000h, R31 = 2FFEh |
5 | 0000 0001h | 0 | 0 | 0 | 1 | ||
6 | 0008h, 0009h | 0000 0001h | 0 | 0 | 0 | 1 | MEM[0008h] = 0000h, MEM[0009h] = 0001h |
7 | 2FFEh, 2FFFh | 0000 0001h | 0 | 0 | 0 | 1 | PC = 0000 0000h, R31 = 3000h |