ORT2/Jul 2021

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu
Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

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.

Bitovi 7 i 6 prvog bajta instrukcije su 11 za sve instrukcije skoka. Kod instrukcija uslovnog skoka bitovi 5 i 4 prvog bajta instrukcije su 00, dok kod instrukcija bezuslovnog skoka bitovi 5 i 4 prvog bajta instrukcije su 11. Instrukcija uslovnog skoka je instrukcija uslovnog skoka ukoliko postoji prenos/pozajmica (JC), a instrukcije bezuslovnog skoka su instrukcija bezuslovnog skoka (JMP) i instrukcija skoka na potprogram (JSR). Bitovima 3 do 0 prvog bajta instrukcije specifira se kod operacije i na osnovu toga su za instrukcije JC, JMP i JSR usvojeni kodovi operacije 11000000, 11110000 i 11110001, respektivno. Instrukcije JC, 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.

Bitovi 7 i 6 prvog bajta instrukcije su 00 za sve adresne i bezadresne instrukcije.

Bit 5 prvog bajta instrukcije je 0 za bezadresne instrukcije. Bezadresne instrukcije su instrukcije stavljanja sadržaja akumulatora na stek (PUSH), punjenja akumulatora sadržajem sa steka (POP) i povratka iz potprograma (RTS). Bitovima 4 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 00000000, 00000001 i 00000011, respektivno. Dužina instrukcija je 1 bajt.

Bitovi 5 i 4 prvog bajta instrukcije su 11 za adresne instrukcije. Adresne instrukcije su instrukcija prenosa u akumulator (LD), instrukcija prenosa iz akumulatora (ST), logička instrukcija komplementiranja operanda koja smešta rezultat u akumulator (NOT), instrukcija logičkog pomeranja operanda jedno mesto ulevo koja smešta rezultat u akumulator (LSL) i instrukcija bezuslovnog skoka na sračunatu adresu (JADR). Bitovima 3 do 0 prvog bajta instrukcije specificira se kod operacije za adresne instrukcije. Na osnovu toga su za instrukcije LD, ST, NOT, LSL i JADR usvojeni kodovi operacija 00110000, 00110001, 00110010, 00110011 i 00110100 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 direktno adresiranje (regdir), 010-registarsko indirektno (regind), 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. Kod registarskog direktnog i registarskog indirektnog adresiranja, koristi se neki od registara opšte namene R0 do R31 specificiranih bitovima od 4 do 0 drugog bajta. Dužina instrukcija je 2 bajta. Kod relativnog adresiranja sa pomerajem treći i četvrti bajt instrukcije sadrže 16 bitni pomeraj koji je dat kao celobrojna veličina bez znaka. 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 prvu slobodnu memorijsku lokaciju. Procesor nema mogućnost obrade prekida

1. (K2) (20)

  1. Napisati izraz za generisanje signala gradr koji je aktivan ukoliko pročitana instrukcija ima grešku pri adresiranju.
  2. Napisati izraze za generisanje signala svih načina adresiranja. IR registar se popunjava od viših ka nižim bitovima.
  3. Napisati izraze za generisanje signala operacija i to samo za JC i NOT.
  4. Nacrtati dijagram toka faza formiranja adrese i čitanja operanda i faze izvršavanje instrukcije.

2. (K3) (20)

  1. Projektovati deo operacione jedinice procesora koja je potrebna da se izvrši (FETCH, ADDR i EXEC) instrukcija NOT 000Dh.
  2. Dati su početni sadržaji registara i indikatora: PC=1000h, SP=3000h, ACC=0001h, R0=0002h, R1=030Ch, R2=10A2h, R3=FAE3h, 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 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.
Sadržaj dela memorije iz postavke zadatka
LOKACIJA 000A 000B 000C 000D 000E 000F 0010 0011 0012 0013
VREDNOST 10 01 00 C1 21 77 11 00 0A 83
LOKACIJA 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
VREDNOST 30 20 F0 10 06 10 00 31 00 00
LOKACIJA 100A 100B 100C 100D 100E 100F 1010 1011 1012 1013
VREDNOST 13 32 00 00 13 C0 00 10 01 52
LOKACIJA 1014 1015 1016 1017 1018 1019 101A 101B 101C 101D
VREDNOST 22 41 F0 00 03 E3 21 B8 10 13

Rešenje

Kodovi operacija

Bitovi IR31..24 Klasa instrukcije
31 30 29 28 27 26 25 24
1 1 0 0 Kod operacije
Uslovni skok
1 1 1 1 Kod operacije
Bezuslovni skok
0 0 0 Kod operacije Bezadresne instrukcije
0 0 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
1 1 0 0 0 0 0 0 JC st.
ml. / 3 b
Bezuslovni skok
1 1 1 1 0 0 0 0 JMP st.
ml. / 3 b
1 1 1 1 0 0 0 1 JSR st.
ml. / 3 b
Bezadresne instrukcije
0 0 0 0 0 0 0 0 PUSH / / / 1 b
0 0 0 0 0 0 0 1 POP / / / 1 b
0 0 0 0 0 0 1 1 RTS / / / 1 b
Adresne instrukcije
0 0 1 1 0 0 0 0 LD Adr.
0 0 1 1 0 0 0 1 ST Adr.
0 0 1 1 0 0 1 0 NOT
Adr.
0 0 1 1 0 0 1 1 LSL Adr.
0 0 1 1 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. dir. / / 2 b
0 1 0 R
R R R R Reg. ind. / / 2 b
0 1 1 / /
/
/ / PC relativno st.
ml. 4 b
1 0 0 / /
/
/ / Neposredno
st.
ml. 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 1000, 1001 30 20 LD R0
1002
2 1002, 1003, 1004 F0 10 06 JMP 1006h 1005
3 1006 00 PUSH 1007
4 1007, 1008, 1009, 100A 31 00 00 13 ST 0013h 100B
5 100B, 100C, 100D, 100E 32 00 00 13 NOT 0013h 100F
6 100F, 1010, 1011 C0 00 10 JC 0010h 1012
7 1012 01 POP 1013
#
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 0002
2
3
4
5 0013, 0014 0002
6
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 0002 0 0 0 0
2 0002 0 0 0 0 PC = 1006
3 3000, 3001 0002 0 0 0 0 MEM[3000] = 00, MEM[3001] = 02, SP = 3002
4 0002 0 0 0 0 MEM[0013] = 00, MEM[0014] = 02
5 FFFD 1 0 0 0
6 FFFD 1 0 0 0
7 3001, 3000 0002 0 0 0 0 SP = 3000