Upload
others
View
20
Download
1
Embed Size (px)
Citation preview
1. Ocena performansi
1-1
Šta je arhitektura računara? Arhitektura računara opisuje pogled korisnika na računar. Skup naredbi, vidljivi registri, strukture kao što su tabele za upravljanje radom memorije, model za manipulaciju sa izuzecima, sve su to delovi arhitekture računara. Šta je organizacija računara? Organizacija računara opisuje implementaciju arhitekture koja je nevidljiva korisniku. Protočna struktura, transparentni keš, tabele koje se odnose na definiciju funkcije hardvera, TLB (translation look-aside buffer) - sve su to aspekti organizacije računara. Šta je procesor? Procesor opšte namene predstavlja konačni automat (finite state machine) koji izvršava instrukcije smeštene u memoriji. Stanje sistema definišu vrednosti koje se čuvaju u memorijskim blokovima zajedno sa vrednostima koje se čuvaju u određenim registrima koji su sastavni deo procesora. Svaka instrukcija definiše način na koji se stanje mašine menja a, takođe, i koju instrukciju treba izvršiti kao narednu.
Šta je računar sa memorisanim programom?
registri
instrukcije
FF...FF16
podaciadrese
instrukcije i podaci
memorija
procesor
heksadecimalneadrese
00...0016
Slika 1.1 Računar sa memorisanim programom
Računarski sistem kod koga se operacije kodirane u binarnoj formi smeštaju u memoriju a izvršavaju u definisanoj sekvenci zove se računar sa memorisanim programom (stored program computer) (Slika 1.1). Računari sa memorisanim programom često se zovu von Neumann-ovi računari.
1-2
Koji su osnovni blokovi von Neumann-ovog računara?
ulazni interfejs (i)
ulazni uredjaj (i)
uobičajeno skupljeni u jedinstvenu stazu podataka
izlazni uredjaj (i)
sekundarna memorija
procesor
glavna memorija izlazni interfejs
(i)
instrukcije i podaci
Slika 1.2 Osnovna struktura von Neumann-ovog računara
1. Memorija u kojoj se čuvaju instrukcije i podaci koji su potrebni instrukcijama
2. Ulazno/izlazni mehanizmi i periferni uređaji namenjeni za prenos podataka ka-, ili iz sistema
3. Procesor koga čine sledeća dva bloka: • Upravljačka jedinica - pribavlja instrukcije iz memorije, • Aritmetički procesor - obavlja specificirane operacije.
1-3
Ukazati na osnovne razlike između von Neumann-ovog i Harvard pristupa. Korišćenje iste memorije za podatke i instrukcije je ključna karakteristika von Neumann-ovih računara. Nasuprot ovakvom pristupu kod Harvard arhitekture (Slika 1.3), memorija u kojoj se čuvaju podaci je izdvojena od memorije u kojoj se čuvaju instrukcije. Kod ovakvog rešenja putevi za prenos podataka i instrukcija su izdvojeni. Korišćenje jedinstvene memorije za podatke i instrukcije dovodi do efikasnijeg korišćenja memorije i tipično je kao rešenje kod ranijih računarskih sistema. Savremeni RISC i DSP procesori koriste veći broj puteva (magistrala) za prenos podataka između procesora, memorije i U/I podsistema.
procesor
memorijapodataka
magistralaadresepodataka
magistralapodataka
memorijaza
instrukcije
magistralainstrukcija
magistralaadreseinstrukcija
ka spoljnojmemoriji
Slika 1.3 Pojednostavljena struktura Harvard arhitekture 1-4
Šta je MIPS i kako se odredjuje? Mera koja se često koristi za predstavljanje performansi računara je MIPS (milion instrukcija u sekundi). MIPS ukazuje na brzinu računara i izražava broj “prosečnih instrukcija” koje on izvršava u sekundi. Da bi ukazali na značenje prosečne instrukcije analizirajmo inverznu MIPS meru, a to je, vreme izvrešenja prosečne instrukcije. Vreme izvršenja prosečne instrukcije se može odrediti na osnovu učestanosti i vremena izvršenja svakog tipa instrukcija. Usvojimo: IF (instruction frequency) - učestanost pojavljivanja instrukcija u programu CPI (cycles per instruction) - vreme izvršenja instrukcije izraženo kao broj taktnih intervala za svaki tip instrukcije Ako usvojimo da taktni interval traje t nanosekundi, tada za vreme izvršenja instrukcije važi CPI*t nanosekundi. Prosečno vreme izvršenja programa se određuje kao:
( )∑=
k
1iCPUii T*CPI*IF
gde je i - tip instrukcije u okviru skupa instrukcija; k - ukupan broj instrukcija u repertoaru. Za MIPS važi:
( )1000
T*CPI*IF
1MIPS k
1iCPUii
×=
∑=
1-5
1-6
Koje se druge mere i faktori, pored MIPS-a i MFLOPS-a, koriste za dobijanje slike o sistemu? Najčešće korišćene mere su: (1) Propusnost procesora (throughput of a processor) je mera koja ukazuje na broj programa (zadataka ili zahteva) koje procesor može da izvrši po jedinici vremena. (2) Iskorišćenost procesora tiče se dela vremena u toku koga je procesor zauzet izvršenjem programa. U suštini, to je odnos između vremena zauzeća i ukupno proteklog vremena. (3) Vreme odziva (response time) predstavlja vremenski interval od trenutka kada se izda zahtev za opsluživanje, do trenutka kada se ta usluga obavi. Često vreme odziva se naziva i kružno vreme (turnaround time). (4) Memorijska propusnost (memory bandwidth) ukazuje na broj memorijskih reči kojima se u jedinici vremena može pristupiti. (5) Vreme pristupa memoriji (memory access time) predstavlja srednje vreme potrebno procesoru da pristupi memoriji, obično se izražava u nanosekundama (ns). (6) Obim memorije (memory size) je kapacitet memorije a izražava se u megabajtovima (Mbajtovi=MB). Na određeni način ova mera ukazuje na iznos podataka koji se može čuvati u memoriji.
1-7
Pored nabrojanih performansnih mera postoje i drugi faktori koji imaju uticaj na kvalitet računara, a to su: (a) Opštost - je mera koja određuje opseg aplikacija date arhitekture. Neke od arhitektura su dobre za naučne aplikacije a druge za poslovne. Arhitektura je marketinška ako podržava veći broj aplikacija. (b) Jednostavnost korišćenja je mera koja ukazuje koliko je ta arhitektura laka programeru sistema, kada on želi da je savlada i kada želi da napiše softver (kao što su operativni sistem ili kompilator) za tu arhitekturu. (c) Proširljivost je mera koja ukazuje koliko je lako da se nadgradi ta arhitektura, kao što je ugradnja većeg broja procesora, više memorije i veći broj U/I uređaja. (d) Kompatibilnost ukazuje koliko je data arhitektura kompatibilna sa prethodnim računarom iz iste familije. (e) Pouzdanost ukazuje na verovatnoću greške ili srednje vreme izmedju grešaka.
1-8
Zadatak 1.2 Ukazati kako se vrši poređenje performansi dvaju računara R1 i R2. Dobijeni rezultati koji se odnose na vremena izvršenja T1 i T2 dvaju različitih programa P1 i P2, na računaru R1 i R2, su sledeća:
program T1 T2 P1 8s 4s P2 3s 4s
Koja mašina je brža, za dati program, i za koliko? Odgovor Ako se određeni program izvršava na računaru Rx, tada između performansi te mašine i vremena izvršenja tog programa postoji sledeći odnos: PRx=1/ Tx gde su : PRx - performanse; Tx - vreme izvršenja. Ako imamo dva računara X i Y i ako su performanse računara X veće od performansi računara Y, tada važi : PRx > PRy ⇒ 1/ Tx > 1/ Ty ⇒ Ty > Tx Često, kada upoređujemo performanse dva računara, mi govorimo: "Rx je n puta brži od Ry", a to znači: PRx/PRy = Ty/ Tx = n U konkretnom slučaju imaćemo: a) za program P1
PR1/ PR2= 4/ 8 = 0,5 ⇒ R2 dva puta brži od R1; b) za program P2 PR1/ PR2= 4/ 3 = 1,33 ⇒ R1 za 1,33 puta brži od R2.
- Vreme koje je potrebno CPU-u da izvrši program?
cpCPU
CPU
t*CPI*NI=Tiodtaktni_perdibroj_sekun*
ainstrukcijlaih_intervabroj_taktn*
programukcijabroj_instrT =
gde je : NI - broj instrukcija u programu; CPI - broj taktnih intervala po instrukciji; tcp - vreme trajanja taktne pobude. Pri ovome imamo da je: • tcp - određeno od VLSI IC poluprovodničke tehnologije i
organizacije računara • CPI - zavisan od organizacije i skupa instrukcija arhitekture
CPU-a • NI - određen skupom instrukcija i tehnologijom kompilatora.
Osnovne komponente performansi CPU-a se izražavaju u sledećim jedinicama:
komponente performansi
jedinice mera
Tcpu sekunda NI broj instrukcija potreban da se
izvrši program CPI prosečan broj taktnih perioda po
instrukciji tcp broj sekundi po taktnom periodu
1-9
Vreme koje je potrebno CPU-u de izvrši program: TCPU=broj_taktnih_intervala_CPU-a_u_programu*tcp=N*tcp
Skup instrukcija čini veći broj različitih klasa instrukcija. Instrukcije koje pripadaju različitim klasama se izvršavaju za različito vreme.
N= ∑=
n
1iii NI*CPI
gde je : n - broj različitih klasa instrukcija; NIi - ukazauje na to koliko se broj puta instrukcija iz klase i izvršava u programu; CPIi - prosečno vreme izvršenja instrukcije iz klase i. Prema tome:
, cp
n
1iiiCPU t*NI*CPIT ⎟⎠
⎞⎜⎝
⎛= ∑
=
dok je
∑∑
=
=⎟⎟⎠
⎞⎜⎜⎝
⎛==
n
1i
ii
n
1iii
ukcijabroj_instrNI*CPI
ukcijabroj_instr
NI*CPICPI
1-10
Ukazati na definiciju Amdahl-ovog zakona u izvornom obliku. Povećanje performansi se može ostvariti poboljšanjem nekog dela računara (mašine). Amdahl-ov zakon definiše ubrzanje koje se ostvaruje kada se poboljša neki deo mašine tako da se i performanse te mašine povećaju.
jšanjeisti_poboloja_ne_kore_mašine_kperformansnjei_poboljšaoja_koriste_mašine_kperformansUbrzanje =
ili, alternativno:
boljšanjemšini_sa_porama_na_mašenja_progvreme_izvroboljšanjašini_bez_prama_na_mašenja_progvreme_izvrUbrzanje =
Kada se analizira program (zadatak), može se uočiti da postoje delovi koji se mogu usavršiti (ili se usavršavaju) i delovi koji se ne mogu usavršiti (ili se ne usavršavaju). Prema tome, ako vreme izvršenja programa označimo sa T, deo programa koji se može usavršiti sa Fpob, a ubrzanje sa Spob, tada:
( ) ⎟⎟⎠
⎞⎜⎜⎝
⎛+−=
SpobFpobFpob1*TstaroTnovo
Ukupno ubrzanje Suk predstavlja odnos vremena izvršenja Tnovo i Tstaro:
( )SpobFpobFpob1
1TnovoTstaroSuk
+−==
Ilustrcije radi, analizirajmo sledeća dva slučaja:
1-11
(I) Neka se usavršeni deo programa izvršava 10 puta brže od originalnog (neusavršenog). Za deo programa koji se može usavršiti u neusavršenom programu troši se 40% vremena. Ukupno ubrzanje Suk koje se postiže uvođenjem poboljšanja iznosi sada:
Fpob=0.4 Spob=10
561
6401
104060
1Suk ....
≈=+
=
(II) Neka se program na nekoj mašini izvršava za 100s, pri čemu se za operacije množenja troši 80s od tog vremena. Koliko puta treba ubrzati množenje ako želimo da se program izvršava pet puta brže.
( ) ⎟⎟⎠
⎞⎜⎜⎝
⎛+−=
SpobFpobFpob1TstaroTnovo
20=100((1-0.8)+0.8/Spob) 20=20+80/Spob
Ovaj rezultat ukazuje da ubrzanje izvršenja programa za pet puta nije moguće postići sa prihvatljivom vrednošću Spob (neprihvatljiva vrednost za Spob je ∞).
1-12
Zadatak 1.5 Neka postoje dve implementacije arhitektura sa istim skupom naredbi. Računar R1 karakteriše tcp1=1ns i CPI1=2.0, a računar R2 tcp2=2ns i CPI2=1.2. Koja mašina je brža za ovaj program i koliko?
Odgovor Obe mašine izvršavaju isti broj instrukcija u toku izvršenja programa i označimo ovaj broj sa k. Broj taktnih intervala Nx u toku izvršenja programa: a) za računar R1 iznosi:
N = NI ∗ CPI N1=k*2,0 b) za računar R2 iznosi N2=k*1,2 CPU-ovo vreme izračunavanja za svaki računar je: i) za računar R1: TCPU1=k*2,0*tcp1=k*2,0*1ns=2,0*k ns; ii) za računar R2: TCPU2=k*1,2*tcp2=k*1,2*2ns=2,4*k ns. Formiranjem odnosa:
1,2nsk *2,0nsk *2,4
Tcpu1Tcpu2
PR2PR1
===
Ovaj rezultat ukazuje da je računar R1 brži 1,2 puta od računara R2.
1-13
Zadatak 1.10 Neka su R1 i R2 dve različite implementacije istog skupa instrukcija. Skup instrukcija čine tri klase A, B, i C. Mašina R1 se taktuje frekvencijom 400 MHz a R2 sa 200 MHz. Prosečan broj ciklusa za svaku klasu instrukcija, za R1 i R2, prikazan je na Slici 1.11.
klasa CPIR1 CPIR2 C1isk C2isk C3is
A 4 2 30% 30% 50% B 6 4 50% 20% 30% C 8 3 20% 50% 20%
Slika 1.11 Prosečan broj ciklusa svake od klase instrukcija Napomena: Simbol C se odnosi na kompilator. C1(C2) kompilator mašine R1(R2). C1isk(C2isk) prosečan broj instrukcija date klase koje se dobijaju prevođenjem programa. C3 je treći kompilator. Broj instrukcija koje koriste kopilatori za dati program je identičan. Koristeći C1 (C2) na obe mašine R1 i R2, odrediti za koliko će biti brža R1(R2). Ako se isporučuje R1 (R2), koji kompilator treba koristiti?
∑=
⎟⎠⎞
⎜⎝⎛=
n
1i
ii NI
NI*CPICPI
iklaseuččešćprocenat−NINIi
Odgovor a) Ako se koristi C1, važi: CPIR1C1=0,3*4+0,5*6+0,2*8=5,8 CPIR2C1=0,3*2+0,5*4+0,2*3=3,2 TCPUR1C1=NI*CPIR1C1*tcpR1=NI*5,8/400⋅106
TCPUR2C1=NI*CPIR2C1*tcpR2=NI*3,2/200⋅106
⇒=⋅⋅
= 1110400851020023
6
6
,)/(.)/(.
TT
CPUR1C1
CPUR2C1 R1 je 1,1 puta brži od R2.
1-14
b) Ako se koristi C2, tada imamo: CPIR1C2=6,4 CPIR2C2=2,9
pri istim uslovima je: t cpR1 6
1400 10
=⋅ i t cpR2 6
1200 10
=⋅ .
Dobićemo da je R2 za 1,10 puta brži od R1. c) Ako se koristi simulator C3, tada: CPIR1C3=5,4 CPIR2C3=2,8 Pod istim uslovima koji važe za a) i b), dobićemo da je R1 za 1,04 puta brže od R2. Zbog toga, kada se koristi kompilator C3, treba isporučivati (kupovati) mašinu R1.
Zadatak 1.11 Zainteresovani smo za dve implementacije mašine, jedna sa-, a druga bez specijalnog FP hardvera. U toku izvršenja programa P učešće operacija je sledeće:
• FP množenje 10% • FP sabiranje 15% • FP deljenje 5% • Integer instrukcije 70%
MFP (machine with floating point) ima FP hardver i zbog toga može FP operacije implementirati direktno. Za svaku klasu instrukcije potreban je sledeći broj taktnih intervala:
• FP množenje 6 • FP sabiranje 4 • FP deljenje 20 • Integer instrukcije 2
1-15
MNFP (machine with no floating point) nema FP hardver i zbog toga mora emulirati FP operacije koristeći Integer instrukcije. Broj instrukcija tipa Integer, potreban za implementaciju svake od FP operacija, je sledeći:
• FP množenje -> 30, • FP sabiranje -> 20, • FP deljenje -> 50.
Obe mašine se taktuju na 100 MHz. a) Odredi native MIPS za obe mašine. Napomena:
610∗=
CPUTNIMIPS
610šenja*vreme_izvrukcijabroj_instrMIPSnative = ,
ili, alternativno:
610∗=
CPIf
MIPS cp
610CPI*osttanstaktna_učaMIPS =
b) Ako je MFP-u potrebno 300*106 instrukcija da bi izvršio program, koliko je Integer instrukcija potrebno MNFP-u da izvrši isti program. c) Ako je broj instrukcija MFP-a 300*106, za koje vreme se izvrši program P na MFP i MNFP mašini.
Odgovor a) CPIMFP=0,1*6+0,15*4+0,05*20+0,7*2=3,6
CPIMNFP=2
MIPSMFP= 6
6
106310100⋅⋅
, =27,8
MIPSMNFP=100 10
2 10
6
6
⋅⋅ =50
1-16
b) klasa
instrukcije učestanost kod MFP
broj kod MFP (u milionima)
broj kod MNFP
(u milionima)FP množenje 10% 30 30*30=900 FP sabiranje 15% 45 45*20=900 FP deljenje 5% 15 50*15=750 Integer instr. 70% 210 210 ukupno 100% 300 2760
1-17
c) s,,MFP 810827300
=== 66MFP
1
1010MIPSN
**T ,
s,*TMNFP 25550
102760 6
===MNFP
62
MIPS10N *
Zadatak 1.12 Neka je data mašina kod koje postoje tri klase instrukcija A,B i C i CPI sa merama datim na Slici 1.12.
klasa instrukcije CPI za klasu A 1 B 2 C 3
Slika 1.12 CPI za klase instrukcija Na osnovu merenja kôda istog programa za dva različita kompilatora, dobijeni su sledeći podaci (Slika 1.13):
broj instrukcija (109) za svaku klasu instrukcije
kôd A B C kompilator 1 5 1 1 kompilator 2 10 1 1
Slika 1.13 Broj instrukcija svake klase Neka je taktna frekvencija 500 MHz. Koja kôdna sekvenca će se izvršavati brže, shodno MIPS-ovima, a koja shodno vremenu izvršenja?
Odgovor
vreme_izvršenja= kvencijataktna_fre_intervaliovi_taktniCPU −
TCPU=N*tcp
N= ∑=
n
1iii NI*CPI
U konkretnom slučaju, kada je apliciran kompajler 1, važi: Nc1=(5*1+1*2+1*3)*109=10*109. Kada je apliciran kompajler 2, imamo: Nc2=(10*1+1*2+1*3)*109=15*109. Vreme izvršenja za odgovarajuće kompajlirane programe iznosi:
TCPUC1= s 2010*500
10*106
9
=
TCPUC2= s 3010*500
10*156
9
=
Na osnovu vremena izvršenja zaključujemo da kompilator generiše kraći program. Odredimo sada MIPS-ove za svaku verziju programa. 1-18
MIPS= 6CPU 10*T
ukcijabroj_instr
MIPSC1=( ) *
*5 1 1 10
20 10350
9
6
+ +=
MIPSC2=( ) *
*10 1 1 10
30 10400
9
6
+ +=
Interesantan zaključak koji se nameće je da kôd kompilatora 2 ima veći broj MIPS-ova ali se kôd kompilatora 1 izvršava za kraći vremenski period.
Zadatak 1.13 Pretpostavite da ste glavni projektant novog procesora. Dizajn procesora i kompilatora su okončani, ali ostaje da se donese odluka da li će se i dalje proizvoditi sadašnji dizajn ili je vredno potrošiti još dodatnog vremena da bi se rešenje poboljšalo. O ovom problemu ste diskutovali sa timom inžejnera hardverista i došli ste do zaključka da se mogu ponuditi sledeće opcije: (a) ne menjati rešenje - ovaj tip mašine naziva se Rosn. Njegova taktna frekvencija je 500 MHz, a merenja na simulatoru su dala sledeće rezultate:
1-19
klasa instrukcije CPI frekventnostA 2 40% B 3 25% C 3 25% D 5 10%
broj instrukcija = NI 0.4 NI 0.25 NI 0.25 NI 0.1 NI
(b) optimizovani hardver - tim projektanata hardvera je utvrdio da može poboljšati dizajn procesora, i povećati taktnu frekvenciju na 600 MHz. Poboljšani procesor zvaćemo Rpob. Merenja na simulatoru su dala sledeće rezultate:
klasa instrukcije
CPI frekventnost
A 2 40% B 2 25% C 3 25% D 4 10%
(1) Odrediti CPI za mašine Rosn i Rpob. (2) Odredi MIPS za Rosn i Rpob. (3) Koliko puta je brži Rosn u odnosu na Rpob (4) Tim projektanata kompilatora obavešten je o diskusiji koja se odnosi na poboljšanje mašine pa zbog toga predlaže da poboljša kompilator sa ciljem da poveća performanse. Kombinaciju: poboljšani kompilator plus bazna mašina zvaćemo Rkom. Dobijeni rezultati za poređenu verziju kompilatora su sledeći:
klasa instrukcije
procenat instrukcije koji se
izvršava u poređenju sa Rosn
A 90% B 90% C 85% D 95%
1-20
Ako Rosn izvršava 500 instrukcija klase A, tada će Rkom izvršavati 0,9*500=450 instrukcija klase A za isti program. Koliki je CPI za Rkom?
broj instrukcija 0.9∗0.4NI 0.9∗0.25NI 0.8925 ∗ NI 0.85∗0.25NI = NIkom 0.95∗0.1NI
(5) Koliko puta je brži Rkom u odnosu na Rosn? (6) Tim projektanata kompilatora ukazao je da je moguće implementirati kako hardverska, tako i kompilatorska
poboljšanja. Ovakav tip mašine zvaćemo Rhps. Koliko puta je brži Rhps u odnosu na Rosn?
∑=
⎟⎠⎞
⎜⎝⎛=
n
1i
ii NI
NI*CPICPI
iklaseuččešćprocenatpi ==NINIi
Odgovor (1) CPI za Rosn iznosi: CPIRosn=2*0,4+3*0,25+3*0,25+5*0,1=2,8 CPI za Rpob iznosi: CPIRpob=2*0,4+2*0,25+3*0,25+4*0,1=2,45 (2) MIPS za Rosn i Rpob: MIPSRosn=500/2,8=179 MIPSRpob=600/2,45=245 (3) S obzirom da su Rosn i Rpob iste arhitekture, moguće je izvršiti njihovo poređenje sa aspekta MIPS rejtinga:
41179254 ,
MIPSMIPS
Rosn
Rpob ==
(4) Ovaj problem se može rešiti na dva načina. Prvi se sastoji u sledećem: odredi se novi sastav instrukcija a zatim usklađuju frekvencije taktovanja. Kod drugog, određuje se novi (relativni) broj instrukcija i deli se CPI sa tim brojem. Koristićemo drugi pristup: odnos_instrukcija=0,9*0,4+0,9*0,25+0,85*0,25+0,1*0,95=0,8925. Sada se CPI određuje kao:
CPIkom= 1389250
950105850250390250390402 ,.
,*,*,*,*,*,*,*,*=
+++
1-21%
%
%
100N0.8925N0.40.9p
100N
N0.40.9p
001:pN:N0.40.9
A
komA
Akom
⋅⋅⋅⋅
=
⋅⋅⋅
=
=⋅⋅
(5) TCPURosn=osnosn
Rosn
fcp2,8*NI
fcpCPI*NI
=
TCPUkom=komkomkom
komkom
fcp2,5*NI
fcp3,1*0,89*NI
fcpCPI*NI
==
Pri fcphps = fcposn, imaćemo sledeći odnos performansi:
1215282
TT
PRosnPRkom
CPUkom
CPUosn ,,,===
(6) CPI za Rhps i Rosn se razlikuje, a za Rhps iznosi:
CPIhps= 72810
950104850250390250290402 ,,
,*,*,*,*,*,*,*,*=
+++.
Za odnos performansi se dobija:
515002260082 ,
MHz*,MHz*,
TT
PRosnPRhps
CPurhps
CPUosn ===
Zadatak 1.14 Propusnost magistrale (BW - bandwidth), se meri u MB/s i izračunava se kao:
BW= W*t1
cik
gde je: tcik - vreme trajanja ciklusa magistrale; W - obim magistrale u bajtovima. Neka je taktna frekvencija mikroprocesora 8088 5MHz-a, a memorijski ciklus, bez ubacivanja stanja čekanja, iznosi četiri taktna intervala. Odrediti propusnost magistrale pod uslovima: (a) da se ne vrši ubacivanje stanja čekanja; i (b) da se ubacuje jedno stanje čekanja.
1-22
Uporediti dobijene rezultate sa performansama koje se odnose na mikroprocesor 8086 pod istim uslovima.
Odgovor Magistrala podataka mikroprocesora 8088 je 8-bitna a memorijski ciklus je trajanja tcik=4*200ns=800ns.
a) BW8088= sMBBns
/,* 2511800
1=
Magistrala podataka mikroprocesora 8086 je 16-bitna, pa je:
BW8086= sMBBns
/,* 522800
1=
b) Pod uslovom da se vrši ubaciavanje jednog stanja čekanja, memorijski ciklus trajaće 5 taktnih intervala, tj. tcik=5*200ns=1000ns, a propusnost magistrale u tom slučaju iznosiće:
BW 80881
10001 1' * /= =
nsB MB s
BW 80861
10002 2' * /= =
nsB MB s
1-23
1-24
Ispitni zadaci Novembar 2002. - Zadatak 1 Neka je data arhitektura koja izvršava sledeće četiri instrukcije: Add, Mul, Mem, Branch. U Tabeli 1 prikazan je broj instrukcija koji se, za dati program, izvršava, broj ciklusa potreban za izvršenje svake od instrukcija, i ubrzanje koje se postiže ako se izvrši modifikacija samo tog tipa instrukcije. Rangirati poboljšanja za svaki tip instrukcije u zavisnosti od njihovog uticaja na ukupne performanse
Tabela 1 Tip
instrukcije broj
instrukcija vreme
izvršenja ubrzanje
Add 10*106 2 ciklusa 2,0 Mul 30*106 20 ciklusa 1,3 Mem 35*106 10 ciklusa 3,0
Branch 15*106 4 ciklusa 4,0 Napomena: Amdahl-ov zakon glasi ETnovo = ETstaro * ( FRneisk + ( FRisk / Spisk)) Gde je: ETnovo - novo vreme izvršenja; ETstaro - staro vreme izvršenja (pre primene inovacije); FRneisk - deo (frakcija) vremena (ne instrukcija) za koji se poboljšanja ne odnose; FRisk - deo vremena za koji se poboljšanja izvedena na mašini odnose; Spisk - ubrzanje koje postoji kada se poboljšanja koriste (ubrzanje koje se postiže za slučaj da se poboljšanja koriste celo vreme). Amdahl-ov zakon se može definisati korišćenjem ubrzanja kao
Sp = ( ETstaro / ETnovo) = 1 / ( FRneisk + ( FRisk / Spisk))
Odgovor 1: Da bi rešili ovaj problem potrebno je prvo izračunati broj ciklusa potreban da se izvrši program za svaku od instrukcija pre nego se obavi modifikacija svake od nabrojanih instrukcija, tj. odrediti FRisk, a zatim primeniti Amdahl-ov zakon. Množenjem broja instrukcija svakog tipa sa vremenom izvršenja po instrukciji dobija se broj ciklusa koji se troši za izvršenje svakog tipa instrukcija. U Tabeli 2 dati su rezultati izračunavanja. Tabela 2 tip instrukcije
broj instrukcija
vreme izvršenja
ubrzanje po tipu
broj ciklusa
deo (frakcija) ciklusa
Add 10*106 2 ciklusa 2,0 20*106 2% Mul 30*106 20 ciklusa 1,3 600*106 58% Mem 35*106 10 ciklusa 3,0 350*106 34% Branch 15*106 4 ciklusa 4,0 60*106 6%
ukupno 1030∗106 ciklusa
66
4
ST4N4
66
3
ST3N3
66
2
ST2N2
66
1
ST1N1
101521060
STT
106.116310350
STT
104613.110600
STT
101021020
STT
⋅=⋅
==
⋅=⋅
==
⋅=⋅
==
⋅=⋅
==
05.1985
10305135060020
1030)4(S
29.16.796
1030606.16160020
1030)3(S
15.1891
10306035061420
1030)2(S
01.110201030
60350600101030)1(S
==+++
=
==+++
=
==+++
=
==+++
=
Moguće je sada na osnovu Amdahl-ovog zakona proceniti performanse, tj. izračunati FRisk za svaki tip instrukcije i zameniti ga u izraz za
Sp = 1 / ( FRneisk + ( FRisk / Spisk)) 1-25
Rezultati izračunavanja su prikazani u Tabeli 3 Tabela 3 tip instrukc.
broj instrukc.
vreme izvršenja
ubrzanje po tipu
broj ciklusa
deo (frak.) ciklusa
ukupno ubrzanje
Add 10*106 2 ciklusa 2,0 20*106 2% 1.01 Mul 30*106 20 ciklusa 1,3 600*106 58% 1015 Mem 35*106 10 ciklusa 3,0 350*106 34% 1.29 Branch 15*106 4 ciklusa 4,0 60*106 6% 1.05 Januar-Februar 2003 - Zadatak 1 a) Pretpostavimo da se program izvršava na Acme II procesoru čija je taktna frekvencija 300 MHz. Na osnovu procenta učešća i broja ciklusa, koji su za svaku klasu instrukcija dati u Tabeli 1, odrediti veličine CPI i MIPS za dati program. Tabela 1
Klasa instrukcije Ućestanost (%) Broj ciklusa aritmetićko/logićke 40 1
Load 20 1 Store 10 2
Branches 20 3 Floating point 10 5
ukupno NI instrukcija
b) Ako optimizator eliminiše 30% aritmetičko/logičkih instrukcija (tj. 12% svih instrukcija), 30% Load instrukcija, i 20% floating-point instrukcija, odrediti ubrzanje koje se može postići optimizovanjem osnovnog programa.
1-26
Napomena: Amdahl-ov zakon glasi ETnovo = ETstaro * ( FRneisk + ( FRisk / Spisk))
Gde je: ETnovo - novo vreme izvršenja; ETstaro - staro vreme izvršenja (pre primene inovacije); FRneisk - deo (frakcija) vremena (ne instrukcija) za koje se poboljšanja ne odnose; FRisk - deo vremena za koje se poboljšanja izvedena na mašini odnose; Spisk - ubrzanje koje postoji kada se poboljšanja koriste (ubrzanje koje se postiže za slučaj da se poboljšanja koriste celo vreme). Amdahl-ov zakon se može definisati korišćenjem ubrzanja kao
Sp = ( ETstaro / ETnovo) = 1 / ( FRneisk + ( FRisk / Spisk)) c) Odrediti veličine CPI i MIPS za optimizovanu verziju programa i uporediti ih sa vrednostima koje su dobijene pod a) za osnovni (neoptimizovani) program? Odgovor 1: a) 91510320210120140 ......CPI =⋅+⋅+⋅+⋅+⋅=
915791300 ../MIPS ==
1-27
b) 17162191
5020106011209191 .
..
.....
TTUbrzanje
new
old ==⋅−⋅−⋅−
==
35p
%1000.8NI
NI0.28p
p:NI)3.01(4.0100%:NI0.8
A
A
A
=
⋅⋅
=
⋅−=⋅
5.17p
%1000.8NI
NI0.14p
p:NI)3.01(2.0100%:NI0.8
B
B
B
=
⋅⋅
=
⋅−=⋅
................
ukupno novih instrukcija - NIn 0.4(1-0.3)NI 0.2(1-0.3)NI 0.1NI 0.80NI=NIn 0.2NI 0.1(1-0.2)NI
c) Optimizacijom se smanjuje ukupan broj instrukcija za 20%, s obzirom da je 0.12+0.06+0.02=0.2. Zbog toga je neophodno množenje sa 1/(1-0.2) = 1/0.8, pa je nova tabela:
Klasa instrukcije Učestanost (%) Broj ciklusa
aritmetičko/logičke ( ) 358.0
3.0140=
− 1
Load ( ) 5.178.0
3.0120=
− 1
Store 5.128.0
10= 2
Branches 258.0
20= 3
Floating point ( ) 108.0
2.0110=
− 5
Na osnovu Tabele 2 za optimizovani program se dobija: CPI = 1.62/0.8= 2.025, MIPS= 300/2.025 = 148.1.
1-28
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
Mikroprocesor 8086 Definisanje pinova
2-1
Karakteristike mikroprocesora 8086
• 16-bit Arithmetic Logic Unit • 16-bit data bus (8088 has 8-bit data bus) • 20-bit address bus - 220 = 1,048,576 = 1 meg Adresa ukazuje na bajt u memoriji. Kod 8088 bajtovi se predaju 8-bitnoj magistrali podataka. Kod 8086 bajtovi sa parnih adresa idu na nižu polovinu magistrale podataka (bitovi 0-7) a bajtovi sa neparnih adresa idu na višu polovinu magistrale podataka (bitovi 8-15).
Blok dijagram mikroprocesora 8086
2-2
Registri jedinice za povezivanje na magistralu (BIU) i registri izvršne jedinice (EU)
ESCSSSDSIP
AH BH CH DH
ALBLCLDL
SPBPSID
FLAGS
AX BX CX DX
Extra Segment Code Segment Stack Segment Data Segment Instruction Pointer
Accumulator Base Register Count Register Data Register Stack Pointer Base Pointer Source Index RegisterDestination Index Register
BIU registers
EU registers
Carry flag
Parity flag
Auxiliary flag
Zero
Overflow
2-3
Direction
Interrupt enable
Trap
Sign6 are status flags 3 are control flag
Registarski model procesora 8086
2-4
CS
SS
DS
ES
Segment
BP
Index
SP
SI
DI
AH
BH
CH
DH DL
CL
BL
AL
General Purpose
Status and Control
Flags
IP
AX
BX
CX
DX
Organizacija memorije
00000
10000
20000
30000
40000
50000
60000
70000
80000
90000
A0000
B0000
C0000
D0000
E0000
F0000
8000:0000
8000:FFFF
seg ofs
8000:0250
0250
2-5
Određivanje fizičke adrese
Offset Value (16 bits)
Segment Register (16 bits) 0 0 0 0
Adder
2-6
Offset:
Physical Address (20 bits)
0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1
2 9
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Segment:
0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 Address:
2-7
Ukazati na osnovne razlike između LE i BE adresiranja. Osam bitova (jedan bajt) nije dovoljno za memorisanje velikih brojeva, pa se zbog toga veći broj uzastopnih bajtova koristi za memorisanje velikih brojeva. Na primer, 2 bajta se koriste za prezentaciju 16-bitnih brojeva, 4 bajta za 32-bitne brojeve, 8 bajtova za 64-bitne,... Kod LE (little endian) adresiranja adresa rezultantne reči zadaje se najnižom bajt adresom. Na primer, ako se za memorisanje 32-bitne reči koriste lokacije 100, 101, 102, i 103 adresa broja biće 100. Lokacija 100 se koristi za čuvanje LS bajta broja, 101 za bajt naredni po težini, itd. Kod BE (big endian) adresiranja, primera radi, lokacija 100 se koristi za memorisanje MS bajta broja, 101 za naredni manji po težini itd. Neki od procesora koriste LE adresiranje (tipično su to procesori iz familije Intel 8086, uključujući i Intel 486) a drugi BE adresiranje (tipičan primer je familija Motorola MC68000). Izbor adresiranja obično nije od značaja sa izuzetkom kada je potrebno preneti podatke izmedju jednog sistema i drugog, ili kada je potrebno manipulisati samo sa individualnim bajtovima broja.
Skicirati format instrukcije kod četvoro-, tro-, dvo-, jedno- i nulto-adresnih mašina. Formati instrukcija su prikazani na Slici 2.1. op-kôd adrese
2-8
operacija prvi operand
drugi operand
rezultat naredna adresa
a) četvoro-adresni format
operacija prvi operand
drugi operand
rezultat
b) tro-adresni format
operacija prvi operand
i
drugi operand
c) dvo-adresni format
operacija registar drugi operand
d) jedno-i-po-adresni format
operacija drugi operand
e) jedno-adresni format
operacija
f) nulto-adresni format
Slika 2.1 Formati instrukcija
Formiranje efektivne adrese operanda instrukcije
memorija
e)
RF polje
memorija
f)
RF polje
d)
opkôd
memorija
a)
b)
c)
e)
memorija
g)
RF polje memorija
h)
RF polje memorija
j)
memorija
opkôd adresa
adresa
operand
opkôd operand
operand
operand
opkôd operand
operand
operand
opkôd adresa
operand
registar
opkôd ofset
operand
opkôd adresa ofset
adresa operand
opkôd adresa baza
index operand
+
+
+
opkôd baza
+ operand+
registar
+1(-1)
i)
opkôd
Slika 2.2 : Načini adresiranja
registarsko direktno
implicitno
neposredno
memorijsko direktno
registarsko indirektno
memorijsko indirektno
PC relativno registarsko relativno
indeksno sa autoinkr./ dekrem.
bazno indeksno
2-9
2-10
Zadatak 2.3 Neka procesor koristi sledeće načine adresiranja Lda ADR ; direktno Lda #NADR ; neposredno Lda [ADR] ; indirektno Lda $ADR ; relativno, tj. M(ADR+PC) Lda (R1)ADR ; indeksno, tj. M(ADR+R1) Lda R1 ; registarsko Lda [R1] ; registarsko indirektno a) Koliko puta će se upravljačka jedinica obratiti memoriji u toku izvršenja instrukcije Add R1,[OP1]. Instrukciju Add čine dve reči. Prva reč specificira opkôd i adresu registra R1 a druga indirektnu adresu. b) Koliko puta će se upravljačka jedinica obratiti memoriji u toku izvršenja instrukcije bezuslovnog grananja Jmp [ADR1]. Instrukciju Jmp čine dve reči, prva je opkôd a druga indirektna adresa grananja. Odgovor (a) Da bi odgovorili na ovo pitanje pretpostavićemo sledeće: • opkôd instrukcije Add se nalazi na adresi A. • sadržaj lokacije A+1 neka je 1000. • na lokaciji M[1000] upisana je vrednost 2000 • na lokaciji M[2000] upisana je vrednost 150 • pre početka izvršenja instrukcije Add u registar R1 čuva se
vrednost 20. Sadržaj memorije i registra R1 pre i nakon izvršenja instrukcije je oblika:
.
.
.
.
.
. opkôd Add
1000 . . .
2000 . . .
150
20 170 +R1pre početka Add nakon završetka Add
R1
memorija adresa
A A+1
1000
2000
Da bi se izvršila instrukcija Add, upravljačka jedinica se obraća četiri puta memoriji i to : Prvi put kada pribavlja opkôd Add, drugi put kada čita indirektnu adresu (sadržaj lokacije A+1), treći put kada čita sadržaj lokacije M[1000] = 2000 (adresu na kojoj se nalazi operand), i četvrti put kada čita adresu operanda instrukcije (M(2000)=150) b) Pod sličnim uslovima, za instrukciju Jmp imaćemo:
.
. .
.
.
. opkôd Jmp
1000 . . .
2000 . . .
3500
3500 PC
nakon završetka instrukcije JMP[1000]
memorija adresa
A A+1
1000
2000
I u ovom slučaju upravljačka jedinica se obraća memoriji četiri puta.
2-11
Zadatak 2.4 Instrukcija koja je smeštena na adresama 250 i 251 je tipa "Load u Acc" kod koje je adresno polje ADR (ili neposredni operand NOPR) jednak 500. Vrednost PC-a pre pribavljanja ove instrukcije je 250 a nakon pribavljanja 252 (ukazuje na narednu instrukciju). Sadržaj registra R1 je 400, a u Acc se smešta rezultat koji se dobija izvršenjem instrukcije. Odrediti sadržaj registra Acc i efektivnu adresu za sledeće adresne načine rada ove instrukcije: a) direktni, b) neposredni, c) indirektni, d) relativni, e) indeksni, f) registarski, g) registarsko indirektni
.
.
.
opkôd modeADR ili NOPR=500
opkôd naredne instrukcije...
700...
800...
600...
300...
250251252
400
500
752
800
memorijaadrese
250PC
400R1
Acc
200...
900
Slika 2.8 : Izgled memorije i stanje PC-a, R1 i Acc pre izvršenja instrukcije Lda
Odgovor adr. nač. rada simbol. obeležav. registarski prenos efek. adr. sadrž. Acc direktni Lda ADR Acc ← M[ADR] 500 800 neposredni Lda #NOPR Acc ← NOPR 251 500 indirektni Lda [ADR] Acc ← M[M[ADR]] 800 300 relativni Lda $ADR Acc ← M[ADR+PC] 752 600 indeksni Lda (R1)ADR Acc ← M[ADR+R1] 900 200 registarski Lda R1 Acc ← R1 - 400 registarsko-indirektni
Lda [R1] Acc ← M[R1] 400 700
Slika 2.9 : Simbolička konvencija kod adresnih načina rada 2-12
Test pitanje 2.6 Usvojiti da je obim instrukcije 16-bitni, a operandi se specificiraju 6-bitnim poljem. Neka postoji k dvo-operandskih i n nulto-operandskih instrukcija. Koji je maksimalan broj jedno-operandskih instrukcija koji se može podržavati od strane mašine? Odgovor Za dvo-operandske instrukcije imećemo sledeći format:
4 6
opkod operand 1 operand 2
6
0 0 0 0
. . .1 1 1 0
k = 15 dvo-operandskih instrukcija
Kod jedno-operandskih instrukcija važiće format:
4 + 6
opkod operand
6
1 1 1 1 0 0 0 0 0 0
. . . .1 1 1 1 1 1 1 1 1 0
m = 63 jedno-operandske instrukcije
Kod nulto-operandskih instrukcija imaćemo format:
opkod
16
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0. . . .
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
m = 64 nulto-operandskeinstrukcije
Za rešavanje ovog problema korišćena je tehnika kodiranja sa proširenjem.
2-13
Zadatak 2.5 Sastavni deo staze podataka računara je RF polje koga čine 32 registra. Instrukcije PUSH i POP nisu implementirane, ali računar koristi sledeće registarsko indirektne načine rada: • registarsko indirektni + inkrementiranje: Lda+ Rm,Rn ; Rm ← M[Rn] ; Rn ← Rn+1 Sto+ Rm,Rn ; M[Rn] ← Rm ; Rn ← Rn+1 • dekrementranje + registarsko indirektno: Lda- Rm,Rn ; Rn ← Rn-1 ; Rm ← M[Rn] Sto- Rm,Rn ; Rn ← Rn-1 ; M[Rn] ← Rm Pokazati kako se ove instrukcije mogu iskoristiti sa ciljem da se obezbede ekvivalentne instrukcije tipa PUSH i POP koristeći se pri tome registrom R7 kao pokazivačem magacina. Napomena: m≠n, m=0,...,31, n=0,...,31, dodatno Rm i Rn mogu da specificiraju registre PC i PSW. Odgovor Instrukciju PUSH Rk kod najvećeg broja procesora čine sledeće aktivnosti:
SP pokazuje na punu lokaciju; smanji se vrednost SP za 1 i u praznu mem. lokaciju smešta se Rk
SP ← SP-1 M[SP] ← Rk a instrukciju POP Rk ← M[SP]
SP ← SP+1 Karakteristike ovakvog načina rada su sledeće: (a) magacin raste naniže (b) SP uvek pokazuje na punu lokaciju
2-14
2-15
(c) kod operacije PUSH pokazivač SP se prvo dekrementira a nakon toga smešta podatak u magacin. (d) kod operacije POP prvo se izbavlja podatak iz magacina a nakon toga se inkrementira SP. U konkretnom slučaju koristeći raspoložive naredbe Lda+, Sto+, Lda- i Sto- moguće je organizovati rad magacina koristeći sledeće instrukcije: • operacija PUSH Sto- Rm,R7 ; R7 ← R7-1 ; M[R7] ← Rm • operacija POP Lda+ Rm,R7 ; Rm ← M[R7] ; R7 ← R7+1
Zadatak 2.7 Neka su N, Z, V i C četiri markera uslova koji su sastavni deo PSW registra CPU-a, a uslovna grananja se obavljaju shodno Slikama 2.11-2.13.
tip grananja mnemonik Test uslov Branch if zero BZ Z=1 Branch if not zero BNZ Z=0 Branch if carry BC C=1 Branch if not carry BNC C=0 Branch if minus BN N=1 Branch if plus BNN N=0 Branch if overflow BV V=1 Branch if not overflow BNV V=0
Slika 2.11 : Instrukcije uslovnog grananja koje se odnose na slanje statusnog bita PSW registra
2-16
tip grananja mnemonik
uslov statusni bitovi
Branch if higher BH A>B C+Z=0 Branch if higher or equal BHE A≥B C=0 Branch if lower BL A<B C=1 Branch if lower or equal BLE A≤B C+Z=1 Branch if equal BE A=B Z=1 Branch if not equal BNE A≠B Z=0 Slika 2.12 : Instrukcije uslovnog grananja koje se odnose na
neoznačene brojeve *Napomena: Marker bit C u ovom slučaju odnosi se na pozajmljivanje (borrow bit)
tip grananja mnemonik
uslov statusni bitovi
Branch if greater BG A>B (N⊕V)+Z=0 Branch if greater or equal BGE A≥B N⊕V=0 Branch if less BL A<B N⊕V=1 Branch if less or equal BLE A≤B (N+V)+Z=1 Slika 2.13 : Instrukcije uslovnog grananja koje se odnose na
označene brojeve Program koji se izvršava na hipotetičkom računaru komparira dva neoznačena (označena) broja A i B obavljajući operaciju oduzimanje A-B i uz istovremeno ažuriranje stanja statusnih bitova. Neka je A=00110101 i B=11000100. (a) odrediti razliku i interpretirati binarni rezultat (b) ako su A i B neoznačeni brojevi odrediti vrednosti statusnih bitova C (borow) i Z (zero) (c) ako su A i B označeni brojevi odrediti vrednost statusnih bitova N (sign), Z (zero) i V (overflow)
(d) ukazati koje instrukcije uslovnog grananja iz slike 2.12 imaju uslov=istinit (True) (e) ukazati koje instrukcije uslovnog grananja iz slike 2.13 imaju uslov=istinit (True) Odgovor (a1) Algoritam za oduzimanje dva neoznačena n-bitna broja A i B osnove 2 čine sledeći koraci: (i) oduzima se umanjilac B od umanjenika A (ii) ako se na mesto MS bit pozicije ne javi "Borrow" tada je A≥B razlika je pozitivna a rezultat korektan. (iii) Ako se na mesto MS bit pozicije javi "Borrow" tada je B>A pa razliku B-A treba oduzeti od 2n a znak minus pridružiti rezultatu. Kada se javi pozajmljivanje imamo da je rezultat jednak A-B+2n, gde 2n predstavlja vrednost pozajmljivanja na MS bit poziciji. Umesto ovog rezultata, željeni moduo je B-A. On se može dobiti oduzimanjem prethodne formule od 2n, tj. 2n-(A-B+2n)=B-A U konkretnom primeru treba da oduzmemo sledeća dva binarna broja A=00110101 i B=11000100. Borrow 1 1 0 0 0 0 0 0 A 0 0 1 1 0 1 0 1 B - 1 1 0 0 0 1 0 0 početni rezultat 0 1 1 1 0 0 0 1
2-17
MS Borrow je 1 a to ukazuje da je potrebno izvršiti korekciju rezultata 28 1 0 0 0 0 0 0 0 0 -početni rezultat - 0 1 1 1 0 0 0 1 konačni rezultat - 1 0 0 0 1 1 1 1
(napomena : Do istog rezultata se dolazi formiranjem razlike B-A Borrow 0 0 1 1 1 1 1 1 B 1 1 0 0 0 1 0 0 A 0 0 1 1 0 1 0 1 konačni rezultat - 1 0 0 0 1 1 1 1
2-18
(Ovaj konačni rezultat je korektan) Alternativna operacija oduzimanja dva n-bitna neoznačena broja A i B se može obaviti na sledeći način: (j) dodaje se dvojični komplement umanjilaca B umanjeniku A. Ova operacija se izvršava na sledeći način: A+(2n-B)=A-B+2n. (jj) ako je A≥B, suma će generisati Carry na mesto MS bit pozicije, tj. 2n. Ovaj prenos se anulira (ne uzima u obzir) a ono što ostaje predstavlja rezultat A-B. (jjj) ako je A<B, suma neće generisati Carry na mestu MS bit pozicije i ona je jednaka 2n-(B-A), što predstavlja dvojični komplement od B-A. Korekcija se obavlja kao i u prethodnom slučaju (iii), uzimajući dvojični komplement sume i dopisivanjem znaka minus ispred. U konkretnom slučaju imaćemo: A = 0 0 1 1 0 1 0 1 dvojični komp. od B = 0 0 1 1 1 1 0 0 rezultat_ime = 0 1 1 1 0 0 0 1 Ne postoji prenos na MS bit poziciji pa je zbog toga potrebno izvršiti korekciju rezultata rezultat_ime na sledeći način u konačni kon_rezultat. kon_rezultat=-(dvojični komplement od 01110001)=- 10001111 (a2) oduzimanje dva označena broja kada se za negativne brojeve koristi notacija dvojičnog komplementa obavlja se shodno
sledećem postupku: uzima se dvojični komplement umanjilaca (uključujući i bit znaka) i dodaje se umanjeniku (uključujući i bit znaka). Carry koji se javlja na izlazu bita za znak ne uzima se u obzir. Suština procedure se sastoji u tome da se operacija oduzimanja može promeniti u operaciju sabiranja ako se promeni znak umanjilaca. Naime, (±A)-(+B)=( ±A)+(-B) (±A)-(-B)=( ±A)+(+B) Promena pozitivnog broja u negativni lako se izvodi uzimanjem njegovog dvojičnog komplementa. Obrnuta operacija je takođe jednostavna, jer komplement negativnog broja koji je već u komplementarnoj formi generiše pozitivni broj. 8-bitni označeni brojevi u dvojičnom komplementu se nalaze u opsegu od -128 do +127. Logika za detekciju Overflow oblika je kao na Slici 2.14.
n n
n
CinCn-1
Cn
V
C
BA
F
Slika 2.14 : Logika za Carry i Overflow
U konkretnom slučaju imamo A=00110101=+53 dok je B=11000100=-60, pa će razlika biti A = 0 0 1 1 0 1 0 1 (+53) dvojični komplement od B = 0 0 1 1 1 1 0 0 (+60) rezultat 0 1 1 1 0 0 0 1 (+113) Cn=0 Cn-1=0 S obzirom da nema Carry i Overflow, rezultat se nalazi u granicama dozvoljenog opsega za predstavljanje brojeva.
2-19
2-20
(b) Kada su A i B neoznačeni brojevi shodno prvom algoritmu vidimo da se javilo pozajmljivanje na mesto MS bit pozicije pa je C=1, a kako je dobijena razlika različita od nule to je i Z=0. (c) Kada su A i B označeni brojevi imaćemo da je N=0 (rezultat je pozitivan), Z=0 (rezultat je različit od nule), i V=0 ( nije odšlo do premašaja). (d) Sledeći uslovi biće istiniti: C=1 ⇒ A<B - BL ; branch if lower C+Z=1 ⇒ A≤B -BLE ; branch if lower or equal z=0 ⇒ A≠B - BNE ; branch if not equal (e) sledeći uslovi biće istiniti (N⊕V)+Z=0 ⇒ A>B – BG ; branch if greater N⊕V=0 ⇒ A≥B -BGE ; brench if greater or equal
Zadatak 2.8 Napisati program za izračunavanje sledećeg aritmetičkog izraza: X=(A*(B+C))/(D*E-F) Usvojiti da su svi operandi inicijalno smešteni u memoriju (a) arhitektura procesora je tipa registar-u-registar a koriste se tro-adresne instrukcije. Za obraćanje memoriji koriste se isključivo instrukcije Load i Store. (b) arhitektura procesora je tipa memorija-u-memoriju a koriste se dvo-adresne instrukcije, tj. instrukcije su tipa Inst memop <op> memop. (c) CPU ima jedan akumulator a koristi jedno-adresne instrukcije, tj. instrukcije su tipa Inst memop <op>.
2-21
Odgovor (a) Lw R1,D Lw R2,E Lw R3,F Mul R1,R1,R2 ; D*E→R1 Sub R1,R1,R3 ; D*E-F→R1 Lw R2,A Lw R3,B Lw R4,C Add R3,R3,R4 ;B+C→R3 Mul R1,R2,R3 ;A*(B+C) →R2 Div R2,R2,R1 ;(A*(B+C))/(D*E-F) →R2 Sw X,R2 ;(A*(B+C))/(D*E-F) →X (b) Mul D,E ;D*E→D Sub D,F ;D*E-F→D Add B,C ;B+C→B Mul A,B ;A*(B+C) →A Div A,B ;(A*(B+C))/((D*E)-F) →A Mov X,A ;A→X (c) Mov D ;D→Acc, Acc je akumulator Mul E ;E*Acc→Acc Sub F ;Acc-F→Acc Mov T1 ;Acc→T1 Mov C ;C→Acc Add B ;B+Acc→Acc Mul A ;A*Acc→Acc Div T1 ;Acc/T1→Acc Mov X ;Acc→X
2-22
Zadatak 2.11 Neka je dat skup od četiri procesora P0, P1, P2 i P3, gde je Pi i-to adresna mašina. P0 je nulto-adresna stack mašina, dok su P1, P2 i P3 konvencionalni računari svaki sa po 16 registara opšte-namene R0:R15 koji se koriste za manipulaciju sa podacima i kao adresni registri. Svi procesori, na nivou asemblerskog jezika, imaju opkôdove za instrukcije Add, Sub, Mul i Div radi implementacije operacija +, -, * i /, respektivno. a) Koristeći što je moguće manji broj instrukcija (kraći program), kreirati programske sekvence po kojima će svaka od mašina izračunavati vrednost sledećeg aritmetičkog izraza: X : = (A/B + C * D)/(D * E - F + C/A) + G , koristeći standardne mnemonike za ostale instrukcije kakve su na primer Load, Store, Push, Pop i dr. b) Izračunati ukupnu veličinu (obim) sva četiri programa u bitovima usvajajući da instrukcije na nivou mašinskog jezika imaju sledeće formate: (i) opkôdovi (ne sadrže adresnu informaciju) su 8-bitni; (ii) memorijske adrese su 16-bitne; (iii) adrese registara su 4-bitne. (na primer, dvo-adresna
instrukcija Load R7,B koja se odnosi na mašinu P2 i označava R7:=M(B), je obima 8 + 4 + 16 = 28 bitova).
2-23
Odgovor
instrukcija
dužina
instrukcija dužina
instrukcija dužina
instrukcija dužina
Push A 24 Load D 24 Mov R1,A 28 Div R0,A,B 44 Push B 24 Mul E 24 Div R1,B 28 Mul R1,C,D 44 Div 8 Sub F 24 Mov R2,C 28 Add R0,R0,R1 20 Push C 24 Store R1 12 Mov R2,D 28 Mul R1,D,E 44 Push D 24 Load C 24 Add R1,R2 16 Sub R1,R1,F 32 Mul 8 Div A 24 Mov R0,D 28 Div R2,C,A 44 Add 8 Add R1 12 Mul R0,E 28 Add R1,R1,R2 20 Push D 24 Store R1 12 Sub R0,F 28 Div R0,R0,R1 20 Push E 24 Load A 24 Mov R2,C 28 Add X,R0,G 44 Mul 8 Div B 24 Div R2,A 28 ukupno 312 bit. Push F 24 Store R1 12 Add R0,R2 16 d) tro-adresna Sub 8 Load C 24 Add R1,G 28 Push C 24 Mul C 24 Store X,R1 28 Push A 24 Add R1 12 ukupno 356 bitova Div 8 Div R2 12 c) dvo-adresna Add 8 Add G 24 Div 8 Store X 24 Push G 24 ukupno 336 bitova Add 8 b) jedno adresna Pop 24 ukupno 336 bitova a) nulto adresna mašina
Test pitanje 2.15 Stack orijentisana mašina se koristi za izračunavanje izraza z:= w + 3 * (x - y). a) napisati program za izračunavanje izraza; b) skicirati stanje magacina u toku izračunavanja izraza. Odgovor
Upravljačajedinica
SP
Aritmetičo-logičk
jedinica
Magacin
TOS
TOS - vrh magacina
. . .
. . .
a) program
Push W Push 3 Push X Push Y Sub Mul Add Pop Z
a) Program za odredjivanje izraza i princip rada mašine
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
w w w w
w w w+3(x-y) w+3(x-y)
3 3 3
3
x xy
x-y3(x-y)
w+3(x-y)
TOSTOS
TOSTOS
TOSTOS
TOS TOS
z z z z
z z z z
Push w Push 3 Push x Push y
Sub Mul Add Pop z b) Izgled magacina u toku izvršenja programa
Slika 2.26. Princip rada stack mašine 2-24
Test pitanje 2.19 Kako se određuje memorijska adresa, kod sistema zasnovanog na mikroprocesoru 80x86, instrukcije Mov [3000h],AL ako je DS=1000h. Odgovor
Registar AL memorijska adresa13000h
DS*10h+DISP10000h+3000h
memorijskaadresa
memorijskalokacija
Test pitanje 2.24 Nakon izvršenja sledećih sekvenci na asemblerskom jeziku mikroprocesora 80x86: a) MOV BH,38h ADD BH,2Fh b) MOV AL,9Ch MOV DH,64h ADD AL,DH c) MOV AX,34F5h ADD AX,95EBh d) MOV BX,AAAAh ADD BX,5556h e) MOV AX,94C2h MOV BX,323Eh ADD AX,BX MOV DX,AX MOV CX,DX Odrediti u koje se stanje postavljaju markeri uslova CF, PF, AF, ZF i SF . Odgovor
2-25
2-26
a) MOV BH,38h ;BH = 38h ADD BH,2Fh ;38h + 2Fh = 67h = BH 38 0 0 1 1 1 0 0 0 + 2F + 0 0 1 0 1 1 1 1 67 0 1 1 0 0 1 1 1 CF = 0, PF = 0, AF = 1, ZF = 0, SF = 0 b) MOV AL,9Ch ; AL = 9Ch MOV DH,64h ; DH = 64h ADD AL,DH ⇒ AL = 0 9 C 1 0 0 1 1 1 0 0 + 6 4 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 CF = 1, PF = 1, AF = 1, ZF = 1, SF = 0 c) MOV AX,34F5h ; AX = 34F5h ADD AX,95EBh ; AX = CAE0h 3 4 F 5 0 0 1 1 0 1 0 0 1 1 1 1 0 1 0 1 + 9 5 E B 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 CA E 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 0 CF = 0 , PF = 0, AF = 1, ZF = 0, SF = 1 d) MOV BX,AAAAh ; BX = AAAAh ADD BX,5556h ; BX = 0000h AAAA 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 5 5 5 6 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CF = 1, PF = 1, AF = 1, ZF = 1, SF = 0 e) MOV AX,94C2h ; AX = 94C2h MOV BX,323Eh ; BX = 323Eh ADD AX,BX ; AX = C700h MOV DX,AX ; DX = C700h MOV CX,DX ; CX = C700h nakon sabiranja 9 4 C 2 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 + 3 2 3 E 0 0 1 1 0 0 1 0 0 0 1 1 1 1 1 0 C 7 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 CF = 0, PF = 0, AF =1, ZF = 0, SF = 1
2-27
Test pitanje 2.28 Ukazati, odgovarajućim primerom, kako se u programu na asemblerskom jeziku mikroprocesora 80x86 definišu segmenti magacina, podataka i kôda. Odgovor I pored toga što je moguće napisati program na asemblerskom jeziku koji koristi samo jedan segment, uobičajeno je da se program sastoji od najmanje tri segmenta: segment magacina, segment podataka i kodni segment. Direktive 'SEGMENT' i "ENDS" koje ukazuju na početak i kraj
segmenta imaju sledeći format: labela SEGMENT [opcije]
; iskazi koji pripadaju segmentu labela ENDS
Ime labela koje se nalazi ispred direktiva SEGMENT i ENDS je identično i jedinstveno. Polje [opcije] daje važnu informaciju asembleru koja se odnosi na organizaciju segmenta, ali nije obavezno. Asemblersko jezički iskazi grupisani su u segmente sa ciljem da se prepoznaju od strane asemblera a shodno tome i od CPU-a. Segmentom magacin definiše se memorijski prostor za magacin, segmentom podataka definišu se podaci koji će program da koristi, a kôdni segment sadrži (čine ga) instrukcije na asemblerskom jeziku. Jedan jednostavan program na asemblerskom jeziku prikazan je na Slici 2.18.
2-28
; forma programa na asemblerskom jeziku procesora 80x86 STEKSEG SEGMENT DB 64 DUP(?) STEKSEG ENDS ; *******************************************
DATASEG SEGMENT POD1 DB 26 h POD2 DB 29 h SUMA DB ? DATASEG ENDS ; ******************************************* KODSEG SEGMENT GL_PROG PROC FAR ; početna tačka programa ASSUME CS:KODSEG, DS:DATASEG, SS:STEKSEG MOV AX, DATASEG ;napuni adresu segmenta podataka MOV DS, AX ; dodeli vrednost DS-u MOV AL, POD1 ; dobavi prvi operand MOV BL, POD2 ; dobavi drugi operand ADD AL, BL ; saberi operande MOV SUMA, AL ; smesti rezultat u lokaciju SUMA MOV AH, 4Ch ; postavi se za INT 21h ; povratak u DOS
GL_PROG ENDP KODSEG ENDS
END GL-PROG ; izlazna tačka programa Slika 2.18 : Jednostavan program na asemblerskom jeziku
Segment magacina sadrži liniju "DB 64 DUP (?)". Ovom direktivom rezerviše se memorijski prostor obima 64-bajta za potrebe magacina. U segmentu podataka definisane su tri stavke: POD1, POD2, i SUMA, svaka obima bajt. Prva direktiva u kôdnom segmentu nakon SEGMENT direktive je direktiva PROC. Procedura predstavlja grupu instrukcija koja
2-29
je namenjena da obavi specifičnu funkciju. Program sa Slike 2.18 sastoji se od jedne procedure, ali uobičajeno po nekoliko malih procedura, u suštini, čine program struktuiranijim. Svakoj proceduri se dodeljuje ime. Direktive PROC i ENDP mora da imaju istu oznaku (labelu). PROC direktiva može da ima opciju NEAR i FAR. DOS zahteva da ulazna tačka korisničkog programa bude procedura tipa FAR. Odmah nakon direktive PROC sledi direktiva ASSUME. Ova direktiva ukazuje asembleru koji će od segmenata definisanih direktivama SEGMENT biti korišćeni. Obično DOS dodeljuje tačne vrednosti segmentnim registrima CS i SS, dok se vrednost registra DS (i ES ako se koristi) mora inicijalizirati od strane programa kako je to prikazano na sl. 2.18. Zadnje dve instrukcije jezgra programa su MOV AH,4Ch INT 21h Namena ovih instrukcija je da vrate upravljanje radom CPU-a operativnom sistemu, u konkretnom slučaju DOS-u. Zadnje tri linije ukazuju na kraj procedure, kôdnog segmenta i glavnog programa respektivno. Treba uočiti da labela koja prethodi ENDP (GL_PROG) mora biti identična sa labelom koja prethodi direktivi PROC, a isti zaključak važi i za ENDS i SEGMENT (prethodi im ista labela KODSEG). Pseudo-instrukcijom END završava se ceo program i ukazuje DOS-u da je početnoj-tački-programa kraj. Iz tog razloga labele za početnu-tačku-programa i END moraju biti identične.
2-30
Test pitanje 2.29 Sledeći program napisan na asemblerskom jeziku mikroprocesora 80x86 ima pet grešaka. Ukazati koje su to. STEKSEG SEGMENT DB 100 DUP ( ?) STE_SEG ENDS DATASEG SEGMENT POD1 DB ? DATASEG END KODSEG SEGMENT GL_PROG PROC FAR MOV AX,DATASEG MOV DS,AX MOV AL,34h ADD AL,4Fh MOV POD1,AL POCETAK ENDP KODSEG ENDS END
Odgovor STEKSEG SEGMENT DB 100 DUP ( ?) *** STE_SEG ENDS DATASEG SEGMENT POD1 DB ? *** DATASEG END KODSEG SEGMENT GL_PROG PROC FAR *** ASSUME ; nema ASSUME u izvornom kôdu MOV AX,DATASEG MOV DS,AX MOV AL,34h ADD AL,4Fh MOV POD1,AL *** POCETAK ENDP KODSEG ENDS *** END
2-31
Test pitanje 2.30 Tri koraka u procesu kreiranja izvršivih programa na asemblerskom jeziku mikroprocesora 80x86 prikazana su na Slici 2.19. Popuniti podacima ostale pozicije i ukazati na karakteristike fajlova sa ekstenzijom .asm, .obj, .crf, .map i .exe. Odgovor
Korak Ulaz Program Izlaz 1. Program za editovanje tastatura mojfajl.asm2. Asembliranje programa mojfajl.asm MASM mojfajl.obj 3. Linkovanje programa mojfajl.obj LINK mojfajl.exe
Slika 2.19 : Koraci u procesu kreiranja izvršivih programa Napomena: U šrafiranoj oblasti nalaze se odgovori Vizuelne prezentacije efekata koraka na Slici 2.19 prikazani su na Slici 2.20. • "asm" fajl (izvorni fajl) kreira se od strane tekst procesora ili
linijskog editora. • MASM asembler konvertuje .asm fajlove (instrukcije na
asemblerskom jeziku) u ".obj" fajlove (fajl na mašinskom jeziku) • pored kreiranja objektnog programa MASM kreira i ".lst" fajl
(listing fajl). ".lst" fajl je opcioni i veoma koristan programeru jer on lista sve opkôd i ofset adrese kao i sve greške koje detektuje MASM.
• MASM generiše i jedan opcioni fajl koji ima ekstenziju ".crf". On obezbedjuje alfabetsku listu svih simbola i labela koje se koriste u programu kao i broj linije u programu kada im se vrši obraćanje.
• kada u programu postoji veći broj kôdnih segmenata i segmenata za podatke postoji i potreba da se sazna gde se svaki od tih segmenata locira i koliki je obim u bajtovima svaki od njih. Ovu
informaciju pruža fajl se ekstenzijom .map. Fajl sa ekstenzijom .map je opcioni i daje ime svakog segmenta, gde svaki segment počinje, gde završava i koliki je njegov obim u bajtovima.
• fajl sa ekstenzijom .exe je izvršivi Napomena: Postoje dve asemblerske direktive koje se koriste da učine fajl sa ekstenzijom .lst čitljivijim, a to su PAGE i TITLE. Format PAGE direktive je PAGE [linije],[kolone] ova direktiva ukazuje štampaču kako treba da se kuca tekst. Na primer PAGE 70,92 znači da će se na jednoj stranici kucati 72 linije, a u svakoj liniji po 92 znaka. Tekst nakon pseudo instrukcije TITLE unosi programer i on na jedan bliži način treba da opiše (asocira) koja je namena programa i za šta se koristi.
ASEMBLER(program)
EDITOR (program)
LINKER (program)
mojfajl.asm
mojfajl.crt drugi.obj fajlovi
mojfajl.map
mojfajl.exe
mojfajl.lst
Slika 2.20 Koraci u generisanju izvršivih programa
2-32
Zadatak 2.19 Stepen inteligencije pet testiranih studenata je sledeći 82, 76, 73, 94 i 70. Napisati programsku sekvencu za odredjivanje najvišeg stepena inteligencije. Odgovor TITLE TESTIRANJE
2-33
PAGE 80,100 SMAG SEGMENT DB 80 DUP (?) SMAG ENDS ;-----------------------------------------------
SPOD SEGMENT KOEFIC DB 82,76,73,94,70 NAJVISI DB ? SPOD ENDS ;----------------------------------------------- SPROG SEGMENT PROG_1 PROC FAR
ASSUME CS:SPROG,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX MOV CX,5 ; postavi brojač MOV BX,OFFSET KOEFIC ;BX ukazuje na KOEFIC SUB AL,AL ;AL=0 i čuva NAJVISI koeficijent PONOVI: CMP AL,[BX] ; uporedi naredni sa najvišim JA NAREDNI ; skok ako je AL najviši MOV AL,[BX] ; AL čuva novi najviši NAREDNI: INC BX ; ukaži na naredni koeficijent LOOP PONOVI ; produži pretraživanje MOV NAJVISI,AL ; sačuvaj najviši koeficijent MOV AH,4Ch ; povratak na DOS INT 21h PROG_1 ENDI SPROG ENDS END PROG_1
Zadatak 2.20 ASCII kôdovi za mala i velika slova prikazani su na Slici 2.21.
slovo Heksa decimalna vrednost
slovo Heksa decimalna vrednost
A 41 a 61 B 42 b 62 C 43 c 63 D 44 d 64 . . . . . . . . . . . . . . . . Y 59 y 79 Z 5A z 7A
Slika 2.21: ASCII kodovi za mala i velika slova Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za konverziju tekstva 'moJE IME je mILe' u niz velikih slova.
2-34
Odgovor TITLE KONVERZIJA U VELIKA SLOVA PAGE 80,100 SMAG SEGMENT DB 128 DUP (?) SMAG ENDS ;-------------------------------------------- SPOD SEGMENT POD1 DB 'moJE IME je mILe'
POD2 DB 16 DUP(?) SPOD ENDS ;-------------------------------------------- SPROG SEGMENT KON PROC FAR ASSUME CS:SPROG,DS:SPOD,SS:SMAG
2-35
MOV AX,SPOD MOV DS,AX MOV SI,OFFSET POD1 ;SI pokazuje na početni niz MOV DI,OFFSET POD2 ;DI pokazuje na konvertovani niz MOV CX,16 ;CX je brojač simbola u nizu
PONOVI: MOV AL,[SI] ;dobavi naredni znak CMP AL,61h ;da li je manji od 'a'
JB IZNAD ;nema potrebe za konverzijom CMP AL,7Ah ;da li je veće od 'z' JA IZNAD ;nema potrebe za konverzijom AND AL,11011111b ;maskiraj DS bit poziciju za ;konverziju znaka u veliko slovo IZNAD: MOV [DI],AL ;smesti veliko slovo INC SI ;povećaj pokaziv. početnog niza INC DI ;povećaj pokazivač velikih slova LOOP PONOVI ;produži ako je CX=0 MOV AH,4Ch INT 21h ;povratak na DOS KON ENDP SPROG ENDS END KON
Zadatak 2.21 Niz od 10 ASCII znakova smešten je u segmentu podataka počev od ofset adrese 0010h na sledeći način: ASC DB "8473251064" ORG 0010h NEPAK DB 10 DUP(?) Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za konverziju ASCII znakova u nepakovane BCD brojeve. Odgovor
2-36
Odgovarajući ASCII formati u heksadecimalnom i binarnom kôdu kao i BCD nepakovanom kôdu su oblika
dirka ASCII (hex) binarni BCD nepakovani
0 30 0011 0000 0000 0000 1 31 0011 0001 0000 0001 2 32 0011 0010 0000 0010 . . . . . . . . . . . . 8 38 0011 1000 0000 1000 9 39 0011 1001 0000 1001
Konverzija ASCII kôda u nepakovani BCD kôd vrši se logičkom operacijom And ASCII broja sa "0000 1111" (0Fh). Programska sekvenca za konverziju je oblika: MOV CX,5 MOV BX,OFFSET ASC ; BX pokazuje na ASCII podatke MOV DI,OFFSET NEPAK ; DI pok. na "nepakovane" BCD PONOVI: MOV AX,[BX] ; kopiraj dva naredna ASCII u AX AND AX,0F0Fh ; poništi ASCII MS 3 MOV [DI],AX ; smesti nepakovani BCD ADD DI,2 ; ukaži na naredni BCD ADD BX,2 ; pokaži na naredni ASCII LOOP PONOVI Karakteristično za ovu sekvencu je sledeće: I pored toga što je podatak definisan direktivom DB, njemu se pristupa kao 16-bitnom. Alternativno rešenje se zasniva na korišćenju PTR direktive MOV CX,5
2-37
MOV BX,OFFSET ASC MOV DI,OFFSET NEPAK PONOVI: MOV AX,WORD PTR[BX] ; kopiraj dva bajta u AX AND AX,0F0Fh MOV WORD PTR[DI],AX ; smesti nepakovani BCD ADD DI,2 ADD BX,2 LOOP PONOVI Interesantno je takodje i rešenje koje umesto dva pokazivača koristi jedan pokazivač kao što je sledeće MOV CX,10 ; puni se brojač SUB BX,BX ; BX = 0 PONOVI: MOV AL,ASC[BX] ; AL = M[BX + ASC] AND AL,0Fh ; maskira se MS nibl MOV NEPAK[BX],AL ; AL M[BX + NEPAK] INC BX ; povećaj pokazivač LOOP PONOVI Operandi kojima se pristupa su obima bajt. Za slučaj da se pristupa operandima tipa reč treba izvršiti sledeću modifikaciju MOV CX,5 SUB BX,BX PONOVI: MOV AX,WORD PTR ASC[BX] AND AX,0F0Fh MOV WORD PTR NEPAK[BX],AX ADD BX,2 LOOP PONOVI
Zadatak 2.22 Preko tastature se prihvataju dva ASCII kodirana broja 38h i 32h. Kreirati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se vrši konvertovanje ASCII kodiranih brojeva u pakovani BCD format.
2-38
Odgovor Konverzija ASCII u pakovani BCD, vrši se prvo konverzijom u nepakovani BCD a zatim njihovom kombinacijom se dobija pakovani BCD. Na primer kada se pritisnu dirke 8 i 2 tastatura generiše kodove 38h i 32h, respektivno. Cilj je da se dobije 82h ili 10000010h koji se zove pakovani BCD broj. Programska sekvenca pomoću koje se može obaviti specificirana aktivnost ima oblik: ORG 0010h ; ofset adresa podataka VRED_ASC DB '82' ; na ofset adresi 0010h je 38,. a VRED_PBCD DB ? ; na ofset adresi 0011h je 32 MOV AX,WORD PTR VRED_ASC ; AH = 32, AL = 38 AND AX,0F0Fh ; maskiranje XCHG AH,AL ; AH↔AL MOV CL,4 ; CL = 4 radi pomeranja SHL AH,CL ; pomeri ulevo AH da bi dobio AH=80h OR AL,AH ; OR da bi se dobio pakovani BCD MOV VRED_PBCD,AL ; smesti rezultat Napomena: Obratiti pažnju na LE notaciju kod pribavljanja podataka iz memorije u registar AX.
Zadatak 2.23 Kreirati programsku sekvencu, na asemblerskom jeziku mikroprocesora 80x86, koja je namenjena za konverziju pakovanog BCD broja 29 h u odgovarajući ASCII. Odgovor Kod konverzije pakovanog BCD broja u odgovarajući ASCII, mora da se izvrši prvo konverzija u nepakovani BCD a zatim u ASCII, shodno sledećem postupku:
pakovani BCD napakovani BCD ASCII 29 h 02 h & 09 32 h & 39 0010 1001 0000 0010 & 0000 1001 0011 0010 & 0011 1001 Programska sekvenca biće oblika VRED_PBCD DB 29h
2-39
VRED_ASC DW ? -------------- MOV AL,VRED_PBCD MOV AH,AL ;AL = AH, AL = 29 h, AH= 29h
AND AX,0F00Fh ;maskiraj 9 od AH i 2 od AL MOV CL,4 ;pomeri udesno AH za nepakov. BCD SHL AH,CL OR AX,3030h ; kombinuj 30 da se dobije ASCII XCHG AH,AL ; izvrši konverziju radi LE formata MOV VRED_ASC,AX ; smesti ASCII
Test pitanje 2.31 Izvršiti analizu sledeće programske sekvence POD_A DD 62562FAh POD_B DD 412963Bh RAZLIKA DD ? ------------------------- MOV AX,WORD PTR POD_A ; AX = 62FA SUB AX,WORD PTR POD_B ; oduzmi 963B od AX MOV WORD PTR RAZLIKA,AX ; sačuvaj rezultat MOV AX,WORD PTR POD_A+2 ; AX = 0625 SBB AX,WORD PTR POD_B+2 ;oduzmi 0412 sa pozajmljiv MOV WORD PTR RAZLIKA+2,AX ; smesti rezultat i odrediti konačnu vrednost koja je smeštena na lokaciji RAZLIKA. Odgovor
2-40
Nakon SUB, AX=62FA-963B=CCBF i CF=1. Kako je CF=1 kada se obavi SBB imaćemo AX=625-412-1=212. Zbog toga vrednost smeštena u RAZLIKA=0212CCBFh.
Test pitanje 2.32 Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se odredjuje broj jedinica u bajtu. Odgovor ; u segmentu podataka POD1 DB 63h ; proizvoljno uzet broj BROJ DB ? ; u kodnom segmentu SUB BL,BL ; BL = 0 čuva broj jedinica MOV DL,8 ; brojač rotacija MOV AL,POD1 PONOVI: RCL AL,1 ; rotiraj jednu bit poziciju JNC NAREDNI ; proveri za 1 INC BL ; ako je CF = 1 dodaj 1 brojaču NAREDNI: DEC DL ; dekrementiraj broj rotiranja JNZ PONOVI ; ako nije završen ponovi MOV BROJ,BL ; smesti broj jedinica u broj
Test pitanje 2.38 Objasniti razlike izmedju pojmova potpuna definicija segmenata (full segment definition) i pojednostavljena definicija segmenata (simplified segment definition) kada se govori o programiranju na asemblerskom jeziku mikroprocesora 80x86. Odgovor Procesor 80x86 uobičajeno (u najvećem broju slučajeva) koristi četiri segmentna registra: CS (kôdni segment), DS (segment podataka), SS (segment magacina) i ES (ekstra segment). Svaka linija u programu na asemblerskom jeziku mora da pripada
2-41
(odgovara) jednom od ovih segmenata. Zadnjih godina novi metod segmenata je uveden (podržavan) od strane Microsoft-ov MASM 5.0 i naviše, Borland-ova TASM verzija 1 pa naviše, i od strane drugih kompatibilnih asemblera. Ovaj metod se zove format sa pojednostavljenom definicijom, a njegova stuština se sastoji u tome što koristi tri jednostavne direktive: ".CODE", ".DATA" i ".STACK", koje odgovaraju registrima CS, DS i SS, respektivno. Koristeći ove direktive korišćenje direktiva SEGMENT i ENDS čini nepotrebnim. U suštini pojednostavljena definicija segmenata je lakša za razumevanje i korišćenje, posebno za početnike. Pre nego što se koristi pojednostavljena definicija segmenata neophodno je izabrati memorijski model za program koji se kreira. Uglavnom se koriste sledeći memorijski modeli: • SMALL model - jedan od najčešće korišćenih modela, koji koristi
64kB memorija za program i 64kB za podatke • MEDIUIM model - podaci moraju se smestiti u 64kB, a program
može biti veći od 64kB. • COMPACT model - suprotan je modelu MEDIUM, tj. program
se mora smestiti u 64kB, a podaci u prostor veći od 64kB. • LARGE model - kombinovanjem prethodna dva modela dobija se
LARGE model, tj. i kôd i podatke mogu biti veći od 64kB. Jedinstvena struktura podataka kao što je polje (vektor, matrica,...) ne sme da premaši 64kB.
• HUGE model - program i podaci mogu da premaše 64kB a takodje i jedinstvena struktura podataka može biti veća od 64kB.
Postoji takodje, još jedan model nazvan TINY. Ovaj model se koristi sa COM fajlovima kod kojih ukupna memorija program plus podaci ne sme da premaši 64kB. TINY model se ne može koristiti u sklopu pojednostavljene definicije segmenata. Na Slici. 2.22 ilustracije radi za jedan isti program prikazana je uporedna prezentacija potpune i pojednostavljene definicije segmenata.
2-42
; potpuna definicija segmenata ; pojednostavljena definicija segmenata ; --------- segment magacina ---- .MODEL SMALL SMAG SEGMENT .STACK 64 DB 64 DUP (?) ; SMAG ENDS ; ; --------- segment podataka ----- ; ------------------------------------------ SPOD SEGMENT .DATA POD_1 DW 1234h POD_1 DW 1234h POD_2 DW 5678h POD_2 DW 5678h REZ DW ? REZ DW ? SPOD ENDS ; ; -------- programski segment ____ ; --------------------------------------------- SPROG SEGMENT .CODE SABERI PROC FAR SABERI: MOV AX,@DATA ASSUME CS:SPROG MOV DS,AX MOV AX,SPOD ... MOV DS,AX ... ... ... SABERI ENDP ... SPROG ENDS ... END SABERI END SABERI
Slika 2.22 Potpuna u odnosu na pojednostvljenu definicija segmenata
Jedan jednostavan program koji koristi pojednostavljenu definiciju segmenata prikazan je na Slici. 2.23. TITLE PROG 1 pojednostavljena definicija segmenta PAGE 60,132 .MODEL SMALL .STACK 32 .DATA
POD_1 DW 1234h,4892h,3D87h,28E0h ORG 10h
SUMA DW ?
2-43
.CODE POCETAK: MOV AX,@DATA MOV DS,AX MOV CX,4 ; CX = 4, brojač MOV DI,OFFSET POD_1 ; postavi pokazivač SUB BX,BX ; inicijaliziraj sumu BX SABERI: ADD BX,[DI] ; dodaj novu reč na BX INC DI ; inkrementiraj pokazivač INC DI DEC CX ; dekrementiraj brojač JNZ SABERI ; granaj se ako je CX = 0 MOV SI,OFFSET SUMA ; postavi pokazivač MOV [SI],BX ; smesti sumu MOV AH,4Ch INT 21h ; povratak na DOS END POCETAK
Slika 2.23 : Program za sabiranje četiri reči koji koristi pojednostavljenu definiciju segmenata
Kod programa sa Slike 2.23, redosled segmenata nije od važnosti, ali to znači da su segmenti kodirani u sledećem redosledu .STACK .DATA .CODE Napomenimo da se program može kodirati i u obrnutom redosledu .CODE .DATA .STACK kako je to prikazano na Slici 2.24. TITLE PROG 2 pojednostavljena definicija segmenta PAGE 60,132 .MODEL SMALL .CODE
2-44
GL_P MOV AX,@DATA MOV DS,AX MOV SI,OFFSET POD_1 ;SI pokazivač izvornih podataka MOV DI,OFFSET KOPIRAJ ; DI pokazivač podataka ; koji se kopiraju MOV CX,06h ; CX brojač petlje PETLJA: MOV AL,[SI] ; kopiraj naredni bajt u AL MOV [DI],AL ; kopiraj AL INC SI ; inkrementiraj pokazivač INC DI DEC CX ; dekrementiraj brojač JNZ PETLJA ; granaj se ako je CX = 0 MOV AH,4Ch INT 21h ; povratak na DOS .DATA ORG 10h POD_1 DB 41h,23h,18h,12h,39h,62h ORG 28h KOPIRAJ DB 6 DUP (?) .STACK 32 END GL_P
Slika 2. 24 : Program za kopiranje šest bajtova u memoriji koji koristi pojednostavljenu definiciju segmenata u obrnutom
redosledu
Zadatak 2.25 Dva skupa ASCII kodiranih podataka se prihvataju sa tastature. Napisati program na asemblerskom jeziku mikroprocesora 80x86 za: a) konverziju podataka iz ASCII u pakovani BCD b) sabiranje višebajtnih pakovanih BCD i pamćenje rezultata c) konverzija pakovanog BCD rezultata u ASCII
Odgovor TITLE PROG_KON ASCII u BCD konverzija i sabiranje PAGE 60, 132 SMAG SEGMENT DB 64 DUP (?) SMAG ENDS ;---------------------------------------------------------------------------------------
2-45
PSEG SEGMENT POD1_ASC DB '2731947290' ORG 0010h POD2_ASC DB '3276401832' ORG 0020h POD3_BCD DB 5 DUP (?) ODG 0028h POD4_BCD DB 5 DUP (?) ORG 0030h POD5_SAB DB 5 DUP (?) ORG 0040h POD6_ASC DB 10 DUP (?) PSEG ENDS ; --------------------------------------------------------------------------------------
KSEG SEGMENT PROG1 PROC FAR ASSUME CS:KSEG,DS:PSEG,SS:SMAG MOV AX,PSEG MOV DS,AX MOV BX,OFFSET POD1_ASC ;BX pokazuje na prve ASCII MOV DI,OFFSET POD3_BCD ; DI pokazuje na prve BCD MOV CX,5 ; CX je brojač CALL KONV_BCD ; konverzija ASCII u BCD MOV BX,OFFSET POD2_ASC ;BX pokaz. na druge ASCII MOV DI,OFFSET POD4_BCD ; DI pokaz. na druge BCD MOV CX,5 ; CX je brojač CALL KONV_BCD ; konverzija ASCII u BCD
CALL BCD_SAB ; sabrati BCD operande MOV SI,OFFSET POD5_SAB ;SI pokaz. na BCD rezultat MOV DI,OFFSET POD6_ASC ;DI pokaz. na ASCII rezultat MOV CX,05 ; CX je brojač CALL KONV_ASC ;konverzija rezultata u ASCII MOV AH,4Ch INT 21h ; povratak na DOS PROG1 ENDP ; -------------------------------------------------------------------------------------- ; Potprogram za konverziju ASCII u pakovani BCD
2-46
KONV_BCD PROC PONOVI: MOV AX,[BX] ; BX pokazivač ASCII podataka XCHG AH,AL AND AX,0F0Fh ; maskiraj ASCII 30h PUSH CX ; sačuvaj brojač MOV CL,4 ; pomeri AH četiri bita ulevo
SHL AH,CL ; pripremi za pakovani BCD OR AL,AH ; kreiraj pakovani BCD MOV [DI],AL ; DI pokazivač na BCD ADD BX,2 ; ukaži na naredna dva ASCII bajta INC DI ; ukaži na naredni BCD POP CX ; obnovi sadržaj brojača LOOP PONOVI RET KONV_BCD ENDP ; -------------------------------------------------------------------------------------- ; Potprogram za sabiranje dva višebajtna pakovana BCD operanda BCD_SAB PROC MOV BX,OFFSET POD3_BCD ;BX pokaz. na prvi operand MOV DI,OFFSET POD4_BCD ;DI pokaz. na drugi operand MOV SI,OFFSET POD5_SUM ;SI pokazuje na sumu MOV CX,05
CLC
NOVI: MOV AL,[BX+4] ;nabavi naredni bajt za operand 1 ADC AL,[DI+4] ;nabavi naredni bajt za operand 2 DAA MOV [SI+4],AL ; smesti sumu DEC DI ; ukaži na naredne bajtove
5 bajtova po operandu, pribavljamo poslednji bajt
DEC BX
2-47
DEC SI LOOP NOVI RET BCD_SAB ENDP ; ------------------------------------------------------------------------------------- ; Potprogram za konverziju pakovanog BCD u ASCII KONV_ASC PROC IZNOVA: MOV AL,[SI] ; SI pokazivač na BCD MOV AH,AL ; dupliciranje za nepakovani AND AX,0F00Fh ; raspakuj PUSH CX ; sačuvaj brojač MOV CL,04 ; pomeri udesno 4 bita za SHR AH,CL ; gornji nibl OR AX,3030h ; kreiranje ASCII XCHG AH,AL ; promeni mesta MOV [DI],AX ; sačuvaj ASCII podatak INC SI ; pokaži na naredni BCD ADD DI,2 ; pokaži na naredni ASCII POP CX ; obnovi brojač petlje LOOP IZNOVA RET KONV_ASC ENDP KSEG ENDS END PROG1
DAA (decimal adjust after addition) - nakon sabiranja BCD brojeva DAS (decimal adjust after subtraction) - nakon oduzimanja BCD brojeva
- Instrukcije za korekciju rezultata (koji je u AL) u BCD format:
AAS (ASCII adjust after subtraction) - podešava registar AX nakon ASCII oduzimanja, za rezultat se usvaja da je u AL
AAM (ASCII adjust after multiplication) - za konverziju binarne vrednosti (koja je u AL) u dve BCD cifre koje se smeštaju u AH i AL, koristi se nakon množenja dve nepakovane BCD cifre instrukcijom MUL kada je rezultat smešten u AL.
AAD (ASCII adjust before division) - javlja se pre deljenja, zahteva da se pre izvršenja u AX nalaze dve cifre nepakovanog BCD broja, a rezultat se generiše u AL
AAA (ASCII adjust after addition) - nakon sabiranja dva BCD broja, konvertuje rezultat (koji je u AL) u korektnu BCD formu
- ASCII aritmetičke instrukcije:
Zadatak 2.26 Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za množenje dve ASCII cifre '7' i '5', a dvocifreni rezultat pretstaviti u ASCII kôdu. Odgovor MOV AL,'7' ; AL = 37h AND AL,0Fh ; AL = 07 nepakovani BCD MOV DL,'6' ; DL = 36h AND DL,06h ; DL = 06 nepakovani BCD MUL DL ; AX = AL*DL = 07*06 = 002A h = 42 AAM ; AX = 0402 (7*6 = 42 nepakovani BCD) OR AX,3030h ; AX = 3432 rezultat u ASCII kodu
Zadatak 2.27 a) Napisati programsku sekvancu na asemblerskom jeziku mikroprocesora 80x86 koja se koristi za sabiranje dve ASCII cifre '5' i '2', a rezultat predstaviti u ASCII kôdu. b) Ponoviti aktivnost pod a) za slučaj da su ASCII cifre '7' i '5'.
2-48
Odgovor a) MOV AL,'5' ; AL = 35 ADD AL,'2' ; AL = 35 + 32 = 67 AAA ; promeni 67 u 07 OR AL,30h ; OR AL sa 30 h da bi dobio ASCII b) SUB AH,AH ; AH = 0 MOV AL,'7' ; AL = 37 MOV BL,'5' ; BL = 35 ADD AL,BL ; AL = 37 + 35 = 6C AAA ; AL = 02 AH = CF = 1 OR AX,3030h ; AX = 3132
IDIV - Signed divide: when operand is a byte: when operand is a word: AL = AX / operand AX = (DX AX) / operand AH = remainder (modulus). DX = remainder (modulus).
DIV - Unsigned divide: when operand is a byte: when operand is a word: AL = AX / operand AX = (DX AX) / operand AH = remainder (modulus).. DX = remainder (modulus).
IMUL - Signed multiply: when operand is a byte: when operand is a word: AX = AL * operand. (DX AX) = AX * operand.
MUL - Unsigned multiply: when operand is a byte: when operand is a word: AX = AL * operand. (DX AX) = AX * operand.
2-49
2-50
Test pitanje 2.45 Šta su moduli? Odgovor Česta je praksa kada se piše obiman softver, tj. veliki program, da se ceo program (projekat) razbije na manje celine, tzv. module, a zadatak koji se odnosi na pisanje ovih modula raspodeli izmedju većeg broja programera. Prednsoti ovakvog pristupa su sledeće: (1) svaki modul se može pisati, debagirati i testirati nezavisno od ostalih, (2) greške u jednom modulu ne dovode do blokiranja celog projekta, (3) moguće je koristiti module radi povezivanja (linkovanja) sa višim programskim jezicima kakvi su C, Pascal i drugi, (4) paralelni rad većeg broja programera na kreiranju različitih modula skraćuje ukupno vreme razvoja programa. Naše dosadašnje iskustvo, strategija i saznanje u pisanju programa je bila sledeća: Program je bio kreiran od glavne procedure koja je u toku svog izvršenja pozivala veći broj drugih potprograma. Ako se jedan od potprograma ne bi izvršio korektno tada je bilo neophodno ceo program ponovo napisati i reasemblirati. Efikasniji pristup u razvoju softvera bio bi sledeći: Tretirati svaki potprogram kao poseban program (ili modul) i dodeliti mu posebno fajl-ime. Zatim svaki od modula asemblirati i testirati. Nakon testiranja i verifikovanja da su svi oni ispravni potrebno je izvršiti njihovo povezivanje (linkovati ih) tako da oni čine jedinstvenu celinu (program). Mogućnost povezivanja modula ostvaruje se zahvaljujući korišćenju odredjenih asemblersko jezičkih direktiva. Direktive koje se najčešće koriste za ove potrebe su EXTRN (external) i PUBLIC.
2-51
Direktiva EXTRN se koristi da ukaže asembleru i linkeru da odredjena imena i promenljive nisu definisane u tekućem modulu nego su definisana na drugo mesto, tj. ona su eksterna. Za slučaj da se direktiva EXTRN ne koristi (ne specificira), asembler neće biti u stanju da odredi gde su ova imena definisana pa će zbog toga generisati grešku. Format direktive EXTRN je sledeći: EXTRN ime_1: tip ; svako ime može biti u posebnoj EXTRN EXTRN ime_2: tip EXTRN ime_3: tip, ime_4:tip ;veći broj imena može biti definisan ; istom direktivom EXTRN Eksterna imena koja se koriste kod procedura mogu biti NEAR, FAR ili PROC (NEAR za male module, a FAR za veće). Imenovani podaci mogu biti sledećeg tipa: BYTE, WORD, DWORD, FWORD, QWORD ili TWORD. Ona imena ili parametri definisani kao EXTRN (definisani kao spoljni u odnosu na tekući modul) moraju da se definišu kao PUBLIC u modulu gde su definisani. Definisanjem imena kao PUBLIC dozvoljava asembleru i linkeru da obavi uparivanje sa odgovarajućom definicijom koja se odnosi na EXTRN. Format direktive PUBLIC je sledeći: PUBLIC ime_1 ;svako ime može biti u posebnoj direktivi PUBLIC ime_2 PUBLIC ime_3, ime_4 ;više imena može biti izlistano u istoj ;direktivi tipa PUBLIC Analizirajmo sada konstrukciju jednog programa koga čini glavna rutina, GLAVNA, i dva manja potprograma nazvana PP_1 i PP_2. Potprograme, PP_1 i PP_2, poziva glavna rutina. ; prvi fajl predstavlja glavna rutina EXTRN PP_1:FAR EXTRN PP_2:FAR
2-52
PROG_SEG0 SEGMENT GLAVNA PROC FAR ASSUME CS:GLAVNA,DS:...,SS:...,ES:... ..... Call PP_1 Call PP_2 .... Mov AH, 4Ch Int 21h GLAVNA Endp PROG_SEG0 Ends End GLAVNA ; drugi fajl se odnosi na PP_1 PUBLIC PP_1 PROG_SEG1 SEGMENT PP_1 PROC FAR ASSUME CS:PROG_SEG1 .... Ret PP_1 Endp PROG_SEG1 Ends End ; treći fajl se odnosi na PP-2 PUBLIC PP_2 PROG_SEG2 SEGMENT PP_2 PROC FAR ASSUME CS:PROG_SEG2 ... Ret PP_2 Endp PROG_SEG2 Ends End
Slika 2.30 : Pisanje i povezivanje modula
Analizom programa sa Slike 2.30 može se zaključiti sledeće:
2-53
(1) ulazna tačka programa je GLAVNA a izlazna END GLAVNA. (2) moduli koji se pozivaju od strane glavnog modula imaju direktivu End iza koje ne sledi oznaka ili ime. U konkretnom slučaju PP_1 i PP_2 imaju direktivu End iza koje ne sledi oznaka.
Test pitanje 2.46 Kako se vrši povezivanje modula? Odgovor Neka je svaki od programskih modula sa Slike 2.30 (test pitanje 2.45) bio asembliran zasebno i zapamćen kao fajl pod sledećim imenom: PROG_1.OBJ, PP_1.OBJ i PP_2.OBJ, respektivno. Njihovo povezivanje (linkovanje) pomoću makroasemblera MASM, sa ciljem da se dobije (generiše) jedinstveni izvršivi kôd, se vrši izdavanjem sledeće naredbe C > LINK PROG_1.OBJ + PP_1.OBJ + PP_2.OBJ …………………………………………….
Test pitanje 2.48 Kako se vrši prenos parametara između modula? Odgovor Često se javlja potreba za prenos parametara izmedju različitih modula napisanih na asemblerskom jeziku ili izmedju programa napisanih na asemblerskom jeziku i HLL programa kakvi su Pascal, C i dr. Parametri koji se predaju mogu biti fiksne vrednosti, promenljive, polja podataka, ili pokazivači memorijskih lokacija. Najčešće prenos parametara izmedju modula vrši se preko registara, memorije ili magacina.
2-54
Jedan tipičan način predaje parametara preko registara prikazan je na Slici 2.34. Ovaj program se koristi za konverziju ASCII kôdiranih znakova u binarne. Program postavlja segment podataka, prihvata ASCII podatke za tastature, smešta ih u memoriji, a zatim poziva rutinu za konverziju broja u binarni. Konačno rezultat smešta u memoriji. Registri BX i SI se koriste da ukazuju na odredjene podatke pre nego što se modul pozove a pozvani modul smešta rezultat u registar AX pre nego što se izvrši povratak iz pozvane rutine u pozivnu. TITLE PROG_4 Poziv programa za konverziju iz ASCII u binarni PAGE 60,132 PUBLIC DESET SMAG SEGMENT PARA STACK 'STACK' DB 64 DUP(?) SMAG Ends ; segment podataka SPOD SEGMENT ASC_OB LABEL BYTE ; ASCII oblast MAX_DUZ DB 6 ; maksimalna dužina ST_DUZ DB ? ; stvarna dužina ASC_BR DB 6 DUP(?) ; ASCII broj ORG 10h BIN_BR DW 0 PORUKA DB 'MOLIM UNESI PETOCIFARSKI BROJ','$' DESET DW 10 SPOD Ends ; segment programa SPROG SEGMENT EXTRN ASC2B_KON:FAR ; konver. ASCII u binarni GLAVNI PROC FAR ASSUME CS:SPROG,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX
2-55
; prikazivanje poruke (PROMPT) Mov AH, 09 ; prenos parametra preko registra Mov DX, OFFSET PORUKA Int 21h ; poziv prekidne DOS rutrine ; množenje niza Mov AH,0Ah ; prenos parametara Mov DX,OFFSET ASC_OB ; preko registara Int 21h Mov SI,OFFSET ASC_BR Mov BH,00 Mov BL,ST_DUZ Dec BX Call ASC2B_KON ; poziv potprogr. za konverziju Mov BIN_BR,AX ; sačuvaj binarni (heksa) rezultat Mov AH,4Ch Int 21h ; povretak na DOS GLAVNI Endp SPROG Ends End GLAVNI
Slika 2.34 : Pozivni program za konverziju ASCII u binarni Prenos parametara preko registara veoma često se koristi kod DOS-ovih i BIOS-ovih prekidnih funkcijskih poziva (tipično preko Int 21h i Int 10h i td). Prednost ovog metoda je brzi prenos podataka (procesor najbrže pristupa internim registrima) a nedostatak ograničeni broj CPU-ovih registara. Drugi metod za prenos parametara se zasniva na definisanju RAM oblasti, tj. memorijskih lokacija. DOS i BIOS često koriste i ovaj metod. Problem sa prenosom parametara preko fiksnih memorijskih oblasti se sastoji u tome što mora izmedju različitih proizvodjača računara da postoji univerzalni dogovor o memorijskim adresama preko kojih se prenose parametri. Nažalost ovakav dogovor do sada nije postignut.
2-56
Najčešće prenos parametara se vrši preko magacina. Ovaj metod je univerzalan jer magacin postoji kod svih računara. Ipak treba ukazati da su manipulacije sa magacinom kako komplikovane tako i rizične iz sledećeg razloga: Kada se modul pozove, u magacin se smešta povratna adresa pozivnog programa. Za slučaj da se sadržaj magacina promeni program će krahirati. Zbog ovoga manipulacije sa magacinom mora dobro da se poznaju pre nego što se upustimo u takav rad. Program na Slici 2.35 prikazuje način prenosa parametara preko magacina. Glavni modul dobavlja tri operanda tipa reč iz segmenta za podatke smešta ih u magacin, a zatim poziva potprogram. Potprogram dobavlja podatke iz magacina, sabira ih, smešta rezultat u registar, i obavlja povratak u pozivni program. Glavni program memoriše rezultat sabiranja. TITLE PROG_5 Predaja parametara preko magacina PAGE 60,132 EXTRN PP_6:FAR ; segment magacina SMAG SEGMENT PARA STACK 'STACK' DB 64 DUP (?) SMAG Ends SPOD SEGMENT PARA 'DATA' ; segment podataka VR1 DW 4157 VR2 DW 8436 VR3 DW 39C8 REZ DW 2 DUP(?) SPOD Ends ; programski segment SPR0 SEGMENT PARA PUBLIC 'CODE' GLAVNI PROC FAR ASSUME CS:SPRO,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX Push VR3 ; smeštaj parametara u magacin
2-57
Push VR2 Push VR1 Call PP_6 ; poziv potprograma Mov REZ,AX ; smeštaj rezultata Mov REZ+2,BX Mov AH,4Ch Int 21h GLAVNI Endp SPR0 Ends End GLAVNI ; *************** a) glavni modul *************** ; u posebnom fajlu TITLE PR_6 Modul za sabiranje tri reči koje se prenose preko magacina PAGE 60,132 PUBLIC PP_6 ; segment podataka SPRO SEGMENT PARA PUBLIC 'CODE' PP_6 PROC FAR ASSUME CS:SPRO Sub BX,BX ; BX = 0 zbog prenosa Push BP ; sačuvaj BP Mov AX,[BP+6] ; VR1→ AX Mov CX,[BP+8] ; VR2 → CX Mov DX,[BP+10] ; VR3 → DX Add AX,CX ; VR1 + VR2 → AX Adc BX,00 ; CY → BX Add AX,DX ; (VR1 + VR2) + VR3 → AX Adc BX,00 ; BX + CY → BX Pop BP ; obnovi BP pre povratka Ret 6 ; dodaj 6 na SP da premosti podatke PP_6 Endp SPRO Ends End
; *********************b) modul sabiranja ******************
Slika 2.35 : Program za sabiranje tri broja gde se parametri prenose preko magacina
Da bi se bolje razumele manipulacije sa magacinom u okviru modula sabiranje (Slika 2.35)) na Slici 2.36 prikazan je izgled magacina poziva procedure PP_6, tj. modula za sabiranje. uslovno je uzeto da pre izvršenja instrukcije Push VR3 pokazivač magacina, SP, ukazuje na lokaciju 2000 h.
YYXX
39C8
8436
4157
CS
IP
BP
200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF41FF31FF2
SP (pre Push VR3nakon Ret 6)
SP (nakon PushVR3)
SP (nakon PushVR2)
SP (nakon PushVR1)
SP (nakon Call PP_6,nakon Pop BP)
SP (nakon PushBP)
VR3
VR2
VR1
CS
IP
BP
Slika 2.36 : Izgled magacina
Test pitanje 2.68 Nezavisno od tipa mašine, strukture registara CPU-a, i prirode instrukcija, šta svaki skup instrukcija mora da specificira, tj. koja kôdna polja mora da sadrži svaka instrukcija? Odgovor Svaka instrukcija eksplicitno ili implicitno mora da sadrži kôdna polja pomoću kojih se spcificira:
2-58
(1) koja operacija treba da se obavi, tipični primeri su ADD, MOV, LDA, SUB,...
2-59
(2) gde se nalazi operand ili operandi ako postoje: operand ili operandi se mogu čuvati u registrima CPU-a, memoriji, ili U/I portovima. Lokacija operanda se može specificirati eksplicitno kao što je memorijska adresa, registar CPU-a, ili da se specificira implicitno u okviru opkôda kao što je akumulator kod jedno-adresnih mašina, ili magacin kod nulto-adresnih. (3) gde smestiti rezultat, ako postoji - lokacija rezultata na sličan način kao i lokacija operanda se može eksplicitno ili implicitno specificirati. (4) gde se nalazi naredna instrukcija - in-line kôd je sekvenca instrukcija bez eksplicitnog grananja, a kod instrukcija koje menjaju tok programskog izvršenja Branch ili Jump adresa mora biti zadata kao deo tekuće instrukcije. Instrukcija Skip predstavlja izuzetak - adresa preskoka (skip) je implicitna, tj. to je adresa instrukcije nakon naredne instrukcije.
Test pitanje 2.69 Dati kratak opis sredstava koji se koriste od strane programera na asemblerskom jeziku. Odgovor Sredstva koja programeri na asemblerskom jeziku koriste su: (1) editor - koristi se za ediciju izvornog kôda (2) asembler - omogućava programeru da od programa napisanih na asemblerskom jeziku generiše programe na mašinskom jeziku. Prevodi iskaze asemblerskog jezika u binarne ekvivalente. (3) linker - povezuje posebno asemblirane module u jedinstveni modul koji je pogodan za punjenje i izvršenje (4) loader - puni izvršive binarne kôdove u memoriju i transformiše neke logičke adrese u odgovarajuće fizičke. (5) debugger - omogućava programeru da nadgleda (kontroliše) detalje koji se odnose na izvršenje programa
2-60
(6) razvojni sistem - celina hardvera i softvera koja se koristi da podrži razvoj novih sistema
Test pitanje 2.89 Odrediti vrednost fizičke adrese izvornog operanda za sledeću instrukciju MOV AL,1234H+[SI*2] neka je DS = 0200H a SI = 2000H Odgovor Fizička adresa = DS(0) + 1234H + (SI * 2) = 02000H + 1234H + (2000H * 2) = 07234H
2-61
Ispitni zadaci
Novembar 1999
Zadatak 4 Izvršiti projektovanje opkôda promenljive dužine kako bi
instrukcijom obima 36 bita bilo mogu}e kodirati: • 7 instrukcija sa dve 15-bitne adrese i jedan 3-bitni broj za specifikaciju registra • 500 instrukcija sa jednom 15-bitnom adresom i jedan 3-bitni broj za specifikaciju registra • 50 instrukcija kod kojih se ne specificiraju adrese ili registri.
Odgovor • 7 instrukcija
3 15 15 3 000 - 110 adr adr reg
• 500 instrukcija 3 9 6 15 3
111 000h - 1FEh 00h adr reg Napomena: Sa 9 bitova je moguće kodirati 512 instrukcija, što odgovara vrednosti 1FFh, a u konkretnom slučaju se zahteva kodiranje 500 različitih instrukcija što odgovara vrednosti 1F3h. Radi lakše implementacije hardvera za dekodiranje, rezervisaćemo 9 bitova za kodiranje 511 instrukcija, pri čemu vrednosti od 1F4h do 1FEh neće biti dekodirane. Vrednost 1FFh koristi se kao proširenje za dekodiranje insrtrukcija iz treće grupa. • 50 instrukcija
3 9 6 18 111 1FFh 00h - 31h xxxxxh
2-62
Napomena: Sa 6 bitova je moguće kodirati 64 instrukcije, što odgovara vrednosti 3Fh, a u konkretnom slučaju se zahteva kodiranje 50 različitih instrukcija što odgovara vrednosti 31h. Ostale vrednosti neće biti dekodirane. Simbol "x" označava vrednost 0 ili 1, tj. vrednost nije od značaja.
Zadatak 1 HLL strukturni jezici mogu se veoma efikasno koristiti za
predstavljanje ugneždjenih upravljačkih struktura. Kod sledećeg primera IF iskaz je ugneždjen u okviru WHILE petlje: DO WHILE (op1<op2) <iskaz1> IF (op2=op3) THEN
<iskaz2> <iskaz3>
ELSE <iskaz4>
END IF END DO
gde su op1, op2, op3 i op4 neposredne vrednosti, registri ili memorijski operandi. Napisati ekvivalentan kôd na asemblerskom jeziku mikroprocesora 80x86. Odgovor While: Cmp op1,op2 ; do while (op1<op2)
Jnl L3 ; jump to L3 <iskaz1> ; <iskaz1> Cmp op2,op3 ; if op2=op3 then Jne L1 ; jump to L1 <iskaz2> ; <iskaz2> <iskaz3> ; <iskaz3> Jmp L2 ; else jump to L2
L1: <iskaz4> ; <iskaz4>
2-63
L2: Jmp while ; end if L3: ; end do
Mart 2001
Zadatak 5 Napisati program na asemblerskom jeziku mikroprocesora iz
familije 80x86 program koji učitava niz slova sa tastature. Unošenje slova završiti u trenutku kada se pritisne dirka koja nije slovo. Tada odštampati unesenu poruku, ali u obrnutom redosledu i pri tome mala slova odštampati kao velika i obrnuto. Obezbediti da se može bar 200 slova uneti u nizu, a zatim i odštampati. Primer:
unosi se: MiLoS1 štampa se nakon toga: sOlIm
Napomena: Za ispisivanje jednog karaktera, smeštenog u registru DL, koristiti poziv 02h interapta 21h. Za ispisivanje niza znakova, čija je početna adresa smeštena u registru DX, koristiti poziv 09h interapta 21h. Za čitanje dirke sa tastature sa efektom ehoa, koristiti poziv 1 interapta 21h (karakter će nakon toga biti smešten u registru AL).
Za čitanje dirke sa tastature bez efekta ehoa, koristiti poziv 07h interapta 21h (karakter će nakon toga biti smešten u registru AL). Odgovor SMAG SEGMENT DB 400 DUP (?) SMAG ENDS CODE SEGMENT ‘code’ ;početak programskog segmenta ASSUME CS:CODE, SS:SMAG
2-64
MAIN PROC FAR ;početak procedure MAIN MOV AX,CS ;inicijalizacija segmenta podataka MOV DS,AX MOV AX,0h PUSH AX MOV AH,1h PETLJA: INT 21H CMP AL,61H JB IZVAN CMP AL,7AH JA IZVAN1 AND AL,11011111B JMP DALJE IZVAN: CMP AL,41H JB IZVAN1 CMP AL,5AH JA IZVAN1 OR AL,00100000B DALJE: PUSH AX JMP PETLJA IZVAN1: POP DX CMP DX,0h JE KRAJ MOV AH,02H INT 21H JMP IZVAN1 KRAJ: MOV AX,4C00H INT 21H MAIN ENDP ;kraj procedure MAIN CODE ENDS ;kraj programskog segmenta END MAIN
Maj 2002 Zadatak 1
Na lokacijama NBROJ i MBROJ memorisane su vrednosti N i M koje se nalaze u opsegu od 1 do 8 i zadovoljavaju uslov M>N. Koristeći modularno programiranje odrediti vrednost izraza:
N! - M! Program napisati na asemblerskom jeziku mikroprocesora 80x86. Odgovor 1: ----- Modul za izračunavaje faktorijela ----- TITLE FAKTORIJEL EXTRN BROJ : WORD PUBLIC FACT PR_SEG SEGMENT FACT PROC FAR ASSUME CS : PR_SEG MOV AX,BROJ MOV CX,AX DEC CX PON_MNO: MUL CX ; u DX:AX se smešta proizvod DEC CX JNZ PON_MNO RET FACT ENDP PR_SEG ENDS END ----- Glavni modul za izračunavaje M!-N! ----- TITLE GLAVNI PROGRAM EXTRN FACT : FAR PUBLIC BROJ SMAG SEGMENT
2-65
2-66
DB 100 DUP (?) SMAG ENDS SPOD SEGMENT BROJ DW 1 DUP (?) NBROJ DW 1 DUP (?) MBROJ DW 1 DUP (?) POM DW 2 DUP (?) REZULTAT DW 2 DUP (?) SPOD ENDS GL_PROG SEGMENT GLAVNI PROC FAR ASSUME CS:GL_PROG,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX MOV AX,NBROJ MOV BROJ,AX CALL FACT
MOV POM,AX MOV POM+2,DX MOV AX,MBROJ MOV BROJ,AX CALL FACT
SUB AX,POM SUB DX,POM+2
MOV REZULTAT,AX MOV REZULTAT+2,DX MOV AH,4Ch INT 21h GLAVNI ENDP GL_PROG ENDS END GLAVNI
2-67
Dodatak
Direktive asemblera Directives, or as they are sometimes called, pseudo-ops or pseudo-instructions, are used by the assembler to help it translate Assembly language programs into machine language. Unlike the microprocessor's instructions, directives do not generate any opcode; therefore, no memory locations are occupied by directives in the final ready-to-run (exe) version of the assemblly program. To summarize, directives give directions to the assembler program to tell it how to generate the machine code; instructions are assembled into machine code to give directions to the CPU at execution time. The following are descriptions of the some of the most widely used directives for the 80x86 assembler. They are given in alphabetical order for ease of reference.
ASSUME
The ASSUME directive is used by the assembler to associate a given segment's name with a segment register. This is needed for instructions that must compute an address by combining an offset with a segment register. One ASSUME directive can be used to associate all the segment registers. For example: ASSUME CS:name1,DS:name2,SS:name3,ES:name4.
DB (Define Byte)
The DB directive is used to allocate memory in byte-sized increments. Look at the following examples: DATA1 DB 23 DATA2 DB 45,97h,10000011b DATA3 DB 'The planet Earth'
DD (Define Doubleword)
To allocate memory in 4-byte (32-bit) increments, the DD directive is used. Since word-sized operands are 16 bits wide (2 bytes) in 80x86 assemblers, a doubleword is 4 bytes.
2-68
VALUE1 DD 4563F57H
RESULT DD ? ; RESERVE 4-BYTE LOCATION DAT4 DD 25000000
DQ (Define Quadword)
To allocate memory in 8-byte increments, the DQ directive is used. In the 80x86 a word is defined as 2 bytes; therefore, a quadword is 8 bytes. DAT_64B DQ 5677DD4EE4FF45AH DAT8 DQ 10000000000000
DUP (Duplicate)
The DUP directive can be used to duplicate a set of data a certain number of times instead of having to write it over and over. DATA1 DB 20 DUP(99) ; DUPLICATE 99 20 TIMES DATA2 DW 6 DUP(5555H) ; DUPLICATE 5555H 6 TIMES DATA3 DB 10 DUP(?) ; RESERVE 10 BYTES DATA4 DB 5 DUP(5 DUP(0)) ;25 BYTES INITIALIZED TO 0 DATA5 DB 10 DUP(00,FFH) ;20 BYTES ALTERNATE 00, FF
DW (Define Word)
To allocate memory in 2-byte (16-bit) increments, the DW dirctive is used. In the 80x86 family, a word is defined as 16 bits. DATAW_1 DW 5000 DATAW_2 DW 7F6Bh
END
Every program must have an entry point. To identify that entry point the assembler relies on the END directive. The label for the entry and end point must match. HERE: MOV AX,DATASEG ;ENTRY POINT OF THE PROGR . . . END HERE ; EXIT POINT OF THE PROGRAM
ENDP (see the PROC directive)
2-69
ENDS (see the SEGMENT and STRUCT directives)
EQU (Equate)
To assign a fixed value to a name, one uses the EQU directive. The assembler will replace each occurrence of the name with the value assigned to it. FOX_VALU EQU 1200 PORT_A EQU 60H COUNT EQU 100 MASK_1 EQU 00001111B
OFFSET
To access the offset address assigned to a variable or a name, one uses the OFFSET directive. For example, the OFFSET directive was used in the following example to get the offset address assigned by the assembler to the variable DATA1: ORG 5600H DATA1 DW 2345H ... MOV SI,OFFSET DATA1 ;SI=OFFSET OF DATA1 = 5600H Notice that this has the same result as “LEA SI.DATA1”
ORG (Origin)
The ORG directive is used to assign an offset address for a variable or name. For example, to force variable DATA1 to be located starting from offset address 0020, one would write ORG 0020H DATA1 DW 41F2H This ensures the offset addresses of 0020 and 0021 with contents 0020H = (F2) and 0021H = (41).
PAGE
The PAGE directive is used to make the “.Ist” file print in a specific format. The formaat of the PAGE directive is
2-70
PAGE [lines],[columns]
PROC and ENDP (Procedure and End Procedure)
Often, a group of Assembly language instructions will be combined into a procedure so that it can be called by another module. The PROC and ENDP directives are used to indicate the beginning and end of the procedure.For a given procedure the name assigned to PROC and ENDP must be exactly the same. name1 PROC [attribute] .... name1 ENDP There are two choices fo the attrribute of the PROC: NEAR or FAR. If no attribute is given, the default is NEAR. When a NEAR procedure is called, only IP is saved since CS of the called procedure is the same as the calling program. If a FAR procedure is called, both IP and CS are saved since the code segment of the called procedure is different from the calling program.
PTR (Pointer)
The PTR directive is used to specify the size of the operand. Among the options for size are BYTE, WORD, DWORD, and QWORD. This directive is used in many different ways, the most common of which are explained below. 1.PTR can be used to allow an override of a previously defined data directive. DATA1 DB 23H,7FH,99H,0B2H DATA2 DW 67F1H DATA3 DD 22229999H ... MOV AX,WORD PTR DATA1 ; AX=7F23 MOV BX,WORD PTR DATA1+2 ;BX, B299H Although DATA1 was initially defined as DB, it can be accessed using the WORD PTR directive. MOV AL,BYTE PTR DATA2 ;AL=F1H
DATA1 DB 2FH
2-71
In the above code, notice that DATA2 was defined as WORD but it was accessed as BYTE with the help of BYTE PTR. If this had been coded as “MOV AL,DATA2”, it would generate an error since the sizes of the operands do not match. MOV AX,WORD PTR DATA3 ; AX=9999H MOV DX,WORD PTR DATA3+2 ; DX,2222H DATA3 was defined as a 4-byte operand but registers are only 2 bytes wide. The WORD PTR directive solved that poroblem. 2. The PTR directive can be used to specify the size of a directive in order to help the assembler translate the instruction. INC [DI] ; will cause an error This instruction was meant to increment the contents of the memory location(s) pointed at by [DI]. How does the assembler know whether it is a byte operand, word operand, or doubleword operand? Since it does not know, it will generate an error. To correct that, use the PTR directive to specify the size of the operand as shown next. INC BYTE PTR [SI] ; increment a byte pointed by SI or INC WORD PTR [SI] ; increment a word pointed by SI or INC DWORD PTR [SI] ; increment a doubleword pointed by SI 3. The PTR directive can be used to specify the distance of a jump. The options for the distance are FAR and NEAR. JMP FAR PTR INTI ; ensures that it will be a 5-byte instruction INTI MOV AX,1200 See the LABEL directive to find out how it can be used to achieve the same result.
SEGMENT and ENDS
In full segment definition these two directives are used to indicate the beginning and the end of the segment. They must have the same name for a given segment definition. See the following example: DATSEG SEGMENT
2-72
DATA2 DW 1200 DATA3 DD 99999999H DATSEG ENDS There are several option associated with the SEGMENT directive, as follows: name1 SEGMENT [align][combine][class] name 1 ENDS
RULES FOR LABELS AND RESERVED NAMES
Labels in 80x86 Assembly language for MASM 5.1 and higher must follow these rules: 1. Names can be composed of: alphabetic characters: A - Z and a - z digits: 0 - 9 special characters. “?” “.” “@”” “_” “$” 2. Names must begin with an alphabetic or special character. Names cannot begin with a digit. 3. Names can be up to 31 characters long. 4. The special character “.” can only be used as the first character. 5. Uppercase and lowercase are treated the same. “NAME1” is treated the same as “Name1” and “name1”. Assembly language programs have five types of labels of names: 1. Code labels, which give symbolic names to instructions so that other instructins (such as jumps) may refer to them 2. Procedure labels, which assign a name to a procedure 3. Segment labels, which assign a name to a segment 4. Data labels, which give names to data items 5. Labels created with the LABEL directive
2-73
Code labels
These labels will be followed by a colon and have the type NEAR. This enables other instructions within the code segment to refer to the instruction. The labels can be on the same line as the instruction: ADD_LP: ADD AL,[BX] ;label is on same line as the instruction
... ...
LOOP ADD_LP or on a line by themselves: ADD_LP: ; label is on a line by itself
ADD AL,[BX] ; ADD_LP refers to this instruction ...
.... LOOP ADD_LP
Procedure labels These labels assign a symbolic name to a procedure.The label can be NEAR or FAR. When using full segment definition, the default type is NEAR. When using simplified segment definition, the type will be NEAR for compact or small models but will be FAR for medium, large,and huge models. For more information on procedures, see PROC in Section A.1.
Segment labels
These labels give symbolic names to segments. The name must be the same in the SEGMENT and ENDS directives.See SEGMENT in Section A.1 for more information. Example: DAT_SG SEGMENT SUM DW ? DAT_SG ENDS
Data labels
These labels give symbolic names to data items. This allows them to be accessed by instructions.Directives DB, DW, DD, DQ, and DT are used to allocate data. Examples:
2-74
DATA1 DB 43H DATA2 DB F2H SUM DW ?
Labels defined with the LABEL directive
The LABEL directive can be used to redefine a label. See LABEL in Section A.1 for more information.
Reserved Names
The following is a list of reserved words in 80x86 Assembly language programming. These words cannot be used as user-defined labels or variable names. Register Names: AH AL AX BH BL BP BX CH CL CS CX DH DI DL DS DX ES SI SP SS Instructions: AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD CLI CMC CMP CMPS CWD DAA DAS DEC DIV ESC HLT IDIV IMUL IN INC INT INTO IRET JA JAE JB JBE JCXZ JE JG JGE JL JLE JMP JNA JNAE JNB JNBE JNE JNG JNGE JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ LAHF LDS LEA LES LOCK LODS LOOP LOOPE LOOPNE LOOPNZ LOOPZ MOV MOVS MUL NEG NIL NOP NOT OR OUT POP POPF PUSH PUSHF RCL RCR REP REPE REPNE REPNZ REPZ RET ROL ROR SAHF SAL SAR SBB SCAS SHL SHR STC STD STI STOS SUB TEST WAIT XCHG XLAT XOR
Assembler operators and directives $ * + - . / = ? [ ]
2-75
ALIGN ASSUME BYTE COMM COMMENT DB DD DF DOSSEG DQ DS DT DW DWORD DUP ELSE END ENDIF ENDM ENDS EQ EQU EVEN EXITM EXTRN FAR FWORD GE GROUP GT HIGH IF IFB IFDEF IFDIF IFE IFIDN IFNB IFNDEF IF1 IF2 INCLUDE INCLUDELIB IRP IRPC LABEL LE LENGTH LINE LOCAL LOW LT MACRO MASK MOD NAME NE NEAR NOTHING OFFSET ORG PAGE PROC PTR PUBLIC PURGE QWORD RECORD REPT REPTRD SEG SEGMENT SHORT SIZE STACK STRUC SUBTTL TBYTE THIS TITLE TYPE WIDTH WORD .186 .286 .286P .287 .386 .386P .387 .8086 .8087 .ALPHA .CODE .CONST .CREF .DATA .DATA? .ERR .ERR1 .ERR2 .ERRB .ERRDEF .ERRDIF .ERRE .ERRIDN .ERRNB .ERRNDEF .ERRNZ .FARDATA .FARDATA? .LALL .LFCOND .LIST .MODEL %OUT .RADIX .SALL .SEQ .SFCOND .STACK .TECOND .TYPE .XALL .XCREF .XLIST
Shift and rotate
2-76
3. Procesori - sinteza staze podataka i upravlja~ka jedinica
Zadatak 3.1 Neka su, za strukture staze podataka prikazane na Slici 3.1 i Slici 3.2, propagaciona ka{njenja signala du` magistrale mag_A i mag_B, Tmag_A i Tmag_B iznose 10ns, a propagaciono ka{njenje kroz ALU, TALU, iznosi 50ns. Vreme postavljanja signala (setup time - TS) za registre iznosi 8ns, vreme dr`anja (hold time- TH) je 5ns, a vreme dozvole rada izlaznih stepeni, TOE odgovaraju}ih blokova povezanih na magistrali je 5ns. Odrediti potrebno vreme da bi se obavile slede}e operacije za strukture CPU-a sa Slike 3.1 i 3.2?
(a) prenos podatka iz jednog registra u drugi za slede}e slu~ajeve:
(a1) u toku istog taktnog intervala istovremeno izvo|enje operacija Read i Write nad sadr`ajem istog registra nije mogu}e, tj. dozvoljena je samo operacija tipa (Rm)←(Rz) za z≠m.
(a2) mogu}a je operacija tipa (Rm)←(Rz) za sve vrednosti z i m.
(b) inkrementiranje sadr`aja programskog broja~a, tj. (PC)←(PC)+1, za slu~ajeve kada:
(b1) u istom taktnom intervalu nije dozvoljena operacija Read i Write nad sadr`ajem PC-a.
(b2) u istom taktnom intervalu je dozvoljena operacija Read i Write nad sadr`ajem PC-a.
Pored logi~kih operacija F=A and B, F=A or B, F=A xor B, F= not A, F= not B, F not (A and B), F= not (A or B), ALU je u stanju da obavlja i slede}e aritmeti~ke operacije:
F=A, F=B, F=A+1, F=B+1, F=A-1, F=B-1, F=A+Cin, F=B+Cin, gde su A i B ulazi ALU-a a F izlaz ALU-a.
. . .
internamagistrala B
internamagistrala A
magistrala podataka
adresna magistrala
interni pluseksterni upravlja~ki
signali
IR + dekoderinstrukcija
MDR
MAR
PC
SP
R0
Rn
Y
AddSubupravlja-
~kisignali
mag_B mag_ACin
set
reset
ALUBA
F
Slika 3.1 Interna organizacija CPU-a oko dve magistrale
Odgovor I slu~aj: Va`i za strukturu ma{ine prikazanu na Slici 3.1.
(a1) S obzirom da u istom taktnom intervalu nije dozvoljena operacija Read i Write sadr`aja istog registra, operaciju preme{tanja sadr`aja registra Rm u registar Rz razbi}emo u slede}e dve.
a.1.1: (Rm)→(Y)
a.1.2: (Y)→(Rz)
Vreme potrebno da se obavi aktivnost, specificirana kao a.1.1, iznosi:
Ta.1.1=TOE+Tmag_A+Ts+TH
=5+10+8+5=28ns
Vreme potrebno da se obavi aktivnost a.1.2 iznosi:
Ta.1.2=TALU+Tmag_B+Ts+TH
=50+10+8+5=73ns
Izlaz registra Y direktno je povezan na ulaz A ALU-a pa zbog toga nije uzeto u obzir ka{njenje TOE izlaznih stepeni registra Y.
Sistem prikazan na Slici 3.1 je sinhroni. Svaka operacija definisana je trajanjem taktnog intervala. Trajanje taktnog intervala treba da je neznatno ve}e od vremena trajanja najdu`e operacije. U konkretnom slu~aju Ta.1.2>Ta.1.1. Ako usvojimo da je trajanje taktnog intervala Tcp=75ns, tada ukupno za izvr{enje operacije (Rm)→(Rz) su potrebna dva taktna intervala, tj.:
TUa1=2*Tcp=150ns
dekoderinstrukcija
IR
PC
MAR
internamagistrala
MDR
R0
.
.
.
Rn-1
Y
AddSubupravlja-
~kisignali
Z
Sistemskamagistrala
Adresnelinije
Linije zapodatke
mag_A
interni pluseksterniupravlja~kisignali
ALUBA
F
Slika 3.2 Interna organizacija CPU-a oko jedinstvene magistrale (a2) U slu~aju da je u istom taktnom intervalu dozvoljena operacija Read i Write nad sadr`ajem istog registra, tada operacija tipa (Rm)→(Rz) za sve vrednosti m i z se obavlja za jedan taktni interval a vreme izvr{enja operacije iznosi:
Ta2=TOE+Tmag_A+TALU+Tmag_B+Ts+TH
=5+10+50+10+8+5=88ns
Usvoji}emo da je Tcp=90ns
U slu~aju a.1.2 ALU obavlja operaciju F=A, a u slu~aju a2 operaciju F=B.
(b1) Na sli~an na~in operacija (PC)+1→(PC) se razbija na dve operacije tipa
b.1.1: (PC)→(Y)
b.1.2: (Y)+1→(PC)
Vreme potrebno da se obavi b.1.1 iznosi:
Tb.1.1=TOE+Tmag_A+Ts+TH
=5+10+8+5=28ns.
Vreme potrebno da se obavi b.1.2 iznosi:
Tb.1.2=TALU+Tmag_B+Ts+TH
=50+10+8+5=73ns
Ako usvojimo da je Tcp=75ns, tada pod istim uslovima kao i u slu~aju a1, ukupno vreme potrebno da se inkrementira sadr`aj PC-a iznosi:
Tub1=2*Tcp=150ns
(b2) Kada je u istom taktnom intervalu dozvoljena operacija Read i Write nad sadr`ajem istog registra, ukupno vreme izvr{enja operacije (PC)+1→(PC) iznosi:
Tb2=TOE+Tmag_A+TALU+Tmag_B+Ts+TH
=5+10+50+10+8+5=88ns.
Usvoji}emo da je Tcp=90ns.
II slu~aj koga }e mo analizirati se odnosi na strukturu ma{ine prikazanu na Slici 3.2.
Prenos podataka tipa (Rm)→(Rz) mora da se ostvari u dva taktna intervala (jedinstvena je magistrala za prenos podataka), a aktivnosti su tipa:
k11: (Rm)→(Z)
k12: (Z)→(Rz)
Odgovaraju}a vremena bi}e:
Tk11=TOE+Tmag_A+TALU+Ts+TH
=5+10+50+8+5=78ns
Tk12=TOE+Tmag_A+Ts+TH
=5+10+8+5=28ns
Iz istih razloga kao i u prethodnom slu~aju (taktna frekvencija je identi~na za oba slu~aja i usvajamo da iznosi Tcp=80ns), tako da ukupno vreme potrebno da se izvr{i operacija je:
Tuk1=2*Tcp=160ns
ALU u ovom slu~aju obavlja operaciju F=B
Operacija tipa (PC)→(PC)+1 ~ine slede}e dve aktivnosti
k21: (PC)+1→(Z)
k22: (Z) →(PC)
Odgovaraju}a vremena bi}e:
Tk21=TOE+Tmag_A+TALU+Ts+TH
=5+10+50+8+5=78ns
ALU obavlja operaciju F=A+1 za:
Tk22=TOE+Tmag_A+Ts+TH
=5+10+8+5=28ns.
Ako usvojimo da je Tcp=80ns, tada ukupno za izvr{enje operacije (PC)→(PC)+1 potrebno je vreme od
Tk2=2*Tcp=160ns
Zadatak 3.2 Analizirajmo izvr{enje instrukcije Add R1,Broj,R1 za strukturu staze podataka prikazane na Slici 3.3a). Upravlja~ka sekvenca ove instrukcije definisana je na Slici 3.3 c). CPU se taktuje frekvencijom 10MHz. Koliko dugo CPU treba da ~eka (Wait for Ready) u koracima 2 i 5, ako usvojimo da se ~itanje memorije obavlja za 450ns? Koliki se procenat vremena CPU nalazi u pasivnom stanju (iddle state) u toku izvr{enja ove instrukcije?
ALU je u stanju da obavlja slede}e operacije : F=A, F=B, F=A+B, F=B+Cin, F=A+Cin, F=A-B, F=A-Cin, F=B-Cin.
Napomena: U toku istog taktnog intervala (vreme izvr{enja jedne mikrooperacije) istovremeno izvr{enje operacija Read i Write nad sadr`ajem istog registra nije dozvoljeno. Usvojimo da se signal Read u normalnom re`imu rada aktivira na sredini taktnog intervala 1 (4) a deaktivira na sredini taktnog intervala 2 (5). Neka trajanje svake mikrooperacije iznosi 1 taktni interval. Princip upravljanja operacijama Upis i ^itanje sadr`aja registara sad`an je na Slici 3.3 b).
Odgovor Pri taktnoj frekvenciji od 10MHz trajanje taktnog intervala iznosi tc=100ns. U normalnom re`imu rada impuls Read traje 100ns. Imaju}i u vidu da je vreme pristupa memoriji 450ns, da bi pro~itali validni podatak iz memorije potrebno je ubaciti 4 stanja ~ekanja (4tw). Tako da je ukupno vreme pristupa memoriji, tACU, sada jednako:
tACU=tc+4tw=5tw=500ns, gde je tw=tc=100ns.
Odavde se mo`e videti da je tACU za 50ns du`e od potrebnog vremena pristupa memoriji.
IR
d ek o d er in stru k c ija +u p rav lja~k a lo g ik a
Y
k am em o riji
ad resn am ag istra la
m ag istra lap o d a tak a
Z
A d dS u bu p rav lja~k
isig n a liA L U -a
M D R
M A R
P C
S P
R 0
R n -2
C i
rese t
se t
C in
A L UBA
F
in te rn iu p rav lja~k isig n a li
in te rn am ag istra la
a) Organizacija staze podataka CPU-a oko jedinstvene interne
magistrale
R(i-1)
Y
Z
interna magistralaCPU-a
R(i-1)in
R(i-1)out
YinYout
Cin
Zin
Zout
ALUBA
F
b) princip upravljanja upisom i ~itanjem sadr`aja registara
korak akcija 1. PCout, MARin, Read, Clear Y, Set Cin, F=B+Cin, Zin 2. Zout, PCin, Wait for READY 3. MDRout, IRin 4. Adresno_polje_IRout, MARin, Read 5. R1out, Yin, Wait for READY 6. MDRout, F=A+B, Zin 7. Zout, R1in, End c) Upravlja~ka sekvenca za izvr{enje instrukcije Add sadr`aja memorijske lokacije BROJ sa sadr`ajem registra R1 i sme{taj
rezultata u registar R1.
Slika 3.3: Organizacija CPU-a, princip upravljanja i sekvenca izvr{enja operacije Add.
Test pitanje 3.4 Za strukturu procesora sa Slike 3.3 a), iz zadatka 3.2, odrediti upravlja~ku sekvencu koja va`i kod izvr{enja instrukcije bezuslovnog grananja. Adresa grananja se dobija sabiranjem ofseta X koji je specificiran u okviru adresnog polja instrukcije grananja sa teku}om vredno{}u PC-a.
Odgovor korak akcija 1. PCout, MARin, Read, Clear Y, SetCin, F=B+Cin, Zin 2. Zout, PCin, Wait for Ready 3. MDRout, IRin 4. PCout, Yin 5. Adresno_polje_IRout, F=A+B, Zin 6. Zout, PCin, End
Zadatak 3.3 Napisati sekvencu mikrooperacija potrebnih da struktura sa Slike 3.2 obavi slede}e operacije:
1) saberi sadr`aj memorijske lokacije BROJ sa sadr`ajem registra R1 i sadr`aj smesti u BROJ.
2) saberi sadr`aj memorijske lokacije BROJ sa sadr`ajem registra R1 i sadr`aj smesti u R1
3) saberi sadr`aj memorijske lokacije ~ija se adresa nalazi na memorijskoj lokaciji BROJ sa sadr`ajem registra R1 a rezultat smesti u R1.
(a) Ponoviti aktivnosti pod (a) i (b) za strukturu prikazanu na Slici 3.4.
Usvojiti da, u op{tem slu~aju, instrukciju ~ine n re~i i da se svaka re~ nalazi u posebnoj memorijskoj lokaciji. Prva re~ instrukcije
uvek specificira operaciju i adresni na~in rada, a naredne sadr`e adrese memorijskih lokacija izvori{nih i odredi{nih operanada.
Napomena: U toku jednog taktnog intervala istovremeno izvr{enje operacija Read i Write nad sadr`ajem istog registra nije dozvoljena.
Odgovor a) format instrukcija Add BROJ,BROJ,R1 je oblika:
opkôd
memorijska adresa prvog izvori{nog i odredi{nog operanda
BROJ
sekvenca mikrooperacija karakteristi~nih za izvr{enje operacije Add BROJ,BROJ,R1; (BROJ)←(BROJ)+(R1) za sistem sa Slike 3.2, je oblika:
korak akcija 1. PCout, MARin, Read, F=B+1, Zin 2. Zout, PCin, Wait za Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B, Zin 5. Zout, PCin, Wait za Ready 6. MDRout, Yin 7. R1out, F=A+B, Zin 8. Zout, MDRin 9. PCout, MARin, Write, F=B+1, Zin 10. Zout, PCin, Wait za Ready, End
b) sekvenca mikrooperacija karakteristi~na za izvr{enje operacije Add R1,R1,BROJ; (R1)←(R1)+(BROJ) za sistem sa Slike 3.2, je oblika:
korak akcija 1. PCout, MARin, Read, F=B+1, Zin 2. Zout, PCin, Wait za Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B+1, Zin 5. Zout, PCin, Wait za Ready 6. MDRout, Yin 7. R1out, F=A+B, Zin 8. Zout, R1in, End
c) sekvenca mikrooperacija karakteristi~nih za izvr{enje operacije Add R1,@(BROJ),R1; (R1)←((BROJ))+R1, za sistem sa Slike 3.2, je oblika:
korak akcija 1. PCout, MARin, Read, F=B+1, Zin 2. Zout, PCin, Wait za Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B+1, Zin 5. Zout, PCin, Wait za Ready 6. MDRout, MARin, Read 7. R1out, Yin, Wait za Ready 8. MDRout, F=A+B, Zin 9. Zout, R1in, End
d1) za strukturu sa Slike 3.4, sekvenca mikrooperacija karakteristi~nih za izvr{enje operacije Add BROJ,BROJ,R1, je oblika:
korak akcije 1. PCout, MARin, Read,F=B+1, Zin 2. Zout, PCin, Wait za Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B+1, Zin 5. Zout, PCin, Wait za Ready, R1out, Yin 6. MDRout, F=A+B, Zin 7. Zout, MDRin, Write 8. Wait za Ready,End
d2) Za strukturu sa Slike 3.4, sekvenca mikrooperacija karakteristi~nih za izvr{enje operacije Add R1,BROJ,R1 je oblika:
korak akcije 1. PCout, MARin, Read, F=B+1, Zin 2. Zout, PCin, Wait za Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B+1, Zin 5. Zout, PCin, Wait za Ready, R1out, Yin 6. MDRout, F=A+B, Zin 7. Zout, R1in, End
. . .
internamagistrala B
internamagistrala A
magistrala podataka
adresna magistrala
interni pluseksterni upravlja~ki
signali
IR + dekoderinstrukcija
MDR
MAR
PC
SP
R0
Rn
Y
AddSubupravlja-
~kisignali
mag_B mag_ACin
set
reset
ALUBA
F
Z
Slika 3.4: Interna oranizacija CPU-a oko dve magistrale
Zadatak 3.4 Na Slici 3.5 prikazan je deo interne organizacije CPU-a. Prenos podataka izme|u obe magistrale mag_1 i mag_2 ostvaruje se preko ALU-a. ALU je u stanju da obavlja i slede}e operacije F=A, F=B, F=A+1, F=B+1, F=A-1, F=B-1, gde su A i B ulazi ALU-a, a F izlaz ALU-a.
Napisati sekvencu mikrooperacija koja je karakteristi~na za fazu pribavljanja i izvr{enja instrukcije JSR (Jump to Suboutine). Prva re~ je opkôd, a druga predstavlja po~etnu adresu potprograma. Povratna adresa se sme{ta u magacin. Na vrh magacina pokazuje registar SP.
Odgovor Sekvenca mikroperacija ima slede}i oblik:
korak akcije 1. PCout, MARin, Read, F=B+1, Zin 2. Zout, PCin, Wait for Ready 3. MDRout, IRin 4. PCout, MARin, Read, F=B+1, Zin 5. Zout, PCin, Wait for Ready 6. MDRout, Yin 7. SPout, F=B-1, Zin 8. Zout, SPin 9. PCout, F=B, Zin 10. Zout, MDRin, SPout, MARin, Write 11. F=A, Zin, Wait for Ready 12. Zout, PCin, End
. . .
ka memoriji i U/Ipodsistemu
magistrala podataka
adresna magistrala
interni pluseksterni upravlja~ki
signali
IR + dekoderinstrukcija
MDR
MAR
PC
SP
R0
Rn-2
Y
AddSubupravlja-
~kisignali
mag_2 mag_1Cin
set
reset
ALUBA
F
Z
Slika 3.5 : Interna organizacija CPU-a Napomena: U toku istog taktnog intervala (mikrooperacija) istovremeno izvr{enje operacija Read i Write nad sadr`ajem istog registra nisu dozvoljene.
Zadatak 3.5 Interna organizacija CPU-a prikazana je na Slici 3.6. Ulazi ALU-a, registri i magistrale mag_A i mag_B su obima 32-bita. Spoljna magistrala za podatke je po obimu 16-bitna. Na~in prenosa podataka izme|u MDR-a i spoljne memorije je slede}i: podatak tipa bajt uvek se prenosi preko LS dela MDRL-a, a MS deo MDRL-a u zavisnosti od tipa operacije popunjava se nulama ili se znakovno pro{iruje na 16/32 bita. Podatak tipa re~ (16 bitova)
uvek se prenosi preko MDRL-a, a podatak tipa duga re~ (32 bita) prenosi se preko MDR-a tako da se prvo prenose LS 16 bitova preko MDRL-a a nakon toga MS 16 bitova preko MDRH-a. Opkôd instrukcije je 16-bitni. Ofset adresa i direktna adresa izvori{nih i odredi{nih operanada specificiraju se u okviru druge ili tre}e re~i instrukcije. Ulaz B ALU-a povezan je preko multipleksera MUX na mag_A ili konstantu 2. Neka postoje dve grupe od po osam registara, poznatih kao D0-D7 registri za podatke i R0-R7 adresni registri.
Odrediti upravlja~ku sekvencu slede}ih instrukcija:
a) Sub.W 200(R3),D4 b) Cmp.W (R2)+,D1
Odgovor Operacija je tipa D4-M(R3+200)→D4, a odgovoraju}a sekvenca je oblika: korak
akcije komentar
1. PCout, MUX0, F=B, MARin, Yin, Read ; pribavi se opkôd ins.
2. Yout, MUX1, F=A+B, PCin, Wait for Ready ;
3. MDRLout, IRin ;
4. PCout, MUX0, F=B, MARin, Yin, Read ; druga re~ instrukcije
5. Yout, MUX1, F=A+B, PCin, Wait for Ready ; ofset=200
6. MDRLout, MUX0, F=B, Yin ; privrem. sme{t. u Y
7. R3out, MUX0, Yout, F=A+B, MARin, Read ; formira se M(R3+200)
8. D4out, MUX0, F=B, Yin, Wait for Ready ; D4→Y 9. MDRLout, MUX0, F=A-B, MARin, D4in ; D4-M(R3+200) →D4
Operacija je tipa D1-(R2), R2+2→R2, a sekvenca: korak
akcije komentar
1. PCout, MUX0, F=B, MARin, Yin, Read ; pribavljanje opkôda instrukcija
2. Yout, MUX1, F=A+B, PCin, Wait for Ready ;
3. MDRLout, IRin ;
4. R2out, MUX0, F=B, Yin, MARin, Read ; prihvata se podatak sa lokacije
5. Yout, MUX1, F=A+B, R2in, Wait for Ready ; M(R2), inkrementira R2
6. D1out, MUX0, F=B, Yin ; i D1→Y 7. Yout, MDRLout, F=A-B, Set markeri uslova ; D1-M(R2)
32
dekoderinstrukcija
IR
MAR
MDRH | MDRL
PC
R0
R7
InternamagistralaA
Internamagistrala
B
adresnelinije
linijezapodatke
D0
D7
2
32 32
Y
16
M 0 U X 1
mag_Amag_A
upravlja~kisignali
ALUBA
F
Slika 3.6 : Interna organizacija 32-bitnog CPU-a organizovanog
oko dve magistrale
Test pitanje 3.9 Na Slici 3.12 prikazan je blok dijagram staze podataka jednog 32-bitnog procesora.
RF polje ~ine 32 registra op{te namene R0 do R31. U registru R0 uvek se ~uva 0, u registru R1 vrednost 1, a u registru R2 vrednost 4.
Procesor izvr{ava slede}ih pet razli~itih tipova instrukcija:
• aritmeti~ko-logi~ke tipa registar-registar,
• aritmeti~ko-logi~ke tipa registar-konstranta,
• obra}anje memoriji tipa Load/Store,
• uslovno grananje, i
• bezuslovno grananje.
Ukazati na format koji koristi svaka od nabrojanih instrukcija i na osnovne aktivnosti (mikrooperacije) koje se obavljaju u toku faze pribavljanja/dekodiranja kao i izvr{enja nabrojanih instrukcija.
Odgovor Dijagram stanja ciklusa pribavljanje/dekodiranje prikazan je na Slici 3.13.
Upravlja~ka jedinica
IR
PC
MAR
32 registra RF polje
MDR
S C O Zmarker registar
D_mag S1_mag S2_mag
adrese
podaci
upravlja~kisignali
ALU
B
A
F
Slika 3.12 Staza podataka jednog jednostavnog procesora. U toku ciklusa pribavljanja instrukcije koji je identi~an za sve instrukcije, obavljaju se slede}e aktivnosti: MAR ← PC IR ← MDR PC ← PC + 4
Nakon faze dekodiranja, koja je identi~na za sve instrukcije, sledi faza izvr{enja koja se razlikuje od instrukcije do instrukcije. A. Kod aritmeti~ko/logi~kih instrukcija tipa registar-registar, obavlja se slede}a aktivnost Rd ← Rs1 <operacija> Rs2 gde su Rs1 i Rs2 sadr`aji izvori{nih registara, a Rd sadr`aj odredi{nog registra.
Sa aspekta magistrala, ova aktivnost se mo`e ras~laniti na slede}e korake: S1_mag ← Rs1; S2_mag ← Rs2 D_mag ← S1_mag <operacija> S2_mag Rd ← D_mag
25=32 registra Format instrukcije imao bi oblik:
opkôd Rd Rs1 Rs2 neiskori{}eno
6 5 5 5 11
B. Kod aritmeti~ko logi~kih instrukcija tipa registar-konstanta imali bi slede}e aktivnosti
11+5=16 bitova za konstantu S1_mag ← Rs1; S2_mag ← IR15-0
D_mag ← S1_mag <ALUop> S2_mag Rd ← D_mag
MAR ← PC
IR ← MDR
PC ← PC+4
dekodiranje
registar-registar
registar-konstanta
obra}anjememoriji
branch
store
dekodiranje
pribavljanjeinstrukcije
izvr{enje
Slika 3.13 Dijagram stanja ciklusa pribavljanje/dekodiranje
S1_mag ← Rs1S2 mag ← Rs2
D_mag ← S1_mag < ALUop > S2_mag
Rd ← D_mag
Slika 3.14 Dijagram stanja ciklusa izvr{enja
aritmeti~ko/logi~ke instrukcije registar-registar Format instrukcije bi imao oblik:
opkôd Rd Rs1 konstanta
6 5 5 16
C. Instrukcija Load/Store ima slede}e karakteristike:
Kod obe instrukcije Load/Store adresa memorijske lokacije se specificira sadr`ajem izvornog adresnog registra Rs1 plus neposrednim 16-bitnim ofsetom koji je sastavni deo instrukcije.
opkôd Rd Rs1 16-bitni ofset
odredi{ni adresni
a) Load format
opkôd Rd Rs1 16-bitni ofset
izvori{ni adresni
b) Store format
Aktivnosti koje se obavljaju u toku Load instrukcije su slede}e (klju~ne sa aspekta razumevanja): S1_mag ← Rs1; S2_mag ← IR15-0
D_mag ← S1_mag + S2_mag MAR ← D_mag D_mag ← MDR ; MDR->S1_mag, D_mag <- S1_mag <ALU*op>
na D_mag je adresa mem. lokac. sa koje treba pročitati podatak
Rd ← D_mag Napomena: <ALU*op> je operacija tipa F = A Za instrukciju Store klju~ne su slede}e aktivnosti
S1_mag ← Rs1; S2_mag ← IR15-0
D_mag ← S1_mag + S2_mag MAR ← D_mag
na D_mag je adresa mem. lokac. u koju se smešta sadržaj registra Rd S1_mag ← Rd
MDR ← S1_mag D. Tipi~ne instrukcije tipa Branch su slede}:
BEQ R4,R5,L1 ; Branch to L1 if R4 = R5 BL R4,R5,L1 ; Branch to L1 if R4 < R5 BNE R4,R5,L1 ; Branch to L1 if R4 ! = R5 BGE R4,R5,L1 ; Branch to L1 if R4 >= R5
Pogodan format instrukcija je:
opkôd Rd Rs1 16-bitni ofset
odredi{ni izvori{te 1 izvori{te 2
gde, za konkretni slu~aj, R4 je Rd, R5 je Rs1, a L1 = PC + 16-bitni ofset.
Kod svake od nabrojanih instrukcija Branch, ispituje se specificirani uslov. Ako je uslov istinit, izra~unava se ciljna adresa i puni u PC. Uslov grananja koji se formira na osnovu odnosa izmedju Rd i Rs1, proverava se ispitivanjem rezultata oduzimanja Rd od Rs1, na slede}i na~in:
S1_mag ← Rs1 ; S2_mag ← Rd uslov ← S1_mag - S2_mag ; uslov se pamti postavljanjem marker-bitova S, C, O, Z Ciljna adresa se izra~unava dodavanjem 16-bitnog ofseta sadr`aju programskog broja~a. ALUop ← PC + IR15-0
U su{tini, kona~ni korak predstavlja punjenje PC-a ako je uslov ispunjen, na slede}i na~in: if uslov = True then PC ← ALUop a kada uslov nije ispunjen, PC pokazuje na narednu instrukciju u programu.
E. Instrukcija Jump uzrokuje bezuslovnu promenu sekvence izvr{enja na novu lokaciju. Tipi~an primer je instrukcija
J L1 ; Jump na L1 Format Jump instrukcije ima oblik:
opkôd 26 bitni ofset
6 26
I u ovom slu~aju koristi se PC relativno adresiranje, tj.
PC ← PC + IR25-0
Pored PC-relativnog adresiranja, za realizaciju Branch i Jump instrukcija mogu}e je koristiti i registarsko indirektno adresiranje. Format instrukcije Jump koja koristi registarsko-indirektno adresiranje ima oblik
opkôd ne koristi se Rs1 16-bitni ofset
6 5 5 16
operacija adresni registar
Tipi~ni primeri su: J [R3] ; skok na lokaciju ~ija je adresa u R3 J 100[R3] ; skok na lokaciju ~ija je adresa u R3 plus 100 Kod instrukcije J 100[R3] obavi}e se slede}e aktivnosti: S1_mag ← Rs1; S2_mag ← IR15-0
D_mag ← S1_mag + S2_mag
PC ← D_mag
Test pitanje 3.11 Ukazati na osnovne karakteristike MIN procesora.
Odgovor Dizajn procesora koji sadr`i minimalan skup logi~kih kola potrebnih za implementaciju CPU-a naziva se MIN procesor.
MIN ima dva registra koja su vidljiva programeru (Slika 3.17): (1) 8-bitni registar podataka nazvan akumulator, ACC; i (2) 14-bitni programski broja~, PC.
PC13 PC0
ACC7 ACC0
ACC
PC
Slika 3.17: Registri MIN-a vidljivi programeru
Drugi registri koji se koriste za opis MIN-a su:
MAR-memorijsko adresni registar obima 14-bita,
MDR-memorijski registar podataka obima 8-bitova,
IR-instrukcioni registar obima 16-bitova.
Na Slici 3.18 su prikazani ovi registri kao i putevi podataka koji povezuju ove registre sa ostalim gradivnim blokovima procesora i memorije.
Memorija sistema sadr`i 214 bajtova. Osnovne memorijske operacije su:
READ - sistem pristupa lokaciji specificiranoj sadr`ajem registra MAR i kopira bajt sa te lokacije u registar MDR.
WRITE - kopira se bajt koji se nalazi u registru MDR u memorijsku lokaciju specificiranu sadr`ajem registra MAR.
8IR
15 13 7 0
7 0
07
13 0
13 0
MAR
PC
memorija
MDR
ACC
7 0
- +
ALU
8
8
8
1414
14
14 0000h bazna adresa
3FFFh max. adresa
adresapristupa
Slika 3.18 Implementacija MIN-a
Svaku instrukciju MIN-a ~ine dva bajta. Format instrukcije prikazan je na Slici 3 19. Instrukciju ~ine slede}a dva polja: (a) F - dvobitno funkcijsko polje; i (b) A - 14-bitno adresno polje. Zna~enje funkcijskih kôdova prikazano je na Slici 3.20. Da bi izvr{io instrukciju, procesor mora da obavi slede}e korake: G1. pribavi instrukciju G2. inkrementira PC G3. dekodira instrukciju G4. izvr{i instrukciju
F A
15 13 0
Slika 3.19 Format instrukcija MIN-a
operacija Funkcijski kôd Sto 0 Sub 1 JNG 2
Slika 3.20 Funkcijski kodovi MIN-a Ilustracije radi, aktivnosti koje se odnose na izvr{enje instrukcije Sto su slede}i:
korak G1
korak G2
korak G3
korak G4
D1. kopira se PC u MARD2. READ memorijaD3. kopira MDR u levu polovinu IR-aD4. inkrementira PCD5. kopira PC u MARD6. READ memorijaD7. kopira MDR u desnu polovinu IR-a
D8. inkrementira PC
D9. if bit IR15≠0 or IR14≠0, go na drugo mesto
D10. kopiraj IR13...IR0 u MARD11. kopiraj ACC u MDRD12. WRITE memorijaD13. go to korak D1
Ako napi{emo istu semantiku u registar-transfer formi dobi}emo ma{inski oblik instrukcije koji je prihvatljiviji za programera.
Neka IRH i IRL ozna~avaju vi{i i ni`i deo registra IR, a F i A su polja instrukcije koja se ~uvaju u IR. Simbol ":=" predstavlja operator dodele. Mikrooperacije pomo}u kojih se implementira instrukcija Sto su slede}e:
D1. MAR:=PC; D2. READ; D3. IRH:=MDR; D4. PC:=PC+1 D5. MAR:=PC; D6. READ; D7. IRL:=MDR; D8. PC:=PC+1; D9. if F≠0 then go to na drugo mesto; D10. MAR:=A; D11. MDR:=ACC; D12. WRITE; D13. go to korak D1;
Treba ukazati da su koraci G1 i G2, tj. mikrooperacije D1...D8, identi~ni za sve MIN instrukcije. MIN procesor ima, u svom repertoaru, samo jednu upravlja~ku instrukciju JNG - jump on negative. U toku izvr{enja instrukcije JNG procesor testira sadr`aj ACC-a i, u zavisnosti od ishoda testa, mo`e da preuzme slede}e aktivnosti:(a) kada uslov nije ispunjen inkrementira PC kako bi ukazao na narednu instrukciju u programu (JNG pona{a se kao ne-upravlja~ka instrukcija); (b) kada je uslov ispunjen, puni PC na adresu koja je specificirana instrukcijom JNG. Test se zasniva na vrednosti bita ACC7, tj. ako je ACC7=1 dolazi do grananja, a za slu~aj da je ACC7=0, procesor produ`ava sa izvr{enjem naredne instrukcije u programu. Nakon izvr{enja instrukcije Sub, u registar ACC upisa}e se razlika koju ~ine prethodni sadr`aj registra ACC i sadr`aj memorijske lokacije specificiran instrukcijom Sub, tj. ACC←ACC'-M(A) gde: M(X) ozna~ava sadr`aj memorijske lokacije ~ija je adresa X; A se odnosi na adresu specificiranu instrukcijom Sub; ACC'-odgovara sadr`aju registra ACC pre po~etka izvr{ejna instrukcije.
Programska sekvenca kojom se u ACC upisuje sadr`aj memorijske lokacije X ima oblik (memorijska lokacija u kojoj se privremeno ~uva podatak nazva}emo T). Sto T; ACC→T Sub T; ACC←ACC'-T ⇒ ACC=0 Sub X; ACC←0-X ⇒ ACC=-X Sto T; ACC→T ⇒ T=-X Sub T; ACC=ACC'-T ⇒ ACC=-X-(-X)=0 Sub T; ACC←ACC-T ⇒ ACC=-(-X)=X Ova programska sekvenca ekvivalentna je operaciji Ld X, tj. Load X to ACC. Programska sekvenca kojom se vr{i sabiranje sadr`aja memorijske lokacije X sa sadr`ajem akumulatora ima oblik. (Ova sekvenca je ekvivalentna operaciji Add X, tj. Add X to ACC) Sto T; ACC→T Sub T; ACC←ACC'-T ⇒ ACC=0 Sub T; ACC←ACC'-T ⇒ ACC=-T Sub X; ACC=ACC'-X ⇒ ACC=-T-X Sto T; ACC→T ⇒ T=-T-X Sub T; ACC=ACC'-T ⇒ ACC=-T-X-(-T-X)=0 Sub T; ACC←T ⇒ ACC=0-(-T-X)=T+X Naredni primer ilustruje kako se obavlja bezuslovno grananje na lokaciji Y, tj. Jmp Y
JNG Y; if ACC7=1 go to Y, else continue Sto T; ACC→T Sub T; ACC=ACC"-T ⇒ ACC=0 Sub T; ACC=ACC'-T ⇒ ACC=-T tj ACC7=1 JNG Y; go to Y
Test pitanje 3.12 Struktura jednostavnog akumulatorski-zasnovanog procesora prikazana je na Slici 3.21.
Pretpostavimo da se preko registra DR ka memoriji M u jednom taktnom intervalu prenose 32-bitne re~i. Podatak D koji se sme{ta u DR mo`e biti 16- ili 32-bitni. Ako je D 16-bitni tada se on u trenutku upisa u memoriji automatski pro{iruje na 32-bita. Obim podatka D odredjuje marker S, tako da S = 0 ozna~ava da je podatak 16-bitni, a S = 1 da je 32-bitni. Na~in pro{irenja (ekstenzije) definisan je drugim markerom, pri ~emu E = 0 ozna~ava pro{irenje nulama, a E = 1 pro{irenje znaka. Izvr{iti projektovanje logike na nivou registra (RTL = Register Transfer Level) koja }e biti u stanju da obavi neophodno pro{irenje znaka.
Dekoderinstrukcija
IR MAR PC
Upravlja~kisignali
Upravlja~kajedinica (UJ)
DR ACC
Sistemska magistrala
ALU procesnajedinica
(PJ)
ka/iz memorije iliU/I uredjaja
Slika 3.21 Jednostavna akumulatorski-zasnovana CPU jedinica
Napomena: MAR - memorijsko adresni registar IR - instrukcioni registar PC - programski broja~ ACC - akumulator DR - registar podataka ALU - akumulatorsko logi~ka jedinica
Odgovor Na Slici 3.22 prikazana je logika za pro{irenje znaka koja koristi par multipleksera. Prvi multiplekser MUX1, koristi marker E kao selekt signal, a drugi multiplekser - MUX2, za selekciju koristi marker S.
S
16
1
16
16
16
1
ta~kaprespajanja
1 na 16
DR15:DR0
DR31:DR16
Ka memoriji
01531
DR15
DR registar
E1
01 1
0 1S
MUX1 2-na-1
0 1S
MUX1 2-na-1
Slika 3.22 Logika za upis podatka u memoriji koja ima
mogu}nost pro{irenja sa nulom ili pro{irenja sa znakom
Napomena: MUX1 je 1-bitni multiplekser 2-na-1; MUX2 je 16-bitni multiplekser 2-na-1
Test pitanje 3.13 Registar DR sa Slike 3.21 (test pitanje 3.12) mo`e da prenese 32-bitnu re~ ka memoriji M u jednom taktnom intervalu. Podaci koji se prihvataju od strane DR-a radi upisa u M, mogu biti obima 4, 8, 16 ili 32-bita. No, nezavisno od toga kog su oni obima, u memoriji se podaci uvek upisuju kao 32-bitni koriste}i pri tome metod pro{irenja poznat kao ekstenzija znaka. Dvobitni marker S u CPU-u se postavlja na 00, 01, 10 ili 11 sa ciljem da uka`e kada je obim podatka 4-, 8-, 16- ili 32-bitni, respektivno.
Izvr{iti projektovanje logike na RTL nivou koja implementira tehniku pro{irenja znaka.
Odgovor Re{enje je prikazano na Slici 3.23.
DR3DR7
0
S MUX1 4 na 1
123
15 7 3 031DR15
DR15 DR7 DR3
DR15:DR8
Ka memoriji
S
2
2
2
16161616
8888
DR7:DR4
1
8 4
444DR3:DR0
16
DR - registar
0S
1MUX32 na 1
S
0
S MUX2 4 na 1
123
2
Slika 3.23 Logika za upis podataka u memoriju koja koristi
mogu}nost pro{irenja znaka
Zadatak 3.17 Za strukturu sa Slike 3.32, odrediti vrednost upravlja~kih signala S1, S0 kao i L2, L1, L0, da bi se ostvarili slede}i tipovi prenosa: (a) R0←R2; (b) R0←R1, R2←R1; (c) R0←R1, R1←R0.
n
S1 S00 MUX1 3 na 12
Load
R0
Load
R1
Load
R2
L0 L1 L2
punjenje
selekcija
n
n
n
n
n
Slika 3.32 Ulazi registara povezanih na jedinstvenu
magistralu
Odgovor registarski prenos
selekcija S1 S0
punjenje L2 L1 L0
R0←R2 1 0 0 0 1 R0←R1, R2←R1 0 1 1 0 1 R0←R1, R1←R0 nemogu}e nemogu}e
Zadatak 3.18 Za strukturu sa Slike 3.33, odrediti vrednost upravlja~kih signala S0, S1, S2 i L0, L1, L2 da bi se ostvarili slede}i tipovi prenosa: (a) R0←R2; (b) R0←R1, R2←R1; (c) R0←R1, R1←R0.
Odgovor registarski prenos
selekcija punjenje
S2 S1 S0 L2 L1 L0 R0←R2 x x 0 0 0 1
R0←R1, R2←R1 1 x 1 1 0 1 R0←R1, R1←R0 * ne preporu~uje se kod transparentnih le~eva
** x 0 1 0 ↓ ↓ Napomena: (a) * Ako su registri R0, R1 i R2 realizovani kao transparentni le~evi ova operacija se ne preporu~uje jer se formira petlja tipa R0→MUX1→R1→MUX0 ; (b) ** Slu~aj kada su R0, R1 i R2 realizovani kao le~evi koji se pune opadaju}om ivicom impulsa Lx: (c) Simbol "x" ukazuje da vrednost na tom ulazu nije od zna~aja.
n
n
S0 MUX01 2 na 1
S0 MUX11 2 na 1
S0 MUX21 2 na 1
L
Ul R0 Iz
L
Ul R1 Iz
L
Ul R2 Iz
S0 L0
S1
S2
L1
L2
n
n
n
n
Slika 3.33 Ulazi registara povezani na namenske
multipleksere
Zadatak 3.19 Logi~ka struktura registra sa bidirekcionim ulazom prikazana je na Slici 3.34.
Za strukturu sa Slike 3.35 odrediti vrednost upravlja~kih signala E2, E1 E0 i L2, L1, L0 da bi se ostvarili slede}i tipovi prenosa: (a) R0←R2; (b) R0←R1, R2←R1; (c) R0←R1, R1←R0.
l
R
punjenje
En
n n
n
≡ R
Load
En
n
Slika 3.34 Simbol registra sa bidirekcionim ulazno-izlaznim linijama
R0
L0
E0
n
R1
L1
E1
n
R2
L2
E2
n
E2 E1 E0
dozvola L1L2
punjenje
Slika 3.35 Tro-stati~ka magistrala koja koristi registre sa
bidirekcionim linijama
Odgovor registarski prenos
dozvola
E2 E1 E0 punjenje
L2 L1 L0 R0←R2 1 0 0 0 0 1 R0←R1, R2←R1 0 1 0 1 0 1 R0←R1, R1←R0 nije dozvoljeno - dolazi do sudara na magistrali
Test pitanje 3.19 Na Slici 3.36 prikazana je blok {ema jednog RF polja. Pokazati kako izgleda njegova interna struktura.
1
B_adreseA_adrese2 2
n n
n 2
Write D_podaci D_adrese
4*n RF polje
A_podaci B_podaci
Slika 3.36. Blok {ema RF polja
Odgovor
0 Sel1 M2 U Y3 X
0 Sel1 M2 U Y3 X
R0load
R1load
R2load
R3load
n
n
n
n
0 1 2 3
dekoder
2D_ adrese
1
Write D_podaci
n
A_podaci
A_adrese B_adrese
n
n
n
n
n
n
n
nn
n n
2 2
B_podaci
Slika 3.37 Logička struktura 4 * n RF polja
Zadatak 3.23 Staze podataka se koriste kod svih standardnih procesora i ASIC implementacija sa ciljem da obave kompleksna numeri~ka izra~unavanja ili manipulacije nad podacima. Pored aritmeti~kih jedinica, logi~kih jedinica i jedinica za pomeranje podataka, staze-podataka sadr`e i memorijske elemente koji se koriste za privremeno ~uvanje podataka. Ukazati na slo`enost strukture staze-podataka koja se koristi da izvr{i sabiranje 100 brojeva shodno slede}oj relaciji:
suma= ∑=
100
1iix
Odgovor Izra~unavanje se mo`e implementirati iterativno, deklarisanjem promenljive suma kao privremene promenljive, inicijalno postavljena na nuli, a izvr{enjem slede}ih iskaza
suma=0 petlja:
for i=1 to 100 suma=suma + xi
end petlja Telo petlje se mo`e izvr{iti na 32-bitnoj stazi podataka koju ~ini jedan registar nazvan Akumulator i ALU. Promenljiva suma bi}e memorisana u Akumulatoru. Pri svakom taktnom intervalu ALU }e vr{iti sabiranje nove xi i suma a rezultat }e se ponovo ~uvati u Akumulatoru.
Na Slici 3.67 prikazana je jedna jednostavna staza podataka koja mo`e da obavi specificiranu sekvencu iskaza. Sastavni deo staze podataka predstavlja Selektor tipa 2-na-1. Selektor bira “0” ili ulaz spoljni-operand koji se direktno vodi na ulaz A ALU-a. Desni operand (ulaz B ALU-a) je uvek sadr`aj Akumulatora. Izlaz Akumulatora istovremeno pobudjuje jedan trostati~ki bafer (TSB).
Akumulator se u principu realizuje kao pomera~ki registar sa paralelnim punjenjem. Na Slici 3.67 b) prikazan je sadr`aj 9-bitne upravlja~ke re~i koja specifira vrednosti upravlja~kih signala za Selektor, ALU, Akumulator i TSB. Sve komponente u stazi podataka manipuli{u sa podacima obima 32-bita.
Pri svakom taktnom intervalu, specifi~na upravlja~ka re~ defini{e rad staze - podataka. Da bi odredili sumu od 100 brojeva potrebna su 102 takta intervala. Upravlja~ka re~ bi}e ista za sve taktne intervale sa izuzetkom prvog i zadnjeg. U prvom taktnom
intervalu neophodno je obrisati sadr`aj Akumulatora. U naredna 100 taktna intervala sabira se novi spoljni operand (tj. podatak) sa akumuliranom sumom. U zadnjem taktnom intervalu akumulirana suma se generi{e na izlazu.
a) {ematski dijagram staze podataka
8 7 6 5 4 3 2 1 0
selekcija ulaza
ALU upravljanje
iznos i smer pomeranja
upravljanje akumulatorom
dozvola izlaza
b) upravlja~ka re~
Slika 3.67 Jednostavna staza podataka sa akumulatorom
I pored toga {to se staza podataka sa Slike 3.67 mo`e efikasno koristiti za izvr{enje jednostavnih aritmeti~kih izraza,
implementacija komplikovanijih izraza obi~no zahteva kori{}enje po nekoliko privremeno promenljivih. Zbog ovoga pogodnije je kao stazu-podataka koristiti strukturu koja umesto Akumulatora koristi registarsko-polje (RF-registar file). Na Slici 3.68 prikazana je struktura jedne kompleksnije staze-podataka koju ~ini Selektor, tro-portno 8*32-bitno registarsko RF polje, ALU, Pomera~ i TSB-ovi. U konkretnoj realizaciji oba operanda se dobavljaju iz RF polja, a takodje se u RF polje sme{ta rezultat u toku svakog taknog intervala. Rad ALU-a i Pomera~a opisan je tablicama prikazanim na Slikama 3.68 b) i 3.68 c), respektivno. Sadr`aj upravlja~ke re~i definisan je tablicom na Slici 3.68 d). Uo~imo da je upravlja~ka re~ obima 20 bitova.
ulazni_port
selektorS
456
ALU
MS1
S0
12 pomera~
IL IR
S1
S0
S23
0
7
11
8-10
12-14
1516-18
ClK
WAWE
RAAREA
RABREB
8*mRF polje
3
3
3
izlazni_port
rezultantna mag.
A B
mag A mag B
"0" "0"
19
a) Staza podataka
M F1 F0 ALU operacija 0 0 0 komplement A 0 0 1 AND A 0 1 0 ExOR A 0 1 1 OR A 1 0 0 dekrement A 1 0 1 Add 1 1 0 Sub 1 1 1 inkrement A b) Rad ALU-a
S2 S1 S0 rad Pomera~a 0 0 0 prolaz 0 0 1 prolaz 0 1 0 ne koristi se 0 1 1 ne koristi se 1 0 0 pomeranje ulevo 1 0 1 rotiranje ulevo 1 1 0 pomeranje udesno 1 1 1 rotiranje udesno c) Rad Pomera~a
9 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 S adresa upisa
WA, WE adresa ~itanja A
RAA, REA adresa ~itanja B
RAB, REB
ALU operacija M, F1-F0
operacija pomera~a
S2-S0
OE
d) Upravlja~ka re~ Slika 3.68 Staza podataka sa 3-portnim RF poljem
Zadatak 3.33 Blok dijagram staze podataka koja sve operacije obavlja za jedan taktni interval, prikazana je na Slici 3.75 a) 17-bitna upravlja~ka re~ na Slici 3.75 b), a kodiranje upravlja~ke re~i na Slici 3.75 c).
1
RW3
DA3
AA
Write D podaci
D adrese 8 * nA adrese RF polje B adrese
A podaci B podaci
1 0 MUX B
Funkcionalnajedinica
A B
n
n
1
n nn
3
1
1
1
1
V
C
N
Z
0 1 MUX B
5
nn
1
Ulaz podataka
FS
MD
Bus A
Bus D
Adresni izlazi
Izlaz podataka
MB
Ulaz konstante
BA
nBus D
n
a) blok dijagram staze podataka
Napomena: Svi upravlja~ki signali su ozna~eni kao: XY
DA AA BA MB FS MD RW
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
b) upravlja~ka re~
DA, AA, BA MB FS MD RW
funkcija kôd funkcija kôd funkcija kôd funkcija kôd funkcija kôdR0 000 Registar 0 F=1 00000 Funkcija 0 nema Write 0 R1 001 Konstanta 1 F =A+1 00001 ulaz podat. 1 Write 1 R2 010 F=A+B 00010 R3 011 F=A+B+1 00011 R4 100 F=A+/B 00100 R5 101 F=A+/B+1 00101 R6 110 F=A-1 00110 R7 111 F=A 00111 F=A∧B 01000 F=A∨B 01010 F=A⊕B 01100 F=/A 01110 F=srA 10000 F=slA 10001
c) na~in kodiranja upravlja~ke re~i
Napomena: (a) sr i sl se odnose na operacije pomeranje udesno i ulevo operanda A za jednu bit poziciju, respektivno. (b) Simbol '/ ' ukazuje na komplement.
Slika 3.75 Staza podataka, upravlja~ka re~ i kodiranje upravlja~ke re~i za stazu podataka
Ilustracije radi, operacije oduzimanja sadr`aja dva registra R2 i R3 i sme{tanje rezultata u R1 definisana kao:
R1←R2+R3+1, kodira se na slede}i na~in:
Polje: DA AA BA MB FS MD RW Simbol: R1 R2 R3 Registar F=A+/B+1 Funkcija Write Binarna vrednost:
001 010 011 0 00101 0 1
Odrediti sadr`aj svih polja upravlja~ke re~i sa Slike 3.75 b), za slede}e tipove operacija:
a) R1←R2-R3; b) R4←slR6; c) R7←R7+1; d) R1←R0+2; e) izlaz podatka ← R3;
f) R4 ← ulaz podatka; g) R5 ← 0
Odgovor Simboli~ki upravlja~ka re~ je kodirana na slede}i na~in: mikro operacija DA AA BA MB F3 MD RW R1←R2+/R3+1 R1 R2 R3 Registar F=A+/B+1Funkcija Write R4←sl R6 R4 R6 - Registar F=slA Funkcija Write R7←R7+1 R7 R7 - - F=A+1 Funkcija Write R1←R0+2 R1 R0 - Konstant F=A+B Funkcija Write izlaz podatka←R3 - - R3 Registar - - nema WriteR4← ulaz podatka R4 - - - - ulaz podatka Write R5← 0 R5 R0 R0 Registar F=A⊕B Funkcija Write Binarno upravlja~ka re~, za odgovaraju}u operaciju, kodirana je na slede}i na~in:
mikrooperacija DA AA BA MB FS MD RW R1←R2-R3 001 010 011 0 00101 0 1 R4←sl R6 100 110 000 0 10001 0 1 R7←R7+1 111 111 000 0 00001 0 1 R1←R0+2 001 000 000 1 00010 0 1 izlaz podatka←R3 000 000 011 0 00000 0 0 R4←ulaz podatka 100 000 000 0 00000 1 1 R5←0 101 000 000 0 01100 0 1
Ispitni zadaci Jun 2003 - Zadatak 2 Za strukturu staze podataka prikazanu na Slici 1, napisati upravlja~ku sekvencu koja je potrebna za implementaciju slede}e CPU-ove instrukcije Dcr $00A1(R1).
32
dekoder instrukcija
IR
MAR
MDRH | MDRL
PC
R0
R7
Interna magistrala A
Interna magistrala
B
adresne linije
linije za podatke
D0
D7
2
32 32
Y
16
M 0 U 1 X 2 3
mag_Amag_A
upravlja~ki signali
ALUBA
F
0
(-1)
2 0
4
TEMP
Slika 1: Interna organizacija 32-bitnog CPU-a
oraganizovana oko dve magistrale
Napomena: Instrukcija je 32-bitna, pri ~emu opkôd zauzima prvih 16 bitova. TEMP je registar za privremeno ~uvanje podataka. Simbol $ ukazuje da je neposredni podatak heksadecimalni broj. Set Yi≡i→Y (i=0,2,4); Yin≡Mag_B→Y MUXi= signal sa ulaza i ide na izlaz multipleksera MUX (i=0,1,2,3). Odgovor 2: b) Implementacija instrukcije Dcr $00A1(R1) ekvivalentna je aktivnosti M(R1+0A1h)=M(R1+0A1h)-1. Format instrukcije je slede}i:
opkod
neposredni operand 0A1h
PC
PC+2
korak akcije komentar
1. PCout, MUX0, Set Y0, Yout, F=A+B, Yin, MARin, ReadL
; pribavljanje opkôda instrukcije
2. Yout, MUX2, F=A+B, Yin, PCin, Wait for Ready ; (PC)=(PC)+2
3. MDRLout, IRin, MUX1, Yout, F=A+B, MARin, PCin, ReadH
4. MUX2, Yout, F=A+B, PCin, Wait for Ready ; (PC)=(PC)+2
5. MDRHout, MUX0, Set Y0, Yout, F=A+B, Yin ; neposredni operand sme{ta se u Y
6. R1out, MUX0, Yout, F=A+B, MARin, Read
7. Wait for Ready
8. MDRLout, MUX0, Set Y0, Yout, F=A+B, Yin ; M(R1+0A1h)→Y
9. Yout, MUX3, F=A+B, MDRLin, Write ; dekrementiranje
10. Wait for Ready, End
Izabrani zadaci - Zadatak 2.23 Projektovati stazu podataka i upravljačku logiku jednostavne
CPU organizovane oko jedinstvene magistrale koja može da pristupa memoriji obima 64 bajta. Svaki bajt je obima 8 bitova. CPU generiše 6-bitnu adresu na svojim izlaznim pinovima A[5:0] a čita 8-bitnu vrednost iz memorije na svojim ulazima D[7:0]. CPU ima samo jedan programersko dostupan registar, 8-bitni akumulator nazvan AC (vidi sliku 2.2). Skup instrukcija procesora dat je sledećom tabelom:
Instrukcija kôd instrukcije operacija ADD 00AAAAAA AC ← AC+M[AAAAAA] AND 01AAAAAA AC ← AC∧M[AAAAAA] JMP 10AAAAAA goto AAAAAA INC 11xxxxxx AC ← AC+1
Pored registra AC, CPU ima nekoliko dodatnih registara koji obavljaju interne operacije koje su neophodne za pribavljanje, dekodiranje i izvršenje instrukcija. To su sledeći registri: AR − 6-bitni adresni registar, predaje adrese memoriji preko adresnih linija A[5: 0] PC − 6-bitni programski brojač, koji sadrži adresu naredne instrukcije koja se izvršava IR − 2-bitni instrukcioni registar, čuva opkôd deo kôda instrukcije koji se dobavlja iz memorije. Odgovor Staza podataka jednostavnog CPU-a organizovana oko jedinstvene magistrale bila bi oblika
ARLD
6 [5:0] 6 6ARBus
PCLD INC
6 [5:0] 6 6RCBus
DRLD
8 8 8DRBus
ACLD INC
8 8 8ACBus
IRLD
2 [7:6] 2 2IRBus
ALU
ARLOAD
PCLOAD PCINC
DRLOAD
ALUSELACLOAD ACINC
IRLOAD
8-bitna magistrala
clk
MEMBus
D[7:0]A[5:0]
MRead
6
8
∧
∧
∧
∧
∧
Slika 2.2 Staza podataka jednostavnog CPU-a
FETCH 1
FETCH 2
FETCH 3
ADD1
ADD 2
AND 1
AND 2
JMP1 INC1
IR=00 IR=01 IR=10
IR=11
ciklus pribavljanja(FETCH)
ciklus dekodiranja(DI)
ciklus izvr{enja (EX)
Slika 2.3 Dijagram stanja jednostavnog CPU-a
Ciklusi pribavljanje, dekodiranje i izvršenje naredbi jednostavnog CPU-a prikazani su na slici 2.3. Operacije koje prate svako stanje jednostavnog CPU-a su FETCH1: AR←PC FETCH2: DR←M, PC←PC+1 FETCH3: IR←DR[7..6], AR←DR[5..0] ADD1: DR←M ADD2: AC←AC+DR AND1: DR←M AND2: AC←AC∧DR JMP1: PC←AR[5:0] INC: AC←AC+1
Sigurno interesantno rešenje CPU-a sa slike 2.2 predstavlja realizacija ALU-a. ALU kod ovog CPU-a obavlja samo dve funkcije: obavlja operacije ADD ili AND nad oba dva ulaza. Najjednostavniji način da se projektuje ovakav ALU je da se kreira poseban hardver koji će obavljati svaku od funkcija a
zatim koristiti MUX da selektuje na izlazu jedan od oba rezultata. Realizacija ALU-a prikazana je na slici 2.4.
paralelni sabira~
M 1
U 0
X s
AC
DR (sa magistrale)
ka AC
upravlja~ki signal (iz upravlja~ke jedinice)
8
8
Slika 2.4 Struktura ALU-a
Projektovaćemo sada upravljačku jedinicu CPU-a koja će biti bazirana na direktnom upravljanju (hardwired control). Opšta struktura ove upravljačke jedinice prikazana je na slici 2.5.
broja~ LD INC CLR
dekoder
logika ulaz
clk
upravlja~ki signali ka registrima, ALU baferima i izlaznim pinovima
>
Slika 2.5 Opšta struktura upravljačke logike zasnovane na
direktrnom upravljanju Razmotrićemo prvo listu instrukcija, njihova prva stanja i vrednosti u registru IR za ove instrukcije (vidi sliku 2.6) Ulaz u brojač funkcija je urednosti IR-a. Osnovni cilj je učiniti ovu funkciju što je moguće jednostavniju. Za predlo`eni CPU sa slike 2.2 postoje ukupno 9 stanja (vidi sliku 2.3) što znači da je potreban 4-bitni brojač i 4-u-16 dekoder. Sedam izlaza dekodera se neće koristiti.
Jedno od mogućih preslikavanja biće 10IR[1...0]. To znači da ako je IR=00 ulaz brojača biće 1000, za IR=01 ulaz brojača biće 1001, itd. Ovo će rezultirati dodeli kao na slici 2.7.
Instrukcija prvo stanje
IR
ADD ADD1 00 AND ADD1 01 JMP JMP1 10 INC INC1 11
Slika 2.6 Instrukcije, prva stanja i opkôdovi CPU-a IR[1..0] vrednost brojača stanje
00 1000 (8) ADD1 01 1001 (9) AND1 10 1010 (10) JMP1 11 1011 (11) INC1
Slika 2.7 Vrednosti brojača za predloženu funkciju preslikavanja Uočimo da se za usvojenu funkciju preslikavanja javlja jedan
problem. Naime, pošto je stanju ADD1 dodeljena vrednost brojača 8, a stanju AND1 vrednost koja se dodeljuje brojaču je 9, postavlja se pitanje koju vrednost treba dodeliti stanju ADD2 i kako se iz stanja ADD1 prelazi u stanje ADD2. Ovo se može izvesti ugradnjom dodatne logike ali to ima za posledicu usložnjavanje dizajna i veću cenu.
Analizom dijagrama stanja CPU-a (slika 2.3) vidimo da faze izvršenja pojedinih instrukcija nemaju više od dva stanja. Zbog toga usvojićemo sledeću funkciju preslikavanja 1IR[1..0]0, koja rezultira vrednostima brojača od 8, 10, 12 i 14 za ADD1, AND1, JMP1 i INC1, respektivno. Da bi se dodelile rutinama izvršenja uzastopne vrednosti, za ADD2 vrednost koja se dodeljuje brojaču je 9, a kod AND2 vrednost brojača je 11.
Saglasno prethodnom deo strukture upravljačke jedinice sa slike 2.5 koja sadrži samo brojač i dekoder prikazana je na slici 2.8.
BROJAC
LD INC CLR
DEKODER
0 12...89
101112...
14
FETCH1FETCH2FETCH3
ADD1ADD2AND1AND2JMP1
INC1
FETCH1FETCH2
FETCH3
ADD2
ADD1
AND2
AND1
JMP1INC1
441IR[1..0]0
Slika 2.8 Deo strukture upravljačke jedinice
Izlazi dekodera sa slike 2.8 vode se na ulaz logike (slika 2.5) koja generiše upravljačke signale prema svim blokovima CPU-a. Shodno sllici 2.2 imaćemo
PCLOAD = JMP1 PCINC = FETCH2 DRLOAD = FETCH2∨ADD1∨AND1 ACLOAD = ADD2∨AND2 ACING = INC1 IRLOAD = FETCH3 ALUSEL = 0 – aritmetička suma => ALUSEL=AND2 1 – logička funkcija => ALUSEL=AND2 MEMBUS = FETCH2∨ADD1∨AND1 PCBUS = FETCH1 READ = FETCH2∨ADD1∨AND1
Ostali upravljački signali definisani na slici 2.2 kakvi su ACBUS, IRBUS, ARBUS,... u konkretnom slučaju nisu definisani jer se oni ne aktiviraju od strane skupa instrukcija ADD, AND, JMP i INC. Logika za generisanje upravljačkih signala prikazana je na slici 2.9.
ARLOAD FETCH1
FETCH3
JMP1 PCLOAD
FETCH2 PCINC
DRLOADFETCH2
ADD2 ADD1
ACLOAD ADD2
AND2
INC ACINC
FETCH IRLOAD
AND2 ALUSEL
MEMBUS FETCH2
AND1 ADD1
FETCH1 PCBUS
READ FETCH2
AND1 ADD1
Slika 2.9 Logika za generisanje upravljačkih signala
Kako bi se uverili da projektovani CPU radi korektno analiziraćemo izvršenje sledeće programske sekvence. 0: ADD 4 ; AC←AC+M[4] 1: AND 5 ; AC←AC+M[5] 2: INC ; AC←AC+1 3: JMP 0 ; go to 0 4: 27h ; M[4]=27h 5: 39h ; M[5]=39h Na osnovu dijagrama stanja sa slike 2.3 u toku izvršenja svake naredbe ove programske sekvence CPU prolazi kroz sledeća stanja ADD 4 : FETCH1→FETCH2→FETCH3→ADD1→ADD2
AND 5 : FETCH1→FETCH2→FETCH3→ADD1→ADD2 INC : FETCH1→FETCH2→FETCH3→INC1 JMP 0 : FETCH1→FETCH2→FETCH3→JMP1 Na slici 2.10 prikazana je trasa izvršenja jedne iteracije ovog programa. Kao što se može uočiti CPU procesira svaku instrukciju korektno. Inicijalno svi registri sadrže vrednost 0.
Instr. stanje aktivni signali operacije koje se vrše nar. stanje ADD4 FETCH1 PCBUS, ARLOAD AR←0 FETCH2 FETCH2 READ, MEMBUS, DRLOAD, PCINC DR←04h, PC←1 FETCH3 FETCH3 DRBUS, ARLOAD, IRLOAD IR←00, AR←04h ADD1 ADD1 READ, MEMBUS, DRLOAD DR←27h, ADD2 ADD2 DRBUS, ACLOAD AC←0+27h=27h FETCH1 AND5 FETCH1 PCBUS, ARLOAD AR←1 FETCH2 FETCH2 READ, MEMBUS, DRLOAD, PCINC DR←45h, PC←2 FETCH3 FETCH3 DRBUS, ARLOAD, IRLOAD IR←01, AR=05h AND1 AND1 READ, MEMBUS, DRLOAD DR←39h AND2 AND2 DRBUS, ALUSEL, ACLOAD AC←27h ∧ 39h=21h FETCH1 INC FETCH1 PCBUS, ARLOAD AR←2 FETCH2 FETCH2 READ, MEMBUS, DRLOAD, PCINC DR←C0h, PC←3 FETCH3 FETCH3 DRBUS, ARLOAD, IRLOAD IR←11, AR←00h INC1 INC1 ACINC AC←21h+1=22h FETCH1 JMP0 FETCH1 PCBUS, ARLOAD AR←3 FETCH2 FETCH2 REDA, MEMBUS, DRLOAD, PCINC DR←80h, PC←4 FETCH3 FETCH3 DRBUS, ARLOAD, IRLOAD IR←10, AR←00h JMP1 JMP1 DRBUS, PCLOAD PC←0 FETCH1
Slika 2.10 Trasa izvršenja
4. RISC procesori
4-1
Konvencije kod korišćenja registara MIPS-a
ime broj registra
korišćenje da li se pamti kod Call?
$zero 0 uvek postavljen na konstantnu vrednost nula
nije dostupan
$at 1 rezervisan za potrebe asemblera nije dostupan $v0-$v1 2-3 čuva se vrednost dobijenog rezultata
ili izraza čija se vrednost odredjuje ne
$a0-$a3 4-7 čuva vrednost argumenta pri prenosu parametara proceduri
da
$t0-$t7 8-15 za čuvanje privremenih promenljivih ne $s0-$s7 16-23 čuvanje promenljivih da $t8-$t9 24-25 čuvanje dodatnih privremenih
promenljivih ne
$k0-$k1 26-27 rezervisani od strane operativnog sistema
nije dostupan
$gp 28 globalni pokazivač da $sp 29 pokazivač magacina da $fp 30 pokazivač okvira da $ra 31 adresa povratka da
Napomena: Za ostale detalje o formatima instrukcija, repertoaru instrukcija, načinu kodiranja instrukcija i dr., videti Dodatak C.
Test pitanje 4.1 Neka A predstavlja vektor koga čini 100 elemenata, od kojih je svaki obima 32-bita, a G=1500 i H=1900 su adrese memorijskih lokacija u kojima se čuvaju promenljive g i h. Prevesti sledeći iskaz programskog jezika C na asemblerski jezik mikroprocesora MIPS. g=h+A[8]; Napomena: Promenljive g i h čuvati u registre $s1 i $s2, baznu adresu vektora A = 2600 čuvati u registar $s3. Rezultat smestiti na lokaciji G.
4-2
Odgovor
registri sadržaj
$zero
$s1
$s2
$s3
$t0 (privremeni)
G=1500
adrese (decimalne)
0
g
h
A0
a8
.
.
.
g
h
.
.
.
.
.
.
a0
a1
a2
.
.
.
a99
.
.
.
H=1900
A=A0=2600
A1=2604
A2=2608
A99=2996
Programska sekvenca ima sledeći oblik: Addi $s3,$zero,A0 # A0→$s3
Lw $s2,H($zero) # h→$s2
Lw $t0,8*4($s3) # a8→$t0
Add $s1,$s2,$t0 # g = $s1 = h + a8 Sw $s1,G($zero) # g→G
4-3
Test pitanje 4.2 Neka A predstavlja vektor koga čine 10 elemenata (A[0] ,..., A[9]) od kojih je svaki obima 32-bita, a H = 2000 adresa memorijske lokacije u kojoj se čuva promenljiva h. Prevesti sledeći iskaz programskog jezika C na asemblerski jezik mikroprocesora MIPS. A[10] = h+A[8]; Napomena: Baznu adresu vektora A = 2600 čuvati u registru $s3. A[10] je vrednost novo-dobijenog elementa koji se smešta na lokaciji tipa reč koja neposredno sledi iza lokacije zadnjeg elementa vektora A[9].
Odgovor
registri sadržaj
$zero
$s3
$s2
$t1
$t2 (privremeni)
adrese (decimalne)
0
A0
h
a8
a10
.
.
.
.
.
.
a0
a1
a2
.
.
.
a9
.
.
.
H=2000
A=A0=2600
A1=2604
A2=2608
A9=2636
a10 A9=2640
4-4
Addi $s3,$zero,A0 # A0→$s3
Lw $t0,H($zero) # h →$t0 Lw $t1,32($s3) # a8 →$t1
Add $t2,$t0,$t1 # a10 = h + a8
Sw $t2,40($s3) # a10 →Adr = 2640
Test pitanje 4.3 Neka A predstavlja vektor koga čine 20 elemenata od kojih je svaki obima reč (32-bita).Kakav je asemblerski kôd mikroprocesora MIPS za odgovarajući kôdni segment na C-u? g = h + A [i]; Napomena: Bazna adresa vektora A je A0 = 3000 i čuva se u registru $s3. Adresa promenljive g je G = 2000, promenljive h je H = 2200, a promenljive i je I = 1500. Kompilator dodeljuje promenljige g, h i i registrima $s1, $s2 i $s4. Odgovor Addi $s3,$zero,A0 # A0 → $s3 Lw $s2,H($zero) # h → $s2 Lw $s4,I($zero) # i → $s4 Add $t1,$s4,$s4 # $t1 = 2 * i Add $t1,$t1,$t1 #$t1 = 4 * i Add $t1,$t1,$s3 #$t1 = adr od A[i](4*i+$s3) Lw $t0,0($t1) #A[i] → $t0 Add $s1,$s2,$t0 # g = h + A[i] Sw $s1,G($zero) # g → Adr 2000
4-5
Zadatak 4.1 (a) U sledećem C kodnom segmentu f, g, h, i i j su promenljive:
if (i==j) go to LAB1; f=g+h; LAB1: f=f-i; Usvojimo da su svih pet promenljivih f do j već smeštene u pet registra $s0 do $s4, respektivno. Kakav će biti kompilovani kod mikroprocesora MIPS? (b) Koristeći iste promenljive i registre iz slučaja pod (a) kompajliraj sledeći if iskaz na C-u. if (i==j) f=g+h; else f=g-h; Odgovor a) BEQ $s3,$s4,LAB1 ; skok na LAB1 ako je i=j Add $s0,$s1,$s2 ; f=g+h LAB1: Sub $s0,$s0,$s3 ; f=f-i
b) BNE $s3,$s4,Else ; skok na Else ako je i≠j Add $s0,$s1,$s2 ; f=g+h, tj. preskače se ako je i≠j J Izl ; skok na Izlaz Else: Sub $s0,$s1,$s2 ;f=g-h, tj skače se ako je i=j Izl: ---
i==j?
f=g+h f=g-h
i=j i≠j
Else:
Izlaz:
4-6
Zadatak 4.2 Neka je data sledeća petlja u programskom jeziku C: Ponovi: g = g + A [ i ] ; i = i + j ; if (i != h) go to Ponovi; Gde je A vektor od 100 elemenata. Adrese promenljivih g, h, i i j su G, H, I i J, respektivno. Promenljive g, h, i i j kompilator dodeljuje registrima $s1, $s2, $s3 i $s4, respektivno. Usvojimo da se bazna adresa vektora A čuva u registar $s5. Kakav će biti MIPS-ov asemblerski kôd za odgovarajuću petlju na C-u. Odgovor Lw $s2,H($zero) # h->$s2 Lw $s3,I($zero) # i->$s3 Lw $s4,J($zero) # j->$s4 Add $s5,$zero,A0 # A0->$s5 Pon: Add $t1,$s3,$s3 #$t1 = 2 * i Add $t1,$t1,$t1 #$t1 = 4 * i Add $t1,$t1,$s5 #$t1 = adresa od A[i] Lw $t0,0($t1) # A[i] → $t0 Add $s1,$s1,$t0 # g = g + A [i]i Sw $s1,G($zero) # g → M [G] Add $s3,$s3,$s4 # i = i + j BNE $s3,$s2,Ponovi # go to Ponovi if i ≠ h
Test pitanje 4.5 Neka je data sledeća klasična petlja u C-u: while (sima [ i ] = = k) i = i + j ; Usvojimo da kompilator dodeljuje promenljive i, j i k registrima $s3, $s4 i $s5, a baznu adresu polja sima registru $s5. Kakav će biti asemblerski kôd za odgovarajući segment na C-u?
4-7
Odgovor Ponovi:Add $t1,$s3,$s3 #$t1 = 2 * i Add $t1,$t1,$t1 #$t1 = 4 * i Add $t1,$t1,$s6 #$t1 = adresa od sima[i] Lw $t1,0($t1) #sima[i]->$t0 BNE $t0,$s5,Kraj # go to Kraj if sima[i] ≠ k Add $s3,$s3,$s4 # i = i + j J Ponovi # go to Ponovi Kraj: . . . Test pitanje 4.7 Neka se promenljiva a čuva u registru $s0, a promenljiva b u registru $s1. Kakav će biti kôd koji testira da li je promenljiva a manja od promenljive b, a zatim se vrši grananje na labelu Manje ukoliko je uslov ispunjen.
Odgovor Slt $t0,$s0,$s1 # $t0 = 1 if $s0 <$s1, tj a < b BNE $t0,$zero,Manje # go to Manje if $t0, tj if a < b Manje: ....
Ovo znači da par instrukcija Slt i BNE implementiraju instrukciju BLT (branch on less than)
Zadatak 4.3 Neka jed dat sledeći kôd na programskom jeziku C: switch (k) case 0: f = i + j ; break; /* k = 0 */ case 1: f = g + h ; break; /* k = 1 */ case 2: f = g - h ; break; /* k = 2 */ case 3: f = i - j ; break; /* k = 3 */ Usvojimo da se šest promenljivih, od f do k, čuvaju u odgovarajućih šest registara $s0 do $s5, a da se u $t2 smešta 4.
4-8
Napisati odgovarajući kôd na asemblerskom jeziku procesora MIPS. Odgovor # prvo se testira k da bi se proverilo da li je ispunjen uslov 0 = < k = < 3 # koristi se promenljiva k da se odredi indeks tabele, tj k se množi sa 4 Slt $t3,$s5,$zero # Test if k < 0 BNE $t3,$zero,Kraj # if k < 0, go to Kraj Slt $t3,$s5,$t2 # Test if k < 4 BEQ $t3,$zero,Kraj # if k > = 4, go to Kraj Add $t1,$s5,$s5 # $t1=2*k, podešav. indeksa tabele Add $t1,$t1,$t1 # $t1=4*k, svaki podat. obima 4 bajta
# usvojimo da četiri sekvencijalne memorijske reči koje počinju od # adrese definisane sadržajem registra $t4, imaju adrese koje odgovaraju # labelama L0, L1, L2 i L3. # Punjenje adrese skoka se obavlja na sledeći način:
Add $t1,$t4,$t1 # $t1 = adresa Jump Tabela[k] Lw $t0,0($t1) # $t1 = Jump Tabela[k] # skok se sada obavlja sledećom instrukcijom: Jr $t0 # Jump na osnovu sadržaja registra $t0 # C verzija case iskaza koja se naziva switch iskaz ima oblik: L0: Add $s0,$s3,$s4 # za k = 0 izračunaj f = i + j J Kraj # zatim idi na Kraj L1: Add $s0,$s1,$s2 # za k = 1 izračunaj f = g + h J Kraj # zatim idi na Kraj L2: Sub $s0,$s1,$s2 # za k = 2 izračunaj f = g - h J Kraj # zatim idi na Kraj L3: Sub $s0,$s3,$s4 # za k = 3 izračunaj f = i - j Kraj: .... # završetak iskaza switch
4-9
Zadatak 4.6 Procedura kopiniz se koristi za kopiranje niza y u niz x. Na kraju niza $sp pokazuje na bajt čija je vrednost 00 (konvencija kod C-a). void kopiniz (char x[ ], char y[ ]) {
int i; i = 0; while ((x[i] = y[i]) != 0) /* kopiraj i testiraj bajt */ i = i + 1; } Kakav će biti MIPS-ov asemblerski kôd? Napomena: Bazne adrese nizova x i y se čuvaju u $a0 i $a1, a indeksna vrednost i u registru $s0.
Odgovor # Procedura kopiniz podešava prvo sp a zatim smešta $s0 u magacin kopiniz: Sub $sp,$sp,4 # podešavanje magacina za više
# od jednog elementa Sw $S0,4($sp) # sačuvaj $s0 u magacin # Inicijaliziranje i na 0, naredna instrukcija postavlja $s0 na 0, # sabiranjem 0 sa 0 i memorisanjem sume u $s0 Add $s0,$zero,$zero # i = 0 + 0 # Sledi početak petlje. Adresa y[i] se formira sabiranjem i sa y[ ]: L1: Add $t1,$a1,$s0 # adresa za y[i] je u $t1 # Uočimo da je y[i] niz bajtova. Da bi napunili znak u y[i], treba prvo da # napunimo bajt (tj. znak) u registar $t2: Lb $t2,0($t1) # $t2 = y[i] # Adresa x[i] se smešta u $t3 a nakon toga znak iz $t2 na tu adresu: Add $t3,$a0,$s0 # adresa od x[i] u $t3
4-10
Sb $t2,0($t3) # x[i] = y[i] # Sledi inkrementiranje indeksa i, i skok na labelu L1 ako znak nije nula, tj. ako nije zadnji znak niza, tada: Add $s0,$s0,1 # i = i + 1 BNE $t2,$zero,1 # if y i ! = 0, go to L1 # Ako ne dodje do grananja, to znači da je to zadnji znak u nizu, pa je # zbog toga neophodno obnoviti sadržaj registra $s0 i $sp-a i izvršiti # povratak: Lw $s0,4($sp) # y[i]= = 0; kraj niza obnovi staru vred. $s0 Add $sp,$sp # izbavi jednu reč iz magacina Jr $ra # povratak
Test pitanje 4.11 Kakav je asemblerski kôd mikroprocesora MIPS koji se koristi za punjenje 32-bitne konstante: 0000 0000 0011 1101 0000 1001 0000 0000 u registar $s0. Odgovor # Prvo se pune 16 bitova veše težine, 61 decimalno, pomoću instrukcije Lui:
Lui $s0,61 # 61 decimalno = 0000 0000 0011 1101 binarno # vrednost registra $s0 nakon izvodjenja ove operacije je # $s0 = 0000 0000 0011 1101 0000 0000 0000 0000 # u narednom koraku sabiraju se nižih 16 bitova, čija je # decimalna vrednost 2304, na sledeći način: Addi $s0,$s0,2304
# 2304 decimalno = 0000 1001 0000 0000 binarno # konačna vrednost $s0 biće # 0000 0000 0011 1101 0000 1001 0000 0000
4-11
Test pitanje 4.12 Za klasičnu petlju na C-u: while (sima[i] = = k) i = i + j; odgovarajući kompajlirani kôd na semblerskom jeziku mikroprocesora MIPS je sledeći: Ponovi: Add $t1,$s3,$s3 # $t1 = 2 * i Add $t1,$t1,$t1 # $t1 = 4 * i Add $t1,$t1,$s5 # $t1 = adresa od sima[i] Lw $t0,0($t1) # $t0 = sima[i] BNE $t0,$s5,Kraj # go to Kraj if sima[i] = k Add $s3,$s3,$s4 # i = i + j J Ponovi # go to Ponovi Kraj: ...
(Napomena: Promenljive i, j i k se čuvaju u registrima $s3, $s4 i $s5 a bazna adresa vektora sima u registar $s6). Ako usvojimo da se petlja izvršava počev od memorijske lokacije 80000, kakav će biti mašinski kôd mikrop. MIPS za datu petlju? Odgovor U sledećoj tabeli prikazana je sekvenca izvršenja, pri čemu je, za svaku instrukciju dat njen format i odgovarajuća lokacija u memoriji:
veličina polja adrese 6 5 5 5 5 6 80000 0 19 19 9 0 32 80004 0 9 9 9 0 32 80008 0 9 21 9 0 32 80012 35 9 8 0 80016 5 8 21 8 80020 0 19 20 19 0 32 80024 2 80000 80028...
4-12
Zadatak 4.8 Kao što smo već u jednom od prethodnih test-pitanja naglasili, programski segment u C-u: while (sima[i]== k) i = i + j; (gde se promenljive i, j i k čuvaju u registrima $s3, $s4 i $s5, a bazna adresa niza se nalazi u $s6), ima odgovarajući asemblerski kôd koji je oblika: Ponovi: Add $t1,$s3,$s3 # $t1 = 2 * i Add $t1,$t1,$t1 # $t1 = 4 * i Add $t1,$t1,$s6 # $t1 = adresa niza sima[i] Lw $t0,0($t1) # $t0 = sima[i] BNE $t0,$S5,Kraj # go to Kraj if sima[i] ≠ k Add $s5,$s3,$s4 # i = i + j J Ponovi Kraj: ...
Analizom kompajliranog kôda, može se uočiti sledeće: pri svakom prolasku kroz petlju izvršava se jedna instrukcija uslovnog i jedna bezuslovnog grananja; samo loši kompilatori generišu kôd sa ovoliko suvišnosti (dve instrukcije koje se odnose na promenu toka programa). Problem koji treba rešiti je sledeći: kreirati asemblerski kôd za mikroprocesor MIPS, koji će, za svaki prolazak kroz petlju, generisati samo jednu instrukciju tipa Branch ili Jump. Koliko se instrukcija izvršava pre i posle optimizacije ako broj iteracija petlje iznosi 10, tj. sima[i+10*j]=k , a sima[i],..., sima[i+9*j] ≠ k)? Odgovor Broj instrukcija koje se izvršavaju kod prvobitne verzije asemblerskog programa, za 10 potpunih iteracija i jedan izlazak
4-13
iz petlje, iznosi 10*7+5 = 75 instrukcija. Revidirana verzija programa koja u petlji sadrži samo jednu instrukciju grananja oblika je: Add $t1,$s3,$s3 # $t1 = 2 * i Add $t1,$t1,$t1 # $t1 = 4 * i Add $t1,$t1,$s6 # $t1 = adresa polja sima[i] Lw $t0,0($t1) # $t0 = sima[i] BNE $t0,$s5,Kraj # go to Kraj if sima[i] ≠ k Ponovi: Add $s3,$s3,$s4 # i = i + j Add $t1,$s3,$s3 # $t1 = 2 * i Add $t1,$t1,$t1 # $t1 = 4 * i Add $t1,$t1,$s6 # $t1 = adresa polja sima[i] Lw $t0,0($t1) # $t0 = sima[i] BEQ $t0,$s5,Ponovi # go to Ponovi if sima[i]= k Kraj: ...
Broj instrukcija koji se izvršava za ovu verziju programa iznosi: 5 + 10 * 6 = 65 Za slučaj da se vrednost 4*j izračunava pre petlje, moguće je dalja modifikacija čiji je oblik sledeći: Add $t2,$s4,$s4 # $t2 = 2 * j Add $t2,$t2,$t2 # $t2 = 4 * j Add $t1,$s3,$s3 # $t1 =2 * i Add $t1,$t1,$t1 # $t1 = 4 * i Add $t1,$t1,$s6 # $t1 = adresa polja sima[i] Lw $t0,0($t1) # $t0 = sima[i] BNE $t0,$s5,Kraj # go to Kraj if sima[i] = k Ponovi: Add $t1,$t1,$t2 # $t1=adresa polja sima[i+m*j] Lw $t0,0($t1) # $t0 = sima[i] BEQ $t0,$s5,Ponovi # go to Ponovi if sima[i] Kraj: ...
Broj instrukcija koje se izvršavaju iznosi 7+10*3 = 37
4-14
Zadatak 4.9 Pseudoinstrukcije ne pripadaju skupu instrukcija mikroprocesora MIPS ali se često koriste u MIPS-ovim programima. Za svaku od pseudoinstrukcija datu u tabeli, odredi minimalnu sekvencu stvarnih MIPS-ovih instrukcija pomoću kojih se obavlja specificirana aktivnost. Napomena: U kreiranim programskim sekvencama koristi registar $at. Simbol big se odnosi na 32- bitnu; a simbol small na 16-bitnu celobrojnu vrednost. Odgovor
pseudo instrukcija šta obavlja rešenje 1) Move $t5,$t3 $t5 = $t3 Add $t5,$t3,$zero 2) Clear $t5 $t5 = 0 Add $t5,$zero,$zero 3) Li $t5,small $t5 = small Addi $t5,$zero,small 4) Li $t5,big $t5 = big Lui $t5,MS_deo(big)
Ori $t5,LS_deo(big) 5) Lw $t5,big($t3) $t5=Memorija[$t3+big] Li $at,big
Add $at,$at,$t3 Lw $t5,0($at)
6) Addi $t5,$t3,big $t5=$t3+big Li $at,big Add $t5,$t3,$at
7) BEQ $t5,Small,L if ($t5=small) go to L Li $at,small BEQ $t5,$at,L
8) BEQ $t5,big,L if ($t5=big) go to L Li $at,big BEQ $at,$zero,L
9) BLE $t5,$t3,L if ($t5<=$t3) go to L Slt $at,$t3,$t5 BEQ $at,$zero,L
10) BGT $t5, $t3, L if($t5>$t3) go to L Slt $at,$t3,$t5 BNE $at,$zero,L
11) BGE $t5, $t3, L if($t5>=$t3) go to L Slt $at,$t5,$t3 BEQ $at,$zero,L
Napomena: Tamnije šrarifani deo se odnosi na rešenje. U delu rešenja koristi se instrukcija Li koja se implementira kao u slučajevima 3 i 4.
4-15
Zadatak 4.10 Neka je data sledeća kodna sekvenca na C-u:
for (i = 0; i <= 100; i = i + 1) {a[i] = b[i] + c;} Usvojimo da su: (1) a i b nizovi čiji su elementi tipa reč (32-bitne vrednosti); (2) bazna adresa niza a se čuva u $a0, a bazna adresa niza b u $a1; (3) u registru $t0 se čuva promenljiva i, a u regis. $s0 promenljiva c. Napisati odgovarajući kôd na asemblerskom jeziku mikroprocesora MIPS. Koliko se instrukcija izvrši prilikom izvršenja programa? Koliko puta se vrši obraćanje memoriji podataka u toku izvršenja programa? Odgovor # Inicijaliziraćemo prvo registar $t0 na 0, tj. i = 0: Add $t0,$zero,$zero # $t0 = 0
# Ako se u $s0 čuva adresa promenljive c, tada se ona smešta u $t1 sledećom instrukcijom Lw $t1,0($s0) # $t1 = c
# Da bi odredili bajt adresu sukcesivnih elemenata polja i # proverili da li je kraj petlje, potrebne su nam konstante 4 i 401. # Usvojićemo da se one nalaze u memoriji na lokacijama Konst4 # i Konst401 u trenutku kada se vrši punjenje programa Lw $t2,Konst4($zero) # $t2 = 4 Lw $t3,Konst401($zero) # $t3 = 401
# U okviru tela petlje pristupa se elementima polja, obavlja se # izračunavanje, i testira kraj petlje Ponovi: Add $t4,$a1,$t0 # $t4 = adresa elementa b[i] Lw $t5,0($t4) # $t5 = b[i] Add $t6,$t5,$t1 # $t6 = b[i]+ c Add $t7,$a0,$t0 # $t7 = adresa elementa a[i]
4-16
Sw $t6,0($t7) # a[i]= b[i]+ c Add $t0,$t0,$t2 # i = i + 4 Slt $t8,$t0,$t3 # $t8=1 if $t0<401 tj. i<=100 BNE $t8,$zero,Ponovi # go to Ponovi if i < = 100
Broj instrukcija koji se izvršava iznosi 4+101*8 = 812 Broj obraćanja memoriji podataka je 3+101*2 = 205
Zadatak 4.11 Napisati programsku sekvencu na asemblerskom jeziku za mikroprocesor MIPS xx pomoću koje je moguće obaviti sledeću logičku funkciju:
cbacbacbacbaS ⋅⋅+⋅⋅+⋅⋅+⋅⋅= Promenljive a, b i c čuvaju se u memorijskim lokacijama A, B i C, respektivno. Kod rešavanja zadataka koristiti sledeću registarsku konvenciju, koja važi za MIPS procesor:
Odgovor lzraz se može srediti na sledeći način:
)baba(cb)aba(cS ⋅⋅+⋅⋅+⋅+⋅⋅= zczcS ⋅+⋅= ,
gde je z = baba ⋅⋅+⋅ = a ⊕ b i babaz ⋅+⋅= S = c ⊕ a ⊕ b Programska sekvenca ima sledeći oblik: Lw $t0,A($zero) ; pribavi a u $t0 Lw $t1,B($zero) ; pribavi b u $t1 Lw $t2,C($zero) ; pribavi c u $t2 Xor $t2,$t2,$t0 ; c = c ⊕ a Xor $t2,$t2,$t1 ; c = c ⊕ a ⊕ b St S($zero),$t2 ; smesti c u S
4-17
Test pitanje 4.23 Za sledeće tri situacije identifikuj tipove zavisnosti po podacima
upis
~itanje
instrukcija 1
instrukcija 2
a) ~itanje
upis
instrukcija 1
instrukcija 2
b)
upis
upis
instrukcija 1
instrukcija 2
c)
Odgovor a) Read - after - write (RAW) hazard b) Write - after - read (WAR) hazard c) Write - after - write (WAW) hazard
Test pitanje 4.25 Format instrukcija RISC procesora MIPS RX000 prikazan je na Slici 4.4.
4-18
3 1 2 5 0 o p k o d a d re s a g r a n a n ja A d r a ) fo r m a t J - t ip a
3 1 2 5 2 0 1 5 0 o p k ô d R s R t n e p o s re d n i o p e ra n d Im m
a d re s e r e g is ta r a (2 )
b ) fo r m a t I - t ip a 3 1 2 5 2 0 1 5 1 0 5 0 o p k ô d R s R t R d iz n o s p o m e ra n ja fu n k c ija
a d r e s e r e g is ta r a (3 )
c ) fo r m a t R -t ip a
Slika 4.4 Format instrukcija mikroprocesora MIPS RX 000 Neka je I instrukcija koja se tekuće izvršava, smeštena na lokaciji (memorijskoj adresi) FFFF FF00 h. a) Ako I nije instrukcija grananja, na kojoj se memorijskoj adresi nalazi instrukcija koja se izvršava neposredno nakon instrukcije I? b) Neka je I instrukcija bezuslovnog grananja koja ima specificirano 26-bitno adresno polje grananja Adr = 2A9 FFFFh. Odredi memorijsku adresu instrukcije koja će se izvršavati neposredno nakon instrujkcije I?
Odgovor a) Adresa naredne instrukcije biće FFFF FF00h + 4 = FFFF FF04h b) Instrukcija bezuslovnog grananja ima format J-tipa J Adr To znači go to Adr. Imajući u vidu da su memorijske adrese kod RX000 obima 32-bita, CPU treba da proširi 26-bitno asdresno
4-19
polje sa slike 1 na 32 bita. Proširenje se izvodi automatski od strane procesora u sledeća dva koraka:
Temp := PC[31 : 28].Adr.00 ; PC := Temp ; Prva četiri MS bita programskog brojača PC se smeštaju ispred Adr, a dva bita 00 se pridružuju kao zadnja dva LS bita polju Adr. Ovako formirana 32-bitna adresa se puni u PC. U konkretnom slučaju PC[31 : 28] = F h = 1111b., a polje: Adr = 2A9 FFFFh = 10 1010 1001 1111 1111 1111 1111 b, tako da je ciljna adresa grananja: A = 1111. 1010 1010 0111 1111 1111 1111 11.00 b. Ponovnom konverzijom u heksadecimalni format dobićemo: A = FAA7 FFFCh.
Test pitanje 4.35 Kako se definiše zavisnost po podacima kod superskalarnih procesora? Odgovor Između instrukcija koje se nalaze u prozoru izvršenja mogu da postoje ograničenja tipa zavisnosti-po-podacima (data dependencies). Zavisnost-po-podacima između instrukcija javljaju se zbog toga što instrukcije mogu da pristupaju (radi čitanja ili upisa) istoj lokaciji (memorijskoj ili registarskoj). Kada instrukcije pristupaju istoj lokaciji, kažemo da se javlja hazard jer postoji verovatnoća da redosled pristupa toj lokaciji ne bude korektan. Idealno posmatrano između instrukcija realno je očekivati da postoje samo ograničenja tipa prava zavisnost (true dependence). Ova ograničenja karakteristična su za hazarde RAW
4-20
(read-after-write), jer instrukcija tipa potrošač, može da pročita vrednost nakon što je instrukcija proizvođač upisala rezultat. Pored pravih kod superskalarnih procesora postoje i veštačke zavisnosti (artificial dependecies). Ove zavisnosti rezultat su WAR (write after read) i WAW (write after write) hazarda. WAR hazard se javlja u situacijama kada instrukcija treba da upiše novi rezultat u lokaciju, ali upis mora da se odloži sve dok prethodne instrukcije kojima je stara vrednost potrebna ne pročitaju tu vrednost. WAW hazard se javlja kada veći broj instrukcija ažurira istu lokaciju, ali je pri ovome veoma je bitno da se sačuva korektan redosled ažuriranja. Na Slici 4.6 prikazan je deo programskog segmenta (prvi blok) sa Slike 4.5b), na kome su jasno naznačeni kakvi tipovi zavisnosti po podacima postoje između instrukcija.
LAB2: Move r3, r7
Lw r8, r3
Add r3, r3, 4
Lw r9, (r3)
BLE r8, r9, LAB3
RAWWAW
WAR
Slika 4.6 Primer zavisnosti po podacima
Test pitanje 4.37 Objasniti pojam odmotavanje petlje (loop unrolling).
Odgovor
4-21
Osnovna ideja odmotavanja petlje sastoji se u tome što je potrebno ponoviti izvršenje tela petlje onoliko puta koliko je to predvidjeno samim kôdom, tj. učiniti kôd petlje sekvencijalnim. Odmotavanjem se eliminiše inter-iteracioni kôd, kao što je dekrementiranje brojača petlji, testiranje za kraj petlje i uslovno grananje izmedju iteracija. Odmotavanje petlje se može implementirati veoma lako kada je broj iteracija u toku faze kompilacije poznat, što je najčešći slučaj kod do i for petlji.
Zadatak 4.12 Neka je data sledeća jednostavna petlja:
for i=1 to 3 do { b(i) = 4.13*a(i) }
Pokazati kako izgleda potencijano kompajlirani kôd petlje kod CISC i RISC mašine. Blokovi podataka a1, a2 i a3, kao i b1, b2 i b3, čuvaju se u memorijskim lokacijama A1, A2, A3, B1, B2 i B3, respektivno. Kod oba procesora smatrati da postoji registarsko polje od 32 interna registra, imenovana kao r0, r1,..., r31. Odgovor Potencijalno kompajlirani kôd kod CISC procesora biće oblika: Load r1,A1 ; napuni početnu adresu bloka A Load r2,B1 ; napuni početnu adresu bloka B Load r3,3 ; napuni brojač petlje Ponovi: Fmul [r2],4.13,[r1] ; mno`enje koristeći ; indirektno adresiranje Inc r1,4 ; inkrem. pokaz. na nared. elem. bloka pod. a(i) Inc r2,4 ; inkrem. pokaz. na nared. elem. bloka pod. b(i) Dcr r3 ; dekrementirnje brojača petlje BNZ Ponovi ; granaj se na Ponovi ako brojač petlje nije nula
4-22
Osnovna karakteristikla ove programske sekvence je ta što instrukcija Fmul koristi indirektno adresiranje radi pristupa memorijskim operandima. Nasuprot ovakvom pristupu, kompajlirani kod kod RISC mašine, za istu petlju i izvršenje instrukcije Fmul, koristi registarske operande. [ta više, za ovakav slučaj, imajući u vidu da je petlja kratka, vrši se odmotavanje petlje čime se kôd koji se odnosi na dekrementiranje i testiranje eliminiše, tako da nakon odmotavanja dobijamo: Lw r1,A1 ; Lw je ekvivalentna instrukciji Load Lw r2,B1 Lw r3,3 Fmul 0(r2),4.13,0(r1) Addi r1,r1,4
Addi r2,r2,4 Fmul 0(r2),4.13,0(r1) Addi r1,r1,4
Addi r2,r2,4 Fmul 0(r2),4.13,0(r1)
U konkretnom slučaju, primenjena je code-inlining tehnika (tradicionalna makro-ekspanziona tehnika) kao standardna kompilatorska optimizaciona tehnika za kratke potprograme. Code-inlining znači da se vrši ubacivanje (insertovanje, ili tzv. umetanje) celog tela potrograma svaki put kada se on pozove u tački poziva, umesto da se telo petlje posebno memoriše i svaki put poziva iz pozivnog (glavnog) programa. Ipak, treba ukazati da je jednostavno odmotavanje petlje često nepraktično, posebno kada je broj iteracija veliki, ili kada broj iteracija nije fiksiran (poznat) u toku kompilacije. Kod ovakvih situacija jednostavno odmotavanje petlje treba proširiti. Standardno korišćeni metod se sastoji u sledećem:
4-23
Petlja se odmotava odredjeni broj puta, recimo tri puta, i postavlja brojač petlje na rezultantnu grupu odmotanih petlji. Nakon toga se vrši dekrementiranje, testiranje za kraj petlje i uslovno grananje za svaku od grupa odmotanih petlji. Evidentno je da je u ovom slučaju potrebno kreirati: prvo, neki pred-kôd (prolog-kôd) pre početka petlje, a zatim, na kraju neki završni-kôd (epilog-kôd) kako bi se sve aktivnosti uspešno i korektno obavile. Tako na primer, ako želimo prethodnu petlju da izvršimo 30 puta, koristićemo sledeći kôd: Lw r1,A1 Lw r2,B1 Lw r3,30 Ponovi: Fmul 0(r2),4.13,0(r1) Addi r1,4 Addi r2,4 Fmul 0(r2),4.13,0(r1) Addi r1,4 Addi r2,4 Fmul 0(r2),4.13,0(r1) Addi r1,4 Addi r2,4 Subi r3,r3,3 BNE r0,r3,Ponovi ; if (r0!=r3) go to PC=PC+4+Ponovi; ; u r0 uvek se čuva 0 Tehnika odmotavanja petlji ne može se efikasno primeniti kada izmedju narednih iteracija egzistira rekurentnost.
Zadatak 4.13 Neka se na nekom hipotetičkom RISC procesoru izvršava sledeći program na asemblerskom jeziku: Ld r4,#A ; napuni konstantu A u registar r4 Ld r5,#B ; napuni konstantu B u registar r5 Ld r6,#C ; napuni konstantu C u registar r6
4-24
Ld r9,#0 ; obriši registar r9 BEQ r4,r5,adr1 ; if (r4)=(r5) then go to adr1 Add r9,r5,r5 ; (r4)+(r5)→(r9) Mul r9,r9,r9 ; (r9)*(r9)→(r9) Add r9,r9,#1 ; (r9)+1→(r9) adr1: St (r1),r9 ; smesti r9 u M(r1)
Identifikovati RAW, WAR i WAW hazarde koji su prisutni, ako ništa nije poznato o strukturi protočne organizacije RISC procesora.
Odgovor Analizirajmo sve instrukcije koje čitaju i upisuju različite eksplicitno definisane operande r4, r5, r6, r9, M(r1), kao i programski brojač PC.
instrukcija Read Write I1 Ld r4, #A r4 I2 Ld r5, #B r5 I3 Ld r6, #C r6 I4 Ld r9, #0 r9 I5 BEQ r4, r5, adr1 r4, r5 PC I6 Add r9, r4, r5 r4, r5 r9 I7 Mul r9, r9, r9 r9 r9 I8 Add r9, r9, #1 r9 r9 I9 St (r1), r9 r9 M (r1)
4-25
Slede}e potencijalne RAW zavisnosti postoje:
(I1, I5) (I4, I7)
(I1, I6) (I4, I8)
(I2, I5) (I4, I9)
(I2, I6) (I6, I7)
(I6, I8)
(I6, I9)
(I7, I8)
(I7, I9)
(I8, I9)
zbog r4
zbog r5
zbog r9
Jedina WAR zavisnost je (I7, I8) zbog r9. Zavisnosti tipa WAW su:
(I4, I6)(I4, I7)(I4, I8)(I6, I7) zbog r9(I6, I8)(I7, I8)
Kod određivanja ovih zavisnosti usvojene su sledeće pretpostavke: a) ne postoji ograničenje u pogledu broja protočnih stepeni, tj.
dubine protočne obrade b) ne postoji ograničenje u pogledu mogućnosti da bilo koji
stepen čita ili upisuje operande
4-26
Zadatak 4.14 Staza podataka jedne protočne petostepene jedinice, kod koje nisu izvedene povratne veze, tj. premošćavanja, prikazana je na Slici 4.10.
IF S1 ID S2 EX S3 ME S4 WB
Cp
Le~ Le~
Le~
Le~
Slika 4.10 Petostepena protočna jedinica
Pravila koja se odnose na princip rada strukture sa Slike 4.10 su: (a) Operand koji se dobavlja iz memorije kod operacije Load
dostupan je procesoru nakon faze ME, a upisuje se u registar RF polja u fazi WB.
(b) Kod operacije Store operand je smešten u memoriji nakon faze ME.
(c) Instrukcija grananja kako je prikazano na Slici 4.11 uzrokuje zastoj od tri ciklusa (jedan ciklus je ponovljeni IF ciklus a ostala dva su ciklus tipa zastoj, tj. iddle)
instrukcija grananja
IF ID EX ME WB
naslednik grananja
IF1 * * IF2 ID EX ME WB
naslednik grananja + 1
IF ID EX ME WB
naslednik grananja +2
IF IF EX ME WB
Slika 4.11 Efekat instrukcije grananja
4-27
Napomena: IF1 se odnosi na pribavljanje opkoda instrukcije koja u programu neposredno sledi iza instrukcije grananja; IF2 se odnosi na pribavljanje opk da ciljne instrukcije grananja; Simbol '*" se odnosi na zastoj.
d) Upis raspoloživog operanda u neki od registara RF polja vrši se u toku prve polovine taktnog impulsa, a čitanje sadržaja registra se obavlja u toku druge polovine. Kao posledica je moguće preklapanje faze ID i WB, tj. ID može da pribavi operand koji se memoriše u toku faze WB. Za sledeći kôdni segment : ponovi: Lw r1,0(r2) Addi r1,r1,#1 Sw r1,o(r2) Addi r2,r2,#4 Sub r4,r3,r2 BNZ r4,ponovi Ako je inicijalna vrednost r3 jednaka r2+396, nacrtati kako izgleda izvršenje instrukcije u vremenu. Rešenje treba da ima oblik kao onaj na Slici 4.11. Ako pretpostavimo da su sva obraćanja memoriji tipa keš pogodak, koliko je taktnih intervala potrebno da se petlja izvrši? Odgovor Vremenski dijagram protočnog sistema prikazan je na Slici 4.12.
taktni intervali instrukcija 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Lw r1,0(r2) F D E M W Addi r1,r1,#1 F * * D E M W Sw r1,0r2 F * * D E M W Addi r2,r2,#4 F D E M W Sub r4,r3,r2 F * * D E M W BNZ r4,ponovi F * * * D E M W Lw r1,0r2 F * * F D E M W
Slika 4.12 Vremenski dijagram rada mašine za jednu potpunu iteraciju petlje i prve instrukcije naredne iteracije.
4-28
Napomena: Radi preglednosti slike umesto notacije faza IF, ID, EX, MF, i WB korišćena su obeležavanja F, D, E, M i W , respektivno. Zastoji se javljaju iz sledećih razloga:
taktni intervali
razlog
3-4 Addi zaustavlja ID sve dok Addi ne upiše operand u r1 6-7 Sw zaustavlja ID sve dok Addi ne upiše operand u r1 10-11 Sub zaustavlja ID sve dok Addi ne upiše operand u r2 13-14 BNZ zaustavlja ID sve dok Sub ne upiše operand u r4 16-17 BNZ izračunava novu vrednost ciljne adrese PC-a tako
da se Lw ne može pribaviti pre kraja ciklusa 17
Na osnovu dijagrama sa Slike 4.12, vidi se da druga iteracija počinje 17 taktnih intervala nakon prve iteracije, a zadnjoj iteraciji je potrebno 18 taktnih intervala da bi završila. To znači da i-ta iteracija (iteracije se broje od 0-98) počinje u taktnom intervalu 1+(i*17). S obzirom da se petlja izvršava 99 puta, ukupni broj taktnih intervala, da se izvrši cela sekvenca, iznosi (98*17)+18=1684 taktna intervala.
Zadatak 4.15 Ukazati na osnovne tipove hazarda po podacima (RAW, WAR, WAW) koje postoje između sledećih instrukcija. i1: Add r1, r2, r3 ; r1=r2+r3 i2: Add r4, r1, r4 i3: Add r3, r1, r2 i4: Add r1, r1, r4 Napomena: protočni procesor koristi 5-stepenu obradu a aktivnosti u toku svake faze, za svaki tip instrukcija, su sledeće:
I_mem R EX D_mem W
4-29
I_mem : pribavljanje instrukcije R : čitanje RF polja i dekodiranje opkoda instrukcije EX : ALU operacija D_mem : pristup memoriji podataka W : upis u RF polje Za detalje o formatu pogledati Dodatak C. Odgovor
R r2,r3 EX r1 W r1
R r1,r4 EX r4 W r4
R r1,r2 EX r3 W r3
R r1,r4 EX r1 W r1
i1
i2
i3
i4
R - ~itanjeEX - rezultat operacije poznatW - upisza slu~aj da ne postoji premo{}avanje:1. izme|u parova instrukcija i1:i2, i1:i3, i1:i4
postoji RAW zavisnost zbog r12. izme|u parova instrukcija i2:i4
postoji RAW zavisnost zbog r4
Zadatak 4.16 Ciklus izvršenja instrukcije, formati instrukcija i strukture staze podataka jednog četvorostepenog RISC procesora prikazane su na Slici 4.13. Pokazati kako izgleda izvršenje sledećih programskih sekvenci: a) x=a+b y=b-c z=c+d
4-30
Pribavljanje instrukcije idekodiranje
FD
Pribavljanje operanda iliadresa
OF
Izvr{enje operacije iliizra~unavanje efektivne
adreseEX
Sme{taj rezultataWB
Slika 4.13 (a) Ciklus grananja instrukcije
Ofset adrese promenljivih a, b, c, d, x, y i z u okviru bloka podataka označene su kao A, B, C, D, X, Y i Z, repektivno. U registar R0uvek se čuva nula. Promenljive a, b, c, d, x, y i z smestiti u registre R1, R2, R3, R4, R5, R6 i R7, respektivno. Bazna adresa bloka podataka se čuva u registru R10. Vrednost bazne adrese je 100D. b) Za slučaj da putevi premošćavanja (isprekidane linije) kod CPU-a sa Slika 4.13 nisu izvedeni, napisati programsku sekvencu i nacrtati vremenski dijagram za sledeću programsku sekvencu:
4-31
var=a+b zbir=var+c Ofest adresa promenljivih a, b, c, var i zbir u okviru bloka podataka označene su kao A, B, C, VAR i ZBIR, respektivno. U registru R0 uvek se čuva 0. Promenljive a, b, c, var i zbir čuvati u registrima R1, R2, R3, R4 i R5. Bazna adresa bloka podataka se čuva u registru R10. Vrednost bazne adrese je 100D. c) Za slučaj da su putevi premošćavanja (isprekidane linije) kod CPU-a sa Slike 4.13 izvedeni, ponoviti aktivnosti specificirane pod b).
Tip Opkôd-op-
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 0
ConstantDest Scr1 Scr2
Tip Opkôd-op-
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 0
OffsetDest Scr1 Scr2
Tip Opkôd-op-
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 0
OffsetDest Scr1 Scr2
Tip Opkôd-op-
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 0
OffsetDest Scr1 Scr2
(a) Registarske instrukcije aritmeti~ke, logi~ke, pomeranja i {iftovanja
(b) Instrukcije koje se obra}aju memoriji Load i Store
(c) Instrukcije za upravljanje tokom programa Jump i Branch
(d) Ostale instrukcije Nop, Clear, Set, Reset
imeOP Dest, Src1, Src2 OP Dest, Src1, Constant Move Dest, Src1 Shift Dest, Src1,Constant
imeLw immU Dest Lw immL Dest Lw rel Dest, Src2, Offset St rel Src1, Src2, Offset
ime Jump Offset Jump Src2, Offset Brel Src2, Offset
ime No-op Clear Dest Sstat Dest Rstat Dest
AkcijaRF[Dest]←RF[Src1] Op RF[Src2] RF[Dest]←RF[Src1] Op Constant RF[Dest]←RF[Src1] RF[Dest]←RF[Src1] shift Constant
Akcija RF[Dest](31...16)←Offset RF[Dest](15...0)←Offset RF[Dest]←Mem[RF[Src2]+Offset] Mem[RF[Src2]+Offset]←RF[Src1]
Akcija PC←PC+Offset PC←RF[Src2]+Offset
[ ]RF[Src2] relnot RF[Src1] ifOffsetPCPCRF[Src2] rel RF[Src1] if1PCPC
+←+←
Akcija nema efekta RF[Dest]←0 Status[Dest] ←1 Status[Dest] ←0
(b) formati instrukcija
4-32
Napomena: RF-registarsko polje; Status-marker registar
dekoderska logika
Upravlja~ki registar
IR
Memorija za instrukcije
PC
MUX1
Offset registar
Upravlja~ki registar
Dest registaar
Dest registar Offset registar
--
3
MUX2
Status 44 4 4
2
1
MUX3
ALU&shifter
RF polje
reg_B reg_A
MAR 44
MUX2
Memorija za podatke
MDR
(c) blok RISC procesora Napomena: Veze prikazane isprekidanim linijama se odnose na puteve premošćavanja
Slika 4.13 : ^etvorostepeni RISC procesor
Odgovor a) Sekvenca instrukcija na asemblerskom jeziku i odgovarajući vremenski dijagram koji se odnosi na redosled izvršenja instrukcija prikazani su na Slici 4.14
Adrese (decimalne) Instrukcija komentar
100 Lw R1,A(R10) ; R1←a
104 Lw R2,B(R10) ; R2←b
108 Lw R3,C(R10) ; R3←c
112 Lw R4,D(R10) ; R4←d
4-33
116 Add R5,R1,R2 ; x=a+b
120 Sub R6,R2,R3 ; y=b-c
124 Add R7,R3,R4 ; z=C+d
128 St R5,X(R10) ; x→M(X)
132 St R6,Y(R10) ; y→M(Y)
136 St R7,Z(R10) ; x→M(Z)
140 ----------
a) asemblerski program
Aktivnost
protočnog
stepena
Taktni
interval
0
1
2
3
4
5
6
7
8
9
10
11
12
13
FD Read PC
Write IR
100
Lw
104
Lw
108
Lw
112
Lw
116
Add
120
Sub
124
Add
128
St
132
St
136
St
140
OF Write reg_A
Write reg_B
(R10)
(R10)
(R10)
(R10)
R1
R2
R2
R3
R3
R4
R5
R10
R6
R10
R7
R10
EX Write MAR
Write MDR
reg_B+
ofset_A
reg_B+
ofset_B
reg_B+
ofset_C
reg_B+
ofset_D
R1+R2
R2-R3
R3+R4
reg_B+
ofset_X
R5
reg_B+
ofset_Y
R6
reg_B+
ofset_Z
R7
WB Write RF
Write Mem
Write PC
104
108
112
R1
116
R2
120
R3
124
R4
128
R5
132
R6
136
R7
140
R5
144
R6
148
R7
152
156
b) vremenski dijagram Slika 4.14 Princip rada RISC procesora ciklus-po-ciklus za sekvencu
instrukcija x=a+b; y=b-c; z=c+d b) Odgovarajuća sekvenca instrukcija na asemblerskom jeziku kao i vremenski dijagrami karakteristični za izvršenje sekvence prikazani su na slici 4.15
4-34
Adrese (decimalne) Instrukcija komentar 100 Lw R1,A(R10) ; R1<-a
104 Lw R2,B(R10) ; R2<-b
108 Lw R3,C(R10) ; R3<-C
112 Nop
116 Add R5,R1,R2 ; var<-a+b
120 Nop
124 Nop
128 Add R5,R3,R4 ; zbir=C+var
132 Nop
136 Nop
140 St R5,ZBIR(R10)
a) Program na asemblerskom jeziku kada postoje zavisnosti po podacima a ne postoji premošćavanje
Aktivnost
protočnog
stepena
Taktni
interval
0
1
2
3
4
5
6
7
8
9
10
11
12
13
FD Read PC
Write IR
100
Lw
104
Lw
108
Lw
112
Nop
116
Add
120
Nop
124
Nop
128
Add
132
Nop
136
Nop
140
St
OF Write reg_A
Writereg_B
(R10)
(R10)
(R10)
R1
R2
R4
R3
R5
R10
EX Write MAR
Write MDR
reg_B+
ofset_A
reg_B+
ofset_B
reg_B+
ofset_C
R1+R2
R3+R4
reg_B+
ofset_zbir
R5
WB Write RF
Write Mem
Write PC
104
108
112
R1
116
R2
120
R3
124
128
R4
132
R6
136
140
R5
144
148
152
R5
156
b) vremenski redosled kada postoje zavisnosti po podacima a ne postoji premošćavanje
Slika 4.15 : Princip rada RISC mašine ciklus-po-ciklus kod izvršenja sekvence instrukcija var=x+y; zbir=var+c; kada postoji zavisnost po
podacima
4-35
c) Adresa Instrukcija komentar
100 Lw R1,A(R10) ; R1<- a 104 Lw R2,B(R10) ; R2<-b 108 Lw R3,C(R10) ; R3<- C 112 Add R4,R1,R2 ; var=a+b 116 Add R5,R3,R4 ; zbir=var+C 120 St R5,zbir(R10) ;
a) Program na asemblerskom jeziku kada postoje zavisnosti po podacima a izvedeno je i premošćavanje
Aktivnost
protočnog
stepena
Taktni
interval
0
1
2
3
4
5
6
7
8
FD Read PC
Write IR
100
Lw
104
Lw
108
Lw
112
Add
116
Add
120
St
OF Write reg_A
Write_regB
(R10)
(R10)
(R10)
R1
R2
R1+R2
R3
R3+R4
R10
EX Write MAR
Write MDR
Write status
reg_B+
ofset_A
reg_B+
ofset_B
reg_B+
ofset_C
R1+R2
R3+R4
reg_B+
ofset_zbir
R3+R4
WB Write RF
Write Mem
Write PC
104
108
112
R1
116
R2
120
R3
124
128
R4
132
R6
136
b) Vremenski redosled izvršenja instrukcija kada je izvedeno premošćavanje
Slika 4.16 Program na asemblerskom jeziku i vremenski dijagram za slučaj b) kada je premošćavanje izvedeno
4-36
Zadatak 4.17 Za RISC procesor prikazan na slici 4.13 napisati programsku sekvencu na osnovu koje se određuje koja je od dve promenljive a i b, veća, tj. manja. Inicijalno, promenljiva a je smeštena u registar R1, premenljiva a je smeštena u registar R1, promenljiva b u registar R2, veću vrednost čuvati u R3 a manju u R4. Usvojiti da je početna adresa programa 100D, a R0=0
Odgovor Sekvenca instrukcija na asemblerskom jeziku koja se koristi za određivanje minimalne i maksimalne vrednosti ima sledeći oblik
Adresa Instrukcija komentar
100 BGE R1,R2,+40 ; if R1>=R2 go to LAB1
104 Nop
108 Nop
112 Nop
116 Add R3,R2,R0 ; Move max, b
120 Add R4,R1,R0 ; Move min, a
124 J +24 ; jump to LAB2
128 Nop
132 Nop
136 Nop
LAB1: 140 Add R3,R1,R0 ; Mov max, a
144 Add R4,R2,R0 ; Mov min, b
LAB2: 148 ............
Napomena: Nakon pribavljanja tekuće instrukcije PC se ne inkrementiras za 4 još u fazi FD kako se to izvodi kod većine RISC procesora nego tek u fazi WB. Zbog toga su iznosi skokova na LAB1 i LAB2 +40 i +24, a ne +36 i +20, respektivno.
4-37
Tip
aktivnosti
Taktni
interval
0
1
2
3
4
5
6
7
8
9
10
FD Read PC
Write IR
100
BGE
104
Nop
108
Nop
112
Nop
116
Add
120
Add
124
J
128
Nop
132
Nop
136
Nop
148
OF Write reg_A
Write_regB
R1
R2
R2 R1
EX Write MAR
Write MDR
Write status
R1>=R2
R2
R1
WB Write RF
Write Mem
Write PC
104
108
112
116
120
124
128
R3
132
R4
136
140
a) vremenski dijagram kada do uslovnog grananja ne dođe Tip
aktivnosti Taktni interval
0
1
2
3
4
5
6
7
8
9
10
FD Read PC
Write IR
100
BGE
104
Nop
108
Nop
112
Nop
140
Add
144
Add
148
OF Write reg_A
Write_regB
R1
R2
R1 R2
EX Write MAR
Write DDR
Write status
R1>=R2
R1
R2
WB Write RF
Write Mem
Write PC
104
108
112
140
144
148
R3
R4
b) vremenski dijagram kada do uslovnog grananja dođe Slika 4.17 : Vremenski dijagrami - efekat instrukcije uslovnog grananja
4-38
S obzirom da procesor ne može da odredi adresu naredne instrukcije za tri taktna intervala neophodno je da kompilator ubaci tri Nop instrukcije nakon instrukcije uslovnog grananja BGE (branch greater or equal). Na slličan način potrebno je da kompilator ubaci tri Nop instrukcije nakon instrukcije bezuslovnog grananja J (jump). Na sl. 4.17a) prikazan je vremenski dijagram kada do (uslovnog) grananja na dođe a na sl. 4.17b) kada je uslov ispunjen i dođe do grananja.
Zadatak 4.18 Ukazati na efekat tehnike predikcije grananja, ako RISC procesor sa sl. 4.13 izvršava programsku sekvencu iz prethodnog zadatka pod istim uslovima (misli se na dodelu promenljivih registrima).
Odgovor Programska sekvenca na asemblerskom jeziku je oblika
Adresa Instrukcija komentar
100 BGE R1,R2,+4 ; if R1>=R2 go to LAB1
104 Add R3,R2,R0 ; Move max, b
108 Add R4,R1,R0 ; Move min, a
112 J +3 ; go to LAB2
LAB1: 116 Add R3,R1,R0 ; Move max, 0
120 Add R4,R2,R0 ; Move min, b
LAB2: 124 ---------------
Uočimo da u ovaj programskoj sekvenci ne postoje instrukcije tipa Nop. Vremenski dijagram koji prikazuje kako se program izvršava ako do (uslovnog) grananja na dođe prikazan je na slici 4.18b). Kao što se vidi sa slike 4.18a) procesor izvršava instrukcije na adresama 104, 108 i 112 kao da grananje ne postoji. Ali u
4-39
taktnom intervalu 3, kada je predikcija potvrđena, procesor produžava da pribavlja narednu instrukciju sa adrese 116, ne znajući da je prethodna instrukcija bita J, tj. bezuslovno grananje. U taktnom intervalu 6 procesor odredi da je vrednost adrese skoka 124, on puni ovu vrednost u PC i pribavlja instrukciju u registar IR u taktnom intervalu 7. U tom momentu, prethodne tri instrukcije koje su startovale u taktnim intervalima 4,5 i 6, uključujući i instrukciju na lokaciji 124, se prazne iz protočnog sistema, tj. anulira se njihov efekat. Da bi odredio minimalnu i maksimalnu vrednost, u ovom slučaju, procesoru su potrebna sedam taktna intervala. Na dijagramu sa slike 4.18b) prikazan je vremenski redosled događaja kada se obavi uslovno grananje. Procesor izvršava prve četiri instrukcije kao u prethodnom slučaju. Ipak kada u taktnom intervalu 3 procesor odredi da do grananja mora da dođe, puni se adresa grananja 116 u PC i prazni protočni sisem, tj. anulira započeto izvršenje instrukcija na adresama 104, 108 i 112. Uočimo da će se adresa 104 napuniti nezavisno od toga što je ona naredna adresa u sekvenci instrukcija. Procesor zatim produžava da izvršava instrukcije na adresama 116, 120 i 124. U ovom slučaju, da bi obavio istu aktivnost, procesoru su potrebna 6 taktna intervala. Znači ako usvojimo da je verovatnoća da će dogradnja da dođe do 50%, tada procesor, koristeći predikciju grananja, određivaće minimalnu i maksimalnu vrednost, u proseku 6,5 taktna intervala, što je približno 28% brže u odnosu na to kada predikcijagrananja ne postoji. Prethodna diskusija jasno ukazuje na prednosti koje nudi predikcija grananja. Naime, procesor kod koga mehanizam predikcije grananja nije implementiran u proseku "trošiće" nekoliko taktnih intervala više (po instrukciji uslovnog grananja) u odnosu na onaj procesor kod koga je mehanizam predikcije implementiran.
4-40
Tip
aktivnosti
Taktni
interval
0
1
2
3
4
5
6
7
8
FD Read PC
Write IR
100
BGE
104
Add
108
Add
112
J
116
Add
120
Add
124
124
OF Write reg_A
Write_regB
R1
R2
R1
R1 R1 R2
EX Write MAR
Write DDR
Write status
R1>=R2
R2
R1
R1
WB Write RF
Write Mem
Write PC
104
108
112
116
R3
120
R4
124
124
a) vremenski dijagram kada do grananja ne dođe
Tip
aktivnosti
Taktni
interval
0
1
2
3
4
5
6
7
8
FD Read PC
Write IR
100
BGE
104
Add
108
Add
112
J
116
Add
120
Add
124
OF Write reg_A
Write_regB
R1
R2
R2
R1
R1 R2
EX Write MAR
Write DDR
Write status
R1>=R2
R2
R1
R2
WB Write RF
Write Mem
Write PC
104
108
112
116
120
124
R3
R4
b) vremenski dijagram kada do grananja dođe
Slika 4.18 : Rad RISC procesora kod koga je implementiran mehanizam predikcije grananja
protočni sistem se prazni
protočni sistem se prazni
4-41
Test pitanje 4.43 Na koji način se može ostvariti odlaganje izvršenja (delaying of execution) instrukcija kod RISC procesora? Usvojiti da protočni sistem čine sledeći stepeni: IF, ID, OF, EX i WB.
Odgovor Da bi ukazali na ovaj problem, razmotrimo izvršenje instrukcija i1 i i2 izmedju kojih postoji zavisnost po podacima: i1: Add r2,r3,r4 ; r2 = r3 + r4
i2: Add r5,r2,r1
Odlaganje izvršenjka se može ostvariti na sledeća dva načina: Kod prvog rešenja odlaže se izvršenje aktivnosti stepena OF ili IF instrukcije i2 za dva taktna intervala, kako je to prikazano na Slici 4.19.
IF ID EXOF WB
IF --ID -- OF WBEX
taktni intervali
1 2 3 4 5 6 7 8
i1
i2
a) Odlaganje izvr{enja faze OF
IF ID EXOF WB
-- IF-- ID OF WBEX
taktni intervali
1 2 3 4 5 6 7 8
i1
i2
b) Odlaganje izvr{enja faze IF
Slika 4.19 Odlaganje izvršenja Da bi se umetnulo kašnjenje, u procesor je potrebno ugraditi dodatnu hardversku komponentu koja se naziva pipeline interlock
4-42
- PI. Blok PI detektuje zavisnosti i unosi kašnjenje kod izvršenja izmedju zavisnih instrukcija, sve dok se konflikt ne reši. b) Kod drugog rešenja, kompilator rešava problem zavisnosti. U toku kompilacije kompilator detektuje zavisnosti izmedju podataka i instrukcija, a nakon toga, preuredjuje ove instrukcije tako da zavisnosti nisu više hazardne (opasne) sa aspekta rada sistema. U slučaju kada nije moguće da se izvrši preuredjenje instrukcija, umetaju se instrukcije tipa Nop i na taj način stvara kašnjenje. Ilustracije radi, posmatrajmo izvršenje sledećih instrukcija: i1: Add r2,r3,r4
i2: Add r5,r2,r1
i3: Add r6,r6,r7
i4: Add r8,r8,r7
Redosled izvršenja ovih instrukcija se može preurediti tako da se i3 i i4, koje nisu zavisne od i1 i i2, ubacuju izmedju i1 i i2 na sledeći način:
IF ID EXOF WB
IF ID OF WBEX
taktni intervali
1 2 3 4 5 6 7 8
i1
i2
IF ID EXOF WB
IF ID OF WBEX
Test pitanje 4.44 Objasniti princip rada tehnike premošćavanja.
4-43
Odgovor Termin premošćavanje (bypassing / forwarding) se odnosi na tehniku direktne predaje rezultata jedne instrukcije drugoj instrukciji, sa ciljem da se izbegne (eliminiše), najpre memorisanje dobijenog rezultata, a nakon toga, i njegovo pozivanje. Premošćavanje se može ostvariti na nivou kompilatora, čime se izbegavaju nepotrebna obraćanja memorijskim lokacijama putem prosledjivanja vrednosti preko registara a ne preko memorijskih lokacija. Premošćavanje (prosledjivanje) rezultira povećanjem brzine izršenja operacija iz razloga što procesor brže pristupa svojim internim registrima u odnosu na memorijske lokacije. Premošćavanje se, takodje, može implementirati i na hardverskom nivou kako bi se eliminisali protočni ciklusi koji se odnose na čitanje sadržaja registra čiji je sadržaj bio ažuriran u prethodnom protočnom stepenu. U ovom slučaju, premošćavanjem se eliminišu pristupi registrima na taj način što se koriste brži putevi za prenos podataka. Kompilator koristi sledeće tri tehnike premošćavanja: Store-Fetch Forwarding - SFF Fetch-Fetch Forwarding - FFF Store-Store Overwriting - SSO Store i Fetch se odnose, prvo na upis operanada u meoriju, a nakon toga čitanje istih iz memorije. U svakom slučaju, neophodno je eliminisati nepotrebno obraćanje memoriji. Kod SFF pristupa, operand se direktno uzima iz procesorsko-operandskog registra. Na primer, sledeći kôd: St 200(r0),r2 ; kopira se sadržaj registra r2 u memor. ; lokaciju 200 pri čemu je r0 jednako 0
Lw r3,200(r0) ; kopira sadr`aj mem. lokacije 200 u reg. r3
4-44
se može redukovati: St 200(r0),r2
Add r3,r2,r0
čime se eliminiše jedno obraćanje memoriji. Kod FFF pristupa, višestruki pristupi istoj memorijskoj lokaciji se eliminišu ako se učini da se svi pristupi odnose na operand kojise, nakon čitanja, smešta u jedan od registara procesora. Tako na primer, Lw r2,200(r0)
Lw r3,200(r0)
Lw r4,200(r0)
se može redukovati na: Lw r2,200(r0)
Add r3,r2,r0
Add r4,r2,r0
čime se eliminišu dva obraćanja memoriji. Kod SSO pristupa, eliminiše se jedna ili veći broj operacija tipa upis bez posrednih operacija koje se odnose na pamćenje rezultata. Tako na primer, St 200(r0),r2
St 200(r0),r3
se može redukovati na: St 200(r0),r3
Ali, treba naglasiti, da ovo pojednostavljenje može često da bude uzrok grešaka kod najvećeg broja programa. Interno premošćavanje (Internal forwarding) predstavlja hardversko premošćavanje koje se implementira od strane registara procesora ili puteva (magistrala) podataka i nije vidljivo
4-45
programeru. Intrerno premošćavanje se može aplicirati na protočnom izvršenju instrukcija sa ciljem da se eliminišu obraćanja registrima opšte namene, tj. registrima RF polja. Na primer, kod sledeće kodne sekvence: Add r3,r2,r5
Subi r4,r3,#8
operaciji Subi je potreban sadržaj registra r3 koji se generiše od strane instrukcije Add. Instrukcija će se zaustaviti u stepenu OF i čekaće da vrednost r3 postane važeća. Internim premošćavanjem prosledjuje se vrednost koju treba smestiti u r3, direktno, na ulaz stepena EX. Bez premošćavanja, operacija Subi treba da sačeka ažuriranje vrednosti r3, pa nakon toga može da sledi čitanje vrednosti registra r3. Uočimo da, i u ovom slučaju, dolazi do zastoja od jedne vremenske jedinice, ali, kada premošćavanja ne bi bilo, zastoj bi bio dva puta duži (čitalac treba da odgovori na pitanje da li sa izlaza stepena EX može da se izvrši premošćavanje na ulaz stepena EX, kako je to isprekidanim vezama, prikazano na Slici 4.20). Premošćavanje se može proširiti na prosledjivanje rezultata većem broju instrukcija, kako je to prikazano u sledećoj programskoj sekvenci: Add r3,r2,r5
Subi r4,r3,#8
Subi r6,r3,#4
Obe Subi instrukcije koriste vrednost koja se čuva u r3. Za slučaj da na Slici 4.20 postoje oba premošćavanja, do zastoja u radu sistema ne bi dolazilo.
4-46
U principu, premošćavanje iziskuje dodatnu logiku u protočnoj implementaciji, ali je kao princip veoma atraktivno kada se govori o povećanju performansi RISC procesora.
IF OF EX WB
premo{}avanje sa EX na EX (opciono)
premo{}avanje sa WB na EX
ka r3(r3 pripada RF polju
instrukcije
Add r3,r2,r5
Subi r4,r3,#8
. . .
IF EXOF WB premo{-}avanje
IF zastojOF EX WB
IF OFzastoj EX WB
write r3
Slika 4.20 Princip rada internog premošćavanja
4-47
Ispitni zadaci maj 2000 - Zadatak 3 a) Neka je dat sledeći kôdni segment napisan na programskom
jeziku C: int i; int a[100]; for (i=0; i<100; i++) a[i]=a[i]+c;
Napisati odgovarajući kôd na asemblerskom jeziku mikroprocesora Mips. Koristiti registar $8 za čuvanje promenljive i, a registar $9 za čuvanje konstante c. Početna adresa polja (vektora) je 1000 h. Imati u vidu da za čuvanje celobrojne vrednosti rezervišu po 4 bajta, kao i da se sve memorijske adrese zadaju kao bajt adresibilne. b) Koliko Mips-ovih instrukcija se izvrše za kôdni segment
definisan stavkom pod (a)? c) Koliko se Mips-ovih instrukcija izvrši kada se kôdni segment
na C-u promeni na sledeći način? for (i=0; i<100; i=i+2) { a[i]=a[i]+c; a[i+1]=a[i+1]+c; }
Odgovor a) Za ovaj problem usvojimo da postoji jedan skriveni delay
slot koga nećemo brojati kao instrukciju mikroprocesora Mips. Odgovarajuća sekvenca na asemblerskom jeziku mikroprocesora Mips biće oblika: Li $8,0x1000 # početna adresa polja Li $11,4496 # krajnja adresa polja, kao decim. Loop: Lw $10,0($8) # a[i]
4-48
Add $10,$10,$9 # a[i]=a[i]+c Sw $10,0($8) # smesti a[i] u memoriju Addi $8,$8,4 # dodaj 4 bajta za a[i+1] Bne $8,$11,Loop # da li je kraj polja? J $31 # kraj programa
b) unutrašnja petlja ovog programa ima 5 linija, a ponavlja se 100 puta, to znači da se ukupno izvršavaju 503 Mips-ove instrukcije c)
Li $8,0x1000 # početna adresa polja Li $12,4496 # krajnja adresa polja, decimalna Loop: Lw $10,0($8) # a[i] Lw $11,4($8) # a[i+1] Add $10,$10,$9 # a[i]=a[i]+c Add $11,$11,$9 # a[i+1]=a[i+1]+c Sw $10,0($8) # smesti a[i] u memoriju Sw $11,4($8) # smesti a[i+1] u memoriju Addi $8,$8,8 # dodaj 8 bajtova za a[i+2] Bne $8,$12,Loop # da li je kraj polja? J $31 # kraj programa U ovom slučaju, unutrašnja petlja ima 8 linija, a ponoviće se 50 puta, a to znači da će se izvršiti 403 Mips-ove instrukcije.
maj 2001 - Zadatak 4 Sledeći kodni segment se izvršava na RISC procesoru koga
čine pet protočna stepena prikazana na slici 1 (maj-01-4). 1. R1←R2+R3 2. R1←R1+R2 3. R2←R3+R4 4. R5←R6+R7 5. R5←R5+R7 6. R6←R1+R2
4-49
Pokazati kako izgleda konačni kôd i tok izvršenja programskog segmenta ako se konflikti (hazardi) po podacima rešavaju a) ubacivanjem Nop operacija b) preuredjenjem instrukcija c) korišćenjem tehnike premošćavanja a kompilator ubacuje
operacije tipa Nop. FE ID Sel Reg EX Sto Reg
Slika 1 (maj-01-4) Peto-stepeno organizovani RISC procesor
Odgovor a) 1: R1←R2+R3
2: R1←R1+R2 3: R2←R3+R4 4: R5←R6+R7 5: R5←R5+R7 6: R6←R1+R2
b) 1: R1←R2+R3
4: R5←R6+R7 4': Nop 2: R1←R1+R2 3: R2←R3+R4 5: R5←R5+R7 6: R6←R1+R2
4-50
1 F D S E W
4 F D S E W
4' F D S E W Nop
2 F D S E W
3 F D S E W
5 F D S E W
6 F D S E W
c) 1: R1←R2+R3 1': Nop 2: R1←R1+R2
3: R2←R3+R4 4: R5←R6+R7 4': Nop 5: R5←R5+R7 6: R6←R1+R2
1 F D S E W
1' F D S E W Nop
2 F D S E W
3 F D S E W
4 F D S E W
4' F D S E W Nop
5 F D S E W
6 F D S E W
FE ID Sel Reg EX Sto Reg
4-51
septembar 2001 - Zadatak 2 a) Sledeći programski segment se izvršava na tro-stepenom
protočno organizovanom RISC procesoru sa slike 1 (sep-01-2). 1: R1←3 2: R2←R2+R3 3: R3←R3+R4 4: R4←R1+R2 5: R1←R1-1 6: if (R10≠0) then go to 2 7: R5←R6+R7 8: R6←R7+R8 Pokazati konačnu verziju programa i trag izvršenja ako se konflikti zbog grananja rešavaju: i) ubacivanjem Nop operacija ii) preuredjenjem redosleda izvršenja instrukcija iii) ubacivanjem zastoja. b) Ponoviti stavku pod a) za RISC procesor koji koristi četvorostepenu protočnu obradu.
FE DE &Sel_Reg
EX &Sto_Reg
FE DE &Sel_Reg EX Sto_Reg
Slika 1 (sep-01-2) Tro- i četvoro-stepeno organizovan RISC procesor
Odgovor
4-52
a) i) 1 FE DS ES R1←3
2 FE DS ES R2←R2+R3
3 FE DS ES R3←R3+R4
4 FE DS ES R4←R1+R2
5 FE DS ES R1←R1-1
6 FE DS ES if (R10≠0) then go to 2
6' FE DS ES Nop
6'' FE DS ES Nop
2/7 FE DS ES R2←R2+R3/R5←R6+R7
ii) 1 FE DS ES R1←3
2 FE DS ES R2←R2+R3
3 FE DS ES R3←R3+R4
6 FE DS ES if (R10≠0) then go to 2
4 FE DS ES R4←R1+R2
5 FE DS ES R1←R1-1
7 FE DS ES R5←R6+R7
8 FE DS ES R6←R7+R8
iii) 1 FE DS ES R1←3
2 FE DS ES R2←R2+R3
3 FE DS ES R3←R3+R4
4 FE DS ES R4←R1+R2
5 FE DS ES R1←R1-1
6 FE DS ES if (R10≠0) then goto 2
2/7 FE ∗ FE DS ES
3/8 FE DS ES
4-53
b) i) 1 FE DS EX SR R1←3
2 FE DS EX SR R2←R2+R3
3 FE DS EX SR R3←R3+R4
4 FE DS EX SR R4←R1+R2
5 FE DS EX SR R1←R1-1
6 FE DS EX SR if (R10≠0) then go to 2
6' FE DS EX SR Nop
6'' FE DS EX SR Nop
2/7 FE DS EX SR
ii) 1 FE DS EX SR R1←3
2 FE DS EX SR R2←R2+R3
3 FE DS EX SR R3←R3+R4
6 FE DS EX SR if (R10≠0) then go to 2
4 FE DS EX SR R4←R1+R2
5 FE DS EX SR R1←R1-1
7 FE DS EX SR R5←R6+R7
8 FE DS EX SR R6←R7+R8
iii) 1 FE DS EX SR R1←3
2 FE DS EX SR R2←R2+R3
3 FE DS EX SR R3←R3+R4
4 FE DS EX SR R4←R1+R2
5 FE DS EX SR R1←R1-1
6 FE DS EX SR if (R10≠0) then goto 2
2/7 FE ∗ FE DS EX SR
3/8 FE DS EX SR
4-54
oktobaarII 2001 - Zadatak 2 a) Sledeća programska sekvenca se koristi za dodavanje broja 2
svakom elementu vektora koga čine 100 elemenata. Vektor je lociran počev od memorijske lokacije V. Indeksni registar X pokazuje na broj elemenata u vektoru: Loop: Lda V(X) ; ACC←M(V+X) Add #2 ; ACC←ACC+2 Sto V(X) ; M(V+X)←ACC Dec X ; X←X-1 Bnz Loop ; if (X≠0 branch to Loop)
Pokazati kako se izvršava ova sekvenca kroz protočni sistem koga čine sledećih šest stepena: FE (Fetch instruction), DE (Decode instruction), EA (Effective Address calculation), FO (Fetch Operand), EX (Execute) i WB (Write Back ili Store Results). b) Izvršiti odmotavanje petlje definisane pod a) tako da se za
jedan prolaz kroz petlju procesiraju dva elementa. Napomene: 1) Inicijalno smatrati da je protočni sistem prazan. 2) Da se ne bi, usled zavisnosti, zaustavljao rad protočnog sistema (tj. ubacivali mehurovi od strane hardvera procesora) kompilator analizira kôd i vrši ubacivanje operacije tipa Nop na svim mestima gde je to potrebno. 3) Operacija tipa Lda smešta operand u ACC u toku faze FO. 4) Operacija tipa Sto smešta sadržaj ACC-a u memoriju u toku faze WB. 5) Operacije tipa Add i Dec izračunavaju svoj rezultat toku faze EX, tj. rezultat je dostupan za korišćenje jer CPU ima izvedenu tehniku premošćavanja. 6) Ishod grananja kod instrukcije uslovnog grananja zna se
nakon završetka faze EX, tj. programski brojač se puni na kraju faze EX.
4-55
7) Arhitektura CPU-a je tipa Harvard, tj. procesor ima izdvojene magistrale za podatke i instrukcije. Odgovor
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
LdaNop
AddNop
Nop
NopNop
Nop
NopNop
NopNop
NopNop
Lda(dr. iter)
Sto
Dec
Branch
Ako bi se instrukcije izvršavale strogo sekvencijalno tada bi bilo potrebno:
Tsek=100∗5∗6=3000 taktnih impulsa Kod protočnog izvršenja imamo:
Tpro=100∗17+5=1705 taktna impulsa Programska sekvenca koju generiše kompilator je oblika: 1: Lda V(X) - tekuća iteracija 1': Nop 2: Add #2 2': Nop 2'': Nop 3: Sto V(X) 3': Nop 3'': Nop 3''': Nop 4: Dec X
4-56
4': Nop 4'': Nop 5: Branch 5': Nop 5'': Nop 5''': Nop 5iv: Nop 1: - naredna iteracija Dobitak iznosi
76.117053000
1 ===pro
sek
TT
D
tj. protočni sistem 1.76 puta brže izvršava program u odnosu na strogo sekvencijalno izvršenje.
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
Lda
Nop
Add
Nop
Nop
Nop
Nop
Nop
Nop
Nop
NopNop
Nop
Nop
nar.iter.
Sto
Dec
Branch
Lda
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
FE DE EA FO EX WB
Nop
Add
Nop
Nop
Nop
Nop
Nop
Nop
Nop
Sto
Dec
Branch
Nop
Nop
Programska sekvenca koja se generiše nakon dodavanja petlje od strane kompilatora je sledećeg oblika:
4-57
Lda V(X) Nop Add #2
Nop Nop Sto V(X) Nop Nop Nop Dec X Nop Nop Lda V(X)
Nop Add #2 Nop Nop Sto V(X) Nop Nop Nop Dec X Nop Nop Bnz Loop Nop Nop Nop Nop Vreme potrebno da se izvrši programska sekvenca nakon odmotavanja petlje iznosi:
Tod=50∗29+5=1455 taktnih intervala
Dobitak iznosi: 06.214553000
2 ==D
4-58
april 2002 - Zadatak 3 a) Kod peto-stepenog protočno organizovanog sistema sa
jednim memorijskim portom dolazi do pojave strukturnog hazarda. Za sledeću sekvencu instrukcija identifikovati sve zastoje koji su posledica strukturnih hazarda: Lw r1,0(r2) Addi r4,r3,#1 Sw r3,0(r2) Add r5,r1,r1 Sub r4,r4,r2 b) Kako se može preurediti sekvenca instrukcija da bi se izbegli
strukturni hazardi? Odgovor a)
Lw IF ID EX ME WB Addi IF ID EX ME WB Sw IF ID EX ME WB Add ∗ IF ID EX ME WB
Sub ∗ IF ID EX ME WB
b) Da bi se izbegli strukturni hazardi uvodi se veći broj portova. Ako se koristi preuredjenje instrukcija data sekvenca instrukcija se može preurediti na sledeći način:
Addi IF ID EX ME WB Lw IF ID EX ME WB Sub IF ID EX ME WB Sw IF ID EX ME WB Add ∗ IF ID EX ME WB
4-59
maj 2002 - Zadatak 2 a) Na slici 1 (maj-02-2) prikazana je organizacija jednog
superskalarnog procesora koji može da inicira dve instrukcije po ciklusu u slučaju da ne postoje konflikti zbog korišćenja resursa i zbog zavisnosti po podacima. U suštini postoje dva protočna sistema sa po četiri stepena (Fetch, Decode, Execute i Store). U stepenu Execute postoje tri protočne i direktno upravljane funkcionalne jedinice (multiplier, adder i load), deljive od strane oba protočna stepena. Na svaku funkcionalnu jedinicu preko multipleksera dovode se signali iz blokova D1, S1 i S2 odnosno iz blokova D2, S1 i S2. Odrediti zavisnosti koje postoje u datom programskom segmentu: Lw r1,A(r0) Lw r2,B(r0) Add r3,r1,r2 Mul r5,r3,r4 Add r6,r4,r0 Mul r7,r6,r6
F1
F2
D1
D2
m1 m2 m3
a1 a2
e1
S1
S2
Fetch ExecuteDecode
MUX
Store
multiplier
adder
load
Slika 1 (maj-02-2) Superskalarni procesor
4-60
b) Za četvoro-stepeno protočno organizovani RISC procesor prikazati trag izvršenja programske sekvence date pod a) koristeći preuredjenje redosleda instrukcija. Odgovor a) 1: F1 D1 E2 S1
2: F2 D2 ∗ E2 S2
3: F1 D1 ∗ ∗ A1 A2 S1
4: F2 ∗ D2 ∗ ∗ ∗ ∗ M1 M2 M3 S2
5: F1 ∗ D1 ∗ A1 A2 S1
6: F2 ∗ ∗ ∗ ∗ D2 ∗ ∗ M1 M2 M3 S2
b) 1: F1 D1 E2 S1
5: F2 D2 A1 A2 S2
2: F1 D1 E1 S1
3: F2 D2 ∗ ∗ A1 A2 S2
6: F1 D1 ∗ M1 M2 M3 S1
4: F2 ∗ ∗ D2 ∗ ∗ M1 M2 M3 S2
mart 2000 - Zadatak 3 Na slici 1 (mar-00-3) prikazana je organizacija jednog
superskalarnog procesora. Procesor može da inicira dve instrukcije po ciklusu u slučaju da ne postoje konflikti zbog korišćenja resursa i konflikti zbog zavisnosti po podacima. U suštini postoje dva protočna sistema sa po četiri procesna stepena (Fetch, Decode, Execute i Store). Svaki protočni sistem ima svoj Fetch i Store stepen. Četiri funkcionalne jedinice (multiplier, adder, logic unit i store unit) su dostupne za korišćenje u stepenu
4-61
Execute i deljive su od strane oba protočna stepena na dinamičkoj osnovi. Obe Store jedinice se mogu dinamički koristiti od strane oba protočna stepena, u zavisnosti od dostupnosti u pojedinom ciklusu. Postoji lookahead prozor koji ima svoju logiku za fetch i decode. Prozor se koristi za pripremanje instrukcija unapred (instruction lookahead) kod iniciranja izvršenja instrukcija van redosleda (out-of-order instruction issue).
Neka se na procesoru izvršava sledeći programski segment: I1: Lw R1,A ; R1 ← M(A) I2: Add R2,R1 ; R2 ← (R2)+(R1) I3: Add R3,R4 ; R3 ← (R3)+(R4) I4: Mul R4,R5 ; R4 ← (R4)∗(R5) I5: Not R6 ; R6 ← /(R6) I6: Mul R6,R7 ; R6 ← (R6)∗(R7) a) Odrediti koje zavisnosti u datom programskom segmentu
postoje? b) Prikazati protočnu aktivnost programa koristeći politike
iniciranje-izvršenja-instrukcije-po-redosledu (in-order-issue) i završetak-instrukcije-po-redosledu (in-order-completion). c) Ponoviti aktivnost pod b) za slučaj out-of-order-issue i out-
of-order-completion.
f1 d1
f2 d2
f3 d3
m1 m2 m3
a1 a2
e1
e2
S1
S2
lookaheadprozor
Fetch stepen Decodestepen
Execute stepen Store stepenmultiplier
adder
logic
load
Slika 1 (mar-00-3) Dvo-protočni superskalarni procesor
4-62
Odgovor a)
Instrukcija Read Write
I1: Lw R1,A M(A) R1
I2: Add R2,R1 R1,R2 R2
I3: Add R3,R4 R3,R4 R3
I4: Mul R4,R5 R4,R5 R4
I5: Not R6 R6 R6
I6: Mul R6,R7 R6,R7 R6
Zavisnosti su: RAW: (I2,I1) zbog R1 (I6,I5) zbog R6 WAW: (I6,I5) zbog R6 WAR: (I4,I3) zbog R4 (I6,I5) zbog R6
b)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
I1 F1 D1 E2 S1
I2 F2 D2 ∗ ∗ A1 A2 S2
I3 F1 D1 ∗ ∗ A1 A2 S1
I4 F2 ∗ ∗ D2 M1 M2 M3 S2
I5 F1 D1 ∗ ∗ E1 S1
I6 F2 D2 ∗ ∗ ∗ ∗ M1 M2 M3 S2
c)
1 2 3 4 5 6 7 8 9 10 11
I1 F1 D1 E2 S1
I2 F2 D2 ∗ ∗ A1 A2 S2
I3 F1 D1 A1 A2 S1
I4 F2 D3 ∗ M1 M2 M3 S2
I5 F1 D1 ∗ E1 S1
I6 F2 ∗ D2 ∗ ∗ M1 M2 M3 S2
4-63
april 2003 - Zadatak 2 Sledeća programska sekvenca se izvršava na mikroprocesoru Mips. Odrediti sadržaje registara nakon izvršenja sekvence. Pre početka izvršenja sekvence $0=0, $2=0x73334444, $6=0x7555AAAA, a sadržaj memorijske lokacije na adresi labela1=0x87654321. Svi brojevi kojima prethodi 0x su predstavljeni u heksadecimalnoj prezentaciji, sa nulama na MS pozicijama cifara kada su te cifre izostavljene. Brojevi bez 0x su decimalni. Svi odgovori moraju biti u heksadecimal. prezentaciji.
Slt $3,$2,$6 Bne $3,$0,skok1 Xori $2,$0,123
Skok1: Addi $4,$2,-4 Ror $6,$6,4 Lui $4,0x4321 Ori $4,$4,0x5678 Addi $5,$4,0xCABE Lw $7,labela1($0)
$0=?; $2=?; $3=1; $4=?; $5=?; $6=?; $7=?; mem(labela1)=?
Odgovor $0=0; $2=0x73334444; $3=1; $4=0x43215678; $5=0x43222136; $6=0xA7555AAA; $7=0x87654321; mem(labela1)=0x87654321
jun 2003 - Zadatak 3 a) Koliko je ciklusa potrebno za iniciranje izvršenja sledeće
programske sekvence na out-of-order superskalarnom procesoru sa dve EX-U jedinice. Latencija operacije Ld iznosi tri ciklusa, a latencija ostalih operacija dva ciklusa. Svaka od EX-U jedinica može da izvrši bilo koju operaciju. Kod planiranja izvršenja instrukcija koristiti gramžljiv algoritam, i usvojiti da je instrukcioni prozor procesora dovoljno veliki da obuhvati ukupnu programsku sekvencu.
4-64
Ld r4,(r5) Ld r7,(r8) Add r9,r4,r7 Ld r10,(r11) Mul r12,r13,r14 Sub r2,r3,r1 St (r2),r15 Mul r21,r4,r7 St (r22),r23 St (r24),r21
b) Pretpostavimo da procesor iz stavke a) ima jednu EX-U jedinicu koja izvršava samo memorijske instrukcije (Load i Store) i drugu koja izvršava ne-memorijske instrukcije (Add, Sub, Mul, ...). Ako su parametri procesora isti kao pod stavkom a) koliko je ciklusa potrebno za iniciranje izvršenja programske sekvence. Odgovor a) Za iniciranje izvršenja instrukcije potrebna su 6 ciklusa
Ciklus 1: Ld r4,(r5) Ld r7,(r8) Ciklus 2: Ld r10,(r11) Mul r12,r13,r14 Ciklus 3: Sub r2,r3,r1 St (r22),r23 Ciklus 4: Add r9,r4,r7 Mul r21,r4,r7 Ciklus 5: St (r2),r15 Ciklus 6: St (r24),r21 b) za iniciranje izvršenja instrukcija potrebna su 8 ciklusa
Ciklus 1: Ld r4,(r5) Mul r12,r13,r14 Ciklus 2: Ld r7,(r8) Sub r2,r3,r1 Ciklus 3: Ld r10,(r11) Ciklus 4: St (r2),r15 Ciklus 5: Add r9,r4,r7 St (r22),r23 Ciklus 6: Mul r21,r4,r7 Ciklus 7: ne vrši se iniciranje Ciklus 8: St (r24),r21
5-0
5. Memorije
5-1
Zadatak 5.1 Na slici 5.1 prikazana je logička šema i tablica istine, linijskog dekodera 3-u-8 tipa 74LS138, a na slici 5.2 EPROM memorija tipa 2764 kapaciteta 8kB. EPROM prostor mikroračunara zasnovan na mikroprocesoru 8088 kapaciteta 64kB zauzima opseg adresa od F0000h do FFFFFh. Koristeći dekodersko kolo 74LS138, logičko NAND kolo sa tri ulaza tipa 74LS10 i EPROM memoriju tipa 2764 pokazati kako izgleda struktura memorijskog sistema, kao i sistema za selekciju adresa. Koliko EPROM čipova je potrebno ugraditi? Naznačiti za koji je opseg adresa odgovarajući izlaz dekodera 74LS138 važeći.
Izlazi
Selektorski ulazi
Ulazi dozvole
rada
UlaziIzlazi
Slika 5.1: Logička šema i tablica istine 3-u-8 linijskog dekodera 74LS138
2764
A0-A12
D0-D7
OE
CE
podaci
adrese
RD
~ipselekt
Slika 5.2. Memorijski čip 2764
Odgovor
5-2
a) Struktura memorijskog sistema
Adrese
Podaci
A13 A14 A15
A16
A17 A18 A19
A0 ↔ A12
O0 ↔ O7
2764
74LS138
3
A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 . . . A0 Opseg selektov. adresa1 1 1 1 0 0 0 x x x . . . x F0000-F1FFF 1 1 1 1 0 0 1 x x x . . . x F2000-F3FFF . . x . . . . x . . . . x . . 1 1 1 1 1 1 1 x x x . . . x FE000-FFFFF
b) Selekcija prostora Slika 5.3 Struktura koja koristi osam 2764 EPROM-ova za formiranje
64kB memor. prostora lociranog u adresnom prostoru F0000h - FFFFFh
Zadatak 5.2 Često se kao dekoder adresa koristi bipolarni PROM. Logička šema bipolarnog PROM-a tipa TPB28L42 kapaciteta 512*8 prikazana je na slici 5.4. EPROM prostor kapaciteta 64kB, mikroračunrskog sistema zasnovanog na CPU 8088, lociran je u adresnom opsegu počev od adrese F0000h do FFFFFh. Koliko EPROM čipova tipa 2764 je potrebno ugraditi? Naznačiti za koji opseg adresa je odgovarajući izlaz PROM-dekodera važeći.
8kB=2 *210 13B=2 B 664kB=2 *210B=216B
5-3
A0-A8
O0-O7G
adrese
dozvolarada
podaci
Slika 5.4 Logički dijagram bipolarnog PROM tipa TPB28L42
Slika 5.5 Memorijski sistem koji koristi bipolarni PROM TPB28L42 kao dekoder adresa
Ulazi Izlazi G A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O70 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
sve ostale kombinacije 1 1 1 1 1 1 1 1 Slika 5.6 Način na koji je programiran bipolarni PROM TPB28L42
Adrese
Podaci
dekoder adresa
TPB28L42
Odgovor
5-4
Zadatak 5.3 Logička šema programibilnog logičkog kola tipa PAL16L8 prikazana je na slici 5.7. PAL16L8 se koristi kao dekoder adresa 64kB EPROM prostora kod mikroprocesora 8088. EPROM prostor je lociran u opsegu počev od adrese F0000h do FFFFFh. EPROM memorija je realizovana promoću čipova 2764 (8k*8). Ukazati na način kako je programirano kolo PAL16L8 i kako izgleda struktura memorijskog podsistema koju čini dekoder i osam EPROM čipova 2764?
Logi~ki dijagram
Slika 5.7 Logički dijagram kola PAL16L8
5-5
Odgovor Programiranje čipa PAL16L8 vrši se sledećom programskom sekvencom. Sekvenca je napisana na HDL jeziku PALASM. TITLE adresni_dekoder PATTERN test_kolo_1 REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 05/20/1998 CHIP DEKODER PAL16L8 ; pins 1 2 3 4 5 6 7 8 9 10 A19 A18 A17 A16 A15 A14 A13 NC NC GND ; pins 11 12 13 14 15 16 17 18 19 20 NC O8 O7 O6 O5 O4 O3 O2 O1 VCC EQUATIONS /O1 = A19*A18*A17*A16*/A15*/A14*/A13 /O2 = A19*A18*A17*A16*/A15*/A14*A13 /O3 = A19*A18*A17*A16*/A15*A14*/A13 /O4 = A19*A18*A17*A16*/A15*A14*A13 /O5 = A19*A18*A17*A16*A15*/A14*/A13 /O6 = A19*A18*A17*A16*A15*/A14*A13 /O7 = A19*A18*A17*A16*A15*A14*/A13 /O8 = A19*A18*A17*A16*A15*A14*A13
Struktura memorijskog podsistema kojom se pomoću kola PAL16L8, U1, dekodiraju osam EPROM čipova 2764, U2-U9, prikazana je na slici 5.8
Slika 5.8 PAL16L8 kao dekoder adresa EPROM mem. prostora realizovan pomoću osam čipova 2764
5-6
Test pitanje 5.4 Magistrale podataka kod mikroprocesora 8086/80186/80286/80386SX su dvaput većeg obima u odnosu na mikroprocesore 8088/80188. Procesori 8086/80186/80286/80386SX moraju biti u stanju upisivati (čitati) podatak u bilo koju 16-bitnu ili 8-bitnu lokaciju. To znači da se 16-bitni podaci upisuju (čitaju) u posebne sekcije nazvane banke koje su obima 8-bitova, tj. mikroprocesor može da pristupi bilo kojoj banci, ili da pristupi jednoj i drugoj banci istovremeno. Jedna banka se naziva niža-banka i uključuje sve parno numerisane lokacije, a druga viša-banka i sadrži sve neparno numerisane lokacije. Kada pristupa višoj-banci procesor 8086/80186/80286/80386SX aktivira signal /BHE, a kada pristupa nižoj banci signal /BLE. Lokacije koje pripadaju parnoj i neparnoj banci prikazane su na slici 5.14a) a selekcija banaka vrši se na osnovu tabele sa slike 5.14b). Projektovati dekodersko kolo koje će za mikroprocesor 80386SX (24-bitna adresa) selektovati 16*64kB RAM memorijske komponente u adresnom opsegu od 000000h do 0FFFFFh. Kao dekodere koristiti kola 74LS138. Odgovor Struktura dekodera za selekciju banaka prikazana je na slici 5.15. Kao što se vidi sa slike 5.15 koriste se dva dekodera 74LS138. Kod dekodera U3, signal /BLE je priključen na ulaz /G2A a kod dekodera U2 signal /BHE je doveden na ulaz /G2A. Selekcija banaka se vrši shodno sledećoj tabeli :
aktivni dekoderi 16-bitni prenos
8-bitni prenos - viša banka 8-bitni prenos - niža banka U1, U2, U3 U1, U2 U1, U3
a) memorijske banke do 1 MB Ni`a banka Vi{a banka
(parna banka)(neparna banka)
5-7
/BHE /BLE (A0) funkcija 0 0 selektovane su obe banke : 16-bitni prenos 0 1 selektovana je viša-banka : 8-bitni prenos 1 0 selektovana je niža-banka : 8-bitni prenos 1 1 banke nisu selektovane
b) selekcija banaka pomoću signala /BHE, /BLE (tj. A0) Slika 5.14 Memorijske banke i način selekcije
Test pitanje 5.10 Dekoder adresa realizovan pomoću NAND kola prikazan na slici 5.25 koristi se za selekciju 2716 EPROM memorijske komponente kojoj su dodeljene memorijske lokacije FF800h - FFFFFh. Modifikuj dekoder realizovan pomoću NAND kola prikazan na slici 5.25 tako da može da selektuje memoriju lociranu u sledećem adresnom prostoru: (a) DF800h - DFFFFh (b) 40000h - 407FFh
adresni prostor procesora 8088Magistrala podataka procesora 8088
Slika 5.25 Adresni dekoder realizovan NAND kolom koji se koristi da selektuje EPROM čip tipa 2716 za opseg adrese od FF800h - FFFFFh
Odgovor Za strukturu sa slike 5.25 važi sledeća adresna selekcija
5-8
1111 1111 1xxx xxxx xxxx ili 1111 1111 1000 0000 0000 = FF800h do 1111 1111 1111 1111 1111 = FFFFFh
a) Za selekciju adresa u opsegu od DF800h do DFFFFh imaćemo 1101 11111 1xxx xxxx xxxx ili 1101 11111 1000 0000 0000 = DF800h do 1101 11111 1111 1111 1111 = DFFFFh
Logička šema dekodera je prikazana na slici 5.26. b) Za selekciju adresa u opsegu od 40000h do 407FFh imaćemo 0100 0000 0xxx xxxx xxxx ili 0100 0000 0000 0000 0000 = 40000h do 0100 0000 0111 1111 1111 = 407FFh Logička šema dekodera je prikazana na slici 5.27.
Slika 5.26 Logička šema dekodera adresa koji selektuje memorijski prostor
počev od adrese DF800h do DFFFFh
5-9
A19A18A17A16A15A14A13A12A11
IO/M
123
45
67
1011
1213
1415
9
74ALS133
Slika 5.27 Logička šema dekodera adresa u opsegu 40000h do 407FFh
Zadatak 5.7 Neka su data sledeća četiri bajta heksadecimalnih podataka: 25h, 62h, 3Fh i 52h. (a) Odredi "checksum" bajt. (b) Obavi "checksum" operaciju kako bi se obezbedio integritet podataka. (c) Ako je drugi bajt 62h promenio vrednost na 22h, pokaži kako checksum detektuje grešku. Odgovor a) Checksum se odredjuje sabiranjem bajtova 25h + 62h + 3Fh + 52h 118 Suma iznosi 118h, tako da ako se zanemari prenos dobićemo 18h. Checksum bajt je dvojični komplement od 18h a to iznosi E8h. b) Sabiranjem niza bajtova uključujući i checksum bajt rezultira novoj sumi čija je vrednost nula. Ovakva vrednost sume ukazuje da u bloku podataka ne postoji bajt čija je vrednost promenjena
5-10
25h + 62h + 3Fh + 52h + E8h 200h (prenos se zanemaruje) c) Sabiranjem niza bajtova uključujući i checksum bajt pokazuje se da je rezultat različit od nule, a to znači da je vrednost jednog ili većeg broja bajtova promenjena 25h + 22h + 3Fh + 52h + E8h 1C0h (zanemarujući prenos dobija se C0h).
Zadatak 5.10 Ciklus magistrale mikroprocesora 8086 iznosi 4 taktna intervala, a mikroprocesora 80286 dva taktna intervala. Ako je radna frekvencija oba mikroprocesora 10MHz odredi propusnost magistrale za oba procesora pri: (a) 0 stanja čekanja, tj. zero WS (sait state); (b) 1WS; i (c) 2WS. Odgovor Perioda takta sa kojom procesor radi je 1/(10MHz) = 100ns 8086-1MHz 80286-10MHz memorijski cklus sa 0WS 400ns 200 ns memorijski cklus sa 1WS 500ns 300 ns memorijski cklus sa 2WS 600ns 400 ns BW8086/0WS =(1/400ns)*2 = 5MB/s Propusnost magistrale, BW, se
meri u MB/s i izračunava se kao BW8086/1WS =(1/500ns)*2 = 4MB/s BW8086/2WS =(1/600ns)*2 = 3.3MB/s BW=(1/t )*W cikBW286/0WS =(1/200ns)*2 = 10MB/s gde je: tcik - vreme trajanja
ciklusa magistrale; W - obim magistrale u bajtovima.
BW286/1WS =(1/300ns)*2 = 6.6MB/s
5-11
BW286/2WS =(1/400ns)*2 = 5MB/s
Zadatak 5.22 RAM prostor veličine 128 MB je projektovan od RAM čipova kapaciteta 2M*4-bita. Usvojimo da se kao dekoderi adresa koriste integrisani dekoderski čipovi tipa 1-izlaz-od 2k, gde je k < 3, kao i ostala standardna logička kola, ako je potrebno. Glavni cilj projektanata je da u svom rešenju ugradi minimalan broj integrisanih kola. Pokazati kako izgleda rešenje memorijskog podsistema, ako usvojimo da svaki RAM čip kapaciteta 2M*4 bita, ima jedinstvenu čip selekt liniju. Ponuditi rešenje čija je struktura slična onoj koja je prikazana na Slici 5.58 ili Slici 5.59. Ako svaki RAM čip ima dve čip selekt linije CS1=CS2=1 pokazati kakva je složenost memorijskog sistema
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
w w w
4w
podaci D
m adresa A
CS WE OE
Upravlja~ke linije
Slika 5.58. Povećanje obima reči RAM-a za četiri puta
Odgovor RAM veličine 128 MB se može realizovati kao 64M * 2 * 8 bitova, tj. pomoću polja RAM čipova. Ukupan broj adresa koji nam stoji na raspolaganju je 27. To su adrese od: A26 : A0. Dekoder tipa 1/64 je potrebno ugraditi radi za dekodiranja MS
5-12
adresnih bitova A26 : A21 sa ciljem da se pristupi adresama vrsta. Ovakav dekoder se može realizovati u dva nivoa pomoću devet dekodera adresa tipa 1-od-8 izlaza. Svaki izlaz rezultujućeg dekodera je povezan na CS ulaze RAM modula Mij . RAM modul Mi,j čine dva RAM čipa kapaciteta 2M*4bita. Ako usvojimo da dodatni drajveri nisu potrebni, tada ceo memorijski sistem čine devet dekodera i 128 RAM čipova (Slika 5.60). Na Slici 5.60 prikazan je detalj organizacije memorijskog bloka Mij koji odgovara organizaciji prikazanoj na Slici 5.58. Čitalac treba da pokaže da li se može koristiti rešenje koje se zasniva na organizaciji sa Slike 5.59.
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
2mxw RAM
CS WE OE
w
w podaci D
adresa A
čip selekt
dozvola upisa
w
w
2
m m+2
w
dekoder “1_od_četiri”
E
Slika 5.59 Povećanje broja reči koje se čuvaju u RAM-u za faktor četiri
Napomena: 2m*w = 2M*4
5-13
Jevtinije rešenje se dobija ako svaki RAM čip ima izvedeno dva čip selekta. U tom slučaju se RAM prostor može oganizovati kako je prikazano na Slici 5.61. Konkretna realizacija zahteva ugradnju samo dva dekodera tipa 1-od-8-izlaza. Dekoder D1 se koristi da adresira osam vrsta a dekoder D2 osam kolona.
.
.
....
.
.
.
. . .CS00
M00
CS01
M01
CS07
M07
01
D1
G7
A23A22A21
01
D2
G7
CS10
M10
CS11
M11
CS17
M17
.
.
.
A23A22A21
. . .
.
.
.01
D8
G7
CS70
M70
CS71
M71
CS77
M77
.
.
.
A23A22A21
. . .
01
D1
G7
A26A25A24
2M*4 2M*4
4 48
CSWEOE
adreseA20:A0
podaci Slika 5.60 2D organizacija memorijskog prostora veličine 128 MB koji
koristi memorijske čipove sa jedinstvenim CS kapaciteta 2 M * 4 Napomena: Detalji koji se odnose na definisanje stanja signala WE i OE (slika
5.58 i 5.59 nisu prikazani na slici 5.60
5-14
M00 M01 M02 M03 M04 M05 M06 M07
M10 M11 M12 M13 M14 M15 M16 M17
M20 M21 M22 M23 M24 M25 M26 M27
M30 M31 M32 M33 M34 M35 M36 M37
M40 M41 M42 M43 M44 M45 M46 M47
M50 M51 M52 M53 M54 M55 M56 M57
M60 M61 M62 M63 M64 M65 M66 M67
M70 M71 M72 M73 M74 M75 M76 M77
1/8 dekoderza CS2
1/8dekoderza CS1
3
3
6
A26:A21
CS1
CS1
A23:A21
A26:A24
264b42b82
b4M2MB128
21
27
∗=∗∗
=∗ tj. 64 modula sa po 2 čipa
Slika 5.61 Organizacija RAM prostora veličine 128 MB u formi 2D-
polja kada RAM čipovi imaju dve čip selekt linije
Zadatak 5.23 Koristeći DRAM memorijski čip kapaciteta 8 M * 8 bitova kao osnovnu komponentu (Slika 5.62), projektovati memorijski sistem veličine 256 M * 32 bita. Za formiranje memorijskih blokova većeg kapaciteta koristiti šeme prikazane na slikama 5.58 i slici 5.59.
432
b82b322
b8M8b32M256
23
28
∗=∗∗
=∗∗
tj. 32 modula sa po 4 čipa
5-15
Logika zasinhronizaciju i
osve`avanje
Interniupravlja~ki
signali
8
MagistralapodatakaD0:D7
Bafer podataka
8192x1024x8polje memorijskih
}elija
Dekoderadresevrste
Dekoder adresakolona
Baferadresakolona1013
13
Baferadresevrste
Adresnamagistrala
RAS CAS WE OE
Slika 5.62 Struktura memorijskog DRAM čipa kapaciteta 8 MB
Odgovor Za realizaciju memorijskog prostora veličine 256 M * 32 bita pomoću DRAM čipova obima 8 M * 8 bitova potrebno je ugraditi:
128832
8256
=* kopija DRAM integrisanih kola sa Slike 5.62, koristeći pri tome organizaciju koja je prikazana na slici 5.58. Da bi se zadovoljile potrebe koje se odnose na veličinu adresnog prostora treba koristiti adresni dekoder tipa 1-od-32-izlaz.a Rešenje koje se odnosi na organizaciju memorijskog prostora veličine 256M*32bita prikazana je na Slici 5.63.
5-16
8Mx8b RAM A DQ RAS CAS WE OE
8Mx8b RAM A DQ RAS CAS WE OE
8Mx8b RAM A DQ RAS
CAS WE OE
32
32
32 podaci D
0 1 2 30
31 E
~ip selekt
adresa A0:A22
adresa A23:A27 5
23
RAS
CAS
dozvola upisa WE dozvola izlaza
Slika 5.63 256M * 32 bitna organizacija memorije zasnovana na DRAM čipu kapaciteta 8 M * 8 bita
Čitalac treba da obrati pažnju na način multipleksiranja RAS i CAS signala pomoću dvo-ulaznih OR logičkih kola. Rešenje prikazano na Slici 5.63 karakteristično je i po tome što je ceo RAM prostor organizovan kao 1D umesto 2D polje. Test pitanje 5.51 Odredjeni broj DRAM-ova kapaciteta 1 M * 16 bitova koristi četvorostruki adresni interleaving radi pristupa memorijskim bankama M0, M1, M2 i M3.
5-17
a) Identifikovati banke kojima se vrši pristup na osnovu sledeće četiri adrese: 01234, ABCDE, 91272 i FFFFF. b) Ako je jedna od memorijskih banaka zauzeta, koja je verovatnoća da će zahtev biti zakašnjen (odložen) zbog sudara kod pristupa toj banci? Odgovor Na osnovu vrednosti dva LS bita odredjuje se kojoj se banci pristupa. a)
heksadecimalna adresa
binarna adresa
banka kojoj se pristupa
01234 0000...0100 M0 ABCDE 1010...1110 M2 91272 1001...0010 M2 FFFFF 1111..1111 M3
b) Verovatnoća sudara zbog pristupa toj banci je 1/4 = 0,25. Test pitanje 5.52 Za odredjeni magnetni hard disk definisani su sledeći parametri: broj diskova (površine na kojima se vrši zapis) 14(27) broj pisti po površini zapisa 4925 ukupan broj sektora na svim površinama za zapis 17,755,614 formatirani kapacitet diska 9.09 GB brzina rotacije diska 5400 obr./min prosečno vreme pozicioniranja glave diska na pistu (seek time) 11,5 ms interna brzina prenosa podataka 44-65 MB/s Odrediti veličinu bloka (sektora) podataka BP i prosečno vreme pristupa bloku podataka tB. B
Odgovor Veličina sektora se dobija kao:
5-18
bajtova 512
,10*9,09
zapisza a povr{inamsvimna sektora broj ukupnidiska kapacitetiformatiran
BP
9
=
=
=
6175517
Prosečno vreme pristupa tB predstavlja zbir prosečnog vremena pozicioniranja ana pisti t
B
S, prosečne rotacione latentnosti tL, i prosečnog vremena prenosa jednog bloka. U konkretnom slučaju imamo da je: • tS = 11,5 ms • rotaciona brzina
obr/ms 0,09obr/s 9060
5400r ===
s 5,560,09*21
t L ==
• prosečna interna brzina prenosa je 55 MB/s => 55 kB/ms za prenos jednog bloka (sektora) potrebno je interno vreme:
ms ,055000
bajtova 512t I 01==
Prosečno vreme pristupa: tBP = tS + tL + tI
= 11,5 + 5,56 + 0,01 = 17,07 ms
5-19
Zadatak 5.25 Vreme pozicioniranja magnetne glave diska zavisi od toga koliko se brzo vrši pomeranje upisno-čitajuće glave sa jedne piste na drugu. Usvojimo da je: (i) ukupan broj pisti N i da su one numerisane od 0 do N-1; (ii) upisno-čitajućoj glavi potrebno je vreme Dt da se pomeri sa piste i na pistu i ± D, tj za D pisti. Shodno prethodnom, ako se prvo pristupalo pisti i a nakon toga sledi pristup pisti j = i ± D, vreme pozicioniranja glave kod narednog pristupa iznosi Dt. Najkraće vreme pozicioniranja glave je 0 a najduže Nt. Postavlja se sledeće pitanje: Koliko je prosečno vreme pozicioniranja glave na pistu tS u funkciji N i t? Ako usvojimo da se pistama pristupa po proizvoljnom (slučajnom) redosledu, pokazati da je tS ≈Nt/3; što znači da je prosečno vreme pristupa pisti približno jednako vremenu da se upisno-čitajuća glava pomeri za trećinu od ukupnog broja pisti. Izvedi dokaz na primeru N = 8. Odgovor Za N=8 formirajmo matricu oblika 8*8, za sve 64 (i, j) kombinacije:
pista j
pista i 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 0 1 2 3 4 5 6
2 2 1 0 1 2 3 4 5
3 3 2 1 0 1 2 3 4
4 4 3 2 1 0 1 2 3
5 5 4 3 2 1 0 1 2
6 6 5 4 3 2 1 0 1
7 7 6 5 4 3 2 1 0
5-20
Suma svih 64 ulaza je 168, tako da je:
625,264
168Dsred == Vrednost 2,625 je veoma blizu vrednosti 8/3. Da bi generalizovali postupak analizirajmo ponovo prethodnu tabelu. Analizu ćemo početi od glavne dijagonale, i ići prema gornjim i donjim dijagonalama. Prvo, na glavnoj dijagonali su sve nule. Dijagonala ispod glavne dijagonale ima sedam jedinica, ona ispod subdijagonale šest dvojki, i td. To znači da je zbir ulaza ispod glavne dijagonale:
1(N-1)+2(N-2)+3(N-3)+...+(N-1)1= ( )∑−
=
−1N
1i
iN*i
Ulazi iznad glavne dijagonale imaju isti oblik, a to znači da je njihov zbir (suma) identičan kao i prethodna suma. Na osnovu prethodnog, imamo da je:
( )
∑∑
∑
−
=
−
=
−
=
−=
=−
=
1N
1i
22
1N
1i
2
1N
1isred
iN2
iN2
2,6N
iN*i*2D 25
(1)
Kako važi, u opštem slučaju ( )
21nn
in
1i
+=∑
= (2) i:
( )( )6
12n1nni
n
1i
2 ++=∑
= (3) zamenom (2) i (3) u (1) dobijamo:
( ) ( )( )6
12N1NNN2
21NN
N2
D2sred
−−+
−=
3N13N2N
1ND2
sred
−−−−=
5-21
3N1
3N
Dsred −=
3N
Dlim sred =>− αN Zbog ovoga:
3N
Dt tsredts ≈=
Proverom za N = 8 imamo 2,625
241
38
3N1
3N
=−=− a to odgovara vrednosti dobijenoj iz tabele. Zadatak 5.26 Računar R1 ima ugradjen dvo-nivovski virtuelno-memorijski sistem. Vremena pristupa glavnoj memoriji M1 i sekundarnoj memoriji M2 iznose 10-6 i 10-3 s, respektivno. Testiranjem je ustanovljeno da je prosečno vreme pristupa memorijskoj hijerarhiji 10-4 s. Ovo vreme je neprihvatljivo dugačko za najveći broj aplikacija. Ukazati na najmanje dva načina pomoću kojih je ovo vreme moguće smanjiti sa 10-4 na 10-5 s, i dati komentar u vezi cene, kako sa hardverske tako i softverske tačke gledišta. Odgovor Ukazaćemo na tri načina na koje je moguće smanjiti tA sa 10-4 na 10-5 s. (1) Povećanje stope pogodaka H: ovo se može ostvariti poboljšanjem algoritma memorijskog preslikavanja (memory mapping algorithm). Tipično se to izvodi korišćenjem bolje politike zamene stranica ili promenom dužine stranice. Cena koja mora da se plati je uglavnom softverska. Često je moguće povećati H povećanjem kapaciteta glavne memorije, a to direktno znači da se povećava cena hardvera. Prvo odredimo tekuću vrednost za H na osnovu relacije
5-22
(1) tA = H tA1 + (1 - H) tA2-3-4gde je tA = 10 , tA1 = 10-6, a tA2 = 10
Preuredjenjem po H dobićemo: - t H = (tA A2)/(t - tA1 A2) (2) -4 -3 = (10 - 10 )/(10-6 -3 - 10 )
= 0,901. -4Da bi se dobilo prosečno vreme pristupa tA = 10 potrebno je
povećati H na H', tako da je: -5 -3 H' = (10 - 10 )/(10-6 -3 - 10 )
= 0,991. To znači da željeno smanjenje vremena pristupa tA sa 10-4 na 10-5 neminovno dovodi do povećanja stope pogodaka H sa 0,901 na 0,991. (2) Smanjenjem tA2 - moguće je zameniti sekundarnu memoriju sa uredjajem čije je vreme pristupa kraće. Na ovaj način u značajnoj meri se povećava cena hardvera (Slika 5.65).
10-9
10-8
10-7
10-6
10-5
10-4
10-3
10-2
10-1
10
1
100
10-9 10-8 10-7 10-6 10-510-10
magnetne trake
opti~ki diskovi (CD-ROM i dr)
magnetni diskovi(hard-disk)
DRAM integrisana kola
SRAM integrisana kola
cena c(dolara po bitu)
vremepristupa tA (s)
Slika 5.65 Vreme pristupa u odnosu na tehnologiju
5-23
Preuredjenjem jednačine (1) dobija se: tA2 = (tA - H tA1)(1 - H) ako bi učinili tA = 10-4, tada je neophodno da i tA2 bude: tA2 = (10-4 - 0,901 * 10-6)/(1 - 0,901) ≈ 10-4
Ovo rešenje ukazuje da je neophodno smanjiti tA2 za faktor reda 10, tj. sa 10-3 na 10-4. (3) Smanjenje tA1 - moguće je smanjiti tA . Ovaj slučaj se javlja kada se glavna memorija realizuje bržom tehnologijom. Preuredjenjem jednačine (1) dobićemo tA1 = (tA + (1 - H) tA2)/H (3) Zamenom za tA = 10-5, H = 0,901 i tA2 = 10-3 u (3), dobićemo: za tA1 = - 0,998 * 10-6, tj. negativnu vrednost. To znači da je nemoguće ostvariti željenu vrednost za tA od 10-4 ugradnjom bržih memorijskih čipova.
Zadatak 5.27 Dvo-nivovsku organizaciju memorije (M1 i M2) karakteriše vreme pristupa tA1 = 10-8 s i tA2=10-3 s. Kolika treba da bude stopa pogodaka H da bi efikasnost pristupa bila ne manja od 65% od svoje maksimalne vrednosti? Odgovor Efikasnost pristupa l je definisana odnosom tA1/tA. Da bi dobili l = 0,65 potrebno je da: tA = tA1/l = 10-8/0,65 = 1,53846 * 10-8 s. Na osnovu relacije: tA = H tA1 + (1 - H)tA2
dobijamo: H = (tA - tA2)/(tA1 - tA2)
5-24
= (1,53486 * 10-8 -3 -8 -3 - 10 )/(10 - 10 ) = 0,999846. To znači da stopa pogodaka mora biti H ≥ 0,999846, da bi l ≥ 0,65
Zadatak 5.28 Kod n-to nivovske organizacije memorije, stopa pogodaka Hi koja je pridružena memoriji Mi na nivou i, može se definisati preko verovatnoće da informacija koju zahteva CPU bude dodeljena memoriji Mi. Ako usvojimo da se sva informacija, koja se čuva u M , takodje, javlja i u M , tada važi uslov H < Hi i +1 1 2 <... <H = 1. Koristeći ovu definiciju za Hn i generalizovati izraz koji važi za dvo-nivonsku memorijsku hijerarhiju (tA = Ht +(1-h)tA2A1 ) na n-nivovsku memorijsku hijerarhiju. Odgovor Učestanost pristupa nivou Mi memorijske hijerarhije se definiše kao verovatnoća da će se obraćanje stavki X od strane CPU-a obaviti (ostvariti) na nivou Mi, tj. da je Mi najvići nivo (ili najmanja vrednost i) koji čuva vrednost X. Odavde sledi da je pi = Hi - Hi-1 pri H0 = 0 i Hn = 1. Za prosečno vreme pristupa važi relacija:
∑=
=n
1iAiA i
tpt (4)
Zamenom se dobija:
( )∑=
− ⋅−=n
1iA1iiA i
tHHt
Napomena: Samo za slučaj n=2, važi p1 = H1 = H.
Zadatak 5.31 Neka pi predstavlja deo zahteva za pristup memoriji koji se javlja kao rezultat pristupa nivou memorije Mi kod tro-nivovske hijerarhijske organizacije.
5-25
nivo i vreme pristupa tA(s)
verovatno}a pristupa vreme prenosa p stranice ti Bi(s)
M1 10-7 0,999990 0,0005 M2 10-6 0,000009 0,01 M3 10-4 0,000001
Kada se na nivou Mi javi promašaj, dolazi do zamene stranice izmedju nivoa Mi i Mi+1, uz prosečno vreme zamene stranice tBi. Odrediti prosečno vreme za koje procesor pročita jednu reč iz memorije.
-7Neka se projektantu da zahtev da učinimo da tA <= 1,1*10 . To znači da tA ne sme da premaši vreme pristupa memoriji za više od 10%. Poboljšanje se može ostvariti ako se M3 zameni memor. tehnologijom kod koje se t '. Kolika je vrednost t '. smanji na vrednost tB2 B2 B2Sugerisati i ukazati na opravdanje kako se na jeftiniji način može doći do zadovoljavajućeg rešenja, tj. kako se može smanjiti tA a da se pri tome ne smanjuje t na vrednost t '. B2 B2
Odgovor (a) Prosečno vreme pristupa se izračunava kao: tA = p1tA1 + p2(t + t ) + pA1 B1 3(t + t + tA1 B1 B2) (5) = t + (pA1 2 + p3) t + pB1 3tB2 = 10-7 + 0,00001 * 0,0005 + 0,000001 * 0,01 s = (1,0 + 0,05 + 0,1) * 10-7 s
-7 = 1,15 * 10
Neka tA1 i t predstavljaju vreme za pristup memorijama MA2 1 i M2, respektivno, relativno u odnosu na CPU. Kod dvo-nivovske memorijske organizacije, prose~no vreme pristupa t (average time tA A) CPU-a nekoj re~i u memorijiiznosi: t = H t + (1 - H) tA A1 A2Kod najve}eg broja dvo-nivovske hijerarhijske {eme, zahtev za prenosom re~i koja se ne nalazi u M1 (kada se javi proma{aj) uzrokuje da se, umesto jedne re~i, prenese ceo blok informacije iz M2 u M1. Kada se prenos bloka zavr{i, re~ za kojom je izdat zahtev za prenos nalazi se u M1. Ako sa tB ozna~imo vreme potrebno da se izvr{i prenos celog bloka podataka (block access ili block transfer time), tada va`i da je t = t + tA2 B A1. Kada se t zameni u t dobi}emo: A2 A tA = t + (1 - H) tA1 BKod najve}eg broja slu~ajeva t >> tA2 A1, pa t ≈ t . A2 B
5-26
(b) Potrebno je sada odrediti t'B2 tako da tA <= 1,1 * 10-7, pa stoga: 1,1 * 10 -7 < tA1 + (p2 + p3) tB1 + p3t'B2 1,1 * 10-7 < 1,05 * 10-7 + 0,00001 * t'B2Sledi da je: t'B2 < 0,05 * 10-7 * 0,005 s što ukazuje da vreme prenosa bloka treba najmanje skratiti za 50%. Ovo se može postići ako se M3 zameni sekundarnom memorijom koja je dvaput brža od tekuće instalirane, što predstavlja skupo rešenje. (c) Jednačina (5) ukazuje da se tA može smanjiti na vrednost 1,1 * 10-8 ako se smanji tA1 na vrednost 0,95 * 10-7 ili na još nižu vrednost. Ovo znači da je potrebno da M1 ima kraće vreme pristupa za 5%, a čini se da se taj cilj može ostavariti po nižoj ceni. Alternativno rešenje je da se neznatno poveća p1 a efektivno smanje p2 i p3. Povećanje p1 (zavisno je od ponašanja programa) se može ostvariti po nekoj srednje prihvatljivoj ceni a to znači ili da se poveća kapacitet memorije M1, ili poboljša politika zamene stranica.
Zadatak 5.32 a) Odrediti kolika je prosečna cena po bitu kao i vreme pristupa četvoro-nivovskog memorijskog sistema na osnovu vrednosti specificirane sledećom tabelom:
memorija kapacitet cena ($/B) vreme pristupa stopa pogodaka ke{ 1 16 kB 10-3 10 ns 0,990000 ke{ 2 256 kB 10-5 20 ns 0,999900 glavna memorija 32 MB 10-6 100 ns 0,999999 disk memorija 8 GB 10-9 10 ns 1,000000
b) Neka je, zbog ekonomskih razloga, drugi nivo keša eliminisan iz sistema. Odrediti rezultujući procenat promena koji se odnosi na cenu sistema i vreme pristupa. Odgovor Neka za memoriju Mi vrednosti ci i Si označavaju cenu po bitu i kapacitet, respektivno. Prosečna cena po bitu -c, se odredjuje na osnovu sledeće relacije: c = (c1S1 + c2S2 + c3S3 + c4S4)/(S1 + S2 + S3 + S4) (6) = (10-3 * 214 + 10-5 * 218 + 10-6 *225+10-9*233)/(214 + 218 + 225 + 233)
5-27
= (16,38 + 2,62 + 33,55 + 8,59)/(8,62 * 109) = 7,09 * 10-9 dolara/bajtu Na osnovu prezentiranih podataka, stopa pogodaka Hi se može interpretirati kao verovatnoća da reč kojoj se obraćamo postoji (nalazi se) u memoriji nivoa i, tj. Mi. Reči koja se nalazi na nivou Mi se pristupa samo kada ista nije dodeljena nivou Mj, pri čemu važi j < i. Neka pi predstavlja verovatnoća da će se obraćanje memoriji procesirati od strane nivoa Mi. Sledi da je pi = Hi - Hi-1, gde H0 = 0. Shodno prethodnoj konstataciji, imaćemo da je: tA = p1tA1 + p2tA2 + p3tA3 + p4tA4. Odgovarajućom zamenom za pi, i=1,..., 4, dobićemo: tA = (H1 - H0)tA1 + (H2 - H1)tA2 + (H3 - H2)tA3 + (H4 - H3)tA4 (7) = 0,99 * 10-8 + 0.0099 * 2 10-8 + 0,00099 * 10-7 + 0,000001 * 10-2 s = (0,99 + 0,0198 + 0,00099 + 0,1) * 10-8 s = 1,11079 * 10-8 s = 11,11 ns ako se izostavi nivo-2 keš M1 na osnovu jednačine (6) dobijamo: c = (10-3 * 214 * 10-6 * 225+ 10-9 * 233)/(214 + 225 + 233) = (16,38 + 33,55 + 8,59)/(8,62 * 109) = 6,79 * 10-9 dolara/bajt. Uočava se smanjenje cene sa 7,09 * 10-9 dolara/bajtu na 6,79 * 10-9 dolara/bajtu što iznosi oko 4,2 %. Zbog eliminacije keša na nivou-2, na osnovu jed. (7), imaćemo: t'A = (H1 - H0)tA1 + (H3 - H1)tA3 + (H4 - H3)tA4 = 0,99 * 10-8 + 0,009999 * 10-7 + 0,0000001 * 10-2 s = (0,99 + 0,09999 + 0,1) * 10-8 s = 1,18999 * 10-8 s = 11,90 ns Prosečno vreme pristupa se povećalo sa 11,11 ns na 11,90 ns, ili procentualno za oko 7%, za slučaj kada keš nivoa-2 ne postoji, tj. nije instaliran.
Test pitanje 5.63 Kada se govori o magnetnim diskovima, ukazati na značenje sledećih pojmova: seek time - ts, latencija - tL, rotaciona latencija blok podataka brzina prenosa bloka podataka prosečno vreme pristupa bloku podataka
5-28
Odgovor Prosečno vreme potrebno da se pomeri glava sa jedne piste na drugu naziva se seek time - t , ili vreme pozicioniranja. sNakon što se glava pozicionira na pisti, potrebno je da se ona pomeri na mesto gde je zapisana informacija i da dodje do kontakta glave i medijuma kako bi počeo prenos podataka. U tom smislu karakteristično je prosečno vreme koje je potrebno da se ostvari ovaj pomeraj naziva se latencija - tL, memorije. Kod memorija kod kojih informacija rotira po kružnoj pisti, veličina t se naziva rotaciona latentnost. LKod sekvencijalnog zapisa, reči se grupišu u veće jedinice koje zovemo grupe. Sve reči iz grupe se smeštaju u uzastopne lokacije tako da vreme potrebno da se pristupi celom bloku čini: vreme pozicioniranja i vreme latencije. Brzina sa kojom se vrši prenos informacija ka- ili sa piste, naziva se brzina prenosa podataka (data transfer rate). Prosečno vreme pristupa bloku podataka - tB, jednako je: B
rNn
2r1
tt SB ++= gde je: N - fiksni kapacitet reči po pisti r - broj okretaja diska u sekundi; n - broj reči po bloku podataka; tS - prosečno seek time; Proizvod rN odgovara brzini prenosa podataka iz memorije i izražava se u reč/s. Nakon što je upisno-čitajuća glava pozicionirana na početak željenog bloka, podaci se prenose aproksimativno za n/(rN) sekundi. Prosečna latencija je 1/(2r) sekundi, a to odgovara vremenu potrebnom da se disk okrene za pola kruga. Konačno, tS je prosečno vreme pozicioniranja glave na željenu pistu.
Test pitanje 5.68 Kako se vrši distribucija adresa kod interleaved memorije? Odgovor
Predaja razli~itih adresa ve}em broju memorijskih modula tako da se n-uzajamno nepovezanim linijama koje pripadaju razli~itim memorijskim modulima mo`e simultano pristupati, zovemo memory interleaving. Pri ovome va`no je praviti razliku izmedju: (i) bloka uzastopnih lokacija kojima se pristupa simultano; i (ii) lokacije koje nisu uredjene a pristupa im se simultano pri ~emu se lokacije nalaze u razli~itim memorijskim modulima.
5-29
Distribucija memorijskih adresa po izdvojenim memorijskim modulima, shodno adresnim formatima sa slike 5.74, prikazana je na slici 5.76. Alternativno, umesto termina adresnog formata interleaving-odredjen-višim-adresama koristi se termin grubi-interleaving (coarse interleaving) a umesto termina interleaving-odredjen-nižim-adresama koristi se termin fini-interleaving (fine interleaving).
grubi interleaving fini interleaving
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
memorijskmodul
0
memorijskimodul
1
memorijskmodul
n
Adrese
.
.
.
.
.
.
.
.
.
.
.
.
memorijskimodul
0
memorijskimodul
1
memorijskimodul
2
memorijskimodul
n
Adrese
adresa modula
adresa u okviru modula
adresa u okviru modula
adresa modula
Distribucija kod grubog i finog interleving-a Slika 5.76.Izbor grubog ili finog inteleaving-a zavisi od tipa sprežne mreže. Fini-interleaving je efikasniji kod magistralno orijentisanih arhitektura kada se interleaved memorijski moduli odazivaju u sekvencu jedan za drugim. Grubi-interleaving je pogodniji kod sistema koji koriste krozbar sprežne mreže, tj. kada procesori paralelno pristupaju različitim memorijskim modulima.
5-30
Ispitni zadaci januar-februar 2003 - Zadatak 4 Računarski sistem ima 8-bitnu adresnu magistralu i 8-bitnu magistralu podataka a koristi memorijsko preslikani U/I prostor. U sistem je instalirano 128 bajtova PROM-a počev od adrese 00H, realizovanog pomoću čipova kapaciteta 432 ∗ ; 96 bajtova RAM počev od adrese 80H, realizovanog od jednog čipa kapaciteta i nekoliko čipova kapaciteta ; ulazni uredjaj na adresi F0H; izlazni uredjaj na adresi F1H; i bidirekcioni ulazno/izlazni uredjaj na adresi F2H.
864 ∗832∗
Prikazati dizajn ovog sistema, uključujući sve upravljačke signale (CS, MR, MW, Enable, i dr.) Odgovor
CS
PROM32*4
A0
A1
A2A3
A4
MRCS
PROM32*4
A0
A1
A2A3
A4
MRCS
PROM32*4
A0
A1
A2A3
A4
MRCS
PROM32*4
A0
A1
A2A3
A4
MR
43210
765 A5
A6
A7
DEC3/8
ulazniuredjaj E
MRka magistrali
podataka
tro-stati~kibafer
A0A1A2A3A4
8
izlazniuredjaj E
MWsa magistrale
podataka
tro-stati~kibafer
A0A1A2A3A4
8
U/Iuredjaj
E
E
MW
MRka magistrali
podataka
sa magistralepodataka
tro-stati~kibafer
A0A1A2A3A4
8
8
CS
RAM64*8
A0A1A2A3A4
CS
RAM32*8
A0
A1A2
A3
A4
8
8 888
MR
MR MRMW MW
MRMW
tro-stati~kibafer
5-31
februar 2002 - Zadatak 4 Za projektovanje memorijskog sustema koji je organizovan kao 1D-polje veličine N∗32 bita potrebno je 512 memorijskih čipova DRAM tipa kapaciteta 4M∗4 bita. a) Odrediti ukupni kapacitet memorijskog sistema. b) Ako procesor generiše sledeće adrese:
01AFB9F; FF000AD; 18B93C0; ACFFD07 odrediti kom memorijskom modulu se pristupa? Uzeti u obzir da se čip selekt linija dovodi na ulaze čipa RAS (Row Address Strobe) i (Column Address Strobe) kao na slici 1 (feb-02-4). CAS
4M*4bDRAM
A
DQ/RAS
/CAS
/WE /OE
/RAS
/CAS
CS
CS
Slika 1 (feb-02-4) Memorijski čip DRAM tipa
Odgovor
4Mx4bA DRAM/RAS DQ
/CAS/WE /OE
4Mx4bA DRAM/RAS DQ/CAS
/WE /OE
4Mx4bA DRAM/RAS DQ/CAS
/WE /OE
01
.
.
.
63
podaci
/RAS
/CAS
32
32
32
E
6
22
adresaA22-A27
~ip selekt
adresa A0-A21
dozvola upisa
. . .
Slika 2 (feb-02-4) 256∗32 bitna organizacija memorije zasnovana na DRAM čipu
kapaciteta 4M∗4 bita
5-32
Veličina memorije je N∗32b, a za realizaciju je potrebno 512 čipova kapaciteta 4M∗4b, pa je kapacitet memorije
32b256M 4b)(4M 8) (64 4b4M 512 ∗=∗∗∗=∗∗ Memorijski sistem čine 64 bloka a svaki blok sadrži 8 čipova (slika 2 (feb-02-4)). Decembar 2006 - Zadatak 4 Brzina rotacije diska je 6000 obrtaja/minut. Prosečno vreme pozicioniranja glave diska na željenu pistu (seek time) iznosi 15 ms. Svaka pista ima 256 sektora, a sektor je veličine 512 B. Disk je povezan sa memorijom preko U/I magistrale. Propusnost U/I magistrale je 4 MB/s. Disk ima implementirano disk-keš, kao bafer memoriju, za privremeno smeštanje podataka. Disk keš omogućava dvostrani pristup u jednom trenutku. Prvi sa diska ka disk-kešu, a drugi sa disk-keša, preko U/I magistrale, ka memoriji računara. Oba načina prenosa su dvosmerna. a) Odrediti maksimalnu propusnost diska ne uzimajući u obzir propusnost magistrale, vreme pozicioniranja i latenciju diska. Odrediti minimalno vreme (u sekundama) potrebno za prenos 40 MB podatka sa diska. b) Koliko vremena je potrebno za prenos sekvencijalnog podatka veličine 128 kB sa diska u memoriju? Pretpostaviti da su podaci sekvencijalno memorisani na jednoj pisti. c) Koliko vremena je potrebno za prenos bloka podatka veličine 128 kB sa diska u memoriju? Pretpostaviti da su podaci locirani po sektorima koji su slučajno raspoređeni na disku. Odgovor a) Da bi se postigla maksimalna propusnost diska potebno je da se podaci sa piste čitaju sekvencijalno i da se ne uzima u obzir vreme pozicioniranja i latencija.
ms10=obrtaja6000
s60Za vreme jedne rotacije koja traje disk može da
pročita jednu pistu čija je veličina kB128B512256 =∗ . Prema tome,
propusnost diska je sMB8.12=s
kB12800=ms10kB128
.
5-33
Međutim, U/I magistrala predstavlja „usko grlo" sistema i ima propusni opseg od 4 MB/s, pa je za prenos bloka podataka veličine 40 MB potrebno minimalno 10 s. b) Brzina prenosa podataka je ograničena U/I magistralom pa je
52ms 32ms 5ms 15ms sMB4
128KB s6000260 15ms t t t transferrotationseek =++=+∗
+=++
c) Kao i u prethodnim slučajevima, vreme pozicioniranja (tseek) je 15 ms. Jedna rotaciija traje 10 ms jer je rotaciona brzina 6000 obrtaja/minut, ili 100 obrtaja/sekundi. Latencija diska odgovara polovini rotacije i iznosi 5 ms. Za veličinu podatka od 128 kB potrebno je 2(17−9) 8 = 2 , odnosno 256 sektora. Vreme potrebno da se pročita jedan sektor (ttransfer) je 10ms*(1/256)=0.04ms. Vreme potrebno U/I magistrali da prenese jedan sektor iznosi 512B/4MB*1s=0.128ms. Ovo vreme je duže ali se može preklopiti sa vremenom pozicioniranja i vremenom latencije narednog sektora. Ukupno vreme pristupa disku za svaki od prvih 255 sektora je
ms04.02 0.04ms 5ms 15ms t t t transferrotationseek =++=++
Ukupno vreme pristupa disku za poslednji sektor je ms168.02 0.128ms0.04ms 5ms 15ms t t t transferrotationseek =+++=++
Ukupno vreme potrebno za prenos 128 kB slučajno smeštenog podatka sa diska u memoriju iznosi . 5130.368ms 0.168) 5 (15 255 * 20.04 =+++ decembar 2001 - Zadatak 4. Neka je u računaru instalirano 256B glavne i 8B keš memorije i to: a) asocijativni keš (LRU - Least Recently Used - politika zamene) b) direktno preslikani keš. Svaku liniju keša čine dva bajta. Pretpostavimo da su vrednosti svih podataka smeštenih u memorijskim lokacijama jednake adresama tih memorijskih lokacija (npr. u memorijskoj lokaciji sa adresom 0 nalazi se podatak 0, u memorijskoj lokaciji sa adreson 1 nalazi se podatak 1, itd.). CPU pristupa memorijskim lokacijama koje imaju sledeće adrese: 4, 9, 82, 255, 8, 2, 5, 164, 1, 3, 254, 0. Odrediti procenat keš pogodaka kao i broj bitova svakog od polja u adresi pristupa za oba slučaja.
5-34
Odgovor: a) Analiziraćemo asocijativni keš, koji je inicijalno prazan i koristi LRU politiku zamene. Na slici 1 prikazani su sadržaji keša nakon pristupa svakom podatku. Kao što se vidi sa slike 1 od ukupno 12 pristupa tri je rezultiralo pogodkom, pa je stopa pogodaka h=3/12=0,25.
podaci 4 9 82 255 8 2 5 164 1 3 254 0 ke{
4 8 82 254 8 2 4 164 0 2 254 0 0 5 9 83 255 9 3 5 165 1 3 255 1 4 8 82 254 8 2 4 164 0 2 2541 5 9 83 255 9 3 5 165 1 3 255 4 8 82 254 8 2 4 164 0 2 2 5 9 83 255 9 3 5 165 1 3 4 4 82 254 8 2 4 164 1643 5 5 83 255 9 3 5 165 165
Pogodak V V V Slika 1 Aktivnost keša kod asocijativnog keša
Broj bitova u poljima adrese pristupa je: TAG bajt
7 bitova 1b
b) Rezultati direktno preslikanog keša prikazani su na slici 2. Stopa pogodaka u ovom slučaju je h=5/12=0,4167.
podaci 4 9 82 255 8 2 5 164 1 3 254 0 ke{
8 8 8 8 8 8 8 0 0 0 0 0 9 9 9 9 9 9 9 1 1 1 1 82 82 82 2 2 2 2 2 2 2 1 83 83 83 3 3 3 3 3 3 3
4 4 4 4 4 4 4 164 164 164 164 1642 5 5 5 5 5 5 5 165 165 165 165 165 254 254 254 254 254 254 254 254 2543 255 255 255 255 255 255 255 255 255
Pogodak V V V V V Slika 2 Aktivnost keša koristeći direktno preslikani keš
5-35
Broj bitova u poljima adrese pristupa je: TAG linija bajt
5 bitova 2 bita 1b
bajt - broj bajtova u liniji = 2 = 21 → 1 bit adresa podatlinija - broj linija u kešu = 4 = 22 → 2 bita 00000000 0
00000001 1 TAG - preostali broj adresnih bitova = (8-1-2) = 5 bitova 00000010 2 00000011 3
Za skupno-asocijativni keš: 00000100 4 npr. dvostruko-skupno asoc. keš ↔ 2 linije u skupu 00000101 5
Januar 2006 - Zadatak 4. Neka glavnu memoriju čine blokovi veličine 4k, direktno-preslikani keš se sastoji od 128 blokova, a blok je obima 16 reči. a) prikazati kako izgleda podela glavne memorije i keša za slučaj da se koristi tehnika direktno preslikani keš b) MMU (Memory Management Unit) interpretira adresu CPU-a deleći je na tri adresna polja (vidi sliku1). Odrediti dužinu u bitovima, za svako polje sa slike 1 i pokazati kako izgleda proces adresne translacije
Tag polje Polje keš bloka Polje reči Slika 1. Adresna polja kod direktnog preslikavanja
Odgovor: a) Kao što se vidi sa slike 2. postoje ukupno 32 bloka glavne memorije koji se preslikavaju u dati keš blok. Na primer, blokovi glavne memorije 0, 128, 384, ... ,3968 se preslikavaju u keš blok 0, itd. b)
00000110 6 00000111 7 00001000 8 00001001 9
.......... ......
bajt - broj bajtova u liniji = 2 = 21 → 1 bit broj skupova = uk. br. linija / br. lin. u sk. = 4/2 = 2 sk. skup - broj skupova u kešu = 2 = 21 → 1 bita TAG - preostali broj adresnih bitova = (8-1-1) = 6 bitova
5-36
Slika 2. Preslikavanje blokova glavne memorije u keš blokove
c) MMU interpretira CPU-ovu adresu deljenjem adrese na tri polja: polje _ reci = log 2 B ; gde je B obim bloka u rečima polje _ kes _ bloka = log 2 N ; gde je N obim keša u blokovima Tag _ polje = log 2 (M / N) ; gde je M obim glavne memorije Shodno prethodnom ukupni _ broj _ adresnih _ bitova _ glavne _ memorije = log2 (B × M) Zamenom odgovarajućih vrednosti dobijamo: polje _ reci = log 2 B = log 2 16 = 4 bita polje _ kes _ bloka = log N = log 2 2 128 = 7 bitova Tag _ polje = log 2 (M/N) = log 2 (22 * 210 / 27 ) = log 2 25 = 5 bitova ukupni_broj_adresnih_bitova_glavne_memorije=log2(B×M)=log2(16*4096) = 16 bitova Proces adresne translacije za parametre koje se odnose na ovaj primer prikazan je na slici 3. Koraci su sledeći: 1. koristi se polje_keš_bloka da odredi keš blok koji bi trebalo da sadrži element kome procesor treba da pristupi 2. proverava se sadržaj adresirane Tag_memorijske_lokacije sa Tag_poljem. Za slučaj da postoji uparivanje dolazi do keš pogodka, u suprotonom je keš promašaj 3. za slučaj keš pogodak ciljni element kome treba da pristupimo bira se na osnovu sadržaja polja_reči.
5-37
4. za slučaj da ne dodje do uparivanja u koraku 2 javlja se keš promašaj. U tom slučaju iz glavne memorije treba dobaviti zahtevani blok i ažurirati sadržaj Tag i keš memorije.
5-38
6. Programabilne jedinice,
tehnike U/I prenosa
6-1
Zadatak 6.8 Vreme trajanja odgovarajućih aktivnosti koje prate prihvatanje i obradu zahteva za prekid prikazani su na slici 6.23. Trajanje taktnog intervala iznosi 10 ns.
aktivnost trajanje u takt. interv.
• završetak najduže instrukcije
50 (t2)
• aktiviranje CPU-ovog ulaza INTR nakon što je spoljni uređaj aktivirao IRQ
2 (t1)
• aktiviranje INTA i prihvatanje vektor broja
16 (t3)
• smeštanje sadržaja CPU-ovih registara u magacin
60 (t4)
• obrada vektor broja od strane CPU-a i pribavljanje početne adrese prekidne rutine iz vektor tabele
52 (t5)
• vreme potrebno da CPU u prekidnoj rutini ispita status U/I uređaja kod tehnike "polling"
40 (t6)
Slika 6.23 : Aktivnosti koje prate obradu prekida Napomena: (ti) se odnosi na vreme trajanja i-tog taktnog intervala, tj. ti=n*tcp, gde je n broj taktnih intervala, tcp=10ns Ukupno je na sistem povezano osam U/I uređaja koji mogu generisati zahtev za prekid. a) Neka se svi zahtevi za prekid prihvataju preko jedinstvene linije (sl. 6.24) a nakon prihvatanja zahteva za prekid sistem koristi tehniku "polling" da bi odredio koji je uredjaj inicirao zahtev za prekid.
IRQ8IRQ2
+VCC
IRQ1
CPU
INTR
Slika 6.24 : Prihvatanje zahteva za prekid preko jedinstvene
linije Odredi vreme odziva u najgorem slučaju, onog uređaja koji ima najniži prioritet opsluživanja. Usvojiti da ne postoje zahtevi za prekid koji su se javili a nisu usluženi (pending interrupts). b) Odrediti u najgorem slučaju, vreme odziva na zahtev za prekid onog uređaja čiji je prioritet opsluživanja najviši ako se zahtevi za prekid prihvataju preko kodera prioriteta (sl. 6.25). Usvojiti da ne postoje zahtevi za prekid koji su se javili a nisu usluženi. c) U kom se opsegu nalazi vreme odziva opsluživanja zahteva za prekid uređaja sa najvišim i najnižim prioritetom kod tehnike vektorskog prekida ako verovatnoća instrukcija koja se tekuće može izvršiti za 20, 10 ili 6 taktnih intervala, iznosi 20, 30 i 50 procenata respektivno.
6-2
vektorbroj
INTR
INTA
koderprioriteta .
.
.
CPU
IRQ1IRQ2
IRQ8
Slika 6.25 : Predaja vektor broja preko bloka koder prioriteta
Odgovor a) Scenario događaja prihvatanja i opsluživanja zahteva za prekid kod tehnike polling može se objasniti shodno sl. 6.26. Vreme opsluživanja U/I uređaja sa najnižim prioritetom u najgorem slučaju iznosi: Tup=t1+t2+t4+7t6=(2+50+60+7*40)*10ns Tup=392*10ns=3920ns=3,92μs Najgori slučaj znači neposredno pre završetka t1 počinje izvršenje najduže instrukcije koja traja t2. b) Scenario događaja do početka opsluživanja U/I uređaja sa najvišim prioritetom koji je generisao zahtev za prekid u obliku vremenskog dijagrama prikazan je na slici 6.27.
6-3
50 taktnih intervala
(t2)
mikroop.
instrukcija koja se tekuće
opslužuje
INTR 123
{ 40
taktnih intervala
(t6)
{
smeštanje CPU-ovih registara u magacin
status U/I uređaja sa najvišim
prioritetom
status U/I uređaja sa
predzadnjim prioritetom
opsluži uređaj sa najvišim prioritetom
opsluži uređaj sa predzadnjim prioritetom
opsluži uređaj sa najnižim prioritetom
izbavljanje CPU-ovih registara iz magacina
ne postoji zahtev
postoji zahtev
postoji zahtev
najniži prioritet
prihvatanje zahteva za prekid
40 taktnih
intervala (t6)
60 taktnih intervala (t4)
U/I uređaj IRQ
program koji se prekida
2 taktna intervala
(t1)
}
Slika 6.26 : Scenario događaja kod "polled" tehnike
t1 t2 t3 t4 t5
Slika 6.27 : Vremenski redosled događaja kod vektorskog prekida
Tuv=t1+t2+t3+t4+t5=2+50+16+60+52=180ns Treba istaći da je kod vektorske tehnike za slučaj kada ne postoji drugi zahtev za prekid vreme opsluživanja U/I uređaja sa najnižim i najvišim prioritetom identično, tj. Tuv=180ns.
6-4
c) Već smo konstatovali da je trenutak opsluživanja U/I uređaja sa najvišim ili najnižim prioritetom, kada na postoje drugi zahtevi za prekid kod vektorske tehnike identičan. Analizirajući sliku 4 zaključujemo da se jedino može menjati interval t2. Prosečno vreme odziva biće: Tuvp=t1+t3+t4+t5+0.2*20+0.3*10+0.5*6=130+4+3+3=141ns Najkraće vreme odziva biće: Tuvmin=130+6=136ns Najduže vreme odziva Tuvmax=130+20=150ns Shodno tome, vreme odziva je u opsegu od 136ns do 150ns.
Zadatak 6.9 Od trenutka generisanja zahteva za prekid IRQ, od strane U/I uređaja, do početka izvršenja prve instrukcije prekidne rutine prođe vreme od 30μs. Prosečno, prekidna rutina se izvršava za 150μs. U suštini, čisti programski kôd za opsluživanje U/I uređaja se izvršava za 135μs a ostalih 15μs je režijsko vreme koje uključuje smeštanje sadržaja CPU-ovih registara u magacin (operacija Push) i izbavljanje sadržaja CPU-ovih registara iz magacina (operacija Pop). a) Odredi u procentima ukupno neproduktivno vreme koje se troši na opsluživanje uređaja. b) Ako se kod nekog realnog sistema prekidi javljaju 750 puta u sekundi odrediti koji se deo CPU-ovog vremena troši na opsluživanje uređaja. Odgovor a) Scenario događaja kod vektorskog prekida je sledeći:
t1 t2 t3 t4/2 tob t4/2
6-5
30μs 7.5μs 135μs 7.5μs
6-6
gde su: • t1 - period od trenutka kada se aktivira IRQ do trenutka kada INTR postane takođe aktivan. • t2 - period potreban da završi izvršenje tekuće instrukcije • t3 - period od aktiviranja INTA do prihvatanja vektor broja. • t4 - režijsko vreme Push i Pop operacija • tob - vreme obrade prekida - čisti programski k d
Usvojimo da je t1+t2=t3=15μs. To znači da se CPU aktivira na obradu zahteva za prekid nakon 15μs od trenutka generisanja zahteva za prekid IRQ. Ukupno CPU je zauzet na obradu prekida: TCPU=t3+t4/2+tob+t4/2=15+7.5+135+7.5=165μs. Neproduktivno vreme je 30μs (uključuje 53+t4/2+t4/2), i iznosi u procentima : k=30/165=0.19⇒19% b) Ako se u toku 1s javi se 750 prekida tada je za opsluživanje U/I uređaja CPU ukupno zauzet TΣ=750*TCPU=123,720ms
Test pitanje 6.37 Integralno kolo 74LS244 predstavlja tro-statički bafer koji se uobičajeno koristi kao ulazni bafer kod mikroračunarskih sistema. Struktura kola prikazana je na sl. 6.28. Upravljački ulaz G1 kontroliše ulazne drajvere za bitove D0-D3, a G2 bitove D4-D7. Pokazati kako izgleda logika sistema zasnovana na 74LS244 koja se koristi za realizaciju operacije ulaz uz pomoć sledećih instrukcija: a) In AL,5Fh b) In AL,9Fh Napomena: Mikroračunarski sistem je zasnovan na centralno procesorskoj jedinici Intel 8088.
74LS244
D0
D4
D3
D7
D0
D3
D4
D7
G1 G2 Slika 6.28 : Struktura kola 74LS244
Odgovor a) In AL,5Fh
74LS244
DO
D4
D3
D7A0 A1 A2 A3 A4 A5 A6 A7
IOR
sistemska adresna i upravljačka magistrala
stanje prekidača
ka linijama D0-D7 sistemske magistrale
6-7
b) In AL,9Fh
A0 A1 A2
A3 A4 A5
A6
A7
IOR
74LS244
D0
D7
D0
D7
G1 G2
sistemska adresna i upravljačka magistrala
stanje prekidača
ka linijama D0-D7
sistemske magistrala
Test pitanje 6.38 Integrisano kolo 74LS373 se koristi kao izlazni 8-bitni leč čiji se izlazi mogu postaviti u stanje visoke impedanse(sl. 6.29)
D0
D7 Q7
Q0
CP
D
D
CP
Q
Q
G OE Slika 6.29 : Struktura čipa 74 LS 373
6-8
Usponskom ivicom upravljačkog sitgnala Cp (takt) koji se dovodi na ulaz G pamti se informacija prisutna na ulazima D0 - D7 u D flip-flopove, a OE =0 dozvoljava rad tro-statičkim izlaznim baferima. Pokazati kako izgleda logika sistema zasnovana na kolu 74LS373 koja se koristi za realizaciju operacije izlaz kod instrukcije Out 99h,AL, za slučaj da je mikroračunarski sistem zasnovan na procesoru Intel 8088. Neka su izlazi kola 74LS373 uvek aktivirani (dozvoljeni) Odgovor
A0 A1 A2
A3 A4 A5 A6 A7
D0
D7
G
Q7
Q0
74LS373
D Q
Cp
Cp
D Q
IOW
sistemska, adresna i
upravljačka magistrala
sistemska magistrala podataka
ka izlaznom uređaju (npr.
LED)
OE
Slika 6.30: Logika izlaznog sistema za instrukciju Out 99h,AL
6-9
Ispitni zadaci oktobar II 2001 - Zadatak 3
Na računarski sistem povezana su tri U/I uredjaja, štampač, disk, i RS 232 linija, čiji su prioriteti 2, 4, i 5 respektivno. Inicijalno (t=0) izvršava se program korisnika, pri t=10 štampač generiše zahtev za prekid. U trenutku t=15 linija RS 232 zahteva opsluživanje i generiše zahtev za prekid. Nešto kasnije u trenutku t=20 disk želi opsluživanje. Izvršenje svake od prekidnih rutina (štampača, RS 232 linije i diska) traje po 10 vremenskih jedinica. Skicirati scenario vremenskih dogadjaja i način opsluživanja višestrukih prekida. Numerički većoj vrednosti odgovara viši nivo prioriteta kod opsluživanja prekida. Odgovor Scenario vremenskih dogadjaja i način opsluživanja višestrukih prekida dat je na slici 1 (okt2-01-4).
0 10 15 20 25 35 40
korisnik korisnik štampač
korisnikštampač
korisnik
vreme
magacin
prekid štampača prioritet 2
RS232 prekid prioritet 5
prekid diska prioritet 4zhtev prihvaćen ali nije uslužen
završava se ISR RS232, produžava
prekid diska
završava se ISR, diska
završava se ISR štampača
korisni~ki program 2
RS 232ISR
ISR diska ISR {tampa~a
korisni~ki program 2
ISR {tampa~a
Slika 1 (okt2-01-4) Sekvenca opsluživanja većeg broja prekida Napomena: ISR (Interrupt Service Routine) - rutina za obradu
prekida 6-10
oktobar II 2001 - Zadatak 4 a) Projektovati interfejs ulaznog uredjaja čija je binarna
adresa 1010 1010. Računarski sistem koristi izdvojeni U/I. b) Projektovati interfejs izlaznog uredjaja čija je binarna
adresa 0011 1001. Računarski sistem koristi izdvojeni U/I. c) Ponoviti aktivnosti pod stavkama a) i b) za slučaj da
računarski sistem koristi memorijsko preslikani U/I. Odgovor a)
b)
c) i)
6-11
ii)
Jun 2002 - Zadatak 4
Zadatak CPU-a koji se sastoji u periodičnoj proveri statusnih bitova periferala sa ciljem da ustanovi da li je došlo vreme za narednu U/I operaciju naziva se polling. U suštini kod polling-a komunikacija izmedju U/I uredjaja i procesora se ostvaruje na vrlo jednostavan način. U/I uredjaj postavlja informaciju o svom stanju u Statusnom_registru a CPU pribavlja informaciju iz tog registra. To znači da je sva U/I aktivnost pod kontrolom procesora. Nedostatak polling-a je ta što CPU gubi suviše mnogo vremena na povremeno testiranje statusa (treba imati u vidu da je CPU mnogo brži od U/I uredjaja).
Da bi odredili uticaj polling-a na vreme rada CPU-a analizirajmo rad tri različita U/I uredjaja. Usvojićemo da je broj taktnih intervala potreban CPU-u da obavi operaciju polling 100, a da procesor radi na frekvenciji od 50 MHz.
6-12
Odrediti deo vremena koje CPU troši za sledeća tri slučaja, usvajajući pri tome da se U/I uredjaj poll-uje dovoljno brzo da se ni jedan podatak ne izgubi (tj. propusti da prihvati od strane CPU-a): a) Miš mora da se poll-uje 30 puta u sekundi kako bi se
obezbedili da će biti prihvaćen svaki pomeraj koji je učinio korisnik. b) Flopi-disk prenosi podatke procesoru u 16-bitnim
jedinicama a karakteriše ga brzina prenosa od 50 kB/s. I u ovom slučaju ni jedan podatak u toku prenosa se ne sme izgubiti (tj. ne prihvatiti). c) Hard disk prenosi podatke kao jedinične blokove obima
32-bita, a brzina prenosa je 2 MB/s. U toku prenosa nesme biti izgubljen ni jedan podatak. Odgovor a) Za polling miša imaćemo
Broj taktnih intervala u sekundi za polling = 30∗100=3000 taktova/s
Deo CPU-ovih taktnih intervala po polling-u = 3000/(50∗106)=0.006%. Kao zaključak bi mogli da kažemo polling metoda se bez značajnih degradacija performansi CPU-a može koristiti kao strategija za opsluživanje miša. b) Kod polling-a flopi diska imaćemo da je brzina poll-ovanja
sistupapolling_pr2*25
sistupapolling_pr25k
istupupolling_prbajta2
50kB/s 10==
Ukupan broj taktnih intervala u sekundi potreban da se opsluži flopi-disk polling metodom iznosi
6-13
Taktni intervali u sekundi za polling = 25∗210∗100 = 25.6∗105 taktnih intervala u sekundi
Deo CPU-ovih taktnih intervala po polling-u %510*5010*6.25
6
5==
Kao zaključak: ovaj deo vremena nije za zanemarivanje ali se može tolerisati ako je na nekom računarskom sistemu povezan relativno mali broj U/I uredjaja kakav je recimo flopi-disk. c) Kod polling-a hard diska podaci se prenose kao reči, što
znači da disk treba da se poll-uje 500k puta u sekundi (2 MB/s sa po 4 bajta po transferu) Taktni intervali u sekundi za polling = 500∗210∗100 = 51.2∗106 taktnih intervala/s
Deo CPU-ovih taktnih intervala po polling-u %10010*5010*2.51
6
6==
Važan zaključak bi bio: Dobijeni rezultat ukazuje da je procesor 100% svog vremena zauzet za poll-ovanje - hard diska, što znači da je strategija polling u ovom slučaju neprihvatljiva. Izlaz se sastoji u korišćenju Interrupt_driven I/O ili DMA tehnika za prenos podataka.
6-14