You are on page 1of 39

Arhitektura i organizacija računara

Zbirka rešenih zadataka

1
1. Ulaz/izlaz
1.1 Programirani ulaz/izlaz

Zadatak 1

Zadata je neka spora izlazna jedinica koja je preko svog kontrolera vezana na magistralu. Na istu
magistralu su vezani i procesor i memorija računara. Adresiranje je bajtovsko, sa razdvojenim
memorijskim i ulazno/izlaznim adresnim prostorima. Procesor je dvoadresni, a od registara ima:
8 16-bitnih registara opšte namene R0 do R7, programski brojač PC, programsku statusnu reč
PSW i pokazivač steka SP. Pri prekidu, na steku se hardverski čuvaju samo registri PC i PSW.
Kod dvoadresnih instrukcija jedan operand (i eventualno odredište) je obavezno u jednom od
registara R0 do R7, a jedina naredba koja koristi operand u memoriji je naredba MOV za prenos
podataka iz/ka memoriji. Naredbe mogu operisati podacima dužine bajta ili reči, što se označava
sufiksom u asemblerskoj naredbi: B za bajt i W za reč (npr. MOVB prenosi bajt, a MOVW reč).
Kontroler periferije ima tri registra dužine 1 bajt: registar podatka čija je adresa 41h, upravljački
registar čija je adresa 42h i statusni registar čija je adresa 43h (slika 1.1.).

Registar podataka Upravljački registar Statusni registar


7 0 7 5 1 0 7 4 0

  
Start Enable Ready
Slika 1.1. Formati upravljačkog, statusnog i registra podataka.

Kontroler periferije će svaki podatak upisan u registar podataka od strane procesora prosleđivati
u samu periferiju jedino ako je bit Start u upravljačkom registru postavljen na 1. Prilikom upisa
bajta podatka od strane procesora u registar podatka kontrolera periferije bit Ready u statusnom
registru se postavlja na 0. Po prosleđivanju tog podatka iz registra podataka u periferiju bit
Ready u statusnom registru se postavlja na 1 i generiše signal prekida ako je bit Enable u
upravljačkom registru postavljen na 1.
Korišćenjem tehnika programiranog izlaza napisati program za slanje 20h bajtova iz memorije u
datu periferiju počev od memorijske lokacije 1000h:
a) sa ispitivanjem bita Ready u statusnom registru,
b) uz korišćenje mehanizma prekida. Kako se obezbeđuje da se u glavnom programu ne
započne nova izlazna operacija dok se prethodna ne završi?

Rešenje:

a) Program koji obavlja traženi prenos ispitivanjem bita Ready prikazan je na slici 1.11.1.
MOVW #20H, R0 ;dužina bloka u R0
MOVW #1000H, R1 ;adresa bloka u R1
MOVB #00100000B, R3 ;Start=1
OUTB R3, 42H ;pokretanje kontrolera
LOOP: INB 43H, R3 ;ispitivanje bita Ready
ANDB #00010000B, R3
JZ LOOP ;ako nije 1, čekaj
MOVB (R1), R3 ;prenos podatka na izlaz
OUTB R3, 41H

2
INCW R1 ;sledeća adresa u bloku
DECW R0 ;smanji brojač
JNZ LOOP ;ako nije kraj, ponovi
MOVB #0, R3 ;Start=0
OUTB R3, 42H ;zaustavljanje kontrolera

Slika 1.11.1. Program koji koristi tehniku ispitivanja bita RAEDY za prenos 20h bajtova iz
memorije na periferiju.

Indirektno adresiranje (registarsko ili memorijsko) označeno je u zagradama, a neposredno


znakom # ispred konstante.
Prvi deo programa predstavlja inicijalizaciju: broj bajtova za prenos smešta se u registar R0,
kako bi se posle svakog prenesenog podatka odbrojalo. Adresa početka bloka za prenos smešta
se u R1. Zatim se pokreće kontroler upisom 1 u bit Start. Bit Enable treba da bude 0, kako
kontroler ne bi generisao prekid. Pošto su memorijski i ulazno/izlazni adresni prostori
razdvojeni, registrima kontrolera pristupa se instrukcijama IN i OUT, a prenos podataka prema i
iz memorije instrukcijama MOV.
Petlja LOOP predstavlja čekanje na spremnost kontrolera da prihvati podatak. Procesor učitava
instrukcijom IN statusni registar, maskira bit Ready instrukcijom AND i, ako je rezultat nula (bit
RAEDY je bio 0), ponavlja se ispitivanje. Inače, ako je bit Ready bio 1, procesor prenosi podatak
u registar podatka kontrolera instrukcijom OUT. Zatim se ažuriraju R0 i R1 i, ako nije obavljen
ceo prenos, prelazi na prenos sledećeg podatka. Ako je prenos završen, kontroler se zaustavlja
upisom 0 u bit Start upravljačkog registra.

Diskusija:
Kako jedan operand u dvoadresnim instrukcijama mora biti u registru, nije bilo moguće direktno
poslati konstantu u registar periferije (OUT #00100000b, 42h) i slično.
Kako su registri kontrolera 8-bitni, instrukcije koje operišu njihovim vrednostima imaju sufiks B,
a ostale instrukcije imaju sufiks W. Adresa bloka i dužina bloka su 16-bitne veličine, pa na to
treba obratiti pažnju.

b) Glavni program koji inicijalizuje dati prenos prikazan je na slici 1.1.1.2.


;Glavni program
MOVW #20, R0 ;brojač u MemCnt
MOVW R0, MemCnt
MOVW #1000H, R0 ;pokazivač u MemSrc
MOVW R0, MemSrc
MOVW #0, R0 ;semafor na 0
MOVW R0, MemSem
MOVB #00100010B, R0 ;Start=1, Enable=1
OUTB R0, 42H ;pokretanje kontrolera
…. ;program koji ne upisuje u blok
LOOP: MOVW MemSem,R0 ;čekanje na završetak prenosa
CMPW R0, #1 ;ako semafor nije 1, čekaj
JNZ LOOP
…. ;može da se upisuje u blok

Slika 1.1.1.2. Glavni program koji obavlja inicijalizaciju prenosa koji koristi mehanizam
prekida.

3
Glavni program sada inicijalizuje brojač bajtova za prenos u memorijskoj lokaciji MemCnt, kako
bi registri u toku prenosa bili slobodni za druge potrebe. Isto važi i za pokazivač bajta u bloku za
prenos u memorijskoj lokaciji MemSrc. Semafor koji će označiti kraj prenosa podataka i koji će
postaviti prekidna rutina, postavlja se inicijalno na 0. Na kraju se pokreće kontroler,
postavljanjem bita Start na 1, a bit Enable se postavlja na 1 kako bi kontroler generisao prekid
svaki put kada je spreman da prihvati podatak.
Kada je prenos pokrenut, glavni program može da obavlja druge poslove, pri čemu ne sme da
upisuje u blok podataka koji se prenosi. Glavni program može da koristi sve registre, jer će ih
prekidna rutina sačuvati na ulazu i restaurirati na povratku. Kada je to potrebno, glavni program
ispituje da li je prenos gotov. Na to ukazuje postavljen semafor. Posle toga, glavni program može
upisivati ponovo u blok koji je prenesen.
Prekidna rutina je prikazana na slici 1.11.3.

;Prekidna rutina
INTH: PUSHW R0 ;sačuvaj registre
PUSHW R1
MOVW MemSrc, R0 ;pokazivač u R0
MOVB (R0), R1 ;prenesi podatak u R1
OUTB R1, 41H ;pa u kontroler periferije
INCW R0 ;povećaj pokazivač
MOVW R0, MemSrc ;i vrati ga u MemSrc
MOVW MemCnt, R0 ;brojač u R0
DECW R0 ;smanji brojač
MOVW R0, MemCnt ;i vrati ga u MemCnt
JNZ BACK ;ako nije poslednji, povratak
MOVB #0, R0 ;zaustavi kontroler
OUTB R0, 42H
MOVW #1, R0 ;i postavi semafor
MOVW R0, MemSem
BACK: POPW R1 ;restauriraj registre
POPW R0
RTI ;i vrati se

Slika 1.11.3. Prekidna rutina kojom se prenosi jedan bajt iz memorije na periferiju.

Prekidna rutina najpre čuva na steku registre koje će koristiti i koje će na kraju restaurirati. To su
R0 i R1. Prekidna rutina se poziva onda kada stigne zahtev za prekidom od kontrolera periferije.
Kontroler periferije generiše prekid onda kada je spreman za prenos. Prekidna rutina, dakle,
može odmah obaviti prenos, nema potrebe za ispitivanjem bita Ready.
Prenos se obavlja na uobičajen način. Zatim se pokazivač MemSrc pripremi za prenos sledećeg
bajta, kao i brojač MemCnt. Ako je prenesen poslednji bajt, prekidna rutina treba da zaustavi
kontroler i da postavi semafor MemSem na 1, kako bi glavni program znao da je prenos završen.
Ako to nije slučaj, samo se vraća iz prekidne rutine, uz restauraciju registara.

Zadatak 2

Adresne linije i linije podataka magistrale posmatranog računara su široke po 16 bita. Procesor je
jednoadresni i operiše samo nad 16-bitnim podacima. Ulazno-izlazni i memorijski adresni
4
prostori su razdvojeni. Periferije PER0 i PER1 imaju upravljačke, statusne i registre podataka
redom na sledećim adresama: FF00h, FF01h, FF02h (PER0) i FF10h, FF11h, FF12h (PER1). U
upravljačkim registrima najmlađi bit je bit Enable Interrupt kojim se dozvoljava prekid,
najstariji je bit Start kojim se dozvoljava početak operacije, a bit 1 je bit smera operacije (0—
ulaz, 1—izlaz). U statusnim registrima najmlađi bit je bit spremnosti Ready. Napisati program
kojim se blok od 200h podataka učitava sa PER0, smešta u memoriju od lokacije F000h,
obrađuje procedurom Obrada, i rezultat šalje na PER1. Operacije ulaza i izlaza realizovati
ispitivanjem bita spremnosti. Procedura Obrada ne menja mesto ni dužinu bloka podataka. Ovu
proceduru ne treba realizovati, već je samo pozvati na odgovarajućem mestu u programu
pomoću naredbe CALL Obrada.

Rešenje:

Traženi program je prikazan na slici 4.1.4.


LOAD #200H ;brojač u MemCnt
STORE MemCnt
LOAD #F000H ;adresa u MemDst
STORE MemDst
LOAD #8000H ;Start=1, Enable=0, Direction=0
OUT FF00H ;pokreni kontroler
LOOP1: IN FF01H ;ispitivanje bita spremnosti
AND #1
JZ LOOP1 ;ako nije spreman, čekaj
IN FF02H ;ulaz podatka
STORE (MemDst) ;i smeštanje u memoriju
LOAD MemDst ;ažuriranje pokazivača
INC
STORE MemDst
LOAD MemCnt ;i brojača
DEC
STORE MemCnt
JNZ LOOP1 ;ako nije poslednji, ponovi
LOAD #0 ;zaustavi kontroler
OUT FF00H ;Stop PER0
CALL Obrada ;obrada
LOAD #200H ;brojač u MemCnt
STORE MemCnt
LOAD #F000H ;pokazivač u MemSrc
STORE MemSrc
LOAD #8002H ;Start=1, Enable=0, Direction=1
OUT FF10H ;pokretanje kontrolera
LOOP2: IN FF11H ;ispitivanje bita spremnosti
AND #1
JZ LOOP2 ;ako nije spreman, čekaj
LOAD (MemSrc) ;podatak na izlaz

5
OUT FF12H
LOAD MemSrc ;ažuriranje pokazivača
INC
STORE MemSrc
LOAD MemCnt ;i brojača
DEC
STORE MemCnt
JNZ LOOP2 ;ako nije poslednji, ponovi
LOAD #0 ;zaustavi kontroler
OUT FF10H ;Stop PER1

Slika 4.1.4. Program koji učitava 200h podataka sa PER0, obrađuje učitani niz i vrši slanje na
PER1; ulaz i izlaz su realizovani tehnikom ispitivanja Ready bita.

Program se sastoji iz tri faze. Prva faza je učitavanje niza podataka, druga je poziv procedure
Obrada, a treća je slanje niza na izlaz. Faze ulaza i izlaza niza podataka realizovane su na
uobičajen način, tehnikom ispitivanja bita spremnosti.
Procesor je jednoadresni, operiše sa 16 bitnim veličinama, a adresni prostori su razdvojeni, pa o
svemu tome treba voditi računa pri pisanju programa.

Zadatak 3

Jednoadresni računar sa 16-bitnim adresama i podacima poseduje razdvojen memorijski i


ulazno/izlazni adresni prostor. Pri prekidu hardverski se čuvaju jedino PC i PSW. Periferije
PER0 i PER1 imaju upravljačke, statusne i registre podataka redom na sledećim adresama:
FF00h, FF01h, FF02h (PER0) i FF10h, FF11h, FF12h (PER1). U upravljačkim registrima
najmlađi bit je bit Enable Interrupt kojim se dozvoljava prekid, najstariji je bit Start kojim se
dozvoljava početak operacije, a bit 1 je bit smera operacije (0—ulaz, 1—izlaz). U statusnim
registrima najstariji bit je bit spremnosti Ready. Napisati program kojim se:
*0 blok od 200h podataka učitava sa PER0, smešta u memoriju od lokacije F000h, zatim
*1 vrši obrada ovih podataka procedurom OBRADA (poziv procedure je CALL OBRADA) i
potom
*2 vrši prenos obrađenog bloka (dužina i početna adresa su iste) iz memorije na PER1.
Ulaz realizovati uz korišćenje mehanizma prekida, a izlaz uz ispitivanje bita spremnosti.

Rešenje:

Glavni program je prikazan na slici 4.1.5.


INTD ;onemogućavanje prekida
LOAD #200H ;brojač u MemCnt
STORE MemCnt
LOAD #F000H ;adresa u MemDst
STORE MemDst
LOAD #0H
STORE MemSem ;inicijalizacija semafora
LOAD #8001H ;Start=1, Smer=0, Enable=1
OUT FF00H ;pokreni kontroler
INTE ;omogućavanje prekida

6

LOOP1: LOAD MemSem ;ispitivanje vrednosti semafora
AND #1
JZ LOOP1 ;ako nije kraj prenosa, čekaj
CALL Obrada ;obrada unetih podataka
LOAD #200H ;brojač u MemCnt
STORE MemCnt
LOAD #F000H ;pokazivač u MemSrc
STORE MemSrc
LOAD #8002H ;Start=1, Smer=1, Enable=0
OUT FF10H ;pokretanje kontrolera
LOOP2: IN FF11H ;ispitivanje bita spremnosti
AND #8000H
JZ LOOP2 ;ako nije spreman, čekaj
LOAD (MemSrc) ;podatak na izlaz
OUT FF12H
LOAD MemSrc ;ažuriranje pokazivača
INC
STORE MemSrc
LOAD MemCnt ;i brojača
DEC
STORE MemCnt
JNZ LOOP2 ;ako nije poslednji, ponovi
LOAD #0 ;zaustavi kontroler
OUT FF10H ;Stop PER1

Slika 4.1.5. Glavni program koji učitava 200h reči sa PER0, obrađuje učitani niz i vrši slanje na
PER1; ulaz je realizovan mehanizmom prekida a izlaz ispitivanjem Ready bita.

Prekidna rutina je prikazana na slici 4.1.6.


PUSHA ;akumulator na stek
IN FF02H ;ulaz podatka
STORE (MemDst) ;i smeštanje u memoriju
LOAD MemDst ;ažuriranje pokazivača
INC
STORE MemDst
LOAD MemCnt ;i brojača
DEC
STORE MemCnt
JNZ BACK ;ako nije poslednji, kraj
LOAD #0 ;zaustavi kontroler
OUT FF00H ;Stop PER0
LOAD #1H
STORE MemSem ;ažuriranje semafora

7
BACK: POPA ;restauracija akumulatora
RTI ;povratak iz prekidne rutine

Slika 4.1.6. Prekidna rutina kojom se prenosi jedna reč sa PER0 u memoriju.

Glavni program ostvaruje inicijalizaciju memorijskih promenljivih MemCnt, MemDst i MemSem


potrebnih za ostvarivanje ulaza i pokreće kontroler PER0. Maskiranje prekida za vreme ovih operacija
omogućava njihovo obavljanje proizvoljnim redosledom (u suprotnom slučaju pokretanje kontrolera
periferije mora da bude poslednja operacija). Posle inicijalizacije, glavni program se vrti u petlji ispitujući
MemSem dok se ne obavi prenos celokupnog bloka u memoriju. Nakon toga sledi obrada unetih podataka
procedurom OBRADA i realizacija izlaza sa ispitivanjem Ready bita i zaustavljanjem kontrolera PER1 na
kraju programa.
Prekidna rutina na ulazu čuva akumulator na steku (to je obavezno jer se hardverski čuvaju jedino PC i
PSW, a glavni program koristi registar A pri ispitivanju semafora MemSem). Zatim sledi učitavanje
podatka iz registra podataka PER1, ažuriranje memorijskih promenljivih MemDst i MemCnt. Ukoliko
nije prenet poslednji bajt, akumulator se restaurira sa steka i kontrola vraća glavnom programu. U
suprotnom slučaju, pre povratka u glavni program zaustavlja se kontroler PER0 i signalizuje kraj prenosa
glavnom programu preko semafora MemSem.

Zadatak 4

Jednoadresni računar sa 16-bitnom adresnom i magistralom podataka poseduje memorijski


preslikan ulazno/izlazni adresni prostor. Periferije PER0 i PER1 imaju upravljačke, statusne i
registre podataka redom na sledećim adresama: FF00h, FF01h, FF02h (PER0), i FF10h, FF11h,
FF12h (PER1). U upravljačkim registrima najmlađi bit je Start kojim se dozvoljava početak
operacije, najstariji je bit Enable kojim se dozvoljava prekid, a bit 2 je bit smera operacije (0—
ulaz, 1—izlaz). U statusnim registrima najstariji bit je bit spremnosti Ready. Napisati glavni
program i odgovarajuću prekidnu rutinu kojima se: blok od 100h reči učitava sa PER0 i smešta u
memoriju počev od adrese od 1000h, zatim izvrši obrada unetih podataka pozivom procedure
Obrada (CALL Obrada) i potom vrši prenos obrađenog bloka (dužina i početna adresa bloka su
iste) iz memorije u PER1. Ulaz realizovati ispitivanjem odgovarajućeg bita statusa, a izlaz
mehanizmom prekida.

Rešenje:

U prethodnim zadacima su detaljno objašnjeni svi mehanizmi koji se ovde koriste. Glavni
program je prikazan na slici 4.1.7.

LOAD #100H ;inicijalizacija brojača


STORE MemCnt
LOAD #1000H ;inicijalizacija pokazivača
STORE MemAdr
LOAD #0001H ;start kontrolera
STORE FF00H
P1: LOAD FF01H ;ispitivanje bita spremnosti
AND #8000H
JZ P1
LOAD FF02H ;ulaz podatka
STORE (MemAdr) ;i smeštanje u memoriju
INC MemAdr ;ažuriranje pokazivača
DEC MemCnt ;i brojača

8
JNZ P1 ;ako nije poslednji, ponovi
LOAD #0 ;zaustavljanje kontrolera
STORE FF00H
CALL Obrada ;obrada
LOAD #100H ;inicijalizacija brojača
STORE MemCnt
LOAD #1000H ;inicijalizacija pokazivača
STORE MemAdr
LOAD #0
STORE MemSem ;inicijalizacija semafora
LOAD #8005H ;start kontrolera
STORE FF10H
….
P2: LOAD MemSem ;prenos završen?
CMP #1
JNZ P2

Slika 4.1.7. Glavni program koji učitava 100h reči sa PER0, obrađuje učitani niz i vrši slanje na
PER1; ulaz je realizovan ispitivanjem Ready bita, a izlaz korišćenjem mehanizma prekida.

Prekidna rutina za PER1 je prikazana na slici 4.1.8.

PER1: LOAD (MemAdr) ;izlaz podatka


STORE FF12H
INC MemAdr ;ažuriranje pokazivača
DEC MemCnt ;i brojača
JNZ BACK ;ako nije poslednji, vrati se
LOAD #0 ;zaustavljanje kontrolera
STORE FF10H
LOAD #1 ;postavljanje semafora
STORE MemSem
BACK: RTI ;povratak

Slika 4.1.8. Prekidna rutina kojom se prenosi jedna reč iz memorije na PER1.

Zadatak 5

Jednoadresni računar sa 16-bitnom adresnom i 8-bitnom magistralom podataka poseduje


memorijski preslikan ulazno/izlazni adresni prostor. Periferije PER0, PER1 i PER2 imaju
upravljačke, statusne i registre podataka redom na sledećim adresama: FF10h, FF11h, FF12h
(PER0), FF20h, FF21h, FF22h (PER1) i FF30h, FF31h, FF32h (PER3). U upravljačkim
registrima najstariji bit je Start kojim se dozvoljava početak operacije, najmlađi je bit Enable
kojim se dozvoljava prekid, a bit 3 je bit smera operacije (1—ulaz, 0—izlaz). U statusnim
registrima najstariji bit je bit spremnosti Ready. Napisati glavni program i odgovarajuće prekidne
rutine kojima se: istovremeno sa periferija PER0 i PER1 učitavaju blokovi od po 100h bajtova i
smeštaju u memoriju počev od lokacija 1000h (PER0) i 1100h (PER1), zatim izvrši obrada
9
unetih blokova podataka pozivom procedure Obrada (CALL Obrada) i potom vrši prenos
obrađenog bloka od 200h bajtova, počev od adrese 1000h iz memorije u PER2. Obe ulazne
operacije izvršiti korišćenjem prekida, a izlaznu operaciju ispitivanjem bita Ready.

Rešenje:

Obe ulazne operacije treba izvršavati uporedo. To znači da treba inicijalizovati oba ulazna
prenosa i pokrenuti oba kontrolera PER0 i PER1. Tokom prenosa će se pozivati prekidne rutine
od ovih periferija međusobno nezavisno, i ti prenosi će se obavljati do kraja. Glavni program
treba da ispita da li su oba prenosa završena, pre nego što pređe na obradu. Posle toga, glavni
program će izvršiti obradu, a potom preći na izlaznu operaciju. Uobičajeni mehanizmi ulaza i
izlaza opisani su detaljno u prethodnim zadacima.
Glavni program je prikazan na slici 4.1.9.

LOAD #1000h ;pokretanje obe ulazne operacije


STORE MemB0
LOAD #1100h
STORE MemB1
LOAD #100h
STORE MemCnt0
STORE MemCnt1
LOAD #0
STORE MemSem0
STORE MemSem1
LOADB #89h
STOREB FF10h
STOREB FF20h
Wait0: LOAD MemSem0 ;čekanje na završetak sa PER0
AND #1
JZ Wait0
Wait1: LOAD MemSem1 ;čekanje na završetak sa PER1
AND #1
JZ Wait1
CALL Obrada ;obrada
LOAD #1000h ;izlazna operacija
STORE MemB
LOAD #200h
STORE MemCnt
LOAD #80h
STORE FF30h
Loop: LOAD FF31h
AND #80h
JZ Loop
LOADB (MemB)
STOREB FF32h

10
INC MemB
DEC MemCnt
JNZ Loop
LOAD #0
STOREB FF30h

Slika 4.1.9. Glavni program kojim se realizuje istovremeni ulaz sa periferija PER0 i PER1,
obrada unetih podataka i slanje na periferiju PER2; ulaz sa periferija PER0 i PER1 realizovan je
korišćenjem mehanizma prekida a izlaz ispitivanjem bita spremnosti.

Prekidne rutine su prikazane na slici 4.1.10.

Per0: LOADB FF12h


STOREB (MemB0)
INC MemB0
DEC MemCnt0
JNZ Back0
LOAD #0
STOREB FF10h
INCA
STORE MemSem0
Back0: RTI

Per1: LOADB FF22h


STOREB (MemB1)
INC MemB1
DEC MemCnt1
JNZ Back1
LOAD #0
STOREB FF20h
INCA
STORE MemSem1
Back1: RTI

Slika 4.1.10. Prekidne rutine za periferije PER0 i PER1 kojima se prenosi jedne reči u memoriju.

Diskusija:
Neophodno je pokrenuti obe ulazne operacije, pa onda čekati na završetak obe. Pogrešno je
čekati na završetak prve, pre nego što se pokrene druga. To bi značilo nepotrebnu
sekvencijalizaciju ovih operacija. Bitan efekat je upravo u tome što obe periferije paralelno
izvršavaju svoje operacije, čime se dobija na vremenu. Ipak, procesor ne može istovremeno
prenositi same podatke iz oba kontrolera u memoriju, to se obavlja sekvencijalno. Dobitak na
vremenu je u tome što same periferije i njihovi kontroleri rade paralelno i nezavisno.

11
Zadatak 6

Jednoadresni računar sa 16-bitnom adresnom i 8-bitnom magistralom podataka poseduje


razdvojen memorijski i ulazno/izlazni adresni prostor. Periferije PER0, PER1 i PER2 imaju
upravljačke, statusne i registre podataka redom na sledećim adresama: FF00h, FF01h, FF02h
(PER0), FF10h, FF11h, FF12h (PER1) i FF20h, FF21h, FF22h (PER2). U upravljačkim
registrima najstariji bit je Start kojim se dozvoljava početak operacije, najmlađi je bit Enable
kojim se dozvoljava prekid, a bit 3 je bit smera operacije (1—ulaz, 0—izlaz). U statusnim
registrima najmlađi bit je bit spremnosti Ready. Napisati glavni program i odgovarajuće prekidne
rutine kojima se: sa periferije PER0 učitava blok od 200h bajtova i smešta u memoriju počev od
lokacije 2000h, zatim izvrši obrada unetog bloka podataka pozivom procedure Obrada
(CALL Obrada) i potom istovremeno vrši prenos obrađenog bloka od 200h bajtova, počev od
adrese 2000h iz memorije u PER1 i PER2. Ulaznu operaciju izvršiti ispitivanjem bita Ready, a
obe izlazne operacije korišćenjem prekida.

Rešenje:

Glavni program je prikazan na slici 4.1.11.

LOADW #200h ;ulazna operacija


STOREW MemCnt
LOADW #2000h
STORE MemAdr
LOADB #88h
OUTB FF00h
Wait: INB FF01h
AND #01h
JZ Wait
INB FF02h
STOREB (MemAdr)
INCW MemAdr
DECW MemCnt
JNZ Wait
LOADB #0
OUTB FF00h
CALL Obrada
LOADW #200h ;pokretanje obe izlazne operacije
STOREW MemCnt1
STOREW MemCnt2
LOADW #2000h
STOREW MemAdr1
STOREW MemAdr2
LOADW #0
STOREW MemSem1
STOREW MemSem2
LOADB #81h

12
OUTB FF10h
OUTB FF20h
….
Wait1: LOADW MemSem1
CMPW #1
JNZ Wait1
Wait2: LOADW MemSem2
CMPW #1
JNZ Wait2

Slika 4.1.11.

Prekidne rutine su prikazane na slici 4.1.12.

Per1: LOADB (MemAdr1)


OUTB FF12h
INCW MemAdr1
DECW MemCnt1
JNZ Bck1
LOADB #0
OUTB FF10h
LOADW #1
STOREW MemSem1
Bck1: RTI

Per2: LOADB (MemAdr2)


OUTB FF22h
INCW MemAdr2
DECW MemCnt2
JNZ Bck2
LOADB #0
OUTB FF20h
LOADW #1
STOREW MemSem2
Bck2: RTI

Slika 4.1.12.

Diskusija:
Kako dve izlazne operacije rade uporedo i nezavisno, neophodno je da obe imaju zasebne
skupove promenljivih s kojima operišu (brojač, pokazivač i semafor), iako rade nad istim
blokom podataka. Prekidne rutine se pozivaju potpuno nezavisno i u nepoznatom međusobnom
poretku, pa svaka od njih operiše nad zasebnim skupom ovih promenljivih.

13
Zadatak 7

Jednoadresni procesor sa razdvojenim adresnim prostorima, memorija, periferije PER0 i PER1


povezani su sitemskom magistralom sa 16 adresnih linija i 16 linija za podatke. Adresiranje je na
nivou 16-bitnih reči. Mehanizam prekida je vektorisan a broj ulaza u IV tabelu je određen fiksno
(0 za PER0, 1 za PER1). Adrese relevantnih registara su prikazane na slici 4.1.13.

PER0_CONTROL FF00h PER1_CONTROL FF10h


PER0_STATUS FF01h PER1_STATUS FF11h
PER0_DATA FF02h PER1_DATA FF12h
Slika 4.1.13.

U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 1 određuje
smer operacije (0—ulaz, 1—izlaz), bit 4 je Enable kojim se dozvoljava prekid, a u statusnim
registrima bit 0 je Ready koji signalizira spremnost kontrolera. Napisati glavni program i
odgovarajuću prekidnu rutinu kojima se: uporedo vrši učitavanje niza A(i) (i = 0, …, 99) sa
PER0 u memorijiski blok koji počinje od adrese 1000h, i niza B(i) (i = 0, …, 99) sa PER1 u
memorijski blok počev od adrese 1100h, zatim izvrši sabiranje unetih nizova (B(i) = A(i)  B(i)) i
rezultujući niz šalje na periferiju PER0. Ulaz sa PER0 realizovati korišćenjem mehanizma
prekida, ulaz sa PER1 realizovati ispitivanjem bita spremnosti, a izlaz na PER0 korišćenjem
mehanizma prekida. Kontrolni registar PER0 može da se čita.

Rešenje:

Specifičnost ovog zadatka je što je potrebno najpre sa PER0 izvršiti operaciju ulaza korišćenjem
prekida, a zatim operaciju izlaza na istu periferiju takođe korišćenjem prekida. Kako ova
periferija generiše jedinstven zahtev za prekid, kome opet pripada jedna prekidna rutina, sledi da
je neophodno u samoj prekidnoj rutini softverski utvrditi da li je u toku operacija ulaza ili izlaza.
U odnosu na to se vrši odgovarajući prenos u datom smeru. Najjednostavnije je razlikovati dve
operacije pomoću jedne promenljive MemDir koja će biti postavljena pri inicijalizaciji prenosa,
u glavnom programu, na odgovarajuću vrednost, a zatim ispitivana u prekidnoj rutini.
Druga stvar na koju treba obratiti pažnju je da ulazne operacije treba obavljati uporedo. To znači
da se u toku prenosa sa PER1 u glavnom programu generišu prekidi sa PER0, u čijim se
prekidnim rutinama obavlja prenos jednog po jednog podatka. Na ovaj način se paralelizuje rad
dve periferije i njihovih kontrolera, dok sam prenos iz memorije u kontrolere periferija vrši
procesor. Iako nema paralelizacije ovog prenosa iz memorije u kontrolere periferija (jer sve radi
procesor, nešto u glavnom programu, a nešto u prekidnoj rutini), postiže se nezavisnost rada dve
periferije, jer se ničime ne uslovljava međusobni redosled operacija prema njima. Štaviše, greška
bi bilo na bilo koji način međusobno uslovljavati tokove i redosled operacija sa ove dve
periferije.
Glavni program je prikazan na slici 4.1.14.

LOAD #100h
STORE MemCnt0
STORE MemCnt1
LOAD #1000h
STORE MemAdr0
LOAD #1100h
STORE MemAdr1
LOAD #0

14
STORE MemSem0
LOAD #0 ;smer: ulaz
STORE MemDir
LOAD #11h
OUT FF00h
LOAD #01h
OUT FF10h
Crdy: IN FF11h
AND #01h
JZ Crdy
IN FF12h
STORE (MemAdr1)
INC MemAdr1
DEC MemCnt1
JNZ Crdy
LOAD #0
OUT FF10h
Wait: LOAD MemSem0
CMP #1
JNZ Wait
LOAD #100h
STORE MemCnt
LOAD #1000h
STORE MemA
LOAD #1100h
STORE MemB
Loop: LOAD (MemA)
ADD (MemB)
STORE (MemB)
INC MemA
INC MemB
DEC MemCnt
JNZ Loop
LOAD #100h
STORE MemCnt0
LOAD #1100h
STORE MemAdr0
LOAD #0
STORE MemSem0
LOAD #1 ;smer: izlaz
STORE MemDir
LOAD #13h

15
OUT FF00h

Wait1: LOAD MemSem0
CMP #1
JNZ Wait1
HALT

Slika 4.1.14.

Prekidna rutina je prikazana na slici 4.1.15.


LOAD MemDir ;koji smer?
CMP #1
JZ Out
;input
IN FF02h
STORE (MemAdr0)
Inc: INC MemAdr0
DEC MemCnt0
JNZ Back
LOAD #1
STORE MemSem0
LOAD #0
OUT FF00h
JMP Back
;output
Out: LOAD (MemAdr0)
OUT FF02h
JMP Inc
Back: RTI

Slika 4.1.15.

Diskusija:
Zadatak se mogao rešiti i na još nekoliko načina. Prvo, umesto softverske promenljive, moguće
je u prekidnoj rutini ispitivati vrednost bita smera u kontrolnom registru koji je, prema uslovima
zadatka, povezan na magistralu tako da je moguće čitati njegovu vrednost. Drugo, moguće je
pretpostaviti i da u statusnom registru postoji isti ovakav bit smera, koji je zapravo kopija bita
smera u kontrolnom registru, i koji upravo služi za utvrđivanje smera u prekidnoj rutini. Najzad,
najsloženije rešenje se sastoji u formiranju dve prekidne rutine za PER0, jedne za ulaz a druge za
izlaz, uz obaveznu promenu vektora u glavnom programu. U svakom slučaju, sasvim je pogrešno
koristiti dve prekidne rutine bez preusmeravanja prekida sa jedne na drugu, kada se u glavnom
programu prelazi sa operacije ulaza na operaciju izlaza.

Zadatak 8

Jednoadresni procesor, periferije PER0 i PER1, i memorija povezani su magistralom sa 16


adresnih linija i 16 linija za podatke. Adresiranje je na nivou 16-bitnih reči. Adrese relevantnih
registara date su na slici 4.1.16.
16
PER0_CONTROL FF00h PER1_CONTROL FF10h
PER0_STATUS FF01h PER1_STATUS FF11h
PER0_DATA FF02h PER1_DATA FF12h
Slika 4.1.16. Adrese relevantnih registara periferija PER0 i PER1

Bit 0 kontrolnih registara je Start bit, bit 1 definiše smer operacije (0—ulaz, 1—izlaz), a bit 2 je
Enable kojim se omogućuje prekid. Bit 4 statusnih registara je Ready bit. Napisati program i
odgovarajuće prekidne rutine kojima se realizuje: učitavanje niza A(i), i = 0, …, 999 sa PER0 i
slanje kvadriranog niza (A(i)A(i)) na PER1. Prijem sa PER0 i slanje na PER1 realizovati
uporedo, tj. omogućiti slanje elementa niza na PER1 čim je to moguće. Ulaz relizovati
mehanizmom prekida, a izlaz ispitivanjem bita spremnosti.
Rešenje:
U memoriji treba rezervisati prostor koji odgovara dužini niza koji se obrađuje (1000 reči).
Pretpostavimo da ulazni bafer počinje na adresi 2000h. Definišemo dva pokazivača: (a) MemWP
koji pokazuje na prvu slobodnu lokaciju u koju se može smestiti sledeći element koji dolazi sa
PER0, i (b) MemRP koji pokazuje na prvu lokaciju sa koje se može pročitati prvi sledeći element
sa slanje na PER1.
Glavni program je prikazan na slici 4.1.17.

LOAD #2000h ;početna adresa ulaznog bafera


STORE MemWP ;pokazivač koji prati učitavanje sa PER0
STORE MemRP ;pokazivač koji prati slanje na PER1
LOAD #1000 ;broj elemenata niza
STORE CntW
STORE CntR
LOAD #5
OUT FF00 ;start PER0
LOAD #3
OUT FF10h ;start PER1
Chck1:IN FF11h
AND #10h
JZ Chck1
;provera da li postoji element spreman za slanje
Chck2:LOAD MemWP
SUB MemRP
JLE Chck2 ;skok ako je rezultat oduzimanja  0
LOAD (MemRP)
MUL (MemRP) ;kvadriranje elementa niza
OUT FF12 ;slanje rezultujućeg elementa na PER1
INC MemRP
DEC CntR
JNZ Chck1
LOAD #0
STORE FF10h ;Stop PER0
HALT

Slika 4.1.17. Glavni program za učitavanje niza A sa PER0 i slanje niza A*A na PER1; ulaz i
izlaz se odvijaju uporedo; ulaz je realizovan korišćenjem mehanizma prekida a izlaz ispitivanjem
bita spremnosti.

Prekidna rutina periferije PER0 je prikazana na slici 4.1.18.

Per1: IN FF02
STORE (MemWP)
INC MemWP
DEC CntW
JNZ Back
LOAD #0
OUT FF00h ;Stop PER0

17
Back: RTI

Slika 4.1.18. Prekidna rutina kojom se sa PER0 učitava jedna reč i šalje u memoriju.

Napomena:
Brojači CntR i CntW nisu bili neophodni. Za detektovanje kraja tokom ulaza odnosno izlaza
mogu se koristiti pokazivači MemWP i MemRP, respektivno.

1.2 DMA kontroler

Zadatak 1

Adresni prostor računara je kapaciteta 64 KB, a adresibilna jedinica je bajt. 16-bitne veličine se u
memoriju smeštaju tako da je na nižoj adresi niži bajt. Procesor je jednoadresni, a ulazno/izlazni
adresni prostor je memorijski preslikan. Posmatra se neka spora ulazno/izlazna jedinica sa kojom
se operacije obavljaju korišćenjem DMA kontrolera. Procesor i DMA kontroler su jedini masteri
na magistrali, pa ne postoji potreba za arbitratorom magistrale. Potrebno je preneti blok od 20h
bajtova počev od adrese 500h iz memorije u periferiju.
a) Nacrtati principijelne šeme DMA kontrolera i kontrolera periferije, naznačiti njihove
programski dostupne registre, dodeliti im adrese i opisati značenje relevantnih bitova u tim
registrima.
b) Napisati glavni program koji inicijalizuje i pokreće ovaj prenos. Obezbediti i opisati
mehanizam koji omogućava glavnom programu da ne započne sa pisanjem u blok operativne
memorije odakle se podaci šalju sve dok se prenos ne obavi do kraja.
c) Napisati prekidnu rutinu za ovaj prenos.
d) Koliko puta će DMA kontroler generisati prekid? Kakav je odgovor na ovo pitanje ako je u
pitanju brza periferija, a DMA kontroler radi u burst režimu?

Rešenje:

a) Programski dostupni registri DMA kontrolera su prikazani na slici 1.2.1.

DMA_CONTROL DMA_ADDR_HIGH DMA_ADDR_LOW DMA_DATA

DMA_STATUS DMA_COUNT_HIGH DMA_COUNT_LOW

Slika 1.2.1. Programski dostupni registri DMA kontrolera

Njima su dodeljene adrese prikazane na slici 1.2.2.

DMA_CONTROL FF00h
DMA_ADDRESS_LOW FF01h
DMA_ADDRESS_HIGH FF02h
DMA_COUNT_LOW FF03h
DMA_COUNT_HIGH FF04h
DMA_DATA FF05h
DMA_STATUS FF06h
Slika 1.2.2. Adrese relevantnih registara DMA kontrolera

18
DMA_CONTROL je upravljački registar DMA kontrolera. On je po pravilu predviđen samo za
upis. U njega procesor upisuje binarnu vrednost kojom kontroleru zadaje odgovarajuće
parametre režima rada i pokreće kontroler. Značenje relevantnih bitova u DMA_CONTROL
registru je prikazano na slici 1.2.3.
DMA_CONTROL
7 2 1 0

START
 0—prenos nije u toku (stop)
 1—prenos u toku (start)
BRZINA
 0—spora periferija
(cycle stealing)
 1—brza periferija
(burst)

SMER
 0—ulaz
 1—izlaz

Slika 1.2.3. Format kontrolnog registra DMA kontrolera.

DMA_STATUS je statusni registar DMA kontrolera. On je po pravilu predviđen samo za čitanje.


Procesor čita njegovu vrednost i na osnovu stanja pojedinih bitova, utvrđuje status izvršene
operacije. Značenje relevantnih bitova u DMA_STATUS registru je prikazano na slici 1.2.4.
DMA_STATUS
7 0

End Of Operation
 0—prenos je još uvek u toku
 1—prenos je završen
ERROR
 0—prenos je ispravno
završen
 1—greška u prenosu

Slika 1.2.4. Format statusnog registra DMA kontrolera.

DMA_ADDRESS_LOW i DMA_ADDRESS_HIGH su niži i viši bajt adresnog registra


kontrolera. Ovaj registar služi da čuva adresu tekuće lokacije za prenos iz ili u memoriju. U
njega procesor upisuje početnu adresu bloka memorije iz koga ili u koji se vrši prenos. Kako su
adrese 16-bitne, a adresibilna jedinica bajt, ovaj registar mora da bude dvobajtni.
DMA_COUNT_LOW i DMA_COUNT_HIGH su niži i viši bajt brojačkog registra kontrolera.
Ovaj registar služi da odbrojava reči pri prenosu. U njega procesor upisuje broj bajtova koje
treba preneti (dužina bloka). Posle prenosa svakog podatka on se dekrementira, a kada stigne do
nule prenos je završen. Kako su adrese 16-bitne, adresibilna jedinica bajt, a blok može biti
dugačak koliko i ceo adresni prostor, i ovaj registar mora da bude dvobajtni.
Najzad, DMA_DATA je registar podatka DMA kontrolera. Njega DMA kontroler koristi kao
prihvatni registar pri prenosu svakog bajta. Kako ga koristi samo sam DMA kontroler, a procesor
nema nikakve potrebe da mu pristupa, ovaj registar ne mora biti programski dostupan, iako je i
to moguće.
Programski dostupni registri kontrolera periferije su prikazani na slici 1.2.5.

19
PER_CONTROL

PER_STATUS

PER_DATA

Slika 1.2.5. Programski dostupni registri kontrolera periferije.

Njima su dodeljene adrese prikazane na slici 1.2.6.

PER_CONTROL FF10h
PER_STATUS FF11h
PER_DATA FF12h
Slika 1.2.6. Adrese relevantnih registara kontrolera periferije.

Značenje relevantnih bitova u PER_CONTROL registru je prikazano na slici 1.2.7.

PER_CONTROL
7 1 0

START
 0—prenos nije u toku
 1—prenos u toku
SMER
 0—ulaz
 1—izlaz

Slika 1.2.7. Format kontrolnog registra kontrolera periferije.

b) Program koji inicijalizuje i pokreće prenos je prikazan na slici 1.2.8.



LOADW #0020h
STOREW FF03H
LOADW #0500h
STOREW FF01
LOADW #0
STOREW mSem
LOADB #81h
STOREB FF00h
LOADB #81H
STOREB FF10h

WAIT: LOADW mSem
CMP #1
JNZ WAIT

Slika 1.2.8. Deo glavnog programa za inicijalizaciju DMA kontolera i kontrolera periferije.

Glavni program samo inicijalizuje odgovarajuće registre DMA kontrolera prema zahtevanom
prenosu. Zatim pokreće DMA i kontroler periferije. Mehanizam kojim se obezbeđuje da glavni
20
program zna kada je prenos završen, tj. da sme da upisuje u dati blok memorije tek kada je
prenos završen je semafor. On je pre prenosa inicijalizovan na 0, a prekidna rutina, koja se
poziva kada je prenos završen, postaviće ga na 1. Glavni program ispituje njegovu vrednost i,
kada je ona 1, nastavlja na onaj deo u kome je neophodno da prenos bude završen.
c) Prekidna rutina je prikazana na slici 1.2.9.
DMAC: LOADB #0
STORE FF00h
STORE FF10h
LOADW #1
STOREW mSem
RTI

Slika 1.2.9. Prekidna rutina DMA kontrolera.

Prekidna rutina se izvršava onda kada DMA kontroler generiše prekid. To je slučaj kada je DMA
završio celokupan prenos. Zato u ovoj rutini treba samo zaustaviti oba kontrolera i postaviti
vrednost semafora na 1.
Pretpostavljeno je da je akumulator 16-bitni. Kada se izvršavaju instrukcije nad 8-bitnim
veličinama, koriste se samo nižih osam bita akumulatora. Pretpostavljeno je takođe da samo
instrukcije LOAD i STORE mogu da se izvršavaju i nad 8-bitnim (LOADB i STOREB) i nad
16-bitnim veličinama (LOADW i STOREW).
d) Jednom u oba slučaja, jer se prekid generiše samo po završenom celokupnom prenosu.

Zadatak 2

a) Navesti koje sve informacije procesor zadaje DMA kontroleru pri inicijalizaciji prenosa bloka
podataka sa ili prema periferiji.
b) Koliko puta DMA kontroler zahteva pristup magistrali pri prenosu 100 reči sa periferije u
burst režimu?
c) Koliko puta DMA kontroler zahteva prekid pri prenosu 100 reči sa periferije u burst režimu?
Rešenje:
a) Pri inicijalizaciji DMA transfera programski se zadaje DMA kontroleru:
- početna adresa za upis bloka podataka u memoriju (u režimu ulaza) ili za čitanje bloka
podataka iz memorije (u režimu izlaza),
- broj podataka,
- upravljačke informacije koje obuhvataju:
- smer prenosa—ulaz (periferijamemorija) ili izlaz (memorijaperiferija),
- način prenosa—burst ili cycle stealing režim,
- dozvolu da DMA kontroler po obavljenom prenosu celog bloka generiše signal prekida
procesoru,
- način ažuriranja adrese po obavljenom prenosu jednog podatka—da li se adrese
inkrementira ili dekrementira itd.
b) i c) U oba slučaja odgovor je jednom.
Diskusija:
Treba razlikovati zahtev za pristupom magistrali od zahteva za prekidom. Zahtev za
pristupom magistrali DMA kontroler mora da uputi procesoru (ili posebnom arbitratoru) pre
prenosa jednog svakog pojedinačnog podatka (u cycle stealing režimu rada) ili celog bloka
podataka (u burst režimu).
Zahtev za prekidom DMA kontroler može (ako mu je zadato pri inicijalizaciji) da uputi
procesoru posle prenosa kompletnog bloka podataka nezavisno od režima rada (cycle stealing
ili burst).
21
Ova dva zahteva na različit način se tretiraju od strane procesora. Arbitracija na magistrali
vrši se u potpunosti hardverski pre svakog iniciranja ciklusa na magistrali od strane procesora ili
DMA kontrolera što se može desiti i više puta u toku izvršavanja jedne procesorske instrukcije.
U slučaju zahteva za prekidom, procesor takav zahtev detektuje na kraju izvršenja instrukcije
i po se potrebi preduzima programska akcija (izvršavanje prekidne rutine—tipično zaustavljanje
DMA kontrolera i periferije) u odgovoru na takav zahtev.

Zadatak 3

Računarski sistem poseduje dvoadresni procesor sa memorijski mapiranim ulazom-izlazom,


dve periferije PER1 i PER2 sa kojima su povezani DMA kontroleri DMAC1 i DMAC2
respektivno. Adrese registara su prikazan na slici 1.2.10.
PER1 PER2 DMAC1 DMAC2
CONTROL E100 E200 DMACONTROL F100 F200
DATA E101 E201 DMAADDRESS F101 F201
STATUS E102 E202 DMACOUNT F102 F202
DMADATA F103 F203
DMASTATUS F104 F204

Slika 1.2.10. Adrese relevantnih registara kontrolera periferija PER1 i PER2 i DMA kontrolera
DMAC1 i DMAC2.

U upravljačkim registrima periferija i DMA kontrolera bit 0 je Start, bit 1 smer prenosa (1—
ulaz), bit 2 je Interrupt Enable (dozvola prekida). Dodatno, bit 3 upravljačkih registara DMA
kontrolera je bit režima rada (1—burst, 0—cycle stealing). Potrebno je, korišćenjem DMA
prenosa, učitati sa PER1 blok od 100h podataka i smestiti u memoriju od adrese 0h, a zatim isti
blok podataka iz memorije poslati na PER2. Za vreme učitavanja podataka procesor izvršava
potprogram OBRADA (poziva se sa CALL OBRADA) nezavistan od učitanih podataka, čije
izvršavanje može da traje kraće od učitavanja podataka. Upis na PER2 treba obaviti u burst
režimu. Napisati glavni program i potrebne prekidne rutine za ostvarivanje prenosa.
Napomene:
1. Svi načini adresiranja dozvoljeni su za izvorišni i odredišni operand instrukcije osim
neposrednog adresiranja za odredišni operand.
2. Pri prekidu se hardverski čuvaju na steku PC, PSW i svi registri opšte namene.
Rešenje:
Traženi program i prekidne rutine su sledeći:
Glavni program je prikazan na slici 1.2.11.
INTD ;onemogućavanje prekida
MOV #3H, E100H ;CONTROL1 (Start = 1, Smer = 1, Enable = 0)
MOV #0H, F101H ;inicijalizacija DMAADDRESS1
MOV #100H, F102H ;inicijalizacija DMACOUNT1
MOV #7H, F100H ;(Start = 1, Smer = 1, Enable = 1, Rezim = 0)
MOV #0H, MemSem ;inicijalizacija semafora
INTE ;omogućavanje prekida
CALL OBRADA ;obrada ide paralelno sa ulazom
LOOP1: TST MemSem, #1H ;da li je semafor jednak 1 ?
JPNZ LOOP1 ;ako nije čekaj
INTD ;onemogućavanje prekida
MOV #1H, E200H ;CONTROL2 (Start = 1, Smer = 0, Enable = 0)
MOV #0H, F201H ;inicijalizacija DMAADDRESS2

22
MOV #100H, F202H ;inicijalizacija DMACOUNT2
MOV #0DH, F200H ;(Start = 1, Smer = 0, Enable = 1, Rezim = 1)
MOV #0H, MemSem ;inicijalizacija semafora
INTE ;omogućavanje prekida
LOOP2: TST MemSem, #1H ;da li je semafor jednak 1?
JPNZ LOOP2 ;ako nije čekaj
HALT ;kraj programa

Slika 1.2.11. Glavni program.

Prekidna rutina za DMAC1 je prikazana na slici 1.2.12.


AND #FFFEH, E100H ;zaustavljanje PER1
AND #FFFEH, F100H ;zaustavljanje DMAC1
MOV #1H, MemSem ;ažuriranje semafora
RTI ;povratak iz prekidne rutine

Slika 1.2.12. Prekidna rutina DMA kontrolera DMAC1.

Prekidna rutina za DMAC2 je prikazana na slici 1.2.13.


AND #FFFEH, E200H ;zaustavljanje PER2
AND #FFFEH, F200H ;zaustavljanje DMAC2
MOV #1H, MemSem ;ažuriranje semafora
RETI ;povratak iz prekidne rutine

Slika 1.2.13. Prekidna rutina DMA kontrolera DMAC2.

Na početku programa zadaje se režim rada i startuje periferija PER1, inicijalizuju se registri
početne adrese DMAADDRESS i broja podataka DMACOUNT i zadaje režim rada i startuje
DMAC1. Primetiti da je prekid dozvoljen samo DMA kontroleru, ne i kontroleru periferije.
DMA kontroler prekidom obaveštava procesor da je završio prenos kompletnog bloka podataka;
tada se u okviru odgovarajuće prekidne rutine, zaustavljaju PER1 i DMAC1 i semaforom
signalizira glavnom programu da je prenos završen.
Dok DMAC1 obavlja učitavanje bloka podataka u memoriju u cycle stealing režimu,
procesor izvršava potprogram glavnog programa pod nazivom OBRADA. Primetiti da DMA
kontroler obavlja transfer potpuno nezavisno od procesora. Pošto po uslovu zadatka OBRADA
može da traje kraće od učitavanja, potrebno je u glavnom programu obezbediti sačekivanje kraja
učitavanja pre nego što se pređe na realizaciju izlaza. To se postiže ispitivanjem memorijske
promenljive (semafora) MemSem koja se postavlja na 1 u prekidnoj rutini. Procesor se dakle,
kada završi proceduru OBRADA, za vreme učitavanja preostalih podataka vrti u petlji koju čine
instrukcija označena labelom LOOP1 i naredna instrukcija sve dok ne bude prekinut od strane
prekidne rutine i, posle povratka u glavni program, ne izađe iz petlje.
Po obavljenom ulazu u glavnom programu inicijalizuju se PER2 i DMAC2 za realizaciju
izlaza. DMAC2 obavlja izlaz u burst režimu, dakle kada jednom preuzme sistemsku magistralu
procesor praktično čeka dok DMAC2 ne završi kompletan transfer i ne oslobodi magistralu. S
obzirom da, pre nego što počne izlazni transfer, procesor može da izvrši još (neodređen) broj
instrukcija dok PER2 ne postane spremna, potrebno je i u ovom slučaju uvesti sinhronizaciju
semaforom.
Diskusija:
Obratiti pažnju na sledeće detalje izloženog rešenja:
Registre DMAADDRESS i DMACOUNT treba inicijalizovati pre startovanja DMA
kontrolera. Dobra praksa je da se u okviru inicijalizacije zabrane maskirajući prekidi čime se
programer oslobađa razmišljanja da li MemSem treba da inicijalizuje pre startovanja DMA
kontrolera itd.

23
U okviru prekidne rutine ne bi bilo potrebno programski čuvati registre opšte namene (npr. na
steku instrukcijama PUSH ….) čak i da su u okviru prekidne rutine korišćeni jer se oni, po
uslovu zadatka, hardverski (tj. u okviru mikroprograma za opsluživanje prekida) čuvaju. Iz istog
razloga semafor ne može biti smešten u registar opšte namene jer se njegova promena u okviru
prekidne rutine anulira po izlasku iz rutine.

Zadatak 4

Jednoadresni procesor sa razdvojenim adresnim prostorima, memorija, periferija PER0 sa


pridruženim kontrolerom za direktan pristup memoriji DMA, i periferija PER1 povezani su
sitemskom magistralom sa 16-bitnom adresnom i 16-bitnom magistralom podataka. Adresiranje
je na nivou 16-bitnih reči. Adrese relevantnih registara su prikazane na slici 1.2.14.
DMA_CONTROL FF00h PER0_CONTROL FF10h
DMA_ADDRESS FF01h PER0_STATUS FF11h
DMA_COUNT FF02h PER0_DATA FF12h
DMA_DATA FF03h PER1_CONTROL FF20h
DMA_STATUS FF04h PER1_STATUS FF21h
PER1_DATA FF22h
Slika 1.2.14. Adrese relevantnih registara DMA kontrolera i kontrolera periferija PER0 i PER1.

U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 1 određuje
smer operacije (0—ulaz, 1—izlaz), bit 2 je Enable kojim se dozvoljava prekid. Bit 3
upravljačkog registra DMA kontrolera zadaje režim rada (0—Burst, 1—ciklus po ciklus).
Napisati glavni program i odgovarajuće prekidne rutine kojima se: blok 100h reči učitava sa
PER0 i smešta u memoriju počev od adrese 1000h, zatim izvrši obrada unetih podataka pozivom
procedure Obrada i potom vrši prenos obrađenog bloka (dužina i početna adresa bloka ostaju
iste) iz memorije u PER1. Ulaz realizovati korišćenjem DMA kontrolera u burst režimu, a izlaz
mehanizmom prekida.
Rešenje:
Svi mehanizmi ulazno/izlaznih operacija opisani su detaljno u prethodnim zadacima.
Glavni program je prikazan na slici 1.2.15.
LOAD #1000h ;Ulaz sa PER0 preko DMA
OUT FF01h
LOAD #100h
OUT FF02h
LOAD #0
STORE mSem
LOAD #05h
OUT FF00h
LOAD #01h
OUT FF10h
….
Wait: LOAD mSem
CMP #1
JNZ Wait
CALL Obrada ;Obrada
LOAD #1000h ;Izlaz na PER1
STORE mSrc
LOAD #100h
STORE mCnt
LOAD #0
STORE mSem
LOAD #07h

24
OUT FF20h
….
End: LOAD mSem
CMP #1
JNZ End
HALT

Slika 1.2.15. Glavni program.

Prekidna rutina DMA kontrolera je prikazana na slici 1.2.16.


Dmac: LOAD #0
OUT FF00h
OUT FF10h
INC
STORE mSem
RTI

Slika 1.2.16. Prekidna rutina DMA kontrolera.

Prekidna rutina periferije PER1 je prikazana na slici 1.2.17.


Per1: LOAD (mSrc)
OUT FF22h
INC mSrc
DEC mCnt
JNZ Back
LOAD #0
OUT FF20h
INC
STORE mSem
Back: RTI

Slika 1.2.17. Prekidna rutina periferije PER1.

Zadatak 5

Jednoadresni procesor sa razdvojenim adresnim prostorima, memorija, periferija PER0,


kontroler za direktan pristup memoriji DMA, i periferija PER1 povezani su sitemskom
magistralom sa 16-bitnom adresnom i 16-bitnom magistralom podataka. Adresiranje je na nivou
16-bitnih reči. Adrese relevantnih registara su prikazane na slici 1.2.18.
DMA_CONTROL FF00h PER0_CONTROL FF10h
DMA_SRCADDR FF01h PER0_STATUS FF11h
DMA_DSTADDR FF02h PER0_DATA FF12h
DMA_COUNT FF03h PER1_CONTROL FF20h
DMA_DATA FF04h PER1_STATUS FF21h
DMA_STATUS FF05h PER1_DATA FF22h
Slika 1.2.18. Adrese relevantnih registara DMA kontrolera i kontrolera periferija PER0 i PER1.

U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 4 je


Enable kojim se dozvoljava prekid, a biti 6 i 5 određuju vrstu prenosa (10—iz periferije u
memoriju, 01—iz memorije u periferiju, 11—iz memorije u memoriju). Bit 7 upravljačkog
registra DMA kontrolera zadaje režim rada (0—Burst, 1—ciklus po ciklus). U statusnim
registrima bit 0 je Ready bit. Napisati glavni program i odgovarajuće prekidne rutine kojima se:
blok 200h reči učitava sa PER0 i smešta u ulazni bafer u memoriji koji počinje od adrese 0h,
zatim podaci prenesu u izlazni bafer u memoriji koji počinje od adrese 1000h, i potom podaci iz
izlaznog bafera prenose na periferiju PER1. Ulaz sa periferije realizovati mehanizmom prekida,

25
prenos između bafera korišćenjem DMA kontrolera u režimu prenosa reč po reč, a izlaz
realizovati ispitivanjem bita spremnosti.
Rešenje:
U ovom slučaju DMA kontroler služi za prenos bloka podataka sa jednog mesta u memoriji
na drugo. Time se procesor oslobađa da može da radi neki nezavisni posao. DMA kontroler sam
obavlja ovu jednostavnu operaciju. Ostali mehanizmi ulaza i izlaza opisani su detaljno u
prethodnim zadacima.
Za operaciju prenosa bloka sa jednog mesta u memoriji na drugo, DMA kontroler se
inicijalizuje na sličan način kao i kod ulaza ili izlaza, samo što se odgovarajućim bitima 6 i 5
kontrolnog registra specifikuje vrsta prenosa i što se inicijalizuju dva adresna registra: jedan
ukazuje na izvorišni, a drugi na odredišni blok.
Glavni program je prikazan na slici Error: Reference source not found.
LOAD #200h ;Ulaz sa PER0
STORE MemCnt
LOAD #0h
STORE MemAdr
STORE IBSem
LOAD #51h
OUT FF10h
….
Wait1: LOAD IBSem
CMP #1
JNZ Wait1
LOAD #0 ;Prenos preko DMA
OUT FF01h
LOAD #1000h
OUT FF02h
LOAD #200h
OUT FF03h
LOAD #0
STORE OBSem
LOAD #F1h
OUT FF00h
….
Wait2: LOAD OBSem
CMP #1
JNZ Wait2
LOAD #200h ;Izlaz na PER1
STORE MemCnt
LOAD #1000h
STORE MemAdr
LOAD #21h
OUT FF20h
Wait3: IN FF21h
AND #1
JZ Wait3
LOAD (MemAdr)
OUT FF22h
INC MemAdr
DEC MemCnt
JNZ Wait3
LOAD #0
OUT FF20h
HALT

Slika 1.2.19. Glavni program.

Prekidna rutina DMA kontrolera je prikazana na slici 1.2..

26
DmaInt: LOAD #0
OUT FF00h
INC
STORE OBSem
RTI

Slika 1.2.20. Prekidna rutina DMA kontrolra.

Prekidna rutina periferije PER0 je prikazan na slici 1.2..


Per0Int: IN FF12h
STORE (MemAdr)
INC MemAdr
DEC MemCnt
JNZ Back
LOAD #0
OUT FF10h
INC
STORE IBSem
Back: RTI

Slika 1.2.21. Prekidna rutina periferije PER0.

Zadatak 6

Jednoadresni procesor sa memorijski preslikanim ulazno/izlaznim adresnim prostorom,


memorija, periferija PER0 sa pridruženim kontrolerom za direktan pristup memoriji DMA, i
periferije PER1 i PER2 povezani su sitemskom magistralom sa 16-bitnom adresnom i 16-bitnom
magistralom podataka. Adresiranje je na nivou 16-bitnih reči. Adrese relevantnih registara su
prikazan na slici 1.2..
DMA_CONTROL FF00h PER1_CONTROL FF20h
DMA_ADDRESS FF01h PER1_STATUS FF21h
DMA_COUNT FF02h PER1_DATA FF22h
DMA_DATA FF03h PER2_CONTROL FF30h
DMA_STATUS FF04h PER2_STATUS FF31h
PER0_CONTROL FF10h PER2_DATA FF32h
PER0_STATUS FF11h
PER0_DATA FF12h
Slika 1.2.22. Adrese relevantnih registara DMA kontrolera i kontrolera periferija PER0, PER1 i
PER2.

U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 1 određuje
smer operacije (0—ulaz, 1—izlaz), bit 2 je Enable kojim se dozvoljava prekid, a u statusnim
registrima bit 4 je Ready koji signalizira spremnost kontrolera. Bit 3 upravljačkog registra DMA
kontrolera zadaje režim rada (0—Burst, 1—ciklus po ciklus). Napisati glavni program i
odgovarajuće prekidne rutine kojima se: blok 200h reči učitava sa PER0 i smešta u memoriju
počev od adrese 1000h, zatim izvrši obrada unetih podataka pozivom procedure Obrada i potom
istovremeno vrši prenos obrađenog bloka (dužina i početna adresa bloka ostaju iste) iz memorije
u PER1 i PER2. Ulaz realizovati korišćenjem DMA kontrolera u burst režimu, izlaz na periferiju
PER1 mehanizmom prekida, a izlaz na periferiju PER2 ispitivanjem bita spremnosti.
Rešenje:
Ulazna operacija realizovana je korišćenjem DMA kontrolera na uobičajeni način. Dve
izlazne operacije treba da se izvršavaju uporedo, što znači da se za vreme dok se u glavnom
programu vrši prenos na PER2 ispitivanjem bita spremnosti, generišu prekidi od PER1, u čijim
se prekidnim rutinama obavlja prenos jedne po jedne reči na PER1. Na ovaj način se paralelizuje
rad dve periferije i njihovih kontrolera, dok sam prenos iz memorije u kontrolere periferija vrši

27
procesor. Iako nema paralelizacije ovog prenosa iz memorije u kontrolere periferija (jer sve radi
procesor, nešto u glavnom programu, a nešto u prekidnoj rutini), postiže se nezavisnost rada dve
periferije, jer se ničime ne uslovljava međusobni redosled operacija prema njima. Štaviše, greška
bi bilo na bilo koji način međusobno uslovljavati tokove i redosled operacija sa ove dve
periferije. Traženi program je prikazan na slikama 1.2.17, 1.2.18 i 1.2.19.
LOAD #200h
STORE FF02h
LOAD #1000H
STORE FF01h
LOAD #0
STORE MemSem0
LOAD #1
STORE FF10h ;Start PER0
LOAD #5
STORE FF00h ;Start DMA
….
Wait: LOAD memSem0
CMP #1
JNZ Wait
CALL Obrada
LOAD #200h
STORE MemCnt1
STORE MemCnt2
LOAD #1000h
STORE MemAdr1
STORE MemAdr2
LOAD #0
STORE MemSem1
LOAD #7
STORE FF20h ;Start PER1
LOAD #3
STORE FF30h ;Start PER2
Loop2: LOAD FF31h
AND #10h
JZ Loop2
LOAD (MemAdr2)
STORE FF32h
INC MemAdr2
DEC MemCnt2
JNZ Loop2
LOAD #0
STORE FF30h
End: LOAD MemSem1
CMP #1
JNZ End
HALT

Slika 1.2.17. Glavni program.


Dma_Int: LOAD #0
STORE FF00h
STORE FF10h
LAOD #1
STORE MemSem0
RTI

Slika 1.2.18. Prekidna rutina DMA kontrolera


Per1_Int: LOAD (MemAdr1)
STORE FF22h
INC MemAdr1
DEC MemCnt1

28
JNZ Back
LOAD #0
STORE FF20h
LOAD #1
STORE MemSem1
Back: RTI

Slika 1.2.19. Prekidna rutina kontrolera periferije PER1

Zadatak 7

Na ulaz zahteva za prekid IRQ dvoadresnog porocesora vezan je signal zahteva za prekid od
DMA kontrolera. DMA kontroler ima sledeće registre: i) upravljački registar (CR) na adresi
FF00h, sa bitom Enable Interrupt u razredu 0, bitom režima rada u razredu 1 (1—burst) i bitom
smera prenosa u razredu 2 (1—izlaz); ii) statusni registar (SR) vezan na istu adresu FF00h kao i
CR, sa bitom End of Operation u razredu 0, iii) adresni registar memorije (ARM) na adresi
FF01h, iv) registar dužine bloka (WCNT) na adresi FF02h v) adresni registar periferije (ARP) na
adresi FF03h u koji se upisuje adresa registra podataka kontrolera periferije. Svaki upis bilo koje
vrednosti na adresu FF04h znači pokretanje kontrolera periferije i DMA. DMA kontroler sa
periferijom razmenjuje podatke preko sistemske magistrale. Sinhronizacija između DMA i
periferije obavlja se preko signala DREQ koji povezuje direktno DMA i kontroler periferije.
Kada kontroler periferije ima spreman podatak ili je spreman da prihvati podatak, aktivira
DREQ. Kada DMA upiše ili pročita podatak iz kontrolera periferije, automatski se obara DREQ.
Registar podataka periferije koja je povezana na DMA nalazi se na adresi FFF0h.
a) Napisati deo glavnog programa kojim se inicijalizuje DMA za prenos bloka podataka sa
periferije u memoriju u cycle stealing režimu. Blok je dužine 100h i treba ga smestiti počev od
lokacije 50h.
b) Koliko ukupno ciklusa na magistrali obavlja DMA pri prenosu iz prethodne tačke?
c) Šta još treba da poseduje DMA da bi se umesto signala DREQ koristilo ispitivanje bita
spremnosti kontrolera periferije i to preko sistemske magistrale?
Rešenje:
DMA i kontroler periferije sada međusobno komuniciraju preko sistemske magistrale. To
znači da DMA kontroler vrši očitavanje registra podataka kontrolera periferije, ili upis podatka u
njega, u zavisnosti od smera prenosa, uobičajenim ciklusom na sistemskoj magistrali.
Sinhronizacija DMA i kontrolera periferije obavlja se posebnim signalima. Zbog ovoga je
potrebno da DMA kontroler poseduje adresu registra podataka kontrolera periferije jer će njemu
pristupati preko sistemske magistrale.
a) Traženi program je prikazan na slici 1.2.20.
LOAD R1, #50H ;ARM
OUT FF01H, R1
LOAD R1, #100H ;WCNT
OUT FF02H, R1
LOAD R1, #FFF0H ;ARP
OUT FF03H, R1
LOAD R1, #1 ;CR
OUT FF00H, R1
OUT FF04H, R1 ;Start

Slika 1.2.20. Deo glavnnog programa koji vrši inicijalizaciju prenosa.

29
b) DMA obavlja ukupno 200h ciklusa na magistrali, po dva za svaku prenesenu reč: jedan za
prenos iz periferije u DMA i jedan za prenos iz DMA u memoriju.
c) U ovom slučaju DMA i kontroler periferije više ne razmenjuju interno signale za
sinhronizaciju. Sada DMA ispituje spremnost kontrolera periferije očitavanjem njegovog
statusnog registra i to ponovo uobičajenim ciklusom na sistemskoj magistrali. To znači da DMA
u potpunosti izvršava proceduru prenosa podataka tehnikom ispitivanja bita spremnosti, baš kao
kada to radi procesor programiranim ulazom/izlazom.
Da bi ispitivao bit spremnosti u statusnom registru, DMA kontroler treba da zna: adresu
statusnog registra, položaj bita spremnosti u njemu, kao i vrednost ovog bita koja govori da je
kontroler spreman (1 ili 0). Zato DMA treba da poseduje registar u koji procesor upisuje adresu
statusnog registra kontrolera periferije i bite koji govore u kom razredu ovog statusnog registra
se nalazi Ready bit, kao i koja je njegova aktivna vrednost. Ovi biti mogu da budu i biti u
registru CR.

Zadatak 8

Jednoadresni procesor sa memorijski preslikanim ulazno/izlaznim adresnim prostorom,


memorija, periferija PER0 sa pridruženim kontrolerom za direktan pristup memoriji DMA, i
periferija PER1 povezani su sitemskom magistralom sa 16-bitnom adresnom i 16-bitnom
magistralom podataka. Adresiranje je na nivou 16-bitnih reči. Adrese relevantnih registara su
prikazane na slici 1.2.27.
DMA_CONTROL FF00h PER0_CONTROL FF10h
DMA_ADDRESS FF01h PER0_STATUS FF11h
DMA_COUNT FF02h PER0_DATA FF12h
DMA_DATA FF03h PER1_CONTROL FF20h
DMA_STATUS FF04h PER1_STATUS FF21h
PER1_DATA FF22h
Slika 1.2.27. Adrese relevantnih registara DMA kontrolera i kontrolera priferija PER0 i PER1.

U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 1 određuje
smer operacije (0—ulaz, 1—izlaz), bit 2 je Enable kojim se dozvoljava prekid, a u statusnim
registrima bit 4 je Ready koji signalizira spremnost kontrolera. Bit 3 upravljačkog registra DMA
kontrolera zadaje režim rada (0—Burst, 1—ciklus po ciklus). Napisati glavni program i
odgovarajuće prekidne rutine kojima se: učitava blok od 100 reči sa PER0 i smešta u memoriju
počev od adrese 1000, učitava blok od 100 reči sa periferije PER1 i smešta u memoriju počev od
adrese 2000 i šalje rezultujući niz C (C(i) = A(i)  B(i), i=0, …, 99) na periferiju PER1. Ulaz sa
PER0 realizovati korišćenjem DMA kontrolera koji radi u režimu ciklus po ciklus, ulaz sa PER1
korišćenjem mehanizma prekida, a izlaz ispitivanjem bita spremnosti. Ulaz sa PER0 i PER1 se
odvija uporedo, a rezultujući niz slati počev od poslednjeg elementa. Niz C ne treba smeštati u
memoriju, već samo poslati na izlaz.
Rešenje:
Niz C nije potrebno smeštati u memoriju, već je dovoljno izračunati jedan po jedan C(i) i
direktno ih slati na izlaz. Kako se zahteva da se niz C šalje u obrnutom redosledu, neophodno je
najpre učitati sve elemente nizova A i B, pa tek posle završetka obe ulazne operacije započeti
izlaznu. Program je prikazan na slici 1.2.28, 1.2.29 i 1.2..
LOAD #100
STORE FF02h
STORE MemCnt
LOAD #1000H

30
STORE FF01h
LOAD #2000
STORE MemAdr1
LOAD #0
STORE MemSem0
STORE MemSem1
LOAD #1
STORE FF10h ;Start PER0
LOAD #D
STORE FF00h ;Start DMA
LOAD #5
STORE FF20h ;Start PER1
….
Wait: LOAD MemSem0
AND MemSem1
JZ Wait
LOAD #100
STORE MemCnt
LOAD #1099
STORE MemAdr0
LOAD #2099
STORE MemAdr1
LOAD #3
STORE FF20h ;Start PER1
Check: LOAD FF21h
AND #10h
JZ Check
LOAD (MemAdr0)
ADD (MemAdr1)
STORE FF22h
DEC MemAdr0
DEC MemAdr1
DEC MemCnt
JNZ Check
LOAD #0
STORE FF20h
HALT

Slika 1.2.28. Glavni program


Dma_Int: LOAD #0
STORE FF00h
STORE FF10h
LOAD #1
STORE MemSem0
RTI

Slika 1.2.29. Prekidna rutina DMA kontrolera


Per1_Int: LOAD FF22h
STORE (MemAdr1)
INC MemAdr1
DEC MemCnt
JNZ Back
LOAD #0
STORE FF20h
LOAD #1
STORE MemSem1
Back: RTI

Slika 1.2.30. Prekidna rutina kontrolera periferije PER1

31
2. Memorije
2.1 Preklapanje pristupa memorijskim modulima

Zadatak 2.1.1
Operativna memorija se sastoji od osam memorijskih modula, a kapacitet modula je
128 Kbajta, što čini totalni kapacitet memorije od 1 Mbajta. Širina reči operativne memorije je 1
bajt. Adresa operativne memorije je širine 20 bita, a njeni najstariji i najmlađi bitovi su označeni
sa A19 i A0, respektivno.
a) Nacrtati i opisati koji opseg adresa memorijskog adresnog prostora je dodeljen kom od
osam modula za četiri slučaja preklapanja pristupa modulima ako je broj modula specifikovan
sledećim bitovima adrese:
a1) A19 A18 A17
a2) A19 A18 A0
a3) A19 A1 A0
a4) A2 A1 A0
i pokazati za svaki od njih koji adresni bitovi formiraju adresu bajta unutar modula.
b) Objasniti da li preplitanje memorijskih modula ubrzava rad računara koji se sastoji od
procesora, operativne memorije, nekoliko periferija i magistrale, ali ne sadrži DMA kontrolere ili
druge procesore. U slučaju da
ubrzava, objasniti na koji način se to postiže,
ne ubrzava, objasniti zašto.
c) U slučaju računara koji se sastoji od četiri procesora, četiri DMA kontrolera, operativne
memorije sa preklapanjem pristupa memorijskim modulima kao što je opisano u zadatku i
asinhrone magistrale, postoji potreba za arbitracijom magistrale gde master prvo učestvuje u
arbitraciji, pa tek onda kada primi dozvolu od arbitratora magistrale sme da izvrši ciklus na
magistrali. Za opisani računar nacrtati i objasniti:
c1) paralelnu šemu arbitracije i
c2) serijsku šemu arbitracije.
c3) Arbitracija sledećeg mastera na magistrali se vrši dok trenutni master vrši ciklus na
magistrali. Objasniti kako se novi master magistrale sprečava da započne svoj ciklus na
magistrali sve dok tekući master ne završi svoj ciklus.
d) Za računar opisan u tački c) objasniti:
d1) Koje vrste ciklusa na magistrali postoje.
d2) Koliko dugo je magistrala zauzeta za vreme svakog od navedenih vrsta ciklusa.
d3) Koliko grupa linija postoje na magistrali i čemu svaka od njih služi za svaki tip ciklusa na
magistrali.
d4) Nacrtati i objasniti vremenske dijagrame svih signala na magistrali za sve tipove ciklusa
na magistrali.
Rešenje:
a)
a1) Adrese su raspoređene po memorijskim modulima na sledeći način:

32
0217 + 0
opseg adresa 0217 + 1
0217
do M0
0217 + (217 – 1)
0217 + (217 – 1)

1217 + 0
opseg adresa 1217 + 1
1217
do M1
1217 + (217 – 1)
1217 + (217 – 1)

6217 + 0
opseg adresa 6217 + 1
6217
do M6
6217 + (217 – 1)
6217 + (217 – 1)

7217 + 0
opseg adresa 7217 + 1
7217
do M7
7217 + (217 – 1)
7217 + (217 – 1)
Bitovi A16 do A0 specifikuju adresu unutar modula.
a2) Adrese su raspoređene po memorijskim modulima na sledeći način:
0218 + 0 0218 + 1
opseg adresa 0218 + 2 0218 + 3
0218
do M0 M1
0218 + (218 – 1)
0218 + (218 – 2) 0218 + (218 – 1)

1218 + 0 1218 + 1
opseg adresa 1218 + 2 1218 + 3
1218
do M2 M3
1218 + (218 – 1)
1218 + (218 – 2) 1218 + (218 – 1)

2218 + 0 2218 + 1
opseg adresa 2218 + 2 2218 + 3
2218
do M4 M5
2218 + (218 – 1)
2218 + (218 – 2) 2218 + (218 – 1)

3218 + 0 3218 + 1
opseg adresa 3218 + 2 3218 + 3

33
3218
do M6 M7
3218 + (218 – 1)
3218 + (218 – 2) 3218 + (218 – 1)
Bitovi A17 do A1 specifikuju adresu unutar modula.
a3) Adrese su raspoređene po memorijskim modulima na sledeći način:
0219 + 0 0219 + 1 0219 + 2 0219 + 3
opseg adresa 0219 + 4 0219 + 5 0219 + 6 0219 + 7
0219
do M0 M1 M2 M3
0219 + (219 – 1)
0219 + (219 – 4) 0219 + (219 – 3) 0219 + (219 – 2) 0219 + (219 – 1)

1219 + 0 1219 + 1 1219 + 2 1219 + 3


opseg adresa 1219 + 4 1219 + 5 1219 + 6 1219 + 7
1219
do M4 M5 M6 M7
1219 + (219 – 1)
1219 + (219 – 4) 1219 + (219 – 3) 1219 + (219 – 2) 1219 + (219 – 1)
Bitovi A18 do A2 specifikuju adresu unutar modula.
a4) Adrese su raspoređene po memorijskim modulima na sledeći način:
0220 + 0 0220 + 1 0220 + 6 0220 + 7
opseg adresa 0220 + 8 0220 + 9 0220 + 14 0220 + 15
0220 …
do M0 M1 M6 M7
0220 + (220 – 1)
0220 + (220 – 8) 0220 + (220 – 7) 0220 + (220 – 2) 0220 + (220 – 1)
Bitovi A19 do A3 specifikuju adresu unutar modula.
b) Memorija sa preklapanjem pristupa neče ubrzati rad računara. Ubrzanje se ne postiže zbog
toga što je procesor jedini master na magistrali. Naravno, ovo važi ako procesor nema keš
memoriju ili protočnu obradu.
c)
c1) U slučaju paralelne šeme arbitracije svaki master je spojen sa arbitratorom parom linija:
bus request i bus grant. Liniju bus request koristi master da pošalje zahtev za magistralu
arbitratoru magistrale. Liniju bus grant koristi arbitrator da pošalje dozvolu master-u. Arbitrator
magistrale prima zahteve (BRQ15 do BRQ0) od osam memorijskih modula, četiri DMA
kontrolera i četiri procesora. Linija BRQ15 ima najviši prioritet a linija BRQ0 najniži. Arbitrator
šalje šalje bus grant onom master-u koji ima najviši prioritet od svih koji su poslali bus request.

34
BRQ 15
memory
BGR
module 0 15


BRQ 8
memory
BGR
module 7 8

BRQ 7
DMA0 BGR 7

 arbiter
BRQ 4
DMA3 BGR 4

BRQ 3
processor
BGR
0 3


BRQ 0
processor
BGR
3 0

address data control


busy
lines lines lines
c2) U serijskoj šemi arbitracije master sa najvišim prioritetom uvek ima bus grant. Međutim,
ako mu nije potrebna magistrala on prosleđuje bus grant prvom master-u nižeg prioriteta. Ovaj
master se ponaša na isti način. Tako se grant prosleđuje od master-a najvišeg prioriteta ka
master-ima nižih prioriteta sve dok ga ne dobije onaj master koji ima bus request.
BGRIN 15
memory
module 0
BGROUT 15

BGRIN 8
memory
module 7
BGROUT 8
BGRIN 7
DMA0
BGROUT 7

BGRIN 4
DMA3
BGROUT 4
BGRIN 3
processor
0
BGROUT 3

BGRIN 0
processor
3
BGROUT 0
address data control
busy
lines lines lines

35
c3) Postoji signal na magistrali busy koji postavlja master koji trenutno ima ciklus na
magistrali. Signal je aktivan dog se ne završi ciklus na magistrali. Kada master dobije grant on
prvo proveri da li je signal busy aktivan. Ako je signal aktivan on čeka dok ne postane
neaktivan. Ako je neaktivan master, pošto ima grant, setuje signal busy, obavlja ciklus na
magistrali i na kraju resetuje signal busy.
d)
d1) Postoje tri tipa ciklusa na magistrali:
ciklus inicilajizacije operacije čitanja podatka,
ciklus upisa podatka i
ciklus vraćanja podatka.
d2) Za sva tri tipa ciklusa magistrala je zauzeta samo dok traje prenos relevantnih informacija
za taj ciklus iz registara master-a u registre slave-a.
d3) Postoje tri grupe linija:
adresne linije magistrale,
linije podataka magistrale i
upravljačke linije magistrale (RD, WR, DA, i FC).
Ove linije se koriste u sledećim ciklusima:
ciklus inicijalizacije operacije čitanja podatka
adresne linije magistrale—master šalje adresu lokacije čiji sadržaj treba očitati,
linije podtaka magistrale—master šalje svoj identifikator slave-u i
upravljačke linije magistrale—master šalje signal RD, a slave odgovara signalom FC
kada je prihvatio adresu i dentifikator;
address
data
RD
WR
FC
DA
ciklus upisa podatka
adresne linije magistrale—master šalje slave-u adresu lokacije gde se upisuje novi
sadržaj,
linije podtaka magistrale—master šalje podatak slave-u i
upravljačke linije magistrale—master šalje signal WR, a slave odgovara signalom FC
kada je prihvatio adresu i podatak;
address
data
RD
WR
FC
DA
ciklus vraćanja podatka
Ovaj tip ciklusa na magistrali je odgovor na ranije izvršen ciklus inicijalizacije čitanja
podatka. Slave iz tog ciklusa je sada master, a master slave.
adresne linije magistrale—master šalje identifikator slave-a,
linije podtaka magistrale—master šalje podatak slave-u i
upravljačke linije magistrale—master šalje signal DA slave-u identifikovanom
identifikatorom i slave odgovara signalom FC kada se prenos završi.

36
address
data
RD
WR
FC
DA

Zadatak 2.1.2

Memorijske adrese su širine 16 bita, širina magistrale podataka je 8 bita, adresiranje je


bajtovsko, a dvobajtni podaci se u memoriju smeštaju tako da je na nižoj adresi niži bajt.
Procesor operiše samo sa 16-bitnim celobrojnim veličinama (u daljem tekstu reč označava 16-
bitnu veličinu), i sve instrukcije su 16-bitne. Ulazno/izlazni adresni prostor je memorijski
preslikan. Vreme odziva memorije je neodređeno, magistrala je asinhrona.
a) Predložiti organizaciju operativne memorije sa preklopljenim pristupom memorijskim
modulima, pri čemu se računar sastoji samo od datog (jednog) procesora, operativne memorije,
periferija i jedne asinhrone magistrale. Precizno dati sledeće: broj memorijskih modula, način
adresiranja modula, način adresiranja lokacija unutar modula i raspored adresa po modulima.
Vreme odziva memorije je dovoljno puta veće od trajanja ciklusa na magistrali.
b) Da li je, za organizaciju iz prethodne tačke, neophodno da procesor, pri iniciranju čitanja iz
memorije, po linijama podataka šalje neku identifikaciju?
Ako jeste, koju identifikaciju treba da šalje, a ako nije, kako procesor može da zna na koji mu
zahtev memorija odgovara, u slučaju da moduli nisu potpuno jednaki po vremenu odziva?
c) Odgovoriti na ista pitanja iz tačke a), ako se između procesora i memorije postavi keš
memorija organizovana set-asocijativno na nivou bloka, sa 128 setova, 4 bloka u setu i
kapacitetom 8kB podataka.
Rešenje:
a) Kako procesor operiše samo sa 16-bitnim veličinam, magistrala podataka je 8-bitna, a
adresibilna jedinica je bajt, procesor uvek pristupa memoriji tako što se obraća dvema susednim
lokacijama, najčešće parnoj i sledećoj neparnoj. Ubrzanje se postiže ako se ova dva pristupa
preklope. Kako je to i jedini izvor ubrzanja, organizacija modula je sledeća: dva modula M0 i
M1, moduli se adresiraju bitom najmanje težine u adresi (A0), adresiranje unutar modula je
pomoću bita A15 do A1, a raspored adresa je takav da su u M0 sve parne, a u M1 sve neparne
adrese.
b) Kako je procesor jedini uređaj u sistemu koji inicira čitanje, nije potrebno da šalje svoju
identifikaciju prema memoriji. Dovoljno je da memorija, kada vraća podatak, vrati svoju
identifikaciju (broj modula, jedan bit u ovom slučaju), kako bi procesor znao da li je vraćeni bajt
sa parne ili neparne adrese, i to samo u slučaju da su vremena odziva modula M0 i M1 različita i
neodređena.
c) Veličina bloka je: (8kB/128)/4=16B. Kako se keš obraća memoriji tako što uvek pristupa
bloku od 16 susednih bajtova, to je organizacija modula sledeća: 16 modula M0…M15,
adresiranje modula je pomoću A3…A0, adresiranje unutar modula je pomoću A15…A4, a
adrese su raspodeljene na sledeći način (sve vrednosti su heksadecimalne):

37
M0: 0000,0010,0020,0030,….,FFF0
M1: 0001,0011,0021,0031,….,FFF1
….
Mi: 000i,001i,002i,003i,….,FFFi
….
M15: 000F,001F,002F,003F,….,FFFF

Zadatak 2.1.3

Procesor je dvoadresni. Adrese su širine 16 bita, a adresiranje je na nivou 16-bitnih reči.


Procesor poseduje registre za podatke D3…0 i adresne registre A3…0. Jedini način adresiranja
je registarsko indirektno, preko adresnih registara.
Projektuje se memorijski sistem sa preklapanjem pristupa modulima. Vreme pristupa modulu
(trajanje jednog čitanja ili upisa) je 100 ns. Kada procesor i modul komuniciraju, trajanje ciklusa
na magistrali je 15 ns. Moduli se organizuju tako da se pristup optimizuje za sekvencijalno
obraćanje memoriji.
a) Koliko (najviše) modula predlažete? Obrazložiti.
b) Prikazati način adresiranja modula i raspored adresa po modulima.
c) Koliko ciklusa na magistrali se obavi pri izvršavanju sledeće sekvence instrukcija?
Obrazložiti.
LOAD D0,A1 ; D0:=Mem[A1]
ADD D0,A2 ; D0:=D0+Mem[A2]
STORE D0,A2 ; Mem[A2]:=D0
Rešenje:
a) Najveći broj modula koji ima smisla instalirati dobija se ako se pretpostavi da se sve
uzastopne operacije upisa odnose na različite module, što je slučaj za optimalan sekvencijalni
pristup. Kada je to slučaj, onda procesor za vreme odziva prvog modula od 100 ns može inicirati
jor najviše 100/15=6 operacija u drugim modulima. Posle toga već može da se obrati istom,
prvom modulu jer je on završio sa operacijom, pa veći broj modula nema smisla. Prema tome,
najveći broj modula koji (teorijski) ima smisla je 7, što znači da treba instalirati 8 modula, kao
broj koji je prvi naredni stepen 2.
b) Za sekvencijalni pristup susedne adrese treba da budu u različitim modulima. Prema tome,
modul se adresira pomoću bita 2…0, biti 15…3 su interne adrese unutar modula, a adrese celog
adresnog prostora su raspodeljene tako da su u modulu Mi adrese koje daju ostatak i pri deljenju
sa 8.
c) Svaka operacija čitanja memorijske lokacije zahteva dva ciklusa na magistrali: jedan kojim
porocesor inicira zahtev memorijskom modulu, a drugi kojim modul vraća procesoru pročitani
podatak. Operacija upusa zahteva samo jedan ciklus. Dati segment programa ima tri operacije
čitanja instrukcija, dve operacije čitanja operanada (u prve dve instrukcije) i jednu operaciju
upisa. Prema tome, ukupan broj ciklusa na magistrali je 11.

Zadatak 2.1.4

Memorijske adrese su širine 32 bita, širina magistrale podataka je 16 bita, a adresiranje je na


nivou 16-bitnih reči. Između procesora i magistrale vezana je keš memorija organizovana
blokovski, sa veličinom bloka od 216 reči. Radi ubrzanja pristupa memoriji, memorija je
organizovana sa preklapanjem modula (memory inteleaving). Vreme odziva memorijskog

38
modula je toliko da se može obaviti inicijalizacija operacije u još 14 memorijskih modula posle
modula X od strane keš memorije, dok operacija u modulu X ne bude završena.
a) Predložiti broj memorijskih modula do kojih bi se preklapao pristup.
b) Predložiti raspored adresa po ovim modulima.
c) Kako se vrši prepoznavanje modula i kako se dobija interna adresa unutar modula?
Rešenje:
a) Keš pristupa memoriji blokovski, što znači da je pristup sekvencijalan do 2 16 reči. Najveći
broj modula koji ima smisla instalirati dobija se ako se pretpostavi da se sve uzastopne operacije
upisa odnose na različite module, što je slučaj za optimalan sekvencijalni pristup. Kada je to
slučaj, onda procesor za vreme odziva prvog modula može inicirati jor najviše 14 operacija u
drugim modulima. Posle toga već može da se obrati istom, prvom modulu jer je on završio sa
operacijom, pa veći broj modula nema smisla. Prema tome, najveći broj modula koji (teorijski)
ima smisla je 15, što znači da treba instalirati 16 modula, kao broj koji je prvi naredni stepen 2.
b) Susedne adrese su u susednim modulima, zbog sekvencijalnog (blokovskog) pristupa.
c) Najniža 4 bita adrese određuju broj modula, a ostali biti internu adresu unutar modula.

39

You might also like