ORT2/K3 2023

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

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.

  1. 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.
  2. 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.
Sadržaj dela memorije iz postavke zadatka
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