ОРТ2/К3 2023 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(→‎Меморија: u tekstu nije pisalo da se u drugoj fazi napise registar iz kog je procitan operand ili adresa operanda, samo iz koje adrese u memoriji)
мНема описа измене
 
(Нису приказане 4 међуизмене 2 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
{{нерешено}}
'''Трећи колоквијум 2023. године''' одржан је 21. јануара 2023. и трајао је 90 минута.
'''Трећи колоквијум 2023. године''' одржан је 21. јануара 2023. и трајао је 90 минута.


== Поставка ==
== Поставка ==
Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 2¹⁶
Посматра се део рачунара који чине меморија и процесор. Меморија је капацитета 2<sup>16</sup> бајтова. Ширина меморијске речи је 1 бајт. Процесор је са једноадресним форматом инструкција. Подаци су дужине 1 бајт. Адресе су дужине 2 бајта и заузимају две суседне меморијске локације, при чему се старији бајт налази на нижој, а млађи бајт на вишој адреси.
бајтова. Ширина меморијске речи је 1 бајт. Процесор је са једноадресним форматом
инструкција. Подаци су дужине 1 бајт. Адресе су дужине 2 бајта и заузимају две
суседне меморијске локације, при чему се старији бајт налази на нижој, а млађи бајт на
вишој адреси.


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


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


Битови 7 и 6 првог бајта инструкције су 1 за све безадресне инструкције. Безадресне
Битови 7 и 6 првог бајта инструкције су 1 за све безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP), аритметичко померање удесно за једно место (ASR) и инструкција повратка из потпрограма (RTS). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP, ASR и RTS усвојени кодови операџија 11000000, 11000001, 11000010 и 11000011, респективно. Дужина инструкција је 1 бајт.
инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења
акумулатора садржајем са стека (POP), аритметичко померање удесно за једно место
(ASR) и инструкција повратка из потпрограма (RTS). Битовима 5 до 0 првог бајта
инструкције специфицира се код операције за безадресне инструкције. На основу тога
су за инструкције PUSH, POP, ASR и RTS усвојени кодови операџија 11000000,
11000001, 11000010 и 11000011, респективно. Дужина инструкција је 1 бајт.


Битови 7 и 6 првог бајта иструкције имају вредност 01 за све адресне инструкције.
Битови 7 и 6 првог бајта иструкције имају вредност 01 за све адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), инструкција преноса из акумулатора у виши бајт регистра опште намене (STRH), инструкција преноса из акумулатора у нижи бајт регистра опште намене (STRL), инструкција логичко „и“ без смештања резултата инструкције у акумулатор (TST), инструкција инкрементирања операнда који смешта резултат само у акумулатор (INC), инструкција безусловног скока на срачунату адресу (JADR) и инструкција сабирања (ADD). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, STRH, STRL, TST, INC, JADR и ADD усвојени кодови операција 01000000, 01000001, 01000010, 01000011, 01000101, 01000110 и 01000111 респективно. Дужина инструкција је 2, 3 или 4 бајта и зависи од специфицираног начина адресирања.
Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса
из акумулатора (ST), инструкција преноса из акумулатора у виши бајт регистра опште
намене (STRH), инструкција преноса из акумулатора у нижи бајт регистра опште
намене (STRL), инструкција логичко „и“ без смештања резултата инструкције у
акумулатор (TST), инструкција инкрементирања операнда који смешта резултат само у
акумулатор (INC), инструкција безусловног скока на срачунату адресу (JADR) и
инструкција сабирања (ADD). Битовима 5 до 0 првог бајта инструкције специфицира се
код операције за адресне инструкције. На основу тога су за инструкције LD, ST, STRH,
STRL, TST, INC, JADR и ADD усвојени кодови операција 01000000, 01000001,
01000010, 01000011, 01000101, 01000110 и 01000111 респективно. Дужина инструкција
је 2, 3 или 4 бајта и зависи од специфицираног начина адресирања.


Инструкције STRH и STRL могу једино да се напишу са регистарским директним
Инструкције STRH и STRL могу једино да се напишу са регистарским директним адресирањем, а ако се инструкција ST напише са регистарским директним адресирањем онда се у нижих осам бита регистра опште намене упише садржај акумулатора (виши бајт регистра опште намене се не мења). У случају да се инструкција LD напише са регистарским директним адресирањем, нижи бајт регистра опште намене се учитава у акумулатор.
адресирањем, а ако се инструкција ST напише са регистарским директним
адресирањем онда се у нижих осам бита регистра опште намене упише садржај
акумулатора (виши бајт регистра опште намене се не мења). У случају да се инструкција LD напише са регистарским директним адресирањем, нижи бајт регистра опште намене се учитава у акумулатор.


Начини адресирања су специфицирани битовима 7, 6 и 5 другог бајта инструкције и то
Начини адресирања су специфицирани битовима 7, 6 и 5 другог бајта инструкције и то на следећи начин: 000 – меморијско директно адресирање (memdir), 001 – регистарско директно адресирање (regdir), 010 – регистарско индиректно адресирање (regind), 011 – регистарско индиректно адресирање са предекрементирањем (predec), 100 – релативно адресирање са померајем (pcrel), 101 – непосредно адресирање (immed) и 110 – регистарско индиректно адресирање са померајем (regindpom). Код меморијског директног адресирања 16 битна адреса меморијске локације је дата трећим и четвртим бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкције је 4 бајта. Адресирања регистарско директно, регистарско индиректно и регистарско индиректно са предекрементирањем користе неке од регистара опште намене R0 до R31 специфициране битовима од 4 до 0 другог бајта инструкције. Дужина инструкција је 2 бајта. Код релативног адресирања са померајем трећи бајт инструкције садржи 8 битни померај који је дат као целобројна величина са знаком. Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкције је 3 бајта. Код непосредног адресирања 8 битни операнд дат је трећим бајтом инструкције. Битови 4 до 0 другог бајта се не користе. Дужина инструкције је 3 бајта. Код регистарског индиректног адресирања са померајем трећи и четврти бајт инструкције садрже 16 битни померај који је дат као целобројна величина са знаком. Један од регистара опште намене R0 до R31 који се користи специфициран је битовима од 4 до 0 другог бајта инструкције. Дужина инструкције је 4 бајта.
на следећи начин: 000 – меморијско директно адресирање (memdir), 001 – регистарско
директно адресирање (regdir), 010 – регистарско индиректно адресирање (regind), 011 –
регистарско индиректно адресирање са предекрементирањем (predec), 100 – релативно
адресирање са померајем (pcrel), 101 – непосредно адресирање (immed) и 110 –
регистарско индиректно адресирање са померајем (regindpom). Код меморијског
директног адресирања 16 битна адреса меморијске локације је дата трећим и четвртим
бајтом инструкције. Битови 4 до 0 другог бајта инструкције се не користе. Дужина
инструкције је 4 бајта. Адресирања регистарско директно, регистарско индиректно и
регистарско индиректно са предекрементирањем користе неке од регистара опште
намене R0 до R31 специфициране битовима од 4 до 0 другог бајта инструкције.
Дужина инструкција је 2 бајта. Код релативног адресирања са померајем трећи бајт
инструкције садржи 8 битни померај који је дат као целобројна величина са знаком.
Битови 4 до 0 другог бајта инструкције се не користе. Дужина инструкције је 3 бајта.
Код непосредног адресирања 8 битни операнд дат је трећим бајтом инструкције.
Битови 4 до 0 другог бајта се не користе. Дужина инструкције је 3 бајта. Код
регистарског индиректног адресирања са померајем трећи и четврти бајт инструкције
садрже 16 битни померај који је дат као целобројна величина са знаком. Један од
регистара опште намене R0 до R31 који се користи специфициран је битовима од 4 до
0 другог бајта инструкције. Дужина инструкције је 4 бајта.
 
Стек расте према нижим меморијским локацијама, а регистар SP указује на последњу
заузету меморијску локацију. Процесор нема могућност обраде прекида.
 
а) Пројектовати део операционе јединице процесора која је потребна да се изврши
(FETCH + ADDR + EXEC) инструкција INC (PC) 05h. Потребно је да се нацрта
минимална операциона јединица која је довољна да се изврши споменута инструкција.
 
б) Дати су садржаји регистара и индикатора PC = 1000h, SP = 2000h, ACC = 7Fh, R0 =
0014h, R1 = 0015h, R2 = 00A2h, R3 = FFE3h, N = 0, Z = 0, V = 0 и C = 0. Индикатори
статусне речи на које инструкција не утиче треба да остану непромењени. Извршити 7
сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције
– меморијске адресе са којих је прочитана инструкција, садржај регистра IR,
инструкцију која је прочитана и нов садржај регистра PC; у фази одређивања адресе
операнда и читања операнда – меморијске адресе са којих је прочитана адреса
операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови
садржај регистара опште намене који су у овој фази промењени; у фази извршавања
операције – меморијске адресе којима се у овој фази приступа, садржај акумулатора А
и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и
меморијских локација који су у овој фази промењени.  


Стек расте према нижим меморијским локацијама, а регистар SP указује на последњу заузету меморијску локацију. Процесор нема могућност обраде прекида.
<div class="abc-list">
# Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција INC (PC) 05h. Потребно је да се нацрта минимална операциона јединица која је довољна да се изврши споменута инструкција.
# Дати су садржаји регистара и индикатора PC = 1000h, SP = 2000h, ACC = 7Fh, R0 = 0014h, R1 = 0015h, R2 = 00A2h, R3 = FFE3h, N = 0, Z = 0, V = 0 и C = 0. Индикатори статусне речи на које инструкција не утиче треба да остану непромењени. Извршити 7 сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције – меморијске адресе са којих је прочитана инструкција, садржај регистра IR, инструкцију која је прочитана и нов садржај регистра PC; у фази одређивања адресе операнда и читања операнда – меморијске адресе са којих је прочитана адреса операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови садржај регистара опште намене који су у овој фази промењени; у фази извршавања операције – меморијске адресе којима се у овој фази приступа, садржај акумулатора А и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и меморијских локација који су у овој фази промењени.
</div>
{| class="wikitable"  
{| class="wikitable"  
|+ Садржај дела меморије из поставке задатка
|+ Садржај дела меморије из поставке задатка
|-
|-
| ЛОКАЦИЈА:
! ЛОКАЦИЈА:
| 0000h
| 0000h || 0001h || 0002h || 0003h || 0004h || 0005h || 0006h || 0007h || 0008h || 0009h
| 0001h
| 0002h
| 0003h
| 0004h
| 0005h
| 0006h
| 0007h
| 0008h
| 0009h
|-
|-
| САДРЖАЈ:
! САДРЖАЈ:
| 10h
| 10h   || 01h   || 00h   || C1h   || 21h   || 77h   || 11h   || 00h   || 0Ah   || 83h
| 01h
| 00h
| C1h
| 21h
| 77h
| 11h
| 00h
| 0Ah
| 83h
|-
|-
| ЛОКАЦИЈА:
! ЛОКАЦИЈА:
| 1000h
| 1000h || 1001h || 1002h || 1003h || 1004h || 1005h || 1006h || 1007h || 1008h || 1009h
| 1001h
| 1002h
| 1003h
| 1004h
| 1005h
| 1006h
| 1007h
| 1008h
| 1009h
|-
|-
| САДРЖАЈ:
! САДРЖАЈ:
| 47h
| 47h   || A0h   || 02h   || 44h   || A0h   || 02h   || 42h   || 21h   || 46h   || 61h
| A0h
| 02h
| 44h
| A0h
| 02h
| 42h
| 21h
| 46h
| 61h
|-
|-
| ЛОКАЦИЈА:
! ЛОКАЦИЈА:
| 810Ah
| 810Ah || 810Bh || 810Ch || 810Dh || 810Eh || 810Fh || 8110h || 8111h || 8112h || 8113h
| 810Bh
| 810Ch
| 810Dh
| 810Eh
| 810Fh
| 8110h
| 8111h
| 8112h
| 8113h
|-
|-
| САДРЖАЈ:
! САДРЖАЈ:
| 40h
| 40h   || 00h   || 00h   || 02h   || 43h   || 20h   || 40h   || A0h   || 01h   || C0h
| 00h
| 00h
| 02h
| 43h
| 20h
| 40h
| A0h
| 01h
| C0h
|-
|-
| ЛОКАЦИЈА:
! ЛОКАЦИЈА:
| 8114h
| 8114h || 8115h || 8116h || 8117h || 8118h || 8119h || 811Ah || 811Bh || 811Ch || 811Dh
| 8115h
| 8116h
| 8117h
| 8118h
| 8119h
| 811Ah
| 811Bh
| 811Ch
| 811Dh
|-
|-
| САДРЖAJ:
! САДРЖAJ:
| C2h
| C2h   || 45h   || 00h   || 00h   || 00h   || 00h   || 10h   || 00h   || 10h   || 13h
| 45h
| 00h
| 00h
| 00h
| 00h
| 10h
| 00h
| 10h
| 13h
|}
|}


== Решење ==
== Решење ==
<!-- За ОРТ2 К2 поделити на одељке: Кодови операција, Сигнали, Дијаграми тока (ADDR, EXEC) -->
<!-- За ОРТ2 К3 поделити на одељке: Кодови операција, Операциона јединица, Меморија -->
=== Кодови операција ===
=== Кодови операција ===
{| class="wikitable"  
{| class="wikitable"  
|-
|-
! colspan="8" | Битови IR31..24
! colspan="8" | Битови IR<sub>31..24</sub>
! rowspan="2" | Класа инструкције<br />
! rowspan="2" | Класа инструкције
|-
|-
| 31
| 31 || 30 || 29 || 28 || 27 || 26 || 25 || 24
| 30
| 29
| 28
| 27
| 26
| 25
| 24
|-
|-
| 0
| 0 || 0 || 0
| 0
| colspan="5" | Код операције
| 0
| Условни скок
| colspan="5" | Код операције<br />
| Условни скок<br />
|-
|-
| 0
| 0 || 0 || 1
| 0
| colspan="5" | Код операције
| 1
| colspan="5" | Код операције<br />
| Безусловни скок
| Безусловни скок
|-
|-
| 1
| 1 || 1
| 1
| colspan="6" | Код операције
| colspan="6" | Код операције
| Безадресне инструкције
| Безадресне инструкције
|-
|-
| 0
| 0 || 1
| 1
| colspan="6" | Код операције
| colspan="6" | Код операције
| Адресне инструкције
| Адресне инструкције
Ред 238: Ред 78:
{| class="wikitable"  
{| class="wikitable"  
|-
|-
! colspan="8" | Битови IR31..24
! colspan="8" | Битови IR<sub>31..24</sub>
! rowspan="2" | Инструкција<br />
! rowspan="2" | Инструкција
! rowspan="2" | 2. бајт
! rowspan="2" | 2. бајт
! rowspan="2" | 3. бајт
! rowspan="2" | 3. бајт
Ред 254: Ред 94:
| 24
| 24
|-
|-
| colspan="13" style="font-weight:bold;" | Условни скок
! colspan="13" | Условни скок
|-
|-
| 0
| 0
Ред 265: Ред 105:
| 0
| 0
| JN
| JN
| ст.<br />
| ст.
| мл.
| мл.
| /
| /
| 3 б
| 3 б
|-
|-
| colspan="13" style="font-weight:bold;" | Безусловни скок
! colspan="13" | Безусловни скок
|-
|-
| 0
| 0
Ред 281: Ред 121:
| 0
| 0
| JMP
| JMP
| ст.<br />
| ст.
| мл.
| мл.
| /
| /
Ред 295: Ред 135:
| 1
| 1
| JSR
| JSR
| ст.<br />
| ст.
| мл.
| мл.
| /
| /
| 3 б
| 3 б
|-
|-
| colspan="13" style="font-weight:bold;" | Безадресне инструкције
! colspan="13" | Безадресне инструкције
|-
|-
| 1
| 1
Ред 358: Ред 198:
| 1 б
| 1 б
|-
|-
| colspan="13" style="font-weight:bold;" | Адресне инструкције<br />
! colspan="13" | Адресне инструкције
|-
|-
| 0
| 0
Ред 396: Ред 236:
| 1
| 1
| 0
| 0
| STRH<br />
| STRH
| Адр.
| Адр.
|  
|  
Ред 465: Ред 305:
| 1
| 1
| 1
| 1
| 1<br />
| 1
| ADD
| ADD
| Адр.
| Адр.
Ред 474: Ред 314:


{| class="wikitable"  
{| class="wikitable"  
|-
! colspan="8" | Битови IR<sub>23..16</sub>
! colspan="8" | Битови IR23..16
! rowspan="2" | Адресирање
! rowspan="2" | Адресирање<br />
! rowspan="2" | 3. бајт
! rowspan="2" | 3. бајт
! rowspan="2" | 4. бајт
! rowspan="2" | 4. бајт
Ред 485: Ред 324:
| 21
| 21
| 20
| 20
| 19<br />
| 19
| 18<br />
| 18
| 17
| 17
| 16
| 16
Ред 495: Ред 334:
| /
| /
| /
| /
| /<br />
| /
| /
| /
| /
| Мем. дир.<br />
| /
| Мем. дир.
| ст.
| ст.
| мл.
| мл.
Ред 505: Ред 344:
| 0
| 0
| 0
| 0
| 1<br />
| 1
| R<br />
| R
| R
| R
| R
| R
Ред 519: Ред 358:
| 1
| 1
| 0
| 0
| R<br />
| R
| R
| R
| R
| R
Ред 533: Ред 372:
| 1
| 1
| R
| R
| R<br />
| R
| R<br />
| R
| R
| R
| R
| R
| Р.инд.предец.
| Р.инд.предец.
| /<br />
| /
| /
| /
| 2 б
| 2 б
Ред 546: Ред 385:
| 0
| 0
| /
| /
| /<br />
| /<br />
| /
| /
| /
| /
| PC релативно<br />
| /
| pom.<br />
| /
| PC релативно
| pom.
| /
| /
| 3 б
| 3 б
Ред 559: Ред 398:
| 1
| 1
| /
| /
| /<br />
| /<br />
| /
| /
| /
| /
| Непосредно<br />
| /
| оп.<br />
| /
| Непосредно
| оп.
| /
| /
| 3 б
| 3 б
Ред 571: Ред 410:
| 1
| 1
| 0
| 0
| R<br />
| R
| R
| R
| R
| R
Ред 577: Ред 416:
| R
| R
| Рег. инд. са пом.
| Рег. инд. са пом.
| pom.<br />
| pom.
| pom.
| pom.
| 4 б
| 4 б
Ред 587: Ред 426:
=== Меморија ===
=== Меморија ===
{| class="wikitable"  
{| class="wikitable"  
|-
! #
! #<br />
! Адресе у меморији са којих је учитана инструкција
! Адресе у меморији са којих је учитана инструкција
! IR31..24<br />
! IR<sub>31..24</sub>
! IR23..16
! IR<sub>23..16</sub>
! IR15..8
! IR<sub>15..8</sub>
! IR7..0
! IR<sub>7..0</sub>
! Инструкција
! Инструкција
! PC
! PC
|-
|-
| 1
| 1 || 1000h, 1001h, 1002h      || 47h || А0h || 02h || /  || ADD #02h   || 1003h
| 1000, 1001, 1002
| 47
| А0
| 02
|  
| ADD #02h<br />
| 1003
|-
|-
| 2
| 2 || 1003h, 1004h, 1005h      || 44h || A0h || 02h || || TST #02h   || 1006h
| 1003, 1004, 1005
| 44
| A0
| 02
|  
| TST #02h
| 1006
|-
|-
| 3
| 3 || 1006h, 1007h            || 42h || 21h || /  ||  /  || STRH R1   || 1008h
| 1006, 1007
| 42
| 21
|  
|  
| STRH R1
| 1008
|-
|-
| 4
| 4 || 1008h, 1009h          || 46h || 61h || || || JADR -(R1) || 100Ah
| 1008, 1009,
| 46
| 61
|  
|  
| JADR -(R1)
| 100A
|-
|-
| 5
| 5 || 8114h                  || C2h ||  /  || /  ||  /  || ASR       || 8115h
| 8114
| C2
|  
|  
|  
| ASR
| 8115
|-
|-
| 6
| 6 || 8115h, 8116h, 8117h, 8118h || 45h || 00h || 00h || 00h || INC 0000h || 8119h
| 8115, 8116, 8117, 8118
| 45
| 00
| 00
| 00
| INC 0000h
| 8119
|-
|-
| 7
| 7 || 8119h, 811Ah, 811Bh      || 00h || 10h || 00h ||  / || JN 1000h   || 811Ch
| 8119, 811A, 811B
| 00
| 10
| 00
|  
| JN 1000h
| 811C
|}
|}


{| class="wikitable"  
{| class="wikitable"  
|-
! #
! #<br />
! Адресе у меморији са којих је учитана адреса операнда
! Адресе у меморији<br />са којих је учитана адреса операнда
! Адресе у меморији са којих је учитан операнд
! Адресе у меморији <br />са којих је учитан операнд
! Операнд
! Операнд
! Нови садржај регистара опште намене<br />
! Нови садржај регистара опште намене
|-
|-
| 1
| 1 || / ||  /  || 02h ||  
|  
|  
| 02
|  
|-
|-
| 2
| 2 || / ||  /  || 02h ||  
|  
|  
| 02
|  
|-
|-
| 3
| 3 || /  ||  /  ||  /  ||  
|  
|  
|  
|  
|-
|-
| 4
| 4 || /  ||  /  ||  /  || R1=8114h
|  
|  
| 8114
| R1=8114
|-
|-
| 5
| 5 || / ||  /  ||  /  ||  
|  
|  
|  
|  
|-
|-
| 6
| 6 || /  || 0000h || 10h ||  
|  
| 0000
| 10
|  
|-
|-
| 7
| 7 || /  ||  /  ||  /  ||  
|  
|  
|  
|  
|}
|}


{| class="wikitable"  
{| class="wikitable"  
|-
! #
! #<br />
! Меморијске адресе којима се приступа у овој фази
! Меморијске адресе којима се <br />приступа у овој фази
! Акумулатор
! Акумулатор<br />
! N
! N
! Z
! Z
! V
! V
! C
! C
! Нови садржај регистара и меморијских локација<br />који су промењени у овој фази
! Нови садржај регистара и меморијских локација који су промењени у овој фази
|-
|-
| 1
| 1 || /  || 81h || 1 || 0 || 1 || 0 ||  
|  
| 81
| 1
| 0
| 1
| 1
|  
|-
|-
| 2
| 2 || / || 81h || 0 || 1 || 1 || 0 ||  
|  
| 81
| 0
| 1
| 1
| 1
|  
|-
|-
| 3
| 3 || /  || 81h || 0 || 1 || 1 || 0 || R1=8115h
|  
| 81
| 0
| 1
| 1
| 1
| R1=8115
|-
|-
| 4
| 4 || /  || 81h || 0 || 1 || 1 || 0 || PC=8114h
|  
| 81
| 0
| 1
| 1
| 1
| PC=8114
|-
|-
| 5
| 5 || /  || C0h || 1 || 0 || 1 || 1 ||
|
| C0
| 1
| 0
| 1?
| 1
|
|-
|-
| 6
| 6 || /  || 11h || 0 || 0 || 0 || 0 ||  
|  
| 11
| 0
| 0
| 0
| 0?
|  
|-
|-
| 7
| 7 || / || 11h || 0 || 0 || 0 || 0 ||  
|  
| 11
| 0
| 0
| 0
| 0?
|  
|}
|}


[[Категорија:Рокови]]
[[Категорија:Рокови]]
[[Категорија:ОРТ2]]<!-- Заменити са називом предмета -->
[[Категорија:ОРТ2]]

Тренутна верзија на датум 11. фебруар 2023. у 16:40

Трећи колоквијум 2023. године одржан је 21. јануара 2023. и трајао је 90 минута.

Поставка

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

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

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

Битови 7 и 6 првог бајта инструкције су 1 за све безадресне инструкције. Безадресне инструкције су инструкције стављања садржаја акумулатора на стек (PUSH), пуњења акумулатора садржајем са стека (POP), аритметичко померање удесно за једно место (ASR) и инструкција повратка из потпрограма (RTS). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за безадресне инструкције. На основу тога су за инструкције PUSH, POP, ASR и RTS усвојени кодови операџија 11000000, 11000001, 11000010 и 11000011, респективно. Дужина инструкција је 1 бајт.

Битови 7 и 6 првог бајта иструкције имају вредност 01 за све адресне инструкције. Адресне инструкције су инструкција преноса у акумулатор (LD), инструкција преноса из акумулатора (ST), инструкција преноса из акумулатора у виши бајт регистра опште намене (STRH), инструкција преноса из акумулатора у нижи бајт регистра опште намене (STRL), инструкција логичко „и“ без смештања резултата инструкције у акумулатор (TST), инструкција инкрементирања операнда који смешта резултат само у акумулатор (INC), инструкција безусловног скока на срачунату адресу (JADR) и инструкција сабирања (ADD). Битовима 5 до 0 првог бајта инструкције специфицира се код операције за адресне инструкције. На основу тога су за инструкције LD, ST, STRH, STRL, TST, INC, JADR и ADD усвојени кодови операција 01000000, 01000001, 01000010, 01000011, 01000101, 01000110 и 01000111 респективно. Дужина инструкција је 2, 3 или 4 бајта и зависи од специфицираног начина адресирања.

Инструкције STRH и STRL могу једино да се напишу са регистарским директним адресирањем, а ако се инструкција ST напише са регистарским директним адресирањем онда се у нижих осам бита регистра опште намене упише садржај акумулатора (виши бајт регистра опште намене се не мења). У случају да се инструкција LD напише са регистарским директним адресирањем, нижи бајт регистра опште намене се учитава у акумулатор.

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

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

  1. Пројектовати део операционе јединице процесора која је потребна да се изврши (FETCH + ADDR + EXEC) инструкција INC (PC) 05h. Потребно је да се нацрта минимална операциона јединица која је довољна да се изврши споменута инструкција.
  2. Дати су садржаји регистара и индикатора PC = 1000h, SP = 2000h, ACC = 7Fh, R0 = 0014h, R1 = 0015h, R2 = 00A2h, R3 = FFE3h, N = 0, Z = 0, V = 0 и C = 0. Индикатори статусне речи на које инструкција не утиче треба да остану непромењени. Извршити 7 сукцесивних наредби и за сваку наредбу одредити следеће: у фази читања инструкције – меморијске адресе са којих је прочитана инструкција, садржај регистра IR, инструкцију која је прочитана и нов садржај регистра PC; у фази одређивања адресе операнда и читања операнда – меморијске адресе са којих је прочитана адреса операнда, меморијске адресе са којих је прочитан операнд, вредност операнда и нови садржај регистара опште намене који су у овој фази промењени; у фази извршавања операције – меморијске адресе којима се у овој фази приступа, садржај акумулатора А и индикатора N, Z, V и C након извршавања инструкције и нови садржај регистара и меморијских локација који су у овој фази промењени.
Садржај дела меморије из поставке задатка
ЛОКАЦИЈА: 0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h 0008h 0009h
САДРЖАЈ: 10h 01h 00h C1h 21h 77h 11h 00h 0Ah 83h
ЛОКАЦИЈА: 1000h 1001h 1002h 1003h 1004h 1005h 1006h 1007h 1008h 1009h
САДРЖАЈ: 47h A0h 02h 44h A0h 02h 42h 21h 46h 61h
ЛОКАЦИЈА: 810Ah 810Bh 810Ch 810Dh 810Eh 810Fh 8110h 8111h 8112h 8113h
САДРЖАЈ: 40h 00h 00h 02h 43h 20h 40h A0h 01h C0h
ЛОКАЦИЈА: 8114h 8115h 8116h 8117h 8118h 8119h 811Ah 811Bh 811Ch 811Dh
САДРЖAJ: C2h 45h 00h 00h 00h 00h 10h 00h 10h 13h

Решење

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

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

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

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

Меморија

# Адресе у меморији са којих је учитана инструкција IR31..24 IR23..16 IR15..8 IR7..0 Инструкција PC
1 1000h, 1001h, 1002h 47h А0h 02h / ADD #02h 1003h
2 1003h, 1004h, 1005h 44h A0h 02h / TST #02h 1006h
3 1006h, 1007h 42h 21h / / STRH R1 1008h
4 1008h, 1009h 46h 61h / / JADR -(R1) 100Ah
5 8114h C2h / / / ASR 8115h
6 8115h, 8116h, 8117h, 8118h 45h 00h 00h 00h INC 0000h 8119h
7 8119h, 811Ah, 811Bh 00h 10h 00h / JN 1000h 811Ch
# Адресе у меморији са којих је учитана адреса операнда Адресе у меморији са којих је учитан операнд Операнд Нови садржај регистара опште намене
1 / / 02h
2 / / 02h
3 / / /
4 / / / R1=8114h
5 / / /
6 / 0000h 10h
7 / / /
# Меморијске адресе којима се приступа у овој фази Акумулатор N Z V C Нови садржај регистара и меморијских локација који су промењени у овој фази
1 / 81h 1 0 1 0
2 / 81h 0 1 1 0
3 / 81h 0 1 1 0 R1=8115h
4 / 81h 0 1 1 0 PC=8114h
5 / C0h 1 0 1 1
6 / 11h 0 0 0 0
7 / 11h 0 0 0 0