ORT2/K3 Jul 2022
- Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Ispit u julskom roku 2022. godine održan je 4. jula i trajao je 90 minuta.
Postavka
Posmatra se deo računara koji čine memorija i procesor. Memorija je kapaciteta 216 bajtova. Širina memorijske reči je 1 bajt. Procesor je sa jednoadresnim formatom instrukcija. Adrese i podaci su dužine 16 bita i zauzimaju po dve susedne memorijske lokacije, pri čemu se stariji bajt nalazi na višoj, a mlađi bajt na nižoj adresi.
U procesoru postoji registar programskog brojača PC dužine 2 bajta, adresni registar memorije MAR dužine 2 bajta, prihvatni registar podataka memorije MDR dužine 1 bajt, prihvatni registar instrukcija IR dužine 4 bajta, akumulator A dužine 2 bajta, prihvatni registar podataka B dužine 2 bajta, registri opšte namene R0 do R63 dužine 2 bajta i programska statusna reč PSW dužine 1 bajt. Instrukcije su dužine 1, 2, 3 ili 4 bajta.
Bitovi 7 i 6 prvog bajta instrukcije su 00 za sve instrukcije skoka. Kod instrukcija uslovnog skoka bit 5 prvog bajta instrukcije je 0, dok kod instrukcija bezuslovnog skoka bit 5 prvog bajta instrukcije je 1. Instrukcija uslovnog skoka je instrukcija uslovnog skoka ukoliko je rezultat nula (JZ), a instrukcije bezuslovnog skoka su instrukcija bezuslovnog skoka (JMP) i instrukcija skoka na potprogram (JSR). Bitovima 4 do 0 prvog bajta instrukcije specificira se kod operacije i na osnovu toga su za instrukcije JZ, JMP i JSR usvojeni kodovi operacije 00000000, 00100000 i 00100001, respektivno. Instrukcije JZ, JMP i JSR se realizuju kao apsolutni skokovi, pri čemu je aderesa data drugim i trećim bajtom instrukcije. Dužina instrukcija je 3 bajta.
Bitovi 7 i 6 prvog bajta instrukcije su 01 za sve adresne i bezadresne instrukcije.
Bit 5 prvog bajta instrukcije je 1 za sve bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP) i instrukcija povratka iz potprograma (RTS). Bitovima 4 do 0 prvog bajta instrukcije specificira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP i RTS usvojeni kodovi operadžija 01100000, 01100001 i 01100010, respektivno. Dužina instrukcija je 1 bajt.
Bit 5 prvog bajta instrukcije je 0 za sve adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), aritmetička instrukcija sabiranja koja smešta rezultat u akumulator (ADD), instrukcija aritmetičkog pomeranja operanda za jedno mesto ulevo koja smešta rezultat u akumulator (ASL) i insturkcija bezuslovnog skoka na sračunatu adresu (JADR). Bitovima 4 do 0 prvog bajta instrukcije specificira se kod operacije za adresne instrukcije. Na osnovu toga su za instrukcije LD, ST, ADD, ASL i JADR usvojeni kodovi operacija 01000000, 01000001, 01000010, 01000011 i 01000100, respektivno. Dužina instrukcija je 2, 3 ili 4 bajta i zavisi od specificiranog načina adresiranja.
Načini adresiranja su specificirani bitovima 7 i 6 drugog bajta instrukcije i to na sledeći način: 00 – memorijsko direktno adresiranje (memdir), 01 – registarsko direktno adresiranje (regdir), 10 – registarsko indirektno adresiranje (regind) i 11 – neposredno adresiranje (immed). Kod memorijskog direktnog adresiranja 16 bitna adresa memorijske lokacije je data trećim i četvrtim bajtom instrukcije. Bitovi 5 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcije je 4 bajta. Kod registarskog direktnog i registarskog indirektnog adresiranja koriste se neki od registara opšte namene R0 do R63 specificirani bitovima od 5 do 0 drugog bajta instrukcije. Dužina instrukcija je 2 bajta. Kod neposrednog adresiranja 16 bitni operand dat je trećim i četvrtim bajtom instrukcije. Bitovi 5 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcije je 4 bajta.
Stek raste prema višim memorijskim lokacijama, a registar SP ukazuje na prvu slobodnu memorijsku lokaciju. Procesor nema mogućnost obrade prekida.
- Projektovati deo operacione jedinice procesora koja je potrebna da se izvrši (FETCH + ADDR + EXEC) instrukcija ADD 1010h.
- Dati su početni sadržaji registara i indikatora PC = 1000h, SP = 3000h, ACC = 0001h, R0 = 0002h, R1 = 000Ah, R2 = 10A2h, R3 = FAE3h, N = 0, Z = 0, V = 0 i C = 0. Indikatori statusne reči na koje instrukcija ne utiče treba da ostanu nepromenjeni. Izvršiti 7 sukcesivnih naredbi i za svaku naredbu odrediti sledeće: u fazi čitanja instrukcije – memorijske adrese sa kojih je pročitana instrukcija, sadržaj registra IR, instrukciju koja je pročitana i nov sadržaj registra PC; u fazi određivanja adrese operanda i čitanja operanda – memorijske adrese sa kojih je pročitana adresa operanda, memorijske adrese sa kojih je pročitan operand, vrednost operanda i novi sadržaj registara opšte namene koji su u ovoj fazi promenjeni; u fazi izvršavanja operacije – memorijske adrese kojima se u ovoj fazi pristupa, sadržaj akumulatora A i indikatora N, Z, V i C nakon izvršavanja instrukcije i novi sadržaj registara i memorijskih lokacija koji su u ovoj fazi promenjeni.
| LOKACIJA: | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh | 0010h | 0011h | 0012h | 0013h |
| SADRŽAJ: | 10h | 01h | 00h | C1h | 21h | 77h | 11h | 00h | 0Ah | 83h |
| LOKACIJA: | 1000h | 1001h | 1002h | 1003h | 1004h | 1005h | 1006h | 1007h | 1008h | 1009h |
| SADRŽAJ: | 60h | 42h | 00h | 0Ch | 00h | 41h | 41h | 20h | 0Bh | 10h |
| LOKACIJA: | 100Ah | 100Bh | 100Ch | 100Dh | 100Eh | 100Fh | 1010h | 1011h | 1012h | 1013h |
| SADRŽAJ: | E1h | 43h | 40h | 61h | 40h | C0h | 06h | F0h | 01h | 52h |
| LOKACIJA: | 1014h | 1015h | 1016h | 1017h | 1018h | 1019h | 101Ah | 101Bh | 101Ch | 101Dh |
| SADRŽAJ: | 21h | F0h | 00h | 00h | 0Ch | E2h | 21h | B8h | 10h | 13h |
Rešenje
Kodovi operacija
Operaciona jedinica
Memorija
R.B. |
Adrese sa kojih je pročitana instrukcija |
IR31..24 [h] |
IR23..16 [h] |
IR15..8 [h] |
IR7..0 [h] |
Pročitana instrukcija |
Sadržaj promenjenih registara |
|---|---|---|---|---|---|---|---|
1 |
1000h |
60h |
/ |
/ |
/ |
PUSH |
PC = 1001h |
2 |
1001h, 1002h, 1003h, 1004h |
42h |
00h |
0Ch |
00h |
ADD 000Ch |
PC = 1005h |
3 |
1005h, 1006h |
41h |
41h |
/ |
/ |
ST R1 |
PC = 1007h |
4 |
1007h, 1008h, 1009h |
20h |
0Bh |
10h |
/ |
JMP 100Bh |
PC = 100Ah |
5 |
100Bh, 100Ch |
43h |
40h |
/ |
/ |
ASL R0 |
PC = 100Dh |
6 |
100Dh |
61h |
/ |
/ |
/ |
POP |
PC = 100Eh |
7 |
100Eh, 100Fh, 1010h, 1011h |
40h |
C0h |
06h |
F0h |
LD #F006h |
PC = 1012h |
R.B. |
Adrese sa kojih je pročitana adresa operanda |
Adrese sa kojih je pročitan operand |
Operand |
Sadržaj promenjenih registara |
|---|---|---|---|---|
1 |
/ |
/ |
/ |
/ |
2 |
/ |
000Ch, 000Dh |
C100h |
/ |
3 |
/ |
/ |
/ |
/ |
4 |
/ |
/ |
/ |
/ |
5 |
/ |
/ |
0002h |
/ |
6 |
/ |
/ |
/ |
/ |
7 |
/ |
/ |
F006h |
/ |
R.B. |
Adrese kojima se pristupa u fazi izvršavanja |
A [hex] |
N |
Z |
V |
C |
Sadržaj promenjenih registara i memorijskih lokacija [h] |
|---|---|---|---|---|---|---|---|
1 |
3000h, 3001h |
0001h |
0 |
0 |
0 |
0 |
MEM[3000h] = 01h, MEM[3001h] = 00h, SP = 3002h |
2 |
/ |
C101h |
1 |
0 |
0 |
0 |
/ |
3 |
/ |
C101h |
1 |
0 |
0 |
0 |
R1 = C101h |
4 |
/ |
C101h |
1 |
0 |
0 |
0 |
PC = 100Bh |
5 |
/ |
0004h |
0 |
0 |
0 |
0 |
/ |
6 |
3000h, 3001h |
0001h |
0 |
0 |
0 |
0 |
SP = 3000h |
7 |
/ |
F006h |
1 |
0 |
0 |
0 |
/ |