ORT2/K3 Februar 2021
Ispit u februarskom roku 2021. godine održan je 22. februara.
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 podatka memorije MDR dužine 1 bajt, prihvatni registar instrukcije IR dužine 3 bajta, akumulator A dužine 2 bajta, prihvatni registar podatka B dužine 2 bajta, registri opšte namene R0 do R3 dužine 2 bajta, programska statusna reč PSW dužine 1 bajt. Programska statusna reč PSW sadrži bitove N, Z, C i V koji se ažuriraju prilikom rada procesora. Instrukcije su dužine 1, 2 ili 3 bajta.
Bitovi 7, 6 i 5 prvog bajta instrukcije je 000 za sve instrukcije skoka. Kod instrukcije uslovnog skoka bit 4 prvog bajta instrukcije je 0, dok kod instrukcija bezuslovnog skoka bit 4 prvog bajta instrukcije je 1. Instrukcija uslovnog skoka je instrukcija uslovnog skoka ukoliko je rezultat negativan (BN) i instrukcije bezuslovnog skoka su instrukcija bezuslovnog skoka (JMP) i instrukcija skoka na potprogram JSR. Bitovima 3 do 0 prvog bajta instrukcije specificira se kod operacije i na osnovu toga su za instrukcije BN, JMP i JSR usvojeni kodovi operacije 00000000, 00010000 i 00010001, respektivno. Instrukcije JMP i JSR se realizuju kao apsolutni skokovi, pri čemu je adresa data drugim i trećim bajtom instrukcije. Dužina instrukcija je 3 bajta. Instrukcija BN se realizuje kao relativni skok u odnosu na tekuću vrednost programskog brojača PC, a pomeraj je 8 bitna celobrojna veličina sa znakom data drugim bajtom instrukcije. Dužina instrukcije je 2 bajta.
Bitovi 7, 6 i 5 prvog bajta instrukcije je 001 za sve bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP) i instrukcija komplementiranja sadržaja akumulatora (NOT). Bitovima 4 do 0 prvog bajta instrukcije specifira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP i NOT usvojeni kodovi operacija 00100000, 00100001 i 00100010, respektivno. Dužina instrukcija je 1 bajt.
Bitovi 7, 6 i 5 prvog bajta instrukcije imaju vrednosti od 010 do 111 za adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), instrukcija aritmetičkog pomeranja udesno za jedno mesto (ASR), instrukcija upoređivanja akumulatora sa operandom (CMP), instrukcija sabiranja (ADD) i instrukcija oduzimanja (SUB). Na osnovu toga su za instrukcije LD, ST, ASR, CMP, ADD i SUB usvojeni kodovi operacija 010, 011, 100, 101, 110 i 111, respektivno. Dužina instrukcija je 2 ili 3 bajta i zavisi od specifičnog načina adresiranja.
Načini adresiranja su specificirani bitovima 4, 3 i 2 prvog bajta instrukcije i to na sledeći način: 000-memorijsko direktno adresiranje (memdir), 001-memorijsko indirektno adresiranje (memind), 010-registarsko direktno adresiranje (regdir), 011-registarsko indirektno adresiranje (regind), 100-relativno adresiranje sa pomerajem (pcrel), 101-neposredno adresiranje (immed) i 110-registarsko indirektno adresiranje sa preinkrementiranjem (preincr). Kod memorijskog direktnog i memorijskog indirektnog adresiranja 16 bitna adresa memorijske lokacije je data drugim i trećim bajtom instrukcije. Bitovi 1 i 0 prvog bajta instrukcije se ne koriste. Dužina instrukcije je 3 bajta. Registarsko direktno, registarsko indirektno i registarsko indirektno adresiranje sa preinkrementiranjem koriste neke od registara opšte namene R0 do R3 specificirane bitovima 1 i 0 prvog bajta. Dužina instrukcija je 1 bajt. Kod relativnog adresiranja sa pomerajem drugi bajt instrukcije sadrži 8 bitni pomeraj koji je dat kao celobrojna veličina sa znakom. Bitovi 1 i 0 prvog bajta instrukcije se ne koriste. Dužina instrukcija je 2 bajta. Kod neposrednog adresiranja 16 bitni operand dat je drugim i trećim bajtom instrukcije. Bitovi 1 i 0 prvog bajta instrukcije se ne koriste. Dužina instrukcija je 3 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 (faze: FETCH, ADDR i EXEC) koja je potrebna da se izvrši instrukcija CMP +(R0). Crtati samo neophodne komponente koje su potrebne za izvršavanje navedene instrukcije.
- Dati su početni sadržaji registara i indikatora: PC=1000h, SP=2000h, ACC=FFF7h, R0=0000h, R1=0001h, R2=0002h, R3=0003h, N=1, 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 novi 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. Rezultate predstaviti u tabelama 1, 2 i 3 formulara.
LOKACIJA | 0000 | 0001 | 0002 | 0003 | 0004 | 0005 | 0006 | 0007 | 0008 | 0009 |
---|---|---|---|---|---|---|---|---|---|---|
VREDNOST | 07 | FF | 00 | 00 | 21 | 77 | 11 | 00 | 0A | 83 |
LOKACIJA | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 |
VREDNOST | 60 | 00 | 00 | D4 | F6 | FF | 00 | 0C | D4 | F6 |
LOKACIJA | 100A | 100B | 100C | 100D | 100E | 100F | 1010 | 1011 | 1012 | 1013 |
VREDNOST | FF | 30 | 00 | 08 | A0 | 40 | 10 | 19 | 00 | 52 |
LOKACIJA | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 101A | 101B | 101C | 101D |
VREDNOST | 22 | E9 | 84 | 02 | 00 | 11 | 00 | 30 | E8 | E8 |
Rešenje
Kodovi operacija
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 | / | 60h | 00h | 00h | ST 0000h | 1003h |
2 | 1003h, 1004h, 1005h | / | D4h | F6h | FFh | ADD #FFF6h | 1006h |
3 | 1006h,1007h | / | 00h | 0Ch | / | BN(PC)0Ch | 1008h |
4 | 1014h | / | 22h | / | / | NOT | 1015h |
5 | 1015h | / | E9h | / | / | SUB R1 | 1016h |
6 | 1016h,1017h,1018h | / | 84h | 02h | 00h | ASR(0002h) | 1019h |
7 | 1019h, 101Ah, 101Bh | / | 11h | 00h | 30h | JSR 3000h | 101Ch |
# | Adrese u memoriji ili registri sa kojih je učitana adresa operanda | Adrese u memoriji ili registri sa kojih je učitan operand | Operand | Novi sadržaj registara opšte namene |
---|---|---|---|---|
1 | / | / | / | / |
2 | / | / | FFF6h | / |
3 | / | / | / | / |
4 | / | / | / | / |
5 | / | / | 0001h | R1 = 0001h |
6 | 0002h,0003h | 0000h,0001h | FFF7h | / |
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 | 0000h, 0001h | FFF7h | 1 | 0 | 0 | 0 | MEM[0000h] = F7h, MEM[0001h] = FFh |
2 | / | FFEDh | 1 | 0 | 0 | 1 | / |
3 | / | FFEDh | 1 | 0 | 0 | 1 | PC = 1014h |
4 | / | 0012h | 0 | 0 | 0 | 1 | / |
5 | / | 0011h | 0 | 0 | 0 | 0 | / |
6 | / | FFFBh | 1 | 0 | 0 | 1 | / |
7 | 2000h, 2001h | FFFBh | 1 | 0 | 0 | 1 | MEM[2000h] = 1Ch , MEM[2001h] = 10h, SP = 2002h, PC = 3000h |