ORT2/K2 Januar 2021
K2 2020 je održan u januarskom ispitnom roku 2021.
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 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 podatka memorije MDR dužine 1 bajt, prihvatni registar instrukcije IR dužine 4 bajta, akumulator A dužine 2 bajta, prihvatni registar podatka B dužine 2 bajta, 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.
Bit 7 prvog bajta instrukcije je 0 za sve instrukcije skoka. Kod instrukcija uslovnog skoka bit 6 prvog bajta instrukcije je 0, dok kod instrukcija bezuslovnog skoka bit 6 prvog bajta instrukcije je 1. Instrukcija uslovnog skoka je instrukcija uslovnog skoka ukoliko rezultat nije nula (JNZ), a instrukcije bezuslovnog skoka su instrukcija bezuslovnog skoka (JMP) i instrukcija skoka na potprogram (JSR). Bitovima 5 do 0 prvog bajta instrukcije specificira se kod operacije i na osnovu toga su za instrukcije JNZ, JMP i JSR usvojeni kodovi operacije 00000000, 01000000 i 01000001, respektivno. Instrukcije JNZ, 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.
Bit 7 prvog bajta instrukcije je 1 za sve adresne i bezadresne instrukcije.
Bitovi 6 i 5 prvog bajta instrukcije su 01 za bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP), dekrementiranje akumulatora (DEC) i povratka iz potporgrama (RTS). Bitovima 4 do 0 prvog bajta instrukcije specificira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP, DEC i RTS usvojeni kodovi operacija 10100000, 10100001, 10100010 i 10100011, respektivno. Dužina instrukcija je 1 bajt.
Bitovi 6 i 5 prvog bajta instrukcije su 11 za adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), logička instrukcija "ili" (OR), instrukcija rotiranja operanda jedno mesto udesno koja smešta rezultat u akumulator (ROR) i instrukcija 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, OR, ROR i JADR usvojeni kodovi operacija 11100000, 11100001, 11100010, 11100011 i 11100100 respektivno. Dužina instrukcija je 2 ili 4 bajta i zavisi od specificiranog načina adresiranja.
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 indirektno adresiranje (regind), 010-registarsko indirektno sa pomerajem (regindpom), 011-relativno adresiranje sa pomerajem (pcrel) i 100-neposredno adresiranje (immed). 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 instrukcija je 4 bajta. Registarsko indirektno adresiranje koristi neke od registara opšte namene R0 do R31 specificirane bitovima od 4 do 0 drugog bajta. Dužina instrukcija je 2 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 instrukcija je 4 bajta. Kod relativnog adresiranja sa pomerajem treći i četvrti bajt instrukcije sadrže 16 bitni pomeraj koji je dat kao celobrojna veličina sa znakom. Bitovi 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcija je 4 bajta. Kod neposrednog adresiranja 16 bitni operand dat je trećim i četvrtim bajtom instrukcije. Bitovi 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcija je 4 bajta.
Stek raste prema višim memorijskim lokacijama, a registar SP ukazuje na poslednju zauzetu memorijsku lokaciju. Procesor nema mogućnost obrade prekida.
- Napisati izraz za generisanje signala gradr koji je aktivan ukoliko pročitana instrukcija ima grešku pri adresiranju.
- Napisati izraze za generisanje signala svih načina adresiranja. IR registar se popunjava od viših ka nižim bitovima.
- Napisati izraze za generisanje signala operacija i to samo za ROR i JADR.
- Nacrtati dijagram toka faze formiranja adrese i čitanja operanda i faze izvršavanje[sic] instrukcije.
Rešenje
Kodovi operacija
| Bitovi IR31..24 | Klasa instrukcija | |||||||
|---|---|---|---|---|---|---|---|---|
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | |
| 0 | 0 | Kod operacije | Uslovni skok | |||||
| 0 | 1 | Kod operacije | Bezuslovni skok | |||||
| 1 | 0 | 1 | Kod operacije |
Bezadresne instrukcije | ||||
| 1 | 1 | 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 | JNZ |
st. |
ml. | / | 3b |
| Bezuslovni skok | ||||||||||||
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | JMP | st. |
ml. | / | 3b |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | JSR | st. |
ml. | / | 3b |
| Bezadresne instrukcije | ||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | PUSH |
/ | / | / | 1b |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | POP | / | / | / | 1b |
| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | DEC | / | / | / | 1b |
| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | RTS | / | / | / | 1b |
| Adresne instrukcije | ||||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | LD | Adr. | |||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | ST | Adr. | |||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | OR | Adr. | |||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | ROR | Adr. | |||
| 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | JADR | 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. ind. | / | / | 2 b |
| 0 | 1 | 0 | R |
R | R | R | R | Reg. ind. sa pom. | st. | ml. | 4 b |
| 0 | 1 | 1 |
/ | / |
/ |
/ | / | PC relativno | st. |
ml. | 4 b |
| 1 | 0 | 0 | / | / |
/ |
/ | / | Neposredno |
st. |
ml. | 4 b |