ORT2/K2N 2019
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žina 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 4 bajta, akumulator A dužine 2 bajta, prihvatni registar podatka B dužine 2 bajta, registri opšte namene R0 do R15 dužine 2 bajta, programska statusna reč PSW dužine 1 bajt. Instrukcije su dužine 1, 2, 3 ili 4 bajta.
Bitovi 7, 6 i 5 prvog bajta instrukcije su 000 za sve instrukcije skoka. Kod instrukcija 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 ukoliko rezultat jeste nula (JZ), a 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 JZ, JMP i JSR usvojeni kodovi operacija 00000000, 00010000 i 00010001, respektivno. Instrukcije JZ, JMP i JSR se realizuju kao apsolutni skokovi, pri čemu je adresa skoka data drugim i trećim bajtom instrukcije. Dužina instrukcija je 3 bajta.
Bitovi 7, 6 i 5 prvog bajta instrukcije su 111 za sve adresne i bezadresne instrukcije.
Bitovi 4 i 3 prvog bajta instrukcije su 00 za bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP) i povratka iz potporgrama (RTS). Bitovima 2 do 0 prvog bajta instrukcije specificira se kod operacije za bezadresne instrukcije. Na osnovu toga su za instrukcije PUSH, POP i RTS usvojeni kodovi operacija 11100000, 11100001 i 11100010, respektivno. Dužina instrukcija je 1 bajt.
Bitovi 4 i 3 prvog bajta instrukcije su 01 za adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), aritmetička instrukcija dekrementiranja operanda koja rezultat smešta u akumulator (DEC), logička instrukcija "i" (AND) i instrukcija bezuslovnog skoka na sračunatu adresu (JADR). Bitovima 2 do 0 prvog bajta instrukcije specificira se kod operacije za adresne instrukcije. Na osnovu toga su za instrukcije LD, ST, DEC, AND i JADR usvojeni kodovi operacija 11101000, 11101001, 11101010, 11101011 i 11101100 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 indirektno adresiranje (memind), 001-registarsko direktno adresiranje (regdir), 010-registarsko indirektno sa pomerajem (regindpom), 011-relativno adresiranje sa pomerajem (pcrel) i 100-neposredno adresiranje (immed). Kod memorijskog indirektnog adresiranja 16 bitna adresa memorijske lokacije je data trećim i četvrtim bajtom instrukcije. Bitovi od 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcija je 4 bajta. Registarsko direktno adresiranje koristi neke od registara opšte namene R0 do R15 specificirane bitovima od 3 do 0 drugog bajta instrukcije. Bit 4 drugog bajta se ne koristi. Dužina instrukcije 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 bez znaka. Jedan od registara opšte namene R0 do R15 specificiran je bitovima od 3 do 0 drugog bajta instrukcije. Bit 4 drugog bajta se ne koristi. Dužina instrukcije 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 od 4 do 0 drugog bajta instrukcije se ne koriste. Dužina instrukcija je 4 bajta.
Stek raste prema nižim memorijskim lokacijama, a registar SP ukazuje na prvu slobodnu memorijsku lokaciju. Procesor nema mogućnost obrade prekida.
- Napisati izraze 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 PUSH i DEC.
- Nacrtati dijagram toka faze formiranja adrese i čitanja operanda i faze izvršavanje[sic] instrukcije.
- Dati su početni sadržaji registara i indikatora: PC=1000h, SP=2000h, ACC = 0006h, R0=00A7h, R1=0011h, R1=00E2h, R1=FFE3h, N=0, Z=0, V=0 i C=0. Indikatori statusne reči na koje instrukcije ne utiče treba da ostanu nepromenjeni. Izvršiti 4 sukcesivne naredbe 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.[1]
LOKACIJA | 000A | 000B | 000C | 000D | 000E | 000F | 0010 | 0011 | 0012 | 0013 |
---|---|---|---|---|---|---|---|---|---|---|
VREDNOST | 10 | 00 | C0 | 32 | 21 | 77 | 11 | 00 | 0A | 03 |
LOKACIJA | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 |
VREDNOST | E0 | EA | 00 | 0A | 00 | 00 | 11 | 10 | E8 | 22 |
LOKACIJA | 100A | 100B | 100C | 100D | 100E | 100F | 1010 | 1011 | 1012 | 1013 |
VREDNOST | 11 | 00 | 10 | AA | 03 | 51 | 00 | 0A | 00 | 52 |
LOKACIJA | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 101A | 101B | 101C | 101D |
VREDNOST | 21 | 41 | 10 | AA | 03 | 00 | 21 | 88 | 10 | 13 |
Rešenje
Kodovi operacija
Signali
Dijagrami toka
ADDR
EXEC
Memorija
# | Adrese sa kojih je učitana instrukcija | IR31..24 | IR23..16 | IR15..8 | IR7..0 | Instrukcija | PC |
---|---|---|---|---|---|---|---|
1 | 1000 | E0 | PUSH | 1001 | |||
2 | 1001, 1002, 1003, 1004 | EA | 00 | 0A | 00 | DEC 000A | 1005 |
3 | 1005, 1006, 1007 | 00 | 11 | 10 | JZ 1011 | 1008 | |
4 | 1008, 1009 | E8 | 22 | LD R2 | 100A |
# | Adrese sa kojih je učitana adresa operanda | Adrese sa kojih je učitan operand | Operand | Sadržaj promenjenih registara |
---|---|---|---|---|
1 | ||||
2 | 000A, 000B | 0010, 0011 | 0011 | |
3 | ||||
4 | 00E2 |
# | Adrese kojima se pristupa u ovoj fazi | Akumulator | N | Z | V | C | Sadržaj promenjenih registara i mem. lok. |
---|---|---|---|---|---|---|---|
1 | 2000, 1FFF | 0006 | 0 | 0 | 0 | 0 | SP[2000] = 06, SP[1FFF] = 00, SP = 1FFE |
2 | 0010 | 0 | 0 | 0 | 0 | ||
3 | 0010 | 0 | 0 | 0 | 0 | ||
4 | 00E2 | 0 | 0 | 0 | 0 |
- ↑ Počev od školske 2020/2021. godine, ovakva stavka dolazi tek na trećem kolokvijumu.