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

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

Поставка

Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 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 указује на последњу заузету меморијску локацију. Процесор нема могућност обраде прекида. Грешке у адресирању се проверавају у фази извршавања операције и уколико је дошло до грешке у адресирању прелази се на читање следеће инструкције.

  1. Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција DEC (4000h).
  2. Дати су почетни садржаји регистара и индикатора: 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