ORT2/K3 2023
Treći kolokvijum 2023. godine održan je 21. januara 2023. 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. Podaci su dužine 1 bajt. Adrese su dužine 2 bajta i zauzimaju dve susedne memorijske lokacije, pri čemu se stariji bajt nalazi na nižoj, a mlađi bajt na viš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 1 bajt, prihvatni registar podataka B dužine 1 bajt, registri opšte namene R0 do R31 dužine 2 bajta, 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 0 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 negativan (JN), 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 JN, JMP i JSR usvojeni kodovi operacije 00000000, 00100000 i 00100001, respektivno. Instrukcije JN, 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 1 za sve bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP), aritmetičko pomeranje udesno za jedno mesto (ASR) i instrukcija povratka iz potprograma (RTS). Bitovima 5 do 0 prvog bajta instrukcije specificira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP, ASR i RTS usvojeni kodovi operadžija 11000000, 11000001, 11000010 i 11000011, respektivno. Dužina instrukcija je 1 bajt.
Bitovi 7 i 6 prvog bajta istrukcije imaju vrednost 01 za sve adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), instrukcija prenosa iz akumulatora u viši bajt registra opšte namene (STRH), instrukcija prenosa iz akumulatora u niži bajt registra opšte namene (STRL), instrukcija logičko „i“ bez smeštanja rezultata instrukcije u akumulator (TST), instrukcija inkrementiranja operanda koji smešta rezultat samo u akumulator (INC), instrukcija bezuslovnog skoka na sračunatu adresu (JADR) i instrukcija sabiranja (ADD). Bitovima 5 do 0 prvog bajta instrukcije specificira se kod operacije za adresne instrukcije. Na osnovu toga su za instrukcije LD, ST, STRH, STRL, TST, INC, JADR i ADD usvojeni kodovi operacija 01000000, 01000001, 01000010, 01000011, 01000101, 01000110 i 01000111 respektivno. Dužina instrukcija je 2, 3 ili 4 bajta i zavisi od specificiranog načina adresiranja.
Instrukcije STRH i STRL mogu jedino da se napišu sa registarskim direktnim adresiranjem, a ako se instrukcija ST napiše sa registarskim direktnim adresiranjem onda se u nižih osam bita registra opšte namene upiše sadržaj akumulatora (viši bajt registra opšte namene se ne menja). U slučaju da se instrukcija LD napiše sa registarskim direktnim adresiranjem, niži bajt registra opšte namene se učitava u akumulator.
Načini adresiranja su specificirani bitovima 7, 6 i 5 drugog bajta instrukcije i to na sledeći način: 000 – memorijsko direktno adresiranje (memdir), 001 – registarsko direktno adresiranje (regdir), 010 – registarsko indirektno adresiranje (regind), 011 – registarsko indirektno adresiranje sa predekrementiranjem (predec), 100 – relativno adresiranje sa pomerajem (pcrel), 101 – neposredno adresiranje (immed) i 110 – registarsko indirektno adresiranje sa pomerajem (regindpom). Kod memorijskog direktnog adresiranja 16 bitna adresa memorijske lokacije je data trećim i četvrtim bajtom instrukcije. Bitovi 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcije je 4 bajta. Adresiranja registarsko direktno, registarsko indirektno i registarsko indirektno sa predekrementiranjem koriste neke od registara opšte namene R0 do R31 specificirane bitovima od 4 do 0 drugog bajta instrukcije. Dužina instrukcija je 2 bajta. Kod relativnog adresiranja sa pomerajem treći bajt instrukcije sadrži 8 bitni pomeraj koji je dat kao celobrojna veličina sa znakom. Bitovi 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcije je 3 bajta. Kod neposrednog adresiranja 8 bitni operand dat je trećim bajtom instrukcije. Bitovi 4 do 0 drugog bajta se ne koriste. Dužina instrukcije je 3 bajta. Kod registarskog indirektnog adresiranja sa pomerajem treći i četvrti bajt instrukcije sadrže 16 bitni pomeraj koji je dat kao celobrojna veličina sa znakom. Jedan od registara opšte namene R0 do R31 koji se koristi specificiran je bitovima od 4 do 0 drugog bajta instrukcije. Dužina instrukcije je 4 bajta.
Stek raste prema nižim memorijskim lokacijama, a registar SP ukazuje na poslednju zauzetu memorijsku lokaciju. Procesor nema mogućnost obrade prekida.
- Projektovati deo operacione jedinice procesora koja je potrebna da se izvrši (FETCH + ADDR + EXEC) instrukcija INC (PC) 05h. Potrebno je da se nacrta minimalna operaciona jedinica koja je dovoljna da se izvrši spomenuta instrukcija.
- Dati su sadržaji registara i indikatora PC = 1000h, SP = 2000h, ACC = 7Fh, R0 = 0014h, R1 = 0015h, R2 = 00A2h, R3 = FFE3h, 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: | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h | 0008h | 0009h |
---|---|---|---|---|---|---|---|---|---|---|
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: | 47h | A0h | 02h | 44h | A0h | 02h | 42h | 21h | 46h | 61h |
LOKACIJA: | 810Ah | 810Bh | 810Ch | 810Dh | 810Eh | 810Fh | 8110h | 8111h | 8112h | 8113h |
SADRŽAJ: | 40h | 00h | 00h | 02h | 43h | 20h | 40h | A0h | 01h | C0h |
LOKACIJA: | 8114h | 8115h | 8116h | 8117h | 8118h | 8119h | 811Ah | 811Bh | 811Ch | 811Dh |
SADRŽAJ: | C2h | 45h | 00h | 00h | 00h | 00h | 10h | 00h | 10h | 13h |
Rešenje
Kodovi operacija
Bitovi IR31..24 | Klasa instrukcije | |||||||
---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | |
0 | 0 | 0 | Kod operacije | Uslovni skok | ||||
0 | 0 | 1 | Kod operacije | Bezuslovni skok | ||||
1 | 1 | Kod operacije | Bezadresne instrukcije | |||||
0 | 1 | Kod operacije | Adresne instrukcije |
Bitovi IR31..24 | Instrukcija | 2. bajt | 3. bajt | 4. bajt | Dužina | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | |||||
Uslovni skok | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | JN | st. | ml. | / | 3 b |
Bezuslovni skok | ||||||||||||
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | JMP | st. | ml. | / | 3 b |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | JSR | st. | ml. | / | 3 b |
Bezadresne instrukcije | ||||||||||||
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | PUSH | / | / | / | 1 b |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | POP | / | / | / | 1 b |
1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | ASR | / | / | / | 1 b |
1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | RTS | / | / | / | 1 b |
Adresne instrukcije | ||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | LD | Adr. | |||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | ST | Adr. | |||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | STRH | Adr. | |||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | STRL | Adr. | |||
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | TST | Adr. | |||
0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | INC | Adr. | |||
0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | JADR | Adr. | |||
0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | ADD | Adr. |
Bitovi IR23..16 | Adresiranje | 3. bajt | 4. bajt | Dužina | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | ||||
0 | 0 | 0 | / | / | / | / | / | Mem. dir. | st. | ml. | 4 b |
0 | 0 | 1 | R | R | R | R | R | Reg. dir. | / | / | 2 b |
0 | 1 | 0 | R | R | R | R | R | Reg. ind. | / | / | 2 b |
0 | 1 | 1 | R | R | R | R | R | R.ind.predec. | / | / | 2 b |
1 | 0 | 0 | / | / | / | / | / | PC relativno | pom. | / | 3 b |
1 | 0 | 1 | / | / | / | / | / | Neposredno | op. | / | 3 b |
1 | 1 | 0 | R | R | R | R | R | Reg. ind. sa pom. | pom. | pom. | 4 b |
Operaciona jedinica
- Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Memorija
# | Adrese u memoriji sa kojih je učitana instrukcija | IR31..24 | IR23..16 | IR15..8 | IR7..0 | Instrukcija | PC |
---|---|---|---|---|---|---|---|
1 | 1000h, 1001h, 1002h | 47h | A0h | 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 |
# | Adrese u memoriji sa kojih je učitana adresa operanda | Adrese u memoriji sa kojih je učitan operand | Operand | Novi sadržaj registara opšte namene |
---|---|---|---|---|
1 | / | / | 02h | |
2 | / | / | 02h | |
3 | / | / | / | |
4 | / | / | / | R1=8114h |
5 | / | / | / | |
6 | / | 0000h | 10h | |
7 | / | / | / |
# | Memorijske adrese kojima se pristupa u ovoj fazi | Akumulator | N | Z | V | C | Novi sadržaj registara i memorijskih lokacija koji su promenjeni u ovoj fazi |
---|---|---|---|---|---|---|---|
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 |