ORT2/K3 Februar 2022
Postavka
Posmatra se deo računara koji čine memorija i procesor. Memorija je kapaciteta 217 bajtova. Širina memorijske reči je 2 bajta. Procesor je sa jednoadresnim formatom instrukcija. Podaci su dužine 32 bita i zauzimaju po dve susedne memorijske lokacije, pri čemu se viših 16 bita nalazi na nižoj a nižih 16 bita na višoj adresi.
U procesoru postoji registar programskog brojača PC dužine 2 bajta, adresni regisgar memorije MAR dužine 2 bajta, prihvatni registar podatka memorije MDR dužine 2 bajta, prihvatni regisgar instrukcije IR dužine 6 bajta, akumulator A dužine 4 bajta, prihvatni registar podatka B dužine 4 bajta, registri opšte namene R0 do R31 dužine 4 bajta, programska statusna reč PSW dužine 2 bajta. Instrukcije su dužine 2, 4 ili 6 bajta.
Bitovi 15, 14, 13, 12, 11, 10 i 9 prva dva bajta instrukcije su 0000 000 za sve instrukcije skoka. Kod instrukcija uslovnog skoka bit 8 prva dva bajta instrukcije je 0, dok kod instrukcija bezuslovnog skoka bit 8 prva dva bajta instrukcije je 1. Instrukcija uslovnog skoka je instrukcija uslovnog skoka ukoliko je rezultat upoređivanja jednak (BEQL), a instrukcije bezuslovnog skoka su instrukcija bezuslovnog skoka (JMP) i instrukcija skoka na potprogram (JSR). Bitovima 15 do 8 prva dva bajta instrukcije specificiran je kod operacije instrukcije BEQL i na osnovu toga instrukciji BEQL je usvojen kod operacije 00000000. Bitovima 7 do 0 prva dva bajta instrukcije BEQL dat je pomeraj u drugom komplementu koji se koristi za relativan skok. Dužina instrukcije je 2 bajta. Bitovima 7 do 0 prva dva bajta instrukcije specificira se kod operacije za instrukcije JMP i JSR. Na osnovu toga su za instrukcije JMP i JSR usvojeni kodovi operacija 0000000100000000 i 0000000100000001 respektivno. Instrukcije JMP i JSR se realizuju kao apsolutni skokovi, pri čemu je adresa data sa druga dva bajta instrukcije. Dužina instrukcija je 4 bajta.
Bitovi 15, 14, 13 i 12 prva dva bajta instrukcije su 0001 za sve bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP), aritmetičkog pomeranja akumulatora u levo (ASL) i povratka iz potprograma (RTS). Bitovima 11 do 0 prva dva bajta instrukcije specificira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP, ASL i RTS usvojeni kodovi operacija 0001000000000000, 0001000000000001, 0001000000000010 i 0001000000000011, respektivno. Dužina instrukcija je 2 bajta.
Bit 15 prva dva bajta instrukcije je 1 za adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), aritmetička instrukcija sabiranja (ADD) i instrukcija dekrementiranja operanda bez uticaja na akumulator (DEC). Bitovima 15 do 13 prva dva bajta instrukcije specificira se kod operacije za adresne instrukcije. Na osnovu toga su za instrukcije LD, ST, ADD i DEC usvojeni kodovi operacija 100, 101, 110 i 111 respektivno. Dužina instrukcija je 2, 4 ili 6 bajta i zavisi od specificiranog načina adresiranja.
Načini adresiranja su specificirani bitovima 12, 11 i 10 prva dva bajta instrukcije i to na sledeći način: 000-registarsko indirektno adresiranje sa pomerajem (regindpom), 001-neposredno adresiranje (immed), 010-registarsko direktno adresiranje (regdir), 011-memorijsko indirektno adresiranje (memind) i 100-memorijsko direktno adresiranje (memdir).
Kod registarsko direktnog i registarskog indirektnog adresiranja sa pomerajem, koristi se neki od registara opšte namene R0 do R31 specificiranih bitovima od 9 do 5 prva dva bajta instrukcije. Kod registarsko direktnog adresiranja bitovi 4 do 0 prva dva bajta instrukcije se ne koriste, dok kod registarskog indirektnog adresiranja sa pomerajem bitovima 4 do 0 prva dva bajta instrukcije je zadat pomeraj dat u drugom komplementu. Dužina instrukcija je 2 bajta.
Kod neposrednog adresiranja 32 bitni operand dat je sa druga dva i treća dva bajta instrukcije. Bitovi 9 do 0 prva dva bajta instrukcije se ne koriste. Dužina instrukcija je 6 bajta.
Kod memorijskog direktnog i memorijskog indirektnog adresiranja 16 bitna adresa memorijske lokacije je data sa druga dva bajta instrukcije. Bitovi 9 do 0 prva dva bajta instrukcije se ne koriste. Dužina instrukcija je 4 bajta.
Procesor ne poseduje poseban registar za stek, već za tu potrebu koristi registar opšte namene R31 (nižih 16 bita sadrže vrednost pokazivača na vrh steka). Stek raste prema nižim memorijskim lokacijama, a registar R31 ukazuje na poslednju zauzetu memorijsku lokaciju. Procesor nema mogućnost obrade prekida. Greške u adresiranju se proveravaju u fazi izvršavanja operacije i ukoliko je došlo do greške u adresiranju prelazi se na čitanje sledeće instrukcije.
- Projektovati deo operacione jedinice procesora koja je potrebna da se izvrši (FETCH + ADDR + EXEC) instrukcija DEC (4000h).
- Dati su početni sadržaji registara i indikatora: PC=1000h, SP=2000h, ACC=FFFF FFFFh, R0=0000h, 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 | 0002 | 0000 | 0000 | 0001 | 1002 | C400 | 0000 | 0000 | 0000 | 0000 |
| LOKACIJA | 0FF6 | 0FF7 | 0FF8 | 0FF9 | 0FFA | 0FFB | 0FFC | 0FFD | 0FFE | 0FFF |
| VREDNOST | C400 | 0000 | 0003 | 1002 | 1000 | 8C00 | 0000 | B000 | 0008 | 1003 |
| LOKACIJA | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 |
| VREDNOST | 1002 | C400 | 0000 | 0002 | 00F5 | C400 | 0000 | 0001 | 1002 | 1003 |
| LOKACIJA | 2FF7 | 2FF8 | 2FF9 | 2FFA | 2FFB | 2FFC | 2FFD | 2FFE | 2FFF | 3000 |
| VREDNOST | 0007 | 0006 | 0005 | 0004 | 0003 | 0000 | 0002 | 0001 | 0000 | 0005 |