TO MUX S
Micro-sequencer
TO MUX CSBR
CAR
INTS
NAMSPSBRMC
TO MUX M
Instructiondecoder
Frommapping ROM
OPCODE IR SHAM DST MODE S SRC MO
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MMMR
ControlROM256 x 31
000110
MM
MR DSA SB
MA
MB
MD FS MO
MC
11LS
PS MS NA MO
EI Z N C V
z n c v
C1 A B
V+
C+ Function unit
N+
Z+
F
4
4
Zero fill5 16
5
MO
PSR
MO
MSTS
TO MUX B
TO MUX B
CISC CPU
FS
Bus A Bus B
Data in Address
Memory M
Data out
MO
To I/O
Data out
Address out
From I/O0 1MUX DMD
Bus D
0 1 2 3MUX A
0 1 2 3MUX B
DRW
16 x 16modified
register filewith R0 = 0
A B
0 || DST
DSA0 || DST
DSA
SP
PC MO
MO
From PSR
From zerofill
011
MA MB
012
34
4 42
8
8
Reg_32
Register file
Zcomp_32
Four_32
Reg_32 Byteswap
Reg_set_D
Reset
Clk
GPR_SRC_AGRP_SRC_B
GPR_DST
Bypass_A
Bypass_B
Offset
IA_bus
Reg_sel_A
Data_sel
RightArith
Shamt
ShamtShamt_sel
DA_bus
Reg_sel_C
Signed Cin
D_bus
Dsave_2
Dsave_1
Reg_sel_B
LTZ GTZ EQ
Reg_A Reg_B
Reg_C
SignedSetenCin
Reg_D
B_busA_bus
GP
Mux
Mux Mux
Mux Mux
Mux
Reg_32
A BALU_32Shift_32
Mux
Mux
Reg_32
Reg_32
Reg_32
Mux
EXT
1
Mile Stoj~ev, Saa Risti, Milo Krsti _________________________________
ZBIRKA ZADATAKA IZ MIKROPROCESORA I
MIKRORA^UNARA I izdanje
2
Mile K. Stoj~ev, Saa S. Risti, Milo D. Krsti
ZBIRKA ZADATAKA IZ MIKROPROCESORA I MIKRORA^UNARA I izdanje Izdava~: Elektronski fakultet u Ni P. fax 73, 18000 Ni http://www.elfak.ni.ac.yu Recenzenti: Prof. dr Milun Jevti
Prof. dr Emina Milovanovi Urednik: Prof. dr Zoran S. Nikoli Tehni~ka obrada: Saa Risti, Milo Krsti Odlukom Nastavno-nau~nog vea Elektronskog fakulteta u Niu br. 1/0-05-094/98-002 od 12.10.1998 odobreno je tampanje rukopisa pod naslovom ZBIRKA ZADATAKA IZ MIKROPROCESORA I MIKRORA^UNARA, autora Mileta Stoj~eva, Sae Ristia i Miloa Krstia, kao pomonog ud`benika. ISBN 86-80135-18-6 CIP - Katalogizacija u publikaciji Narodna biblioteka Srbije, Beograd 681.325-181.4(075.8)(076) STOJ^EV, Mile K. Zbirka zadataka iz mikroprocesora i mikrora~unara / Mile K. Stoj~ev, Saa S. Risti, Milo D. Krsti. – [1. izd.]. – Ni : Elektronski fakultet, 1999 (Ni : Paser Print). - 1 knj. (razl. pag.) : graf. prikazi ; 24 cm. - (Edicija Pomoni ud`benici / Elektronski fakultet, Ni Na vrhu nasl. str.: Univerzitet u Niu. - Tira` 300. - Bibliografija. ISBN 86-80135-18-6 1. Risti, Saa S. 2. Krsti, Milo D. 681.32(075.8)(076) a) Mikroprocesori - Zadaci b) Ra~unari - Zadaci ID=70060812 Pretampavanje ili umno`avanje ove knjige nije dozvoljeno bez pismene dozvole izdava~a. Tira`: 300 primeraka [tampa: PASER PRINT, Ni
3
U n i v e r z i t e t u N i u E l e k t r o n s k i f a k u l t e t
Mile K. Stoj~ev, Saa S. Risti, Milo D. Krsti
ZBIRKA ZADATAKA IZ MIKROPROCESORA I MIKRORA^UNARA
Edicija: Pomoni ud`benici
1999.
4
Publikacije Elektronskog fakulteta u Niu ____________________________________________________________________________________
Edicija: Pomoni ud`benici ____________________________________________________________________________________ A. Mitrovi, PRAKTIKUM ZA VE@BE NA RA^UNARU IZ PREDMETA VE[TA^KA
INTELIGENCIJA, 1994
^. Milosavljevi, OSNOVI AUTOMATIKE - priru~nik za laboratorijske ve`be, 1995
^. Milosavljevi, OSNOVI AUTOMATIKE (vremenski kontinualni SAU) - metodi~ka zbirka zadataka, 1995
N. Jankovi, PRAKTIKUM LABORATORIJSKIH VE@BANJA ZA PREDMET SENZORI I PRETVARA^I, 1995
M. Radmanovi, D. Man~i, ZBIRKA ZADATAKA IZ ENERGETSKE ELEKTRONIKE, 1995
S. Risti, Z. Priji, D. Panti, ELEKTRONSKE KOMPONENTE - ZBIRKA ZADATAKA, 1995
L. Stefanovi, S. Popovi, OBRADA TEKSTA U TEXU, 1995
D. Anti, i dr., SISTEMI AUTOMATSKOG UPRAVLJANJA, 1995
B. Dimitrijevi, D. Deni, G. \or|evi, ELEKTRI^NA MERENJA - ZBIRKA ZADATAKA, 1995
D. Maksimovi, V. Litovski, PROJEKTOVANJE ELEKTRONSKIH KOLA - laboratorijski praktikum, 1996
M. Stankovi, D. Radulovi, D. Risti, MRE@NI SERVIS - WORLD, WIDE, WEB, 1996
B. Milovanovi i dr. MIKROTALASNA TEHNIKA - zbirka zadataka, 1996
M. Naumovi, ZBIRKA RE[ENIH ZADATAKA IZ DIGITALNIH SISTEMA UPRAVLJANJA, I deo: Diskretni signali, 1997
P. Ran~i, PRILOZI SVETLOTEHNI~KIM KARAKTERIZACIJAMA - SVESKA 4: OSVETLJENJE ZATVORENIH PROSTORA, 1997
M. Gmitrovi, R. Petkovi, TEORIJA ELEKTRI^NIH KOLA - Metodi~ka zbirka zadataka, 1997
M. Stankovi i dr., ZBIRKA ZADATAKA IZ OSNOVA RA^UNARSKE TEHNIKE, 1998
V. Litovski i dr., PRAKTIKUM LABORATORIJSKIH VE@BANJA IZ ELEKTRONIKE I, 1998
Z. Nikoli,i dr., PRAKTIKUM LABORATORIJSKIH VE@BI IZ OSNOVA TELEKOMUNIKACIJA I DIGITALNIH TELEKOMUNIKACIJA, 1999
M. Stoj~ev, S. Risti, M. Krsti, ZBIRKA ZADATAKA IZ MIKROPROCESORA I MIKRORA^UNARA, 1999
6
Reg_32
Register file
Zcomp_32
Four_32
Reg_32 Byteswap
Reg_set_D
Reset
Clk
GPR_SRC_AGRP_SRC_B
GPR_DST
Bypass_A
Bypass_B
Offset
IA_bus
Reg_sel_A
Data_sel
RightArith
Shamt
ShamtShamt_sel
DA_bus
Reg_sel_C
Signed Cin
D_bus
Dsave_2
Dsave_1
Reg_sel_B
LTZ GTZ EQ
Reg_A Reg_B
Reg_C
SignedSetenCin
Reg_D
B_busA_bus
GP
Mux
Mux Mux
Mux Mux
Mux
Reg_32
A BALU_32Shift_32
Mux
Mux
Reg_32
Reg_32
Reg_32
Mux
EXT
Staza podataka mikroprocesora MIPS R2000
7
TO MUX S
Micro-sequencer
TO MUX CSBR
CAR
INTS
NAMSPSBRMC
TO MUX M
Instructiondecoder
Frommapping ROM
OPCODE IR SHAM DST MODE S SRC MO
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MMMR
ControlROM256 x 31
000110
MM
MR DSA SB
MA
MB
MD FS MO
MC
11LS
PS MS NA MO
EI Z N C V
z n c v
C1 A B
V+
C+ Function unit
N+
Z+
F
4
4
Zero fill5 16
5
MO
PSR
MO
MSTS
TO MUX B
TO MUX B
CISC CPU
FS
Bus A Bus B
Data in Address
Memory M
Data out
MO
To I/O
Data out
Address out
From I/O0 1MUX DMD
Bus D
0 1 2 3MUX A
0 1 2 3MUX B
DRW
16 x 16modified
register filewith R0 = 0
A B
0 || DST
DSA0 || DST
DSA
SP
PC MO
MO
From PSR
From zerofill
011
MA MB
012
34
4 42
8
8
Klasi~na CISC arhitektura
9
M. S
toj~
ev, S
. Ris
ti, M
. Krs
ti
Z
BIR
KA
ZA
DA
TA
KA
IZ
M
IKR
OPR
OC
ESO
RA
I M
IKR
OR
A^
UN
AR
A
1. Ocena performansi
1-1
1. Ocena performansi
ö õ
Test pitanje 1.1
[ta je arhitektura ra~unara?
Odgovor 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.
Test pitanje 1.2
[ta je organizacija ra~unara?
Odgovor
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.
Test pitanje 1.3
[ta je procesor, a ta ra~unar sa memorisanim programom?
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-2
Odgovor Procesor opte namene predstavlja kona~ni automat (finite state machine) koji izvrava instrukcije smetene u memoriji. Stanje sistema definiu vrednosti koje se ~uvaju u memorijskim blokovima zajedno sa vrednostima koje se ~uvaju u odre|enim registrima koji su sastavni deo procesora. Svaka instrukcija definie na~in na koji se stanje maine menja a, tako|e, i koju instrukciju treba izvriti kao narednu.
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 smetaju u memoriju a izvravaju 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.
Test pitanje 1.4
Koji su osnovni blokovi von Neumann-ovog ra~unara?
Odgovor Osnovni gradivni blokovi sistema sa Slike 1.2 su:
ulazni interfejs (i)
ulazni uredjaj (i)
uobi~ajeno skupljeniu jedinstvenu stazupodataka
izlazni uredjaj (i)sekundarnamemorija
procesor
glavnamemorija 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
1. Ocena performansi
1-3
2. Ulazno/izlazni mehanizmi i periferni ure|aji namenjeni za prenos podataka ka-, ili iz sistema
3. Procesor koga ~ine sledea dva bloka:
• Upravlja~ka jedinica - pribavlja instrukcije iz memorije,
• Aritmeti~ki procesor - obavlja specificirane operacije.
Test pitanje 1.5 Ukazati na osnovne razlike izme|u von Neumann-ovog i Harvard pristupa.
Odgovor Korienje 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 reenja putevi za prenos podataka i instrukcija su izdvojeni. Harvard arhitektura mo`e da pojednostavi i pobolja mehanizme koji se odnose na ~itanje/upis u memoriju, posebno ako programe samo ~itamo a ne menjamo u toku izvrenja programa, dok se podaci mogu ~itati i menjati. Tako|e, koristei dve izdvojene memorije, podaci i instrukcije se mogu simultano pribavljati.
Korienje jedinstvene memorije za podatke i instrukcije dovodi do efikasnijeg korienja memorije i tipi~no je kao reenje kod ranijih ra~unarskih sistema. Savremeni RISC i DSP procesori koriste vei 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
Test pitanje
Kako se definie pojam propusnost?
Odgovor
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-4
Propusnost (bandwidth) predstavlja iznos informacija koji se mo`e preneti po komunikacionoj vezi, a izra`ava se u bitovima/s. Propusnost se jednostavno poveava poveanjem broja `ica u vezi. Poveanje broja linija podataka sa 32 na 64 udvostru~ava se propusnost.
Test pitanje 1.6
[ta je MIPS i kako se odredjuje?
Odgovor 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 izvrava u sekundi. Da bi ukazali na zna~enje prose~ne instrukcije analizirajmo inverznu MIPS meru, a to je, vreme izvreenja prose~ne instrukcije. Vreme izvrenja prose~ne instrukcije se mo`e odrediti na osnovu u~estanosti i vremena izvrenja svakog tipa instrukcija. Sledei trag izvrenja velikog broja ben~mark programa mogue je odrediti koliko puta se instrukcija izvrava u programu. Ilustracije radi usvojimo da je u~estanost pojavljivanja instrukcija u programu (IF - instruction frequency) data na Slici 1.4. Vreme izvrenja instrukcije izra`eno kao broj taktnih intervala (CPI - cycles per instruction) za svaki tip instrukcije je tako|e prikazano na Slici 1.4. Drugim re~ima CPI odgovara broju taknih intervala za koji procesor izvrava odre|enu instrukciju. Kod razli~itih procesora broj taktnih intervala potreban da se izvri odre|ena instrukcija je razli~it. Ako usvojimo da taktni interval traje t nanosekundi, tada za vreme izvrenja instrukcije va`i CPI*t nanosekundi.
Na osnovu Slike 1.4, prose~no vreme izvrenja 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
×=
∑=
Na osnovu izraza zaklju~ujemo da se MIPS performansna mera dobija na osnovu prose~nog broja vremena izvrenja svakog tipa instrukcije, ponderisanim sa prose~nim brojem izvrenja te instrukcije u programu.
tip instrukcije
u~estanost instrukcije
% (IF)
broj taktnih intervala po
instrukciji (CPI)
ponderisani CPI
(IF * CPI)
Load i Store 30,4 1,5 0,456
Addi i Subi 10,0 1 0,1
Muli i Divi 3,8 10 0,38
Addf i Subf 9,5 7 0,665
Mulf i Divf 6,5 15 0,975
Logi~ke 3,0 1 0,03
Branch 20,0 1,5 0,3
1. Ocena performansi
1-5
Compare, Shift 16,8 2 0,336
broj taktova po prose~noj instrukciji = 3,242
Vreme izvrenja prose~ne instrukcije (za t=10 ns) = 3,242 × 10 = 32,42 ns
Broj MIPS-ova = (1 / 32,.42) = 30,845
Slika 1.4 Primer odredjivanja performansne mere MIPS.
Zadatak 1.1
Neka su u~estanost pojavljivanja instrukcija u programu (IF) i broj taktova potreban za izvrenje odredjenog tipa instrukcije (CPI) dati na Slici 1.5. Ako je t=10ns odredi broj MIPS-ova.
tip instrukcije u~estanost instrukcije
% (IF)
broj taktnih intervala po instrukciji (CPI)
Load i Store 28.5 2
Addi i Subi 12.0 1
Muli i Divi 4.5 8
Addf i Subf 8.5 7
Mulf i Divf 7.5 12
Logi~ke 5.0 1
Branch 18.0 1.5
Compare, shift 16.0 2
Slika 1.5 U~estanost pojavljivanja instrukcije i broj taktova po instrukciji
Test pitanje 1.7
Koje se druge mere i faktori, pored MIPS-a i MFLOPS-a, koriste za dobijanje slike o sistemu?
Odgovor Naj~ee koriene mere su:
(1) Propusnost procesora (throughput of a processor) je mera koja ukazuje na broj programa (zadataka ili zahteva) koje procesor mo`e da izvri po jedinici vremena.
(2) Iskorienost procesora ti~e se dela vremena u toku koga je procesor zauzet izvrenjem programa. U sutini, to je odnos izme|u vremena zauzea 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).
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-6
(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.
Pored nabrojanih performansnih mera postoje i drugi faktori koji imaju uticaj na kvalitet ra~unara, a to su:
(a) Optost - je mera koja odre|uje opseg aplikacija date arhitekture. Neke od arhitektura su dobre za nau~ne aplikacije a druge za poslovne. Arhitektura je marketinka ako podr`ava vei broj aplikacija.
(b) Jednostavnost korienja je mera koja ukazuje koliko je ta arhitektura laka programeru sistema, kada on `eli da je savlada i kada `eli da napie softver (kao to su operativni sistem ili kompilator) za tu arhitekturu.
(c) Proirljivost je mera koja ukazuje koliko je lako da se nadgradi ta arhitektura, kao to je ugradnja veeg broja procesora, vie memorije i vei broj U/I ure|aja.
(d) Kompatibilnost ukazuje koliko je data arhitektura kompatibilna sa prethodnim ra~unarom iz iste familije.
(e) Pouzdanost ukazuje na verovatnou greke ili srednje vreme izmedju greaka.
Zadatak 1.2
Ukazati kako se vri pore|enje performansi dvaju ra~unara R1 i R2. Dobijeni rezultati koji se odnose na vremena izvrenja T1 i T2 dvaju razli~itih programa P1 i P2, na ra~unaru R1 i R2, su sledea:
program T1 T2
P1 8s 4s
P2 3s 4s
Koja maina je br`a, za dati program, i za koliko?
Odgovor Ako se odre|eni program izvrava na ra~unaru Rx, tada izme|u performansi te maine i vremena izvrenja tog programa postoji sledei odnos:
PRx=1/ Tx
gde su : PRx - performanse; Tx - vreme izvrenja.
Ako imamo dva ra~unara X i Y i ako su performanse ra~unara X vee 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 imaemo:
a) za program P1
PR1/ PR2= 4/ 8 = 0,5 ⇒ R2 dva puta br`i od R1;
b) za program P2
1. Ocena performansi
1-7
PR1/ PR2= 4/ 3 = 1,33 ⇒ R1 za 1,33 puta br`i od R2.
Zadatak 1.3
Program P1 se izvrava na ra~unaru R1 za vreme T1=8s, a na ra~unaru R2 za vreme T2=4s. Merenjem je tako|e utvr|eno sledee:
program broj instrukcija koje se izvravaju na R1 broj instrukcija koje se izvravaju na R2
P1 160*106 100*106
Odrediti broj izvrenih instrukcija u sekundi za svaki od ra~unara u toku izvrenja programa P1.
Odgovor a) za ra~unar R1
Ako za vreme T1 ra~unar R1 izvri 160*106 instrukcija tada na osnovu sledee proporcije, imaemo:
8 : 160*106 = 1 : x1
x1=18
*160*106=20*106 (instrukcija / sekundi);
b) za ra~unar R2:
4 : 100*106 = 1 : x2
x2=14
*100*106=25*106 (instrukcija / sekundi).
Zadatak 1.4
Neka se program P1 izvrava na ra~unaru R1 za 10s, u slu~aju kada je taktna frekvencija R1 fcp1=400 MHz. Projektantima je postavljen cilj da konstruiu ra~unar R2 koji e izvravati isti program za 6 s. Analizom su projektanti zaklju~ili da je mogue u zna~ajnoj meri poveati taktnu frekvenciju, ali ovo poveanje za posledicu ima sledee: novom ra~unaru R2 bie potrebno 1,2 puta vie taktnih intervala za izvrenje programa P1 u odnosu na ra~unar R1. Odrediti taktnu frekvenciju fcp2, ra~unara R2.
Odgovor U optem slu~aju, va`i sledea relacija:
Tx=Nx/ fcp
gde je:
Tx-vreme potrebno CPU-u da izvri program; Nx- ukupan broj taktnih intervala (perioda) u toku izvrenja programa; fcp- taktna frekvencija.
U konkretnom slu~aju, ra~unar R1 izvrava program P1 za N1 broj taktnih intervala, tj.:
10=N1/ (400*106) ⇒ N1=4000*106 (perioda)
Ako ra~unar R2 izvrava program P1 za 6 s, pri N2=1,2 N1, tada va`i:
6=N2/ fcp2 ⇒ fcp2= MHz 8006
10*4000*1,2 6
=
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-8
To zna~i da taktna frekvencija ra~unara R2 - fcp2, treba da bude dva puta vea od taktne frekvencije ra~unara R1, fcp1.
Test pitanje 1.8
Na osnovu koje relacije se odre|uje vreme koje je potrebno CPU-u da izvri program? Navesti faktore na osnovu kojih se odre|uje to vreme. U kojim se jedinicama izra`avaju komponente performansi?
Odgovor
Tcpu= cpt*CPI*NI=iodtaktni_perdibroj_sekun*
ainstrukcijlaih_intervabroj_taktn*
programukcijabroj_instr
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 sledeim jedinicama:
komponente performansi jedinice mera
Tcpu sekunda
NI broj instrukcija potreban da se izvri program
CPI prose~an broj taktnih perioda po instrukciji
tcp broj sekundi po taktnom periodu
Test pitanje 1.9 Vreme koje je potrebno CPU-u de izvri program, TCPU se definie i kao:
TCPU=broj_taktnih_intervala_CPU-a_u_programu*tcp=N*tcp.
Skup instrukcija ~ini vei broj razli~itih klasa instrukcija. Instrukcije koje pripadaju razli~itim klasama se izvravaju za razli~ito vreme. Ukazati, detaljnije, kako se odre|uje N.
Odgovor
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 izvrava u programu; CPIi prose~no vreme izvrenja instrukcije iz klase i.
Prema tome:
cp
n
1iiiCPU t*N*CPIT
= ∑
=
,
dok je
1. Ocena performansi
1-9
∑∑
=
=
==
n
1i
ii
n
1iii
ukcijabroj_instrNI
*CPIukcijabroj_instr
NI*CPICPI
Zadatak 1.5 Neka postoje dve implementacije arhitektura sa istim skupom naredbi. Ra~unar R1 karakterie tcp1=1ns i CPI1=2.0, a ra~unar R2 tcp2=2ns i CPI2=1.2. Koja maina je br`a za ovaj program i koliko?
Odgovor Obe maine izvravaju isti broj instrukcija u toku izvrenja programa i ozna~imo ovaj broj sa k. Broj taktnih intervala Nx u toku izvrenja programa:
a) za ra~unar R1 iznosi:
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.
Zadatak 1.6
Projektant kompilatora treba da izabere odgovarajuu kôdnu sekvencu. Od projektanata hardvera je dobio sledee podatke:
klasa instrukcije vrednost CPI-a za ovu klasu instrukcija
A 1
B 2
C 3
-Za odre|eni HLL iskaz, projektant kompilatora je kreirao dve kôdne sekvence za ~ije izvrenje je potreban sledei broj instrukcija.
kodna sekvenca broj instrukcija po instrukcionoj klasi
A B C
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-10
1 2 1 2
2 4 1 1
Koja kodna sekvenca izvrava vei broj instrukcija? Koja je br`a? Koliki je CPI za svaku sekvencu?
Odgovor Sekvenca 1 se izvrava za 2+1+2=5 instrukcija, a sekvenca 2 za 4+1+1=6 instrukcija. Broj taktnih intervala CPU-a za odgovarajuu programsku sekvencu se odre|uje na osnovu izraza:
N=∑=
n
1iii NI*CPI
U konkretnom slu~aju:
a) za kodnu sekvencu 1 imaemo
N1=(2*1)+(1*2)+(2*3)=10 taktnih intervala
b) za kodnu sekvencu 2
N2=(4*1)+(1*2)+(1*3)=9 taktnih intervala
Vrednost CPI se odre|uje na osnovu izraza:
CPI=Nx/ broj_instrukcija
i) za sekvencu 1 imamo:
CPI1=10/5=2
ii) za sekvencu 2
CPI2=9/6=1,5
Ovaj primer pokazuje koliko je nekorektno da se koristi samo jedan faktor (broj instrukcija) da bi se ocenile performanse. Kada se upore|uju dva ra~unara, moraju se uzeti u obzir sve prethodno analizirane komponente.
Test pitanje 1.9
Ukazati na definiciju Amdahl-ovog zakona u izvornom obliku.
Odgovor Poveanje performansi se mo`e ostvariti poboljanjem nekog dela ra~unara (maine).
Amdahl-ov zakon definie ubrzanje koje se ostvaruje kada se pobolja neki deo maine tako da se i performanse te maine poveaju.
Ubrzanje=janjeisti_poboloja_ne_kore_maine_kperformansnjei_poboljaoja_koriste_maine_kperformans
ili, alternativno:
Ubrzanje=boljanjemini_sa_porama_na_maenja_progvreme_izvroboljanjaini_bez_prama_na_maenja_progvreme_izvr
Kada se analizira program (zadatak), mo`e se uo~iti da postoje delovi koji se mogu usavriti (ili se usavravaju) i delovi koji se ne mogu usavriti (ili se ne usavravaju). Prema tome, ako vreme izvrenja programa ozna~imo sa T, deo programa koji se mo`e usavriti sa Fpob, a ubrzanje sa Spob, tada:
1. Ocena performansi
1-11
( )
+−=
SpobFpobFpob1*TstaroTnovo
Ukupno ubrzanje Suk predstavlja odnos vremena izvrenja Tnovo i Tstaro:
( )
SpobFpobFpob1
1TstaroTnovoSuk
+−==
Ilustrcije radi, analizirajmo sledea dva slu~aja:
(I) Neka se usavreni deo programa izvrava 10 puta br`e od originalnog (neusavrenog). Za deo programa koji se mo`e usavriti u neusavrenom programu troi se 40% vremena. Ukupno ubrzanje Suk koje se posti`e uvo|enjem poboljanja iznosi sada:
Fpob=0.4
Spob=10
Suk=1
0 6 0 410
10 64
156. . .
.+
= ≈
(II) Neka se program na nekoj maini izvrava za 100s, pri ~emu se za operacije mno`enja troi 80s od tog vremena. Koliko puta treba ubrzati mno`enje ako `elimo da se program izvrava pet puta br`e.
Tnovo=Tstaro ( )
+−
SpobFpobFpob1
20=100((1-0.8)+0.8/Spob)
20=20+80/Spob
Ovaj rezultat ukazuje da ubrzanje izvrenja programa za pet puta nije mogue postii sa prihvatljivom vrednou Spob (neprihvatljiva vrednost za Spob je ∞).
Zadatak 1.7
Dva programa, P1 i P2, testirana su na tri ra~unara R1, R2 i R3, a dobijeni testovi su prikazani na Slici 1.6.
R1 R2 R3
P1 (s) 1 10 20
P2 (s) 1000 100 20
ukupno vreme (s) 1001 110 40
Slika 1.6 Vreme izvrenja programa na tri maine
Proceniti performanse maine sa aspekta vremena izvrenja.
Odgovor Na osnovu definicije "br`i od", mo`emo izvesti sledee zaklju~ke:
1) Za program P1:
• R1 je 10 puta br`i od R2
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-12
• R1 je 20 puta br`i od R3
• R2 je 2 puta br`i od R3
2) Za program P2:
• R2 je 10 puta br`i od R1
• R3 je 50 puta br`i od R1
• R3 je 5 puta br`i od R2
Svaka od prethodno pomenutih tvrdnji je istinita, ali zbirni rezultati daju konfuznu sliku o performansama R1, R2 i R3. Jedan od pristupa da se dâ neka bolja slika o relativnim performansama, zasniva se na pore|enju zbira ukupnog vremena izvrenja za oba programa. Zaklju~ci su sada sledei:
1. Za programe P1 i P2:
- R2 je 9,1 puta br`i od R1
- R3 je 25 puta br`i od R1
- R3 je 2,75 puta br`i od R2
Ako radno optereenje ~ine samo programi P1 i P2 koji se izvravaju podjednak broj puta, prethodne konstatacije su korektne, tj. daju pravu sliku. U optem slu~aju, prose~no vreme izvrenja n programa, koji ~ine radno optereenje, mo`e se izraziti kao aritmeti~ka sredina:
∑=
n
1iiT
n1
,
gde je Ti vreme izvrenja i-tog programa od ukupnog radnog optereenja koga ~ini n programa. Performanse se obi~no izra`avaju kao odnos "jedan sa ukupnim vremenom izvrenja" to predstavlja harmonijsku sredinu:
∑=
n
1i iR1
n
gde je Ri funkcija tipa 1/Ti (od vremena izvrenja programa radnog optereenja koga ~ine n programa). Pitanje koje se sada postavlja je sledee: kakav treba da bude korektan izbor programa koji ~ine radno optereenje? Kod definisanja aritmeti~ke sredine usvojeno je da svi programi imaju podjednaku te`inu, tj. da se svi izvravaju podjednako. Da bi se dala neka korektna ocena o performansama, koriste se sledea dva pristupa:
(a) Prvi pristup - ponderisano vreme izvrenja. Svakom programu koji je deo radnog optereenja dodeljuje se te`inski faktor - Wi (zbir svih te`inskih faktora programa koji ~ine radno optereenje, za dati ra~unar iznosi 1). Sumiranjem proizvoda tipa te`inski faktor dobija se ponderisana aritmeti~ka sredina:
∑=
n
1iii T*W ,
gde je Wi u~estanost ponavljanja i-tog programa u radnom optereenju, a Ti predstavlja vreme izvrenja tog programa. Na Slici 1.7 prikazane su tri razli~ite ponderacije, W(1), W(2) i W(3), od kojih je svaka proporcionalna vremenu izvrenja. Ponderisana harmonijska sredina brzina se definie kao:
1. Ocena performansi
1-13
∑=
n
1i i
i
RW
1
R1 R2 R3 W(1) W(2) W(3)
P1 (s) 1,00 10,00 20,00 0.50 0,909 0,999
P2 (s) 1000,00 100,00 20,00 0,50 0,091 0,001
aritmeti~ka sredina: (W1) 500,50 55,00 20,00
aritmeti~ka sredina: (W2) 91,82 18,18 20,00
aritmeti~ka sredina: (W3) 2,00 10,09 20,00
Slika 1.7 Ponderisane aritmeti~ke sredine vremena izvrenja programa kojima su dodeljene razli~ite te`ine.
(b) Drugi pristup - Normalizovano vreme izvrenja programa. Drugi pristup polazi od toga da radno optereenje ~ini skup programa ~ija vremena izvrenja nemaju istu te`inu ali su ona normalizovana u odnosu na vremena izvrenja na referentnom ra~unaru (maini) i zatim uzima prosek normalizovanih vremena izvrenja. Naj~ea referentna maina je VAX-11/780.
Prose~no normalizovano vreme izvrenja se mo`e izraziti kao aritmeti~ka ili geometrijska sredina. Geometrijska sredina se izra~unava kao:
n
n
1iiodnosenja_kao_Vreme_izvr∏
=
gde Vreme_izvrenja_kao_odnosi predstavlja vreme izvrenja normalizovano u odnosu na referentnu mainu, za i-ti program od ukupno n koji ~ine radno optereenje. U optem slu~aju za geometrijsku sredinu va`i osobina:
=
i
i
i
i
YX
ka_sredinaGeometrijs)(Yka_sredinaGeometrijs)(Xka_sredinaGeometrijs
Na Slici 1.8 prikazane su varijacije aritmeti~kih geometrijskih sredina normalizovanih vremena.
normalizovano sa R1 normalizovano sa R2 normalizovano sa R3
R1 R2 R3 R1 R2 R3 R1 R2 R3
P1 1.0 10.0 20.0 0.1 1.0 2.0 0.05 0.5 1.0
P2 1.0 0.1 0.02 10.0 1.0 0.2 50.0 5.0 1.0
aritmeti~ka sredina 1.0 5.05 10.01 5.05 1.0 1.1 25.03 2.75 1.0
geometrijska sredina 1.0 1.0 0.63 1.0 1.0 0.63 1.58 1.58 1.0
ukupno vreme 1.0 0.11 0,04 9.1 1.0 0.36 25.03 2.75 1.0
Slika 1.8 Vreme izvrenja sa Slike 1.6, normalizovano za svaku mainu
Zadatak 1.8
Neka postoje dve razli~ite implementacije, R1 i R2, istog skupa instrukcija. Skup instrukcija ~ine ~etiri klase (A,B,C i D). Taktna frekvencija R1 je 500 MHZ, a R2 je 750 MHz. CPI za svaku od klasa instrukcija maina R1 i R2 prikazan je na Slici 1.9.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-14
klasa CPI maine R1 CPI maine R2
A 1 2
B 2 2
C 3 4
D 4 4
Slika 1.9 CPI maina R1 i R2 za svaku od klasa A,B,C i D
Ako se vrne performanse definiu kao najvea brzina sa kojom maina mo`e da izvrava sekvencu instrukcija, koje su vrne performanse R1 i R2 izra`ene u instrukcija/sekundi?
Odgovor Maine R1 i R2, mogu postii vrne performanse ako izvravaju instrukcije iz klase A i B, respektivno. Vrne performanse maine R1 su 500 MIPS-a, a maine R2 375 MIPS-a.
Zadatak 1.9
Ako je broj instrukcija koje se izvravaju od strane odre|enog programa podjednak za sve klase sa Slike 1.10, za koliko puta je maina R2 br`a od R1, ako je fcpR1=500 MHz a fcpR2=750 MHz? R1 i R2 su dve razli~ite implementacije istog skupa instrukcija.
klasa CPI maine R1 CPI maine R2
A 1 2
B 2 2
C 3 4
D 4 4
Slika 1.10 CPI maina R1 i R2 za svaku od klasa A,B,C i D
Odgovor
524
4321,CPIR1 =
+++=
034
4422,CPIR2 =
+++=
6cpR1R1CPUR1 10*200NI
MHz5005.2*NIt*CPI*NIT ===
610*250NI
MHz7500.3*NI
=== cpR2R2CPUR2 t*CPI*NIT
Maina R2 ima krae vreme izvrenja i to zna~i da je br`a od R1.
25.1200250
TT
CPUR2
CPUR1 ==
tj., R2 je 1,25 puta br`a od R1.
Zadatak 1.10
1. Ocena performansi
1-15
Neka su R1 i R2 dve razli~ite implementacije istog skupa instrukcija. Skup instrukcija ~ine tri klase A, B, i C. Maina 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 maine R1(R2). C1isk(C2isk) prose~an broj instrukcija date klase koje se dobijaju prevo|enjem programa. C3 je trei kompilator. Broj instrukcija koje koriste kopilatori za dati program je identi~an.
Koristei C1 (C2) na obe maine R1 i R2, odrediti za koliko e biti br`a R1(R2). Ako se isporu~uje R1 (R2), koji kompilator treba koristiti?
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.
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
=⋅
.
Dobiemo 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), dobiemo da je R1 za 1,04 puta br`e od R2. Zbog toga, kada se koristi kompilator C3, treba isporu~ivati (kupovati) mainu R1.
Zadatak 1.11
Zainteresovani smo za dve implementacije maine, jedna sa-, a druga bez specijalnog FP hardvera. U toku izvrenja programa P u~ee operacija je sledee:
• FP mno`enje 10% • FP sabiranje 15%
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-16
• 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 sledei broj taktnih intervala:
• FP mno`enje 6 • FP sabiranje 4 • FP deljenje 20 • Integer instrukcije 2
MNFP (machine with no floating point) nema FP hardver i zbog toga mora emulirati FP operacije koristei Integer instrukcije. Broj instrukcija tipa Integer, potreban za implementaciju svake od FP operacija, je sledei:
• FP mno`enje -> 30, • FP sabiranje -> 20, • FP deljenje -> 50.
Obe maine se taktuju na 100 MHz.
a) Odredi native MIPS za obe maine.
Napomena:
native MIPS =610*enjavreme_izvr
ukcijabroj_instr,
ili, alternativno:
MIPS = 610CPIestanost~taktna_u
*
b) Ako je MFP-u potrebno 300*106 instrukcija da bi izvrio program, koliko je Integer instrukcija potrebno MNFP-u da izvri isti program.
c) Ako je broj instrukcija MFP-a 300*106, za koje vreme se izvri program P na MFP i MNFP maini.
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
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
1. Ocena performansi
1-17
FP sabiranje 15% 45 45*20=900
FP deljenje 5% 15 50*15=750
Integer instrukcije 70% 210 210
ukupno 100% 300 2760
c) TMFP= s81082710300 6
,,
*MIPS
10N
MFP
61 ==*
TMNFP= s25550
102760 6
,*
MIPS10N
MNFP
62 ==
*
Zadatak 1.12
Neka je data maina 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 sledei podaci (Slika 1.13):
broj instrukcija (109) za svaku klasu instrukcije
kd 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 izvravati br`e, shodno MIPS-ovima, a koja shodno vremenu izvrenja?
Odgovor
vreme_izvrenja=kvencijataktna_fre
_intervaliovi_taktniCPU −
TCPU=N*tcp
N=∑=
n
1iii N*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.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-18
Vreme izvrenja za odgovarajue kompajlirane programe iznosi:
TCPUC1= s 2010*500
10*106
9
=
TCPUC2= s 3010*500
10*156
9
=
Na osnovu vremena izvrenja zaklju~ujemo da kompilator generie krai program. Odredimo sada MIPS-ove za svaku verziju programa.
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 namee je da kôd kompilatora 2 ima vei broj MIPS-ova ali se kôd kompilatora 1 izvrava za krai 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 sadanji dizajn ili je vredno potroiti jo dodatnog vremena da bi se reenje poboljalo. O ovom problemu ste diskutovali sa timom in`ejnera hardverista i doli ste do zaklju~ka da se mogu ponuditi sledee opcije:
(a) ne menjati reenje - ovaj tip maine naziva se Rosn. Njegova taktna frekvencija je 500 MHz, a merenja na simulatoru su dala sledee rezultate:
klasa instrukcije CPI frekventnost
A 2 40%
B 3 25%
C 3 25%
D 5 10%
(b) optimizovani hardver - tim projektanata hardvera je utvrdio da mo`e poboljati dizajn procesora, i poveati taktnu frekvenciju na 600 MHz. Poboljani procesor zvaemo Rpob. Merenja na simulatoru su dala sledee rezultate:
klasa instrukcije CPI frekventnost
A 2 40%
B 2 25%
C 3 25%
D 4 10%
(1) Odrediti CPI za maine Rosn i Rpob.
(2) Odredi MIPS za Rosn i Rpob.
1. Ocena performansi
1-19
(3) Koliko puta je br`i Rosn u odnosu na Rpob
(4) Tim projektanata kompilatora obaveten je o diskusiji koja se odnosi na poboljanje maine pa zbog toga predla`e da pobolja kompilator sa ciljem da povea performanse. Kombinaciju: poboljani kompilator plus bazna maina zvaemo Rkom. Dobijeni rezultati za pore|enu verziju kompilatora su sledei:
klasa instrukcije procenat instrukcije koji se izvrava u pore|enju sa Rosn
A 90%
B 90%
C 85%
D 95%
Ako Rosn izvrava 500 instrukcija klase A, tada e Rkom izvravati 0,9*500=450 instrukcija klase A za isti program. Koliki je CPI za Rkom?
(5) Koliko puta je br`i Rkom u odnosu na Rosn?
(6) Tim projektanata kompilatora ukazao je da je mogue implementirati kako hardverska, tako i kompilatorska poboljanja. Ovakav tip maine zvaemo Rhps. Koliko puta je br`i Rhps u odnosu na Rosn?
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, mogue je izvriti njihovo pore|enje sa aspekta MIPS rejtinga:
41179254
,MIPS
MIPS
Rosn
Rpob ==
(4) Ovaj problem se mo`e reiti na dva na~ina. Prvi se sastoji u sledeem: 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. Koristiemo drugi pristup:
odnos_instrukcija = 0,9*0,4+0,9*0,25+0,85*0,25+0,1*0,95=0,81.
Sada se CPI odre|uje kao:
CPIkom= 13810
950105850250390250390402,
.,*,*,*,*,*,*,*,*
=+++
(5) TCPURosn=osnosn
Rosn
fcp2,8*NI
fcpCPI*NI
=
TCPUhps=hpshpshps
hps
fcp2,5*Ni
fcp3,1*0,81*NI
fcp
CPI*NI==
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-20
Pri fcphps = fcposn, imaemo sledei odnos performansi:
1215282
,,,
TT
PRosnPRhps
CPUhps
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 ===
Test pitanje 1.10
Mikroprocesor M radi na taktnoj frekvenciji od 100 MHz, i izvrava neki specificirani benchmark program koga ~ine 10.000 000 instrukcija za 0,25 s. Odredi odgovarajue vrednosti za CPI i MIPS koje va`e za dati eksperiment. Da li je procesor superskalaran?
Napomena: CPI - broj taktnih intervala po instrukciji, MIPS - milion instrukcija u sekundi
Odgovor Iz postavke zadatka va`i da Tu = 0,25s predstavlja ukupno vreme izvrenja specificiranog benchmark programa, koga ~ini Nu = 107 - instrukcija, kada mikroprocesor radi na taktnoj frekvenciji od fcp=100 MHz. Na osnovu izraza:
6cp
uu 10*f
CPI*NT = s,
imamo:
CPI = (fcp * Tu * 106)/N
= 25 * 106 * 10-7
= 2,5 takta intervala/instrukcija
Kao mera, MIPS je definisana izrazom:
CPI
fMIPS cp= .
Zamenom odgovarajue brojne vrednosti, dobiemo:
2,5100
MIPS =
= 40 miliona instrukcija/s
Ovo sledi iz ~injenice da M izvrava 107 instrukcija za 0,25s. S obzirom da se superskalarni RISC procesori obi~no projektuju za CPI < 1, to zna~i da M nije superskalarni procesor.
Test pitanje 1.11
Neka se mikroprocesor M1, koji radi na taktnoj frekvenciji 50 MHz, zameni novim modelom M2 koji ima istu arhitekturu kao i M1 ali radi na taktnoj frekvenciji od 75 MHz.
1. Ocena performansi
1-21
a) Ako za odredjeni benchmark program P1, broj MIPS-ova mikroprocesora M1 je m1, koliki je odgovarajui broj MIPS-ova -m2, kod mikroprocesora M2?
b) Kada se M1 ugradi u odgovarajuu mainu tipa personalni ra~unar -PC1, tada se program P1 izvrava za 250s. Zamenom M1 sa M2, vreme izvrenja programa P1 se skrauje samo na 220s. Ukazati na mogui razlog za ovako razo~aravajue “poboljanje” performansi.
Odgovor a) Na osnovu formule MIPS = fcp/CPI, i pretpostavke da obe maine imaju istu arhitekturu, proizilazi da M1 i M2 imaju istu CPI vrednost c. Na osnovu toga, zaklju~ujemo da je:
c50
m =1
c75
m =2 .
Odavde dobijamo:
1m5075
m2 =
= 1,5 m1.
b) Zamenom maine M1 mainom M2, realno je o~ekivati da se vreme izvrenja programa P1 skrati sa 250s na 250/1,5 = 167s. ^injenica da je realno novodobijeno vreme izvrenja programa P1 mnogo du`e (220 ns), ukazuje na to da se program P1, u toku svog izvrenja, dosta ~esto obraa memoriji i da je procesor prinudjen da insertuje vei broj stanja ~ekanja kako bi uspeno zavrio operacije ~itanja i upisa u memoriju. Isti zaklju~ak va`i i za ulazno-izlazne operacije. Pri ovome, treba naglasiti da je rad ulazno-izlaznih uredjaja nezavisan od brzine rada procesora. Navedene ~injenice su glavni razlozi loijih rezultata.
Test pitanje 1.12
Neka mikroprocesor M1 radi na taktnoj frekvenciji fcp1=100 MHz. Usvojimo, dalje, da nam je napredak tehnologije omoguio da M1 zamenimo novim CPU-om M2 ~ija je arhitektura i organizacija identi~na sa M1, ali je taktna frekvencija fcp2 sada via i iznosi 125 MHz. Na koji na~in zamena M1 sa M2 ima efekat na izvrenje skupa benchmark programa B sa aspekta: (a) vrednosti CPI-a; i (b) ukupnog vremena koje je CPU-u potrebno da izvri skup benchmark programa B?
Odgovor Kod zamene M1 sa M2, broj ciklusa (taktnih intervala) po instrukciji, koji zavisi samo od logike za procesiranje instrukcija, ostaje nepromenjen. Analogno ovome, ukupan broj instrukcija - Nu, potreban da se izvri skup programa B, ostae nepromenjen. Ali ipak, trajanje taktnog intervala kod CPU M1 je tcp1 = 1/fcp1 = 10ns, a kod CPU M2 se skrauje i iznosi tcp2 = 1/fcp2 = 8ns. Vreme potrebno CPU-u da izvri program, u optem slu~aju, iznosi:
Tu = Nu * CPI * tcp
Zamenom odgovarajuih vrednosti za tcp1 = 10ns i tcp2 = 8ns, smanjujemo Tu2 za 8/10 ili 80% od prvobitne vrednosti. To zna~i da, sa poveanjem taktne frekvencije od 25%, vreme koje je potrebno CPU-u da izvri program se skrauje za 20%.
Test pitanje 1.13
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-22
Mogua mera za ocenu performansi CPU-a M1 koji koristi paralelizam na nivou instrukcija, predstavlja prose~an broj-instrukcija-po-ciklusu, ili IPC (instructions-per-cycle) potreban da se izvri skup benchmark programa Q. Neka CPU M1, u toku procesiranja Q, izvri ukupno Nu instrukcija. Dalje, usvojimo da taktni interval kod M1 iznosi tcp, a da je Tu ukupno CPU-ovo vreme potrebno da M1 izvri skup programa Q. Odrediti izraz za IPC u funkciji Nu, Tu i tcp.
Odgovor
cp
uu f
CPI*NT =
IPC
1CPI =
cp
cp t1
f = .
Zamenom, sledi:
u
cpu
T
t*NIPC =
Test pitanje 1.14
Verovatnoa pojave odredjenog tipa instrukcija u toku izvrenja programa A i B, prikazana je na Slici 1.14.
verovatnoa pojavljivanja
tip instrukcije program A (komercijalni) program B (nau~ni)
Ld 0,24 0,29
St 0,12 0,15
FXop 0,27 0,15
FPop 0,00 0,19
Branch 0,17 0,10
Ostale 0,.20 0,12
Slika 1.44:Verovatnoa pojavljivanja instrukcija Napomena: FXop - operacija u fiksnom zarezu; FPop - operacija u pokretnom zarezu
Taktna frekvencija procesora je 100 MHz, a sve instrukcije, sa izuzetkom FPop, imaju prose~no vreme izvrenja od 10ns. Odrediti:
(a) Koliko je prose~no vreme izvrenja FPop instrukcija, ako ukupno prose~no vreme po instrukciji za program B iznosi 18,1ns?
(b) koliki je CPI za program B?
(c) Neka je prose~no vreme izvrenja instrukcija sa Slike 1.14 sledee: (1) Ld, St, i FPop instrukcije se izvravaju za po ~etiri taktna intervala; (2) FXop se izvrava za dva taktna intervala; (3) sve ostale instrukcije se izvravaju za jedan taktni interval. Za slu~aj da oba programa imaju po 2,5 miliona instrukcija, koji od programa e se izvriti br`e?
1. Ocena performansi
1-23
Odgovor a) S obzirom da je verovatnoa pojavljivanja instrukcije FPop - 0,19, tada e verovatnoa pojavljivanja svih ostalih instrukcija biti: (1 - 0,19) = 0,81. Ako je prose~no vreme FPop jednako k nanosekundi, a ukupno vreme izvrenja: 0,81*10 + 0,19*k = 18,1ns, to, reavanjem po k, dobijamo: k = 10/0,19 = 52,6ns.
b) Za fcp = 100MHz imamo tcp = 10ns. Polazei od definicije da je:
periodtaktniiinstrukcij poizvrenja vreme prosecno
CPI =
10
18,1= = 1,81 taktni interval.
c) Prose~no vreme izvrenja programa se izra~unava na osnovu relacije:
∑=
=n
1iiip tpt .
• Za program A ono iznosi:
tpA = 4 * (0,24 + 0,12 + 0,00)
+ 2 * 0,27
+ 1 * (0,17 + 0,20)
= 1.44 + 0,54 + 0,37
= 2,35 traktna intervala.
• Za program B ono iznosi:
tpB = 4 * (0,29 + 0,15 + 0,19)
+ 2 * 0,15
+ 1 * (0,10 + 0,12)
= 2,52 + 0,30 + 0,22
=3,04 taktna intervala.
Br`e e se izvriti program A.
Test pitanje 1.15
Performansna mera MIPS smatra se korisnom samo kada se koristi za procenu performansi onih procesora koji pripadaju istoj familiji i istog su proizvodja~a, kao to je to prikazano na Slici 1.15.
DEC 3000 DEC 4000 DEC 10000
Performansna mera Model 400 Model 610 Model 610 taktna frekvencija CPU-a (MHz) 133 160 200
veli~ina ke memorije (MB) 0,5 1 4 SPECint92* 63,8 81,2 104,3
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-24
SPECfp92* 111,2 143,1 200,4 Linpack 1000 x 1000 * 90 114 155 Perfect BM suite * 18,1 22,9 28,6
Cernlib * 16,9 21,0 26,0 Livermore loops * 18,7 22,9 28,1
Slika 1.55 Komparacija performansi triju ra~unara zasnovanih na DEC Alpha 64-bitnim mikroprocesorima
Napomena: Simbol "*" ukazuje da je odgovrajua stavka benchmark program
Ukazati na osnovne razloge koji predstavljaju opravdanje zato je ovakvo uporedjenje korektno.
Odgovor Analizirajui podatke koji su prikazani na Slici 1.15, zaklju~ujemo da se oni bolje interpretiraju kao relativne performansne mere a ne ako apsolutne. Na primer, pretpostavimo da `elimo da uporedjujemo performanse mainu tipa Digital 3000 i 10000. Odnos njihovih SPECint92 (ova mera se izra`ava u MIPS-ovima) iznosi: 104,3/63,8 = 1,65. Odgovarajui odnosi drugih pet benchmark programa variraju od 1,50 do 1,79 i ukazuju da je Digital 10000 pribli`no za 2/3 br`i u odnosu na Digital 3000. Uo~imo, takodje, da je odnos dveju taktnih frekvencija 200/133 = 1,50.
Opti zaklju~ak, kada se uporedjuju performanse dva ra~unara, je sledei: uporedjivati razli~ite procesore razli~itih proizvodja~a je teko iz sledeih razloga:
a) skupovi instrukcija nisu isti,
b) radna okru`enja u kojima se MIPS-ovi izra`avaju nisu identi~na (okru`enje uklju~uje ke memorije, operativne sisteme, U/I procesore i sve druge faktore koji imaju uticaj na vreme izvrenja instrukcija).
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 vri ubacivanje stanja ~ekanja; i
(b) da se ubacuje jedno stanje ~ekanja.
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=
1. Ocena performansi
1-25
Magistrala podataka mikroprocesora 8086 je 16-bitna, pa je:
BW8086= sMBBns
/,* 522800
1=
b) Pod uslovom da se vri ubaciavanje jednog stanja ~ekanja, memorijski ciklus trajae 5 taktnih intervala, tj. tcik=5*200ns=1000ns, a propusnost magistrale u tom slu~aju iznosie:
BW 80881
10001 1' * /= =
nsB MB s
BW 80861
10002 2' * /= =
nsB MB s
Zadatak 1.15
Ciklus magistrale mikroprocesora 8086 iznosi ~etiri, a mikroprocesora 80286 dva taktna intervala. Ako je radna frekvencija oba mikroprocesora 10MHz, odrediti propusnost magistrale za oba procesora pri umetanju: (a) 0 stanja ~ekanja - WS (wait state); (b) 1 WS; i (c) 2 WS.
Odgovor Perioda takta sa kojim procesor radi je 1/(10MHz)=100ns
8086-10MHz 80286-10MHz
memorijski ciklus sa 0WS 400ns 200ns
memorijski ciklus sa 1WS 500ns 300ns
memorijski ciklus sa 2WS 600ns 400ns
5MB/s2*400ns
1BW8086_0WS == 4MB/s2*
500ns1
BW8086_1WS == 3.3MB/s2*600ns
1BW8086_2WS ==
10MB/s2*200ns
1BW80286_0WS == 6,6MB/s2*
300ns1
BW80286_1WS ==
5MB/s2*400ns
1BW80286_2WS ==
Zadatak 1.16
Odrediti vreme trajanja ciklusa memorije koji se odnosi na operaciju ~itanja i upisa, kod mikroprocesora 80286, pri sledeim uslovima:
(a) 12 MHz sa 1 WS; (b) 16 MHz sa 1 WS; (c) 16 MHz sa 2 WS
Napomena: memorijski ciklus procesora 80286 traje dva taktna intervala.
Odgovor (a) tcik|12 = (1+2)*80ns = 3*80ns = 240ns
(b) tcik|16 = (1+2)*62ns = 3*62ns = 186ns
(c) tcik|162WS=(2+2)*62ns=4*62ns = 248ns Napomena: U optem slu~aju va`i formula:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
1-26
tcik=(broj WS + memorijski ciklus)*tCPU
Za 80286 memorijski ciklus=2, a tCPU je taktna frekvencija procesora.
Test pitanje 1.16 [ta predstavlja pojam benchmark program?
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-1
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
ö õ
Test pitanje 2.1
Ukazati na osnovne razlike izme|u LE i BE adresiranja.
Odgovor Osam bitova (jedan bajt) nije dovoljno za memorisanje velikih brojeva, pa se zbog toga vei 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 bie 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~ujui 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.
Test pitanje 2.2
Dekodirati sledei ASCII kôd 10100111101001110110111000010100000101001011101011110011
Odgovor Sima Rus
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-2
Test pitanje 2.3
Koji bit treba komplementirati da bi promenili kôdove ASCII znakova “malih” slova na “velika” i obratno?
Zadatak 2.1
Napisati svoje ime i prezime pomou ASCII kodiranih znakova koristei 8-bitni kôd na sledee na~ine: (a) sa krajnje levim bitom uvek postavljen na nuli (b) sa krajnje levim bitom tako odabran da se generie parna parnost. Predvideti blanko znak izme|u imena srednjeg slova, kao i srednjeg slova i prezimena.
Test pitanje 2.4
Skicirati format instrukcije kod ~etvoro-, tro-, dvo-, jedno- i nulto- adresnih maina
Odgovor Formati instrukcija su prikazani na Slici 2.1. op-kôd adrese
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
Test pitanje 2.5
Na Slici 2.2, na grafi~ki na~in, prikazano je formiranje efektivne adrese operanda instrukcije kod hipoteti~kog procesora. Identifikovati adresne na~ine rada.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-3
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
Odgovor a) implicitno b) neposredno c) memorijsko direktno d) registarsko direktno e) memorijsko indirektno f) registarsko indirektno
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-4
g) registarsko preko implicitnog registra (obi~no je to PC)- tj. PC relativno h) registarsko relativno i) indeksno sa autoinkrementiranjem/dekrementiranjem j) bazno-indeksno
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 maine?
Odgovor Za dvo-operandske instrukcije imeemo sledei 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`ie 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 imaemo 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 reavanje ovog problema koriena je tehnika kodiranja sa proirenjem.
Zadatak 2.2
Neka neki hipoteti~ki procesor koristi promenljivi format kodiranja instrukcija. Projektovati opkôd tako da podr`ava kodiranje: (1) sedam instrukcija sa dve 13-bitne memorijske adrese i jedno trobitno polje za specifikaciju
adrese registra; (2) sedam instrukcija sa tri trobitna polja za specifikaciju adrese registara; (3) ~etiri instrukcije kojima se ne specificiraju memorijske adrese i adrese registara. Odrediti kakvi su minimalni formati instrukcija pod (1), (2) i (3).
Odgovor Maina podr`ava tri formata: 32-bitni, 16-bitni i 8-bitni. Formati su sledei:
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-5
3 3 13 13
... ...
3 + 3 3 3 332-bitni format
16-bitni format
opkodx x x
reg. op. mem. op. 1 mem. op. 2
opkod1 1 1 x x x
reg. op. 1 reg. op. 2 reg. op. 3
opkod1 1 1 1 1 1 y y
2
8-bitni format
3 + 3
Napomena: Vrednost polja xxx ne mo`e biti 111
Test pitanje 2.7
Ra~unar ima 32-bitni format instrukcije koga ~ine sledea polja: 8-bitni opkôd; dva polja za specifikaciju adrese registra, svako obima 5 bitova, jedno 14-bitno polje za specifikaciju neposrednog operanda/registra. (a) koliki je maksimalan broj operacija koji se mo`e specificirati (b) koliko registara se mo`e adresirati (c) kolika je maksimalna vrednost neozna~enog neposrednog operanda koja se mo`e specificirati (d) u kom opsegu se mo`e specficirati vrednost ozna~enog neposrednog operanda, ako bit 13 predstavlja bit znaka.
Test pitanje 2.8
Instrukcija/podatak koju ra~unar pribavlja iz memorije je obima 24 bita. Postoji samo jedan format instrukcije, koji sadr`i opkôd deo i deo za neposredni operand. Svaka instrukcija je smetena u jednoj memorijskoj re~i. Skup instrukcija ~ini 150 razli~itih operacija. (a) sa koliko bitova se kodira opkôd deo instrukcije (b) koliko bitova se koristi za neposredni deo instrukcije (c) ako se neposredni operand koristi kao neozna~ena adresa memorije, koji je maksimalan broj re~i koji se mo`e adresirati (d) koja je najvea i najmanja algebarska vrednost kod brojeva u prezentaciji dvoji~nog komplementa koja se mo`e predstaviti neposrednim operandom?
Test pitanje 2.9
Koje osnovne grupe organizacije podataka postoje? Uka`i na njihove osobine.
Odgovor Tipove podataka je mogue organizovati u sledee ~etiri glavne grupe: skalarni, struktuirani, linearne liste i povezane liste. Skalarne podatke karakterie opseg vrednosti. Ovi podaci definisani su za fiksirani broj bitova. Naj~ee korieni skalarni tipovi podataka su prikazani na Slici 2.3.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-6
tip podatka obim u bitovima opseg format logi~ki 1 0-1 d0 BCD 4 0-9 d3d2d1d0 heksadecimalni 4 0-15 d3d2d1d0 znak 8 0-255 d7d6d5d4d3d2d1d0 celobrojna vrednost N 2N-1 znak, moduo celobrojna vrednost dvostruke preciznosti 2N 22N-1 znak, moduo realna (FP) N ±2± k znak, eksponent, mantisa realna vrednost dvostruke preciznosti 2N ±2± L znak, eksponent, mantisa
Slika 2.3 : Skalarni tipovi podataka
Strukturne tipove podataka ~ine skalarni podaci koji su ure|eni u blokove. Postoje dve osnovne varijacije: polje i zapis. Polje ~ine isti skalarni tipovi podataka, kakve su recimo celobrojne vrednosti. Polje karakterie jedinstveno ime, po~etnu lokaciju i obim. Polje mo`e biti definisano kao 1D (vektor), 2D (matrica), ili kao viedimenzionalno. Na slici 2.4 je prikazana struktura podataka tipa polje. Elementi polja u konkretnom primeru su sve uzastopne neparne celobrojne vrednosti u opsegu izme|u 1 i 20.
adresa podatak N 1
N+1 3 N+2 5 N+3 7 N+4 9 N+5 11 N+6 13 N+7 15 N+8 17 N+9 19
Slika 2.4 : Struktura tipa polje
Zapis predstavlja tabela razli~itih skalarnih tipova podataka ure|enih u razli~ita polja. Svaki zapis je definisan na osnovu svog imena, lokacije, obima i sadr`aja polja. Na Slici 2.5 je prikazana struktura jednog tipi~nog zapisa (record).
ime ime oca prezime ulica broj mesto stanovanja datum rodjenja optina republika mati~ni broj broj li~ne karte izdata od obrazovanje organizacija gde je zapoljen broj telefona kui broj telefona posao
Slika 2.5 Jedna klasi~na struktura tipa zapis
Linearne liste se formiraju pomou tabela i jednog ili veeg broja adresnih pokaziva~a. Elementi liste sekvencijalno se ubacuju i izbavljuju iz liste. Magacin i red ~ekanja su liste koje naj~ee sreemo. Magacin radi na principu LIFO bafera a karakterie se svojim imenom, obimom, lokacijom, i pokaziva~em. Red ~ekanja radi na principu FIFO bafera kome je pridru`en ulazni pokaziva~ za upis i izlazni pokaziva~ za ~itanje. Standardno je maksimalni opseg reda ~ekanja definisan po modulu N, gde je N veli~ina liste, a takav red ~ekanja se naziva kru`ni bafer. Dva reda ~ekanja je mogue kombinovati u jedinstveni red ~ekanja sa dva pristupa (dequeue), koji
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-7
dozvoljava da se operacije ~itanja i upis obavljaju sa obe strane. Na Slici 2.6 prikazane su linearne liste strukture podataka.
123456
N-3N-2N-1N
123456
N-3N-2N-1N
1 N
N 1
PTR RDPTR
WRPTR
RD
WD
WD
RD
a) magacin b) red ~ekanja c) red ~ekanja sa dva pristupa
Slika 2.6 Strukture podataka tipa linearna lista
Povezane liste se formiraju pomou nekontinualnih memorijskih lokacija koje se me|usobno povezuju pokaziva~ima za povezivanje (link pointers). Povezivanje mo`e biti u jednom smeru ili u oba. Kod kru`no povezane liste veza u zadnjem elementu pokazuje na prvi element. Povezanoj listi se dodeljuje ime, lokacija, veli~ina (obim) i pokaziva~ veze. Karakteristi~an tip strukture povezana lista je binarno stablo. Inicijalni elemenat binarnog stabla zove se koren (root). Svaka lokacija narednog elementa se naziva ~vor, a svakom elementu su pridru`ena dva pokaziva~a, levi i desni. Ovakva definicija rezultuje hijerarhijskoj strukturi podataka koja je simetri~na oko korena. Struktura tipa koren se koristi za ~uvanje informacija koja je organizovana na logi~ki na~in. Na Slici 2.7 prikazani su pomenuti tipovi strukture povezane liste. Pristup elementima strukture povezane liste je sekvencijalan, ali osnovna karakteristika ovih struktura je ta to su one lako proirljive.
A PTR B PTR C NULL
A PTR B PTR C NULL
L PTR A
D PTR
L PTR B
D PTR
L PTR C
D PTR
L PTR D
D PTR
L PTR E
D PTR
L PTR F
D PTR
L PTR G
D PTR
koren
~vor
a) povezana lista u jednom smeru
b) povezana lista u oba smera
c) binarno stablo
Slika 2.7 : Strukture podataka tipa povezana lista
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-8
Test pitanje 2.10
Instrukciju relativnog grananja ~ine dve 16-bitne re~i koje su smetene u memoriji na lokacijama 310 i 311 (decimalno). Grananje se vri na ekvivalentnoj decimalnoj adresi 225. Opkôd instrukcije nalazi se na lokaciji 310 a adresa grananja ~ija je labela X, na lokaciji 311. (a) odrediti decimalnu vrednost X-a. (b) odrediti binarnu vrednost X koristei prezentaciju dvoji~nog komplementa.
Odgovor a) kod relativnog grananja efektivna adresa, EA, se izra~unava kao : EA=adresni deo instrukcije+sadr`aj PC-a 225=X+312⇒ X=-87 Nakon pribavljanja instrukcije grananja PC pokazuje na opkôd naredne instrukcije koja se nalazi na adresi 312. b) 16-bitna binarna vrednost decimalnog broja -87 iznosi:
1111111110101001
(PC)→
memorija
.
.
.opkôd BranchXopkôd naredneinstrukcije
adrese
225
310311312
Zadatak 2.3
Neka procesor koristi sledee 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 izvrenja 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 izvrenja 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 pretpostaviemo sledee:
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-9
• 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 izvrenja instrukcije Add u registar R1 ~uva se vrednost 20.
Sadr`aj memorije i registra R1 pre i nakon izvrenja instrukcije je oblika:
.
..
.
.
.opkôd Add
1000...
2000...
150
20 170+R1
pre po~etka Add nakon zavretka AddR1
memorijaadresa
AA+1
1000
2000
Da bi se izvrila instrukcija Add, upravlja~ka jedinica se obraa ~etiri puta memoriji i to : Prvi put kada pribavlja opkôd Add, drugi put kada ~ita indirektnu adresu (sadr`aj lokacije A+1), trei 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 imaemo:
.
..
.
.
.opkôd Jmp
1000...
2000...
3500
3500PC
nakon zavretkainstrukcije JMP[1000]
memorijaadresa
AA+1
1000
2000
I u ovom slu~aju upravlja~ka jedinica se obraa memoriji ~etiri puta.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-10
Zadatak 2.4
Instrukcija koja je smetena na adresama 250 i 251 je tipa "Load u Acc" kod koje je adresno polje ADR (ili neposredni operando 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 smeta rezultat koji se dobija izvrenjem instrukcije. Odrediti sadr`aj registra Acc i efektivnu adresu za sledee 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 izvrenja instrukcije Lda
Odgovor adresni na~in rada simboli~ko
obele`avanje registarski prenos efektivna
adresa sadr`aj Acc-a
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. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-11
Test pitanje 2.11
Opkôd instrukcije Lda je smeten na lokaciji 200 a adresno polje na lokaciji 201. Adresno polje ima vrednost 300. Sadr`aj registra R1 je 750. Odrediti sadr`aj registra Acc i efektivnu adresu za sledee adresne na~ine rada ove instrukcije: (a) direktno ; (b) neposredno ; (c) relativno ; (d) registarsko indirektno ; (e) indeksno sa R1 kao indeksnim registrom. Sadr`aj memorije, pre po~etka izvrenja instrukcije Lda, prikazan je na Slici 2.10.
.
.
.
opkôd Lda mode300
opkôd naredne instrukcije...
700...
1200...
1400...
2000...
200201202
300
502
750
1050
memorijaadrese
200PC
750R1
Acc
Slika 2.10 : Izgled memorije pre izvrenja instrukcije Lda
Test pitanje 2.12
Mikrora~unar koristi 32-bitni format instrukcija. Sve instrukcije su istog obima. Registarsko polje, RF, sadr`i 32 registra. (a) Za format kod koga ne postoji address-mode polje a maina je troadresna (specificiraju se samo adrese registara iz RF polja) odrediti maksimalan broj moguih opkôdova instrukcije. (b) Za format sa dvo-adresnim registarskim poljima, jednim memorijskim poljem i maksimalno 256 opkôdova, odrediti koliki je maksimalan broj memorijsko adresnih bitova dostupan.
Odgovor (a) Format instrukcije je oblika: rs1 i rs2 su adrese prvog i drugog izvornog operanda, a rd adresa, odredinog operanda. Sa 17 bitova mogue je adresirati 217=128k razli~itih instrukcija. (b) Format instrukcije je oblika: To zna~i da je maksimalno mogue adresirati 214=16k memorijskih lokacija.
opkôd rs1 rs2 rd 17 5 5 5
opkôd rs1 rs2/rd mem. adresa
8 5 5 14
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-12
Test pitanje 2.13
Najvei broj procesora koji ima k-bitno opkôd polje ima implementirano manje od 2k razli~itih tipova instrukcija. Shodno tome neki opkôd oblici su neva`ei (invalid), to zna~i da se procesor na ove opkôdove ne odaziva definisanim akcijama (akcije specificirane skupom instrukcija). S vremena na vreme procesor mo`e da pribavi i pokua da dekodira i izvri neva`ei opkôd pre svega zbog programskih ili hardverskih greaka. Opisati korektni kurs akcija koje procesor treba da preuzme kada detektuje neva`ei opkôd. (Najvei broj mikroprocesora nema ugra|eni mehanizam za obradu neva`eih opkôdova, tako da ishodi koji slede nakon pokuaja da se izvre ovakve operacije mogu biti nepredvidljivi)
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 sledee 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 koristei 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 najveeg broja procesora ~ine sledee aktivnosti: SP ← SP-1 M[SP] ← Rm a instrukciju POP Rm ← M[SP]
SP ← SP+1 Karakteristike ovakvog na~ina rada su sledee: (a) magacin raste nani`e (b) SP uvek pokazuje na punu lokaciju (c) kod operacije PUSH pokaziva~ SP se prvo dekrementira a nakon toga smeta podatak u magacin. (d) kod operacije POP prvo se izbavlja podatak iz magacina a nakon toga se inkrementira SP. U konkretnom slu~aju koristei raspolo`ive naredbe Lda+, Sto+, Lda- i Sto- mogue je organizovati rad magacina koristei sledee instrukcije: • operacija PUSH Sto- Rm,R7 ; R7 ← R7-1 ; M[R7] ← Rm
• operacija POP Lda+ Rm,R7 ; Rm ← M[R7] ; R7 ← R7+1 Zadatak ~itaoca je da ispita da li je mogue pomou naredbi Sto+ i Lda- organizovati magacin koji e rasti navie?
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-13
Zadatak 2.6
Registarsko polje, RF, ~ine osam registara, ozna~enih kao R0-R7. Koristei instrukcije Sto- Rm,Rn i Lda+ Rm,Rn napisati programske sekvence koje e simulirati rad instrukcija PUSHR (smeta sadr`aj registra R0 do R6 u magacin) i POPR (izbavlja sadr`aj magacina i smeta ga u registre R6 do R0).
Odgovor • aktivnost instrukcije PUSHR je ekvivalentna sledeoj sekvenci Sto- R0,R7 Sto- R1,R7 Sto- R2,R7 Sto- R3,R7 Sto- R4,R7 Sto- R5,R7 Sto- R6,R7 • aktivnost instrukcije POPR ekvivalentna je sledeoj sekvenci Lda+ R6,R7 Lda+ R5,R7 Lda+ R4,R7 Lda+ R3,R7 Lda+ R2,R7 Lda+ R1,R7 Lda+ R0,R7 Treba uo~iti da se smetanje sadr`aja registara u magacin vri po rastuem redosledu (po~ev od R0 ka R6), a izbavljanje iz magacina po obrnutom redosledu (po~ev od R6 ka R0).
Test pitanje 2.14
[esnaestobitna instrukcija smetena u memoriji na adresi 62010 koristi PC-relativni skok (Jump PC relative). Grananje se vri na lokaciju 53010. Adresno polje instrukcije je obima 10 bitova. Kojom binarnom vrednou je specificirano adresno polje koje se odnosi na relativni skok?
Odgovor PC, nakon izvrenja instrukcije na adresi 62010 ,inkrementira se na vrednost 62210, tj. ukazuje na narednu instrukciju programa. PC-relativni skok se ra~una u odnosu na vrednost 62210. Prema tome, decimalna vrednost adresnog polja instrukcije bie -9210 a odgovarajui binarni ekvivalent jednak je 11 1010 0100 2.
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. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-14
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 izvrava na hipoteti~kom ra~unaru komparira dva neozna~ena (ozna~ena) broja A i B obavljajui 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 sledei 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 sledea 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 MS Borrow je 1 a to ukazuje da je potrebno izvriti 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
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-15
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 (Ovaj kona~ni rezultat je korektan) Alternativna operacija oduzimanja dva n-bitna neozna~ena broja A i B se mo`e obaviti na sledei na~in: (j) dodaje se dvoji~ni komplement umanjilaca B umanjeniku A. Ova operacija se izvrava na sledei 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 nee 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), uzimajui dvoji~ni komplement sume i dopisivanjem znaka minus ispred. U konkretnom slu~aju imaemo: 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 izvriti korekciju rezultata rezultat_ime na sledei 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 sledeem postupku: uzima se dvoji~ni komplement umanjilaca (uklju~ujui i bit znaka) i dodaje se umanjeniku (uklju~ujui i bit znaka). Carry koji se javlja na izlazu bita za znak ne uzima se u obzir. Sutina 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 generie 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
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-16
S obzirom da nema Carry i Overflow, rezultat se nalazi u granicama dozvoljenog opsega za predstavljanje brojeva. (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 imaemo da je N=0 (rezultat je pozitivan), Z=0 (rezultat je razli~it od nule), i V=0 ( nije odlo do premaaja). (d) Sledei uslovi bie 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) sledei uslovi bie 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 sledeeg aritmeti~kog izraza: X=(A*(B+C))/(D*E-F) Usvojiti da su svi operandi inicijalno smeteni u memoriju (a) arhitektura procesora je tipa registar-u-registar a koriste se tro-adresne instrukcije. Za obraanje 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>.
Odgovor (a) Lw R1,D Lw R2,E Lw R3,F Mul 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 R2,R3 ;A*(B+C) →R2 Div 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
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-17
Mul A ;A*Acc→Acc Div T1 ;Acc/T1→Acc Mov X ;Acc→X
Zadatak 2.9
Napisati programsku sekvencu za izra~unavanje izraza: X = (A + B * C) / (D - E * F) kod nulto-, jedno-, dvo-, i tro-adresnih maina. Dostupne instrukcije kod odgovarajuih maina su:
a) nulto-adresna mainaPUSH MPOP MADDSUBMULDIV
c) dvo-adresna mainaMOV X,YADD X,YSUB X,YMUL X,YDIV X,Y
izv. i odr. izv.operand operand
b) jedno-adresna mainaLOAD MSTORE MADD MSUB MMUL MDIV M
d) tro-adresna mainaMOV X,YADD X,Y,ZSUB X,Y,ZMUL X,Y,ZDIV X,Y,Z
odr. izv.operand operand
izv. operand
Zadatak 2.10
Kreirati programske sekvence za izra~unavanje izraza c = a2-b2 kod maina koje koriste sledee formate instrukcija: a) tro-adresni - arhitektura je tipa R+M; b) dvo-adresni - arhitektura je tipa R+M; c) dvo-adresni - arhitektura je tipa Load/Store; d) jednoadresni - arhitrektura je tipa R/M. Napomena: (1) Koristiti skup naredbi hipoteti~kog procesora; (2) Promenljive a, b, c i privremena promenljiva x, ~uvaju se u memorijskim lokacijama A, B, C i X, respektivno.
Odgovor Izraz: c = a2-b2, mo`e se zapisati u obliku: c = (a+b)⋅(a-b) a) 1. Add X,A,B ; Mem (X) := Mem(A)+Mem(B)
2. Sub C,A,B ; Mem (C) := Mem(A)-Mem(B)
3. Mul C,X,C ; Mem (C) := Mem(X)*Mem(C) b) 1. Move X,A ; Mem(X) <- Mem(A)
2. Add X,B ; Mem(X) <- Mem(X)+Mem(B)
3. Move C,A ; Mem(C) <- Mem(A)
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-18
4. Sub C,B ; Mem(C) <- Mem(C)-Mem(B)
5. Mul C,X ; Mem(C) <- Mem(C) *Mem(X) c) 1. Load R1,A ; (R1) <- Mem(A)
2. Load R2,B ; (R2) <- Mem(B)
3. Move R3,R1 ; (R3) <- (R1)
4. Add R1,R2 ; (R1) <- (R1)+(R2)
5 Sub R3,R2 ; (R3) <- (R3)-(R2)
6. Mul R1,R3 ; (R1) <- (R1)*(R3)
7. Store C,R1 ; Mem(C) <- (R1) Napomena: R1, R2, R3, ... su registri RF polja. d) 1. Load R1,A ; (R1) <- Mem(A)
2. Load R2,B ;(R2) <- Mem(B)
3. Add R3,R1,R2 ; (R3) <- (R1)+(R2)
4. Sub R4,R1,R2 ; (R4) <- (R1)-(R2)
5 Mul R5,R3,R4 ; (R5) <- (R3)*(R4)
7. Store C,R5 ; Mem(C) <- (R5) Napomena: R1, R2, R3, ... su registri RF polja. e) 1. Load A ; (ACC) <- Mem(A)
2. Add B ; (ACC) <- (ACC)+Mem(B) 3. Store X ; Mem(X) <- (ACC)
4. Load A ; (ACC) <-Mem(A)
5. Sub B ; (ACC) <-(ACC)-Mem(B) 6. Mul X ; (ACC) <-(ACC) *Mem(X)
7. Store C ; Mem(C) <- (ACC)
Zadatak 2.11
Neka je dat skup od ~etiri procesora P0, P1, P2 i P3, gde je Pi i-to adresna maina. P0 je nulto-adresna stack maina, dok su P1, P2 i P3 konvencionalni ra~unari svaki sa po 16 registara opte-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) Koristei to je mogue manji broj instrukcija (krai program), kreirati programske sekvence po kojima e svaka od maina izra~unavati vrednost sledeeg aritmeti~kog izraza: X : = (A/B + C * D)/(D * E - F + C/A) + G , koristei 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 usvajajui da instrukcije na nivou mainskog jezika imaju sledee 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 mainu P2 i ozna~ava R7:=M(B), je obima 8 + 4 + 16 = 28 bitova).
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-19
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 bitova 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 maina
Zadatak 2.12
Neka je dat skup od ~etiri procesora P0, P1, P2 i P3 gde je Pi i-to adresna maina. P0 je nulto adresna maina a P1:P3 konvencionalni ra~unari od kojih svaki ima trideset dva 32-bitna registra opte namene R0:R31 koji se koriste za ~uvanje adresa i podataka. Svi procesori imaju instrukcije sa (asemblersko-jezi~kim) opkôdovima Add, Sub, Mul i Div za implementaciju operacija +,-,* i /, respektivno. a) Napisati programske sekvence za svaku od ~etiri maine pomou kojih se izra~unava sledei aritmeti~ki izraz:
X←(A/B+C*D)/(D*E-F+C/A)+G Za ostale instrukcije u programu koristi standardna imena kao to su Ld za "Load", St za "Store", Push, Pop, Mov i dr. b) Izra~unati obim (veli~inu) objektnog programa u bajtovima za svaki od ~etiri programa ako usvojimo da je format instrukcija na mainskom jeziku sledei: • opkôdovi (ne sadr`e adresnu informaciju) su 14-bitni • adrese registara su 5-bitne (ukupno 15 bitova) • polje adresnih modifikatora je 3-bitno (tipa su R/ M ) • memorijska adresa 32-bitna Na primer, dvo-adresna instrukcija Ld R4,B ima zna~enje R4←M(B) zauzima 14+15+3+32 ukupno 64 bita, 8 bajtova ili dve 32-bitne re~i. Napomena: Prvih 32 bita= opkôd+adr_reg+adr_mod su obavezna kod svake instrukcije
Test pitanje 2.15
Stack orijentisana maina 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.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-20
Odgovor
Upravlja~kajedinica
SP
Aritmeti~ko-logi~kajedinica
Magacin
TOS
TOS - vrh magacina
. . .
. . .
a)program
Push WPush 3Push XPush YSubMulAddPop Z
a) Program za odredjivanje izraza i princip rada maine
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
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 izvrenja programa
Slika 2.26. Princip rada stack maine
Zadatak 2.13
Na stack maini sa Slike 2.17, izra~unava se izraz z := (4 * (a2 + b + c) - d)/(e + f * g). a) Odrediti odgovarajuu Polish notaciju po kojoj maina izra~unava vrednost izraza z.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-21
b) Kreirati odgovarajuu programsku sekvencu po kojoj maina odredjuje vrednost izraza z.
Odgovor Kod prevodjenja datog izraza iz infix notacije u odgavarajuu Polish notaciju vri se zamena a2 sa a*a, tako da se kona~no dobija sledei sufiks tip Polish notacije z 4 aa * b + c + * d - e f g * + / := (1) Postupak prevodjenja se izvodi rekurzivno zamenom infix izraza X op Y odgovarajuim Polish izrazom X Y op, gde op ozna~ava odgovarajui operator u tekuem izrazu.
Upravlja~kajedinica
SP
Aritmeti~ko-logi~kajedinica
Magacin
. . .
. . .
TOS
Slika. 2.17 : Osnovni princip rada stack maine
Postupak prevodjenja po~injemo prepisivanjem izraza Z := A u formi Z A := . Sada je A oblika B/C = BC/ tako da po~etni izraz dobija formu Z B C/ := . U konkretnom slu~aju C = e + D = e D + = e f g * +, tako da dobijamo delimi~no transformisani Polish Z B e f g * + / :=, gde je B = 4 * (a*a + b + c) - d. Istim na~inom rezonovanja mogue je transformisati formu B u 4 a a * b + c + * d -, pa shodno tome dobiti izraz definisan jedna~inom (1) b) Odgovarajua programska sekvenca je oblika: Push 4 Push a Push a Mul Push b Add Push c Add Mul Push d Sub Push e Push f Push g Mul Add Div Pop z
Test pitanje 2.16
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-22
Za svaki binarni broj prikazan u tabeli, popuniti odgovarajuu ekvivalentnu vrednost
kd binarni broj neozna~eni
binarni 8-bitni ozna~eni
binarni neparna parnost
ASCII BCD
10011000 152 -104 98 01100001 01110011 10000101 10010110
Test pitanje 2.17
Izvriti konverziju sledeih binarno ozna~enih brojeva u odgovarajue decimalne ekvivalente a) 1101 0001 b) 0101 0000 c) 1000 1111 0101 1101
Test pitanje 2.18
36-bitni FP broj ~ine 24-bitna mantisa plus bit znaka i 10-bitni eksponent plus bit znaka. Koji se najvei i najmanji normalizovani pozitivni brojevi razli~iti od nule mogu predstaviti pomou ovog formata.
Zadatak 2.14 Napisati sekvencu instrukcija kojom se za dato x izra~unava vrednost funkcije y=x+2x+3, koristei sledee adresne formate instrukcija: a) tro - adresni b) dvo- adresni c) jedno- adresni Usvojiti da hipoteti~ki procesor ima implementirano registarsko polje (RF polje) koga ~ine 32 registra R0-R31 sa izuzetkom slu~aja pod c). Odrediti broj instrukcija i pristupa memoriji za svaki od slu~ajeva.
Zadatak 2.15
Koristei tro-adresni format instrukcija napisati programske sekvence za ~itanje i upis u: a) magacin koji raste - nani`e b) magacin koji raste - navie c) red ~ekanja tipa FIFO d) red ~ekanja tipa LIFO Napomena: Koristiti skup naredbi hipoteti~kog procesora
Zadatak 2.16
Za dvo-adresni format instrukcija napisati procedure za ~itanje i upis u red ~ekanja tipa FIFO koristei: a) direktno adresiranje b) indirektno adresiranje c) relativno adresiranje Napomena: Koristiti skup naredbi hipoteti~kog procesora
Zadatak 2.17
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-23
Napisati procedure za izbacivanje i dodavanje elemenata u povezanoj listi. Usvojiti da svaki elemenat liste koristi dve memorijske re~i, jedna sadr`i vrednost podataka a druga adresu narednog elementa u listi. Koristiti samo tro-adresni format instrukcija za slu~ajeve kada se radi pristupa elementima liste koriste sledei na~ini adresiranja: a) direktno adresiranje b) indirektno adresiranje. Napomena: Koristiti skup naredbi hipoteti~kog procesora
Zadatak 2.18
Kreirati sekvencu instrukcija koja se koristi za izra~unavanje sume ∑=
100
1iii xa , gde A=[a1, a2,..., a100] i
X=[x1, x2,...,x100] predstavljaju vektori smeteni u glavnoj memoriji. Koristiti dvo-adresni format instrukcija za slu~ajeve kada se radi pristupa elementima vektora koriste sledei na~ini adresiranja: a) direktni b) relativni c) indeksni sa autoinkrementiranjem. Napomena: Koristiti skup naredbi hipoteti~kog procesora
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.20
Neka procesor 80x86 izvrava instrukcije u realnom na~inu rada. Ako su DS=0200h, BX=0300h i DI=400h, odrediti kojim se memorijskim adresama pristupa od strane sledeih instrukcija: a) Mov AL,[1234h] b) Mov EAX,[BX] c) Mov [DI],AL
Odgovor a) DS*10h+DISP=2000h+1234h=3234h b) DS*10h+BX=2000h+300h=2300h c) DS*10h+DI=2000h+400h=2400h
Test pitanje 2.21
Mikroprocesor 80x86 radi u realnom na~inu rada. Ako su DS=1100h, LIST EQU 250h, SI=500h i BX=200h, odrediti kojim se memorijskim adresama pristupa od strane sledeih instukcija: a) Mov LIST[SI],EDX b) Mov CL,LIST[BX+SI] c) Mov CH,[BX+SI]
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-24
Odgovor a) DS*10h+SI+LIST=11000h+0500h+0250h=11750h b) DS*10h+BX+SI+LIST=11000h+0200h+0500h+0250h=11950h c) DS*10h+BX+SI=11000h+0200h+0500h=11700h
Test pitanje 2.22
Na asemblerskom jeziku mikrora~unara 80x86 kreirati strukturu podataka pod nazivom POLJA. Strukturu ~ine pet polja svako obima 16-bitova. Polja su imenovana kao F1, F2, F3, F4 i F5 i inicijalizirana su na vrednosti 1, 2, 3, 4 i 5, respektivno. Kojom se instrukcijom dobavlja sadr`aj polja F3 u registar AX.
Odgovor POLJA STRUC ; kreiranje i inicijalizacija strukture F1 DW 1 F2 DW 2 F3 DW 3 F4 DW 4 F5 DW 5 POLJA ENDS Pristup podatku koji se ~uva u polju F3 vri se sledeom instrukcijom: Mov AX,OFFSET POLJA.F3
Test pitanje 2.23
Pet razli~itih segmenata egzistiraju u sistemu. Segmenti se koriste na sledei na~in: (a) isklju~ivo programski (kôdni); (b) ~uvaju se samo konstante; (c) namenjen je kao bafer za brze U/I operacije; (d) standardni segment podataka; (e) segment magacina. Za svaki od pomenutih segmenata definisati koja su prava pristupa dozvoljena a koja zabranjena.
Odgovor tip samo ~itanje samo izvrenje samo upis ~itanje + upis ~itanje + izvrenje (a) + (b) + (c) + (d) + (e) +
Test pitanje 2.24 Nakon izvrenja sledeih 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
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-25
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 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 01 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
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-26
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
Test pitanje 2.25
Ukazati u kratkim crtama na ulogu prefiksa 66h kojim se odre|uje obim operanda i prefiksa 67h kojim se odre|uje obim adrese kod mikroprocesora i386.
Odgovor Opkôd sledee dve instrukcije Mov EAX,[01h] i Mov AX,[01h] u oba slu~aja je isti i jednak je 10111000. Ipak mikroprocesor i386 pravi razliku izme|u ova dva opkôda samo na osnovu DB bita u deskriptoru kôdnog segmenta i prefiksa 66h kojim se ukazuje na obim operanda. Ako je DB bit u deskriptoru kôdnog segmenta postavljen na nulu, i386 standardno koristi 16-bitni razmetaj. Tada asembler na sledei na~in vri kodiranje : ispred opkôda instrukcije Mov EAX, [01h] ubacuje se prefiks 66h koji ukazuje na obim operanda, tako da se sada javljaju sledea dva slu~aja: (a1) Mov EAX,[01h] : 66 B8 00 01h (instrukcijom se prenosi 32-bitna vrednost sa ofset adrese o1h u 32-bitni akumulator EAX) (a2) Mov AX,[01h] : B8 00 01 (instrukcijom se prenosi 16-bitna vrednost sa ofset adrese 01h u 16-bitni akumulator AX) Kada je DB bit u odgovarajuem deskriptoru segmenta podataka postavljen na 1, tada i386 standardno koristi 32-bitni razmetaj kao standard, a asembler vri kodiranje na sledei na~in: ispred opkôda instrukcije ubacuje prefiks 66h koji ukazuje na obim operanda. Konkretnije imaemo sledea dva slu~aja: (b1) Mov EAX,[01h] : B8 00 01 (instrukcijom se prenosi 32-bitna vrednost sa ofset adrese 01h u 32-bitni akumulator EAX) (b2) Mov EAX, [01h] : 66 B8 00 01 (instrukcijom se prenosi 16-bitna vrednost sa ofset adrese 01h u 16-bitni akumulator AX) Na sli~an na~in prefiks 67h odre|uje obim adrese operanda kao na primer kod instrukcije Mov AX,mem16 i Mov EAX,mem32. Objanjenje je identi~no kao i za prefiks 66h.
Test pitanje 2.26
Neka je zadata sledea 16-bitna vrednost : 1010 1100 1110 0011. Koje operacije moraju da se obave od strane procesora 80x86 kako bi se: a) osam LS bitova postavilo na 1? b) prvih osam bitova 16-bitne vrednosti postavilo na 0? c) komplementirale vrednosti srednjih osam bitova? Napomena : Uzeti da je 16-bitna vrednost neposredna; Koristiti instrukcije procesora 80x86.
Odgovor a) Mov AX,#0ACD3h ; 1010110011100011 - binarno Or AL,#0FFh b) Mov AX,#0ACD3h And AH,#00h
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-27
c) Mov AX,#0ACD3h Rol AX,4 ; rotiraj ulevo za ~etiri mesta Xor AH,#0FFh ; komplementiraj AH Ror AX,4 ; rotiraj udesno za ~etiri mesta
Test pitanje 2.27
Ukazati na koji se na~in marker ZF mikroprocesora 80x86 koristi za implementaciju programskih petlji.
Odgovor Termin programska petlja (program loop) se odnosi na skup instrukcija ~ije se izvrenje ponavlja nekoliko puta. Na primer, da bi se sabralo pet bajtova podataka, neophodno je postaviti broja~ koji ~uva trag o tome koliko puta treba ponoviti programsku petlju. Svaki put kada se izvri sabiranje broja~ se dekrementira a marker ZF se testira. Kada broja~ dostigne vrednost 0 marker ZF se postavi (ZF=1) i izvrenje petlje stopira. Programska sekvenca kojom se obavlja specificirana aktivnost oblika je MOV CX,05 ; CX je broja~ MOV BX,0200h ; BX ~uva ofset adresu podatka MOV AL,00 ; inicijalizira se AL PONOVI: ADD AL,[BX] ; AL = AL + naredni bajt INC BX ; inkrementira se broja~ podataka DEC CX ; dekrementira se broja~ petlje JNZ PONOVI ; skok na narednu iteraciju ako broja~ nije nula
Test pitanje 2.28
Ukazati, odgovarajuim primerom, kako se u programu na asemblerskom jeziku mikroprocesora 80x86 definiu segmenti magacina, podataka i kôda.
Odgovor I pored toga to je mogue 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 sledei 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 definie se memorijski prostor za magacin, segmentom podataka definiu 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.
; forma programa na asemblerskom jeziku procesora 80x86 STEKSEG SEGMENT
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-28
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 rezervie 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 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 sutini, ~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 korieni. 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 direktivu PROC, a isti zaklju~ak va`i i za ENDS i SEGMENT (prethodi im ista labela KODSEG). Pseudo-instrukcijom END zavrava 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.
Test pitanje 2.29
Sledei program napisan na asemblerskom jeziku mikroprocesora 80x86 ima pet greaka. Ukazati koje su to. STEKSEG SEGMENT DB 100 DUP ( ?)
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-29
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 Pogrean kôd je ozna~en sa <***> shodno komentaru u prethodnoj liniji
Test pitanje 2.30
Tri koraka u procesu kreiranja izvrivih 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.asm 2. Asembliranje programa mojfajl.asm MASM mojfajl.obj 3. Linkovanje programa mojfajl.obj LINK mojfajl.exe
Slika 2.19 : Koraci u procesu kreiranja izvrivih 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.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-30
• MASM asembler konvertuje .asm fajlove (instrukcije na asemblerskom jeziku) u ".obj" fajlove (fajl na mainskom jeziku)
• pored kreiranja objektnog programa MASM kreira i ".lst" fajl (listing fajl). ".lst" fajl je opcioni i veoma koristan programeru jer on lista sve opkd i ofset adrese kao i sve greke koje detektuje MASM.
• MASM generie 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 vri obraanje.
• kada u programu postoji vei 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 zavrava i koliki je njegov obim u bajtovima.
• fajl sa ekstenzijom .exe je izvrivi 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 znakova. Tekst nakon pseudo instrukcije TITLE unosi programer i on na jedan bli`i na~in treba da opie (asocira) koja je namena programa i za ta se koristi.
ASEMBLER(program)
EDITOR
(program)
LINKER(program)
mojfajl.asm
mojfajl.crtdrugi.objfajlovi
mojfajl.map
mojfajl.exe
mojfajl.lst
Slika 2.20 Koraci u generisanju izvrivih programa
Zadatak 2.19
Stepen inteligencije pet testiranih studenata je sledei 82, 76, 73, 94 i 70. Napisati programsku sekvencu za odredjivanje najvieg stepena inteligencije.
Odgovor
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-31
TITLE TESTIRANJE 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 najviim JA NAREDNI ; skok ako je AL najvii MOV AL,BX ; AL ~uva novi najvii NAREDNI: INC BX ; uka`i na naredni koeficijent
LOOP PONOVI ; produ`i pretra`ivanje MOV NAJVISI,AL ; sa~uvaj najvii 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.
Odgovor TITLE KONVERZIJA U VELIKA SLOVA
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-32
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 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 vee 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 ; poveaj pokaziva~ po~etnog niza INC DI ; poveaj 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 smeten je u segmentu podataka po~ev od ofset adrese 0010h na sledei 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 Odgovarajui 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
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-33
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 vri 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 pokazuje na "nepakovane" BCD PONOVI: MOV AX,[BX] ; kopiraj dva naredna ASCII u AX AND AX,0F0Fh ; poniti 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 sledee: I pored toga to je podatak definisan direktivom DB, njemu se pristupa kao 16-bitnom. Alternativno reenje se zasniva na korienju PTR direktive MOV CX,5 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 reenje koje umesto dva pokaziva~a koristi jedan pokaziva~ kao to je sledee 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 ; poveaj pokaziva~ LOOP PONOVI Operandi kojima se pristupa su obima bajt. Za slu~aj da se pristupa operandima tipa re~ treba izvriti sledeu 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
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-34
Preko tastature se prihvataju dva ASCII kodirana broja 38h i 32h. Kreirati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se vri konvertovanje ASCII kodiranih brojeva u pakovani BCD format.
Odgovor Konverzija ASCII u pakovani BCD, vri se prvo konverzijom u nepakovani BCD a zatim njihovom kombinacijom se dobija pakovani BCD. Na primer kada se pritisnu dirke 8 i 2 tastatura generie kodove 38h i 32h, respektivno. Cilj je da se dobije 82h ili 10000010h koji se zove pakovani BCD broj. Programska sekvenca pomou 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 odgovarajui ASCII.
Odgovor Kod konverzije pakovanog BCD broja u odgovarajui ASCII, mora da se izvri prvo konverzija u nepakovani BCD a zatim u ASCII, shodno sledeem 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 bie oblika VRED_PBCD DB 29h VRED_ASC DW ? -------------- MOV AL,VRED_PBCD MOV AH,AL ; AL = AH, AL = 29 h, AH= 29h AND AX,0F00h ; maskiraj 9 od AH i 2 od AL MOV CL,4 ; pomeri udesno AH za nepakovani BCD SHL AH,CL OR AX,3030h ; kombinuj 30 da se dobije ASCII
XCHG AH,AL ; izvri konverziju radi LE formata MOV VRED_ASC,AX ; smesti ASCII
Zadatak 2.24
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-35
Napisati program, na asemblerskom jeziku mikroprocesora 80x86, kojim se vri sabiranje sledea dva broja BROJ1=52763198CD87h i BROJ2=3FC7DAB47BE8h. BROJ1, BROJ2 i SUMA su smeteni u segmentu podataka po~ev od ofset adresa 0010h, 0020h i 0030h, respektivno.
Odgovor TITLE PROGSAB SABIRANJE PAGE 80,100 SMAG SEGMENT DB 64 DUP (?) SMAG ENDS ;--------------------------------------------------------------------------------------------------------------- SPOD SEGMENT BROJ1 DQ 52763198CD87h ORG 0010h BROJ2 DQ 3FC7DAB47BE8h ORG 0020h SUMA DQ ? ORG 0030h SPOD ENDS ; ------------------------------------------------------------------------------------------------------------ SKOD SEGMENT SAB PROC FAR ASSUME CS:SKOD,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DX,AX CLC ; obrii prenos pre prvog sabiranja MOV SI,OFFSET BROJ1 ; SI pokazuje na BROJ1 MOV DI,OFFSET BROJ2 ; DI pokazuje na BROJ2 MOV BX,OFFSET SUMA ; BX pokazuje na SUMA MOV CX,4 ; CX je broja~ PONOVI: MOV AX,[SI] ; prvi operand u AX ADC AX,[DI] ; saberi drugi operand sa AX MOV [BX],AX ; smesti sumu ADD SI,2 ; inkrementiranje pokaziva~a ADD DI,2 ADD BX,2 LOOP PONOVI ; ako nije kraj produ`i MOV AH,4Ch INT 21h ; povratak na DOS SAB ENDP SKOD ENDS ENDS SAB
Test pitanje 2.31
Izvriti analizu sledee 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
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-36
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 pozajmljivanjem MOV WORD PTR RAZLIKA+2,AX ; smesti rezultat i odrediti kona~nu vrednost koja je smetena na lokaciji RAZLIKA.
Odgovor Nakon SUB, AX=62FA-963B=CCBF i CF=1. Kako je CF=1 kada se obavi SBB imaemo AX=625-412-1=212. Zbog toga vrednost smetena 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 kdnom segmentu SUB BL,BL ; BL = 0 ~uva broj jedinica MOV DL,8 ; broja~ rotacija MOV AL,POD1 PONOVI: ROL 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 zavren ponovi MOV BROJ,BL ; smesti broj jedinica u broj
Test pitanje 2.33
Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se broji broj jedinica u re~i. Broj jedinica zapamtiti u BCD formatu.
Odgovor ; u segmentu podataka POD2 DW B483h ; proizvoljno uzet broj BROJ2 DB ? ; u kodnom segmentu SUB AL,AL ; AL = 0 ~uva broj jedinica u BCD MOV DL,16 ; 16 rotiranja MOV BX,POD2 ; kopiraj operand u BX PONOVI: ROL BX,1 ; rotiraj jednu bit poziciju JNC NAREDNI ; proveri za 1, ako je CF = 0 ska~i ADD AL,1 ; ako je CF = 1 dodaj 1 broja~u DAA ; podesi broja~ za BCD NAREDNI: DEC DL ; prodji kroz sekvencu 16 puta JNZ PONOVI ; ako nije kraj ponovi MOV BROJ2,AL ; smesti broj jedinica u BROJ 2
Test pitanje 2.34
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-37
Da li sledee dve programske sekvence na asemblerskom jeziku mikroprocesora 80x86 imaju isti efekat? ; programska sekvenca 1 MOV BH,72h ROL BH,1 ROL BH,1 ROL BH,1 ROL BH,2 ; programska sekvenca 2 MOV BH,72h MOV CL,4 ROL BH,CL
Test pitanje 2.35
Da li su sledee dve programske sekvence na asemblerskom jeziku mikroprocesora 80x86 imaju isti efekat? ; programska sekvenca 1 CLC MOV AL,26h RCR AL,1 RCR AL,1 RCR AL,1 ; programska sekvenca 2 CLC MOV AL,26h MOV CL,3 RCR AL,CL
Test pitanje 2.36
Zato instrukcija "ROR BX,4" generie greku na asemblerskom jeziku mikroprocesora 80x86? Kako treba promeniti kd da bi se ona korektno izvrila tj. da bi se ostvario njen efekat?
Odgovor Mo`e samo ROR BX,1. Viestruko pomeranje se mo`e implementirati ako se instrukcija ponovi ~etiri puta ili ako se inicijalizuje registar CL na broj pomeranja, a zatim izvri instrukcija ROR BX,CL.
Test pitanje 2.37
Kakva e biti vrednost BX i CF nakon izvrenja sledeih sekvenci na asemblerskom jeziku mikroprocesora 80x86? a) MOV BX,672Ah MOV CL,3 ROL BX,CL b) STC MOV BX,37F1h MOV CL,5 RCR BX,CL c) CLC
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-38
MOV BX,191Ch MOV CL,5 RCL BX,CL d) SUB BX,BX STC RCR BX,1 STC RCR BX,1 e) MOV BX,0FFFFh MOV CL,5 CLC RCL BX,CL
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 najveem 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 (odgovara) jednom od ovih segmenata. Zadnjih godina novi metod segmenata je uveden (podr`avan) od strane Microsoft-ov MASM 5.0 i navie, Borland-ova TASM verzija 1 pa navie, i od strane drugih kompatibilnih asemblera. Ovaj metod se zove format sa pojednostavljenom definicijom, a njegova stutina se sastoji u tome to koristi tri jednostavne direktive: ".CODE", ".DATA" i ".STACK", koje odgovaraju registrima CS, DS i SS, respektivno. Koristei ove direktive korienje direktiva SEGMENT i ENDS ~ini nepotrebnim. U sutini pojednostavljena definicija segmenata je laka za razumevanje i korienje, 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 sledei memorijski modeli: • SMALL model - jedan od naj~ee korienih modela, koji koristi 64kB memorija za program i
64kB za podatke • MEDIUIM model - podaci moraju se smestiti u 64kB, a program mo`e biti vei od 64kB. • COMPACT model - suprotan je modelu MEDIUM, tj. program se mora smestiti u 64kB, a podaci
u prostor vei od 64kB. • LARGE model - kombinovanjem prethodna dva modela dobija se LARGE model, tj. i kôd i
podatke mogu biti vei od 64kB. Jedinstvena struktura podataka kao to je polje (vektor, matrica,...) ne sme da premai 64kB.
• HUGE model - program i podaci mogu da premae 64kB a takodje i jedinstvena struktura podataka mo`e biti vea 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 premai 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. ; potpuna definicija segmenata ; pojednostavljena definicija segmenata ; --------- segment magacina ---- .MODEL SMALL SMAG SEGMENT .STACK 64
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-39
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 ? .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 sledeem redosledu .STACK .DATA
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-40
.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 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 kojii koristi pojednostavljenu definiciju
segmenata u obrnutom redosledu
Test pitanje 2.39
Ukazati na osnovne razlike izmedju fajlova sa ekstenzijom .COM i ekstenzijom .EXE
Odgovor EXE fajlovi COM fajlovi
neograni~enog obima maksimalni obim 64kB segment magacina je definisan segment magacina nije definisan segment podataka je definisan segment podataka nije definisan po~etak kdnog i segmenta podataka se mo`e definisati na bilo koju adresu
po~etak kdnog segmenta i segmenta podataka je na ofset adresi 0100h
veliki fajlovi (zauzimaju mnogo memorije) mali fajlovi (zauzimaju malo memorije) svakom fajlu prethodi zaglavlje od 512 bajtova. Zaglavlje sadr`i informacije o obimu, lokacija adresa u memoriji, adresa magacina i dr.
ne sadr`i zaglavlje
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-41
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 viebajtnih pakovanih BCD i pamenje 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 ;------------------------------------------------------------------------------------------------------------ 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,10 ; CX je broja~ CALL KONV_BCD ; konverzija ASCII u BCD MOV BX,OFFSET POD2_ASC ; BX pokazuje na druge ASCII MOV DI,OFFSET POD4_BCD ; DI pokazuje na druge BCD MOV CX,10 ; CX je broja~ CALL KONV_BCD ; konverzija ASCII u BCD CALL BCD_SAB ; sabrati BCD operande MOV SI,OFFSET POD5_SAB ; SI pokazuje na BCD rezultat MOV DI,OFFSET POD6_ASC ; DI pokazuje 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 KONV_BCD PROC PONOVI: MOV AX,[BX] ; BX pokaziva~ ASCII podataka
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-42
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 RETG KONV_BCD ENDP ; ------------------------------------------------------------------------------------------------------ ; Potprogram za sabiranje dva viebajtna pakovana BCD operanda BCD_SAB PROC MOV BX,OFFSET POD3_BCD ; BX pokazuje na prvi operand MOV DI,OFFSET POD4_BCD ; DI pokazuje 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 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
Zadatak 2.26
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-43
Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za mno`enje dve ASCII cifre '7' i '5', a dvocifreni rezultat pretstaviti u ASCII kdu.
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'.
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
Test pitanje 2.40
(a) Koja od sledeih instrukcija na asemblerskom jeziku mikroprocesora 80x86 puni registar BX podatkom 1000h? (i) Mov [1000h],BX (ii) Mov BX,1000h (iii) Mov BX,[1000h] (iv) Add BX,1000h (b) Koja od navedenih instrukcija puni registar BX sadr`ajem memorijske lokacije 10000h?
Test pitanje 2.41
Odrediti sadr`aj registra AL nakon izvrenja sledee sekvence instrukcija na asemblerskom jeziku mikroprocesora 80x86: Mov BL,8Ch Mov AL,7Eh And AL,BL
Test pitanje 2.42
Sadr`aj memorije prikazan je na Slici. 2.25. Odrediti sadr`aje registara AX, BX i SP nakon izvrenja sledee sekvence instrukcija na asemblerskom jeziku mikroprocesora 80x86 MOV SP,0700h POP AX
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-44
POP BX
31
F0
D2
2C
89
37
24
0704
0703
0702
0701
0700
06FF
06FE
adrese memorija
Slika 2.25 : Sadr`aj memorije pre izvrenja sekvence
Test pitanje 2.43
Odrediti vrednost operanda nakon izvrenja svake od sledeih instrukcija na asemblerskom jeziku mikroprocesora 80x86: a) Inc BX b) Inc BYTE PTR[BX] c) Inc WORD PTR[BX] d) Inc DWORD PTR[BX] Za svaku od instrukcija neka je BX = 0600h, a sadr`aj memorije je prikazan na Slici 2.26.
POLJE PODATAKA
0608
0607
0606
0605
0604
0603
0602
47
BB
CA
59
13
F8
DB
27
F8
8
7
6
5
4
3
2
BROJ ELEMENTA
adrese memorija
Slika 2.26 : Sadr`aj memorije pre izvrenja instrukcije
Napomena: Da bi pristupio memorijskom operandu 80x86 koristi LE format.
Test pitanje 2.44
Neka mikroprocesor 386/486 izvrava naredbe In (ili Out) prikazane na Slici 2.27. Za svaku naredbu odrediti logi~ko stanje signala BE0, BE1, BE2 i BE3, kom se od portova pristupa i koje su linije za podatke aktivni.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-45
BE3 BE2 BE1 BE0 Instrukcija Pristupa se portovima
Magistrala podataka
1 1 1 0 In AL,0 0 D0 - D7 1 1 0 1 In AL,1 1 D8 - D15 1 0 1 1 In AL,2 2 D16 - D23 0 1 1 1 In AL,3 3 D24 - D31 1 1 0 0 In AX,0 0 i 1 D0 - D15 0 0 1 1 In AX,2 2 i 3 D16 - D31 0 0 0 0 In EAX,0 0,1,2 i 3 D0 - D31
Slika 2.27: Na~in pristupa mikroprocesoru 386/486 U/I prostoru u toku izvrenja naredbi In i Out Napomena: U rafiranom delu krije se odgovor
Zadatak 2.28
Za implementaciju formule
zx x x
01 2 32
2=
+ −
koristi se asemblerski programski jezik procesora 80x86, gde xl, x2 i x3 treba da su parne pozitivne celobrojne vrednosti u opsegu od 0 do 100. Rezultat z0 treba da bude takode pozitivna celobrojna vrednost. a) Napisati programsku sekvencu, u obliku potprograma, kojom se testira parnost vrednosti xl, x2 i x3. Ako su xl i x3 neparni brojevi ili z0 negativan broj, postaviti marker CPU-a ZF = 1. U slu~aju kada se nije detektovala greka izvrenje programa zavriti sa ZF =0. b) Napisati programsku sekvencu za izra~unavanje z0 prema formuli. c) Nacrtati dijagram toka algoritma. Napomena: (1) Kod reavanja zadatka, prvo dati dijagram toka algoritma na osnovu koga bi se sagledao princip rada programa i potprograma. (2) Kod kreiranja programa i potprograma koristiti potpunu definiciju segmenata.
Zadatak 2.29
U memoriji mikrora~unara zasnovanog na mikroprocesoru 80x86 smeten je vektor od n ASCII cifara po~ev od adrese ANIZ (n je paran broj). a) Algoritamski (pomou dijagrama toka) predstaviti konverziju vektora ANIZ u vektor pakovanih BCD cifara, koje se smetaju u memoriju po~ev od adrese BNIZ b) Napisati programsku sekvencu na asemblerskom jeziku pomou koje je mogue izvriti konverziju vektora od n ASCII cifara u vektor pakovanih BCD cifara. Du`ina vektora n ~uva se na lokaciji NAN. Po~etak programa je sa lokacije PROG. Kod kreiranja programa i potprograma koristiti potpunu definiciju segmenata. Napomena: dve ASCII cifre formiraju jednu pakovanu BCD cifru.
Zadatak 2.30
Odrediti broj bajt-lokacija ~iji je sadr`aj nula a koje se nalaze u tabeli po~ev od memorijske lokacije ALFA pa do ALFA+k-1, gde je k=256. Smestiti adrese lokacija ~iji je sadr`aj nula u novu tabelu koja po~inje sa lokacije BETA, gde je BETA=ALFA+k (adrese su 16-bitne). Program napisati na asemblerskom jeziku za mikroprocesor 80x86, koristei potpunu definiciju segmenata. Za segment magacina definisati prostor od 64 bajta. Po~etak programa je na adresi POC.
Zadatak 2.31
Za sistem zasnovan na mikroprocesoru 80x86 napisati programsku sekvencu na asemblerskom jeziku kojom se:
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-46
(a) Postavljaju na nulu memorijske lokacije po~ev od adrese ALFA do ALFA+63h. b) Popunjavaju lokacije: ALFA decimalnim brojem 0, ALFA+1 decimalnim brojem 1, ALFA+2 decimalnim brojem 2, itd., do lokacije ALFA+63h. Kod oba slu~aja, (a) i (b), za pristup memorijskim lokacijama od ALFA do ALFA+63h, koristiti registarsko direktno adresiranje.
Zadatak 2.32
Za sistem zasnovan na mikroprocesoru 80x86 napisati programsku sekvencu na asemblerskom jeziku kojom se: (a) Postavljaju na nulu memorijske lokacije po~ev od adrese ALFA do ALFA+63h. b) Popunjavaju lokacije: ALFA decimalnim brojem 0, ALFA+1 decimalnim brojem 2, ALFA+2 decimalnim brojem 4, itd., do lokacije ALFA+63h, koja se puni brojem 126. Kod oba slu~aja, (a) i (b), za pristup memorijskim lokacijama od ALFA do ALFA+63h, koristiti memorijsko indirektno adresiranje.
Zadatak 2.33
Sistem prikazan na Slici 2.28 koristi se za pobudu desetocifarskog, multipleksiranog, sedmo-segmentnog displeja. U memoriji 8-bitnog hipoteti~kog ra~unara po~ev od lokacije DISP, smeteno je pet BCD pakovanih cifara na sukcesivnim lokacijama. Adresa osmobitnog le~a u koji se upisuje podatak za pobudu dekodera/drajvera je LEC_A. Napisati programsku sekvencu u obliku potprograma PP1 za pobudu displeja sa Slike 2.28, shodno dijagramu toka sa Slike 2.29. U toku pisanja programa pridr`avati se sledeih sugestija: • Registar R1 koristiti kao promenljivu BROJAC. • Informaciju o trajanju pobude svakog segmenta, ~uvati na lokaciji VREME. • Sadr`aj lokacije VREME napuniti u registar R2. • Potprogram PP1 po~eti sa lokacije POC. • Koristiti dvoadresni format instrukcija. • ACC je akumulator; • R1 i R2 su registri opte namene hipoteti~kog ra~unara; • SP je pokaziva~ magacina.
DR
DK
10 –cifr.7-segm.
LEDdisplej
MS
LS
8-bitnile~
4
4
8
cifra 0cifra 9
segmentno-drajverske linije
. . .
.
.
.
Slika 2.28 : Principijelna ema povezivanja LED displeja
Napomena: DR - BCD u sedmosegmentni dekoder/drajver; DR - dekoder “1 od 10”
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-47
Magacin<-ACCBROJAC:=0
PP1
BROJACneparan ?
[ift ACC u levo za4 mesta
DISP:=DISP+1
DA
ACC:=ACC OR BROJAC
LEC_A:=ACC
BROJAC > 10 ?
ACC<-Magacin
Return
DA
DA
R1=R1-1
ACC<-M[DISP]R1:= VREME
R1=0 ?
BROJAC:= BROJAC+1
Slika 2.29 : Dijagram toka algoritma za pobudu 10-cifarskog decimalnog broja na
multipleksiranom 7-segmentnom displeju
Zadatak 2.34
Logi~ka operacija Xor se koristi kod ifrovanja podataka. Naime, ako se obavi Xor operacija nad svakim elementom niza VEKTOR ~ija je po~etna adresa ALFA, sa klju~em, dobie se rezultantni ifrovani niz REZNIZ koga treba smestiti po~ev od adrese BETA. Niz VEKTOR ~ini N elemenata tipa bajt. a) Ako su svi elementi niza VEKTOR inicirani na vrednost 55h, a klju~ ima vrednost 0AAh,
pokazati koja e rezultantna vrednost biti upisana u svaku lokaciju REZNIZ-a. b) Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom e se
ifrovani podaci smetati na lokacije REZNIZ c) Kakav treba da bude klju~ i koja operacija treba da se obavi da bi se ifrovani podaci REZNIZ-
a dobili u izvornom obliku (tj. kao deifrovani). Program napisati kao FAR proceduru korienjem potpune definicije segmenata. Segment podataka nazvati PODACI, segment magacina - MAGACIN, a programski segment - PROGRAM. Za segment magacina rezervisati prostor od 64 bajta. Na kraju procedure predvideti povratak u DOS sledeom sekvencom: Mov AH,4Ch Int 21h
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-48
Zadatak 2.35
U segmentu podataka smeten je niz nazvan SIMA koga ~ini 100 elemenata. Svaki element niza SIMA je tipa zapis i obima je 20 bajtova. Formirati novi niz nazvan OSAM koga ~ini osmi bajt svakog elementa (zapisa). Program za kreiranje niza OSAM napisati na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR. Na kraju potprograma, izvrenjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.
Zadatak 2.36
Neka su data dva vektora VEK1 i VEK2, jednakih du`ina N = 256. Elementi vektora su ozna~ene 16-bitne vrednosti. Kompariranjem i-tih elemenata oba vektora (i = 0, ..., 255), pronai sve elemente koji se medjusobno razlikuju, a njihov broj upisati kao prvi elemenat novog vektora RAZL. Svaki sledei elemenat vektora RAZL sadr`i po tri 16-bitne re~i sa sledeim zna~enjem: redosledni broj elementa koji se razlikuje, srednja vrednost zbira - i, srednja vrednost razlike odgovarajuih elemenata VEK1 i VEK2. Program za kreiranje niza RAZL napisati na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR. Na kraju potprograma, izvrenjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.
Zadatak 2.37
Data su dva niza NIZX i NIZY jednakih du`ina, svaki od n (n<100) 16-bitnih elemenata. Elementi nizova NIZX i NIZY smeteni su u memoriji na sledei na~in: X(1), X(2), ..., X(n), Y(1), Y(2), ..., Y(n). Podatak o du`ini niza n ~uva se na lokaciji DUZINA. Napisati program na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR, koji se koristi za izra~unavanje sledeeg izraza:
( )∑=
−=∆N
1i
2i
2i yxxy
Rezultat xy∆ smestiti na lokaciju RAZLIKA kao 32-bitni broj. Na kraju potprograma, izvrenjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.
Test pitanje 2.45
[ta su moduli?
Odgovor ^esta je praksa kada se pie 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 veeg broja programera. Prednsoti ovakvog pristupa su sledee: (1) svaki modul se mo`e pisati, debagirati i testirati nezavisno od ostalih,
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-49
(2) greke u jednom modulu ne dovode do blokiranja celog projekta, (3) mogue je koristiti module radi povezivanja (linkovanja) sa viim programskim jezicima kakvi su C, Pascal i drugi, (4) paralelni rad veeg broja programera na kreiranju razli~itih modula skrauje ukupno vreme razvoja programa. Nae dosadanje iskustvo, strategija i saznanje u pisanju programa je bila sledea: Program je bio kreiran od glavne procedure koja je u toku svog izvrenja pozivala vei broj drugih potprograma. Ako se jedan od potprograma ne bi izvrio korektno tada je bilo neophodno ceo program ponovo napisati i reasemblirati. Efikasniji pristup u razvoju softvera bio bi sledei: 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 izvriti njihovo povezivanje (linkovati ih) tako da oni ~ine jedinstvenu celinu (program). Mogunost povezivanja modula ostvaruje se zahvaljujui korienju odredjenih asemblersko jezi~kih direktiva. Direktive koje se naj~ee koriste za ove potrebe su EXTRN (external) i PUBLIC. Direktiva EXTRN se koristi da uka`e asembleru i linkeru da odredjena imena i promenljive nisu definisane u tekuem modulu nego su definisana na drugo mesto, tj. ona su eksterna. Za slu~aj da se direktiva EXTRN ne koristi (ne specificira), asembler nee biti u stanju da odredi gde su ova imena definisana pa e zbog toga generisati greku. Format direktive EXTRN je sledei:
EXTRN ime_1: tip ; svako ime mo`e biti u posebnoj EXTRN EXTRN ime_2: tip EXTRN ime_3: tip, ime_4:tip ; vei 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 vee). Imenovani podaci mogu biti sledeeg tipa: BYTE, WORD, DWORD, FWORD, QWORD ili TWORD. Ona imena ili parametri definisani kao EXTRN (definisani kao spoljni u odnosu na tekui modul) moraju da se definiu kao PUBLIC u modulu gde su definisani. Definisanjem imena kao PUBLIC dozvoljava asembleru i linkeru da obavi uparivanje sa odgovarajuom definicijom koja se odnosi na EXTRN. Format direktive PUBLIC je sledei:
PUBLIC ime_1 ; svako ime mo`e biti u posebnoj direktivi PUBLIC ime_2 PUBLIC ime_3, ime_4 ; vie 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 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
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-50
PUBLIC PP_1 PROG_SEG1 SEGMENT PP_1 PROC FAR ASSUME CS:PROG_SEG1 .... Ret PP_1 Endp PROG_SEG1 Ends End ; trei 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 sledee: (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 vri povezivanje modula?
Odgovor Neka je svaki od programskih modula sa Slike 2.30 (test pitanje 2.45) bio asembliran zasebno i zapamen kao fajl pod sledeim imenom: PROG_1.OBJ, PP_1.OBJ i PP_2.OBJ, respektivno. Njihovo povezivanje (linkovanje) pomou makroasemblera MASM, sa ciljem da se dobije (generie) jedinstveni izvrivi kd, se vri izdavanjem sledee naredbe
C > LINK PROG_1.OBJ + PP_1.OBJ + PP_2.OBJ
Analizirajmo sada jedan program, prikazan na sl. 2.31 a) koji se koristi za: (a) sabiranje dve re~i, i (b) mno`enje dve re~i Svaku od nabrojanih aktivnosti obavlja poseban modul. Podaci su definisani u glavnom modulu dok moduli za sabiranje i mno`enje nemaju svoje segmente podataka.
TITLE PROG_1 Ukazuje na modularno programiranje PAGE 60,132 EXTRN PP_1:FAR EXTRN PP_2:FAR PUBLIC VR1,VR2,ZBIR,PROIZ ; segment magacina SMAG SEGMENT DB 100 DUP (?) SMAG Ends ; segment podataka SPOD SEGMENT
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-51
VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP (?) PROIZ DW 2 DUP (?) SPOD Ends ; kodni segment PR_SEG0 SEGMENT GLAVNI PROC FAR ASSUME CS:PR_SEG0,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX Call PP_1 ; poziv potprograma za sabiranje Call PP_2 ; poziv potprograma za mno`enje Mov AH,4Ch Int 21h ; povratak na DOS GLAVNI Endp PR_SEG0 Ends End GLAVNI ; ************* a) Modul GLAVNI *************** ; program za odredjivanje sume dve eksterno definisane re~i i ; smetaj sume u lokaciji definisana od strane pozivnog programa TITLE PP_1 Program za sabiranje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN ZBIR:WORD PUBLIC PP_1 PR_SEG1 SEGMENT PP_1 PROC FAR ASSUME CS:PR_SEG1 Sub BX,BX ; inicijaliziraj broja~ prenosa Mov AX,VR1 Mov DX,VR2 Add AX,DX ; VR1 + VR2 Adc BX,00 ; akumuliraj prenos Mov ZBIR,AX ; sa~uvaj sumu Mov ZBIR+2,BX ; sa~uvaj prenos Ret PP_1 Endp PR_SEG1 Ends End ; *****************b) Modul za sabiranje ****************** ; program za odredjivanje proizvoda dve eksterno definisane re~i i smetanje ; proizvoda u lokaciji definisanoj od strane pozivnog programa TITLE PP_2 Program za mno`enje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-52
PUBLIC PP_1 PR_SEG2 SEGMENT PP_2 PROC FAR ASSUME CS:PR_SEG2 Mov AX,VR1 Mov CX,VR2 Mul CX ; VR1 * VR2 Mov PROIZ,AX ; memorii proizvod LS deo Mov PROZ+2,DX ; memorii proizvod MS deo Ret PP_2 Endp Pr_SEG2 Ends End ; *****************c) Modul za mno`enje *******************
Slika 2.31 : Program koga ~ine modul GLAVNI i moduli za sabiranje PP_1 i mno`enje PP_2
Analizom programa sa Slike 2.31 mo`emo da zaklju~imo sledee: (1) u modulu GLAVNI svaki od oba potprograma je deklarisan direktivom EXTRN to ukazuje da su ove procedure definisane u drugom fajlu. Eksterni potprogrami su pri ovome definisani kao FAR. (2) u fajlovima gde je definisan svaki potprogram, isti je deklarisan kao PUBLIC, tako da ga i drugi programi mogu pozivati. (3) u modulu GLAVNI imena VR1, VR2, ZBIR i PROIZ su definisana ka PUBLIC tako da i drugi programi mogu da pristupaju ovim podacima. U ostalim potprogramima ovi podaci se deklariu kao EXTRN. (4) povezivanje (linkovanje) sva tri programa vri se na sledei na~in
C > LINK GLAVNI .OBJ + PP_1. OBJ + PP_2.OBJ
Linker je taj koji reava sve probleme koji se odnose na uskladjivanja imena tipa PUBLIC i EXTRN.
Test pitanje 2.47
Kako se definie direktiva SEGMENT?
Odgovor U dosadanjoj analizi u toku definisanja segmenta nismo pominjali druge atribute koji prate ovu direktivu, nego smo samo koristili :
ime SEGMENT
Ovaj na~in definicije segmenta je prihvatljiv kada postoji samo po jedan segment za kd, podatke i magacin. Ali u slu~aju kada postoji vei broj modula koji se povezuju zajedno, neophodno je uskladiti i odgovarajuu definiciju segmenata. Kada se govori o modularnom programiranju potpuna definicija segmenta se vri na sledei na~in:
ime SEGMENT poravnanje tip_koji_se_kombinuje ime_klase
Uvedena polja imaju sledee zna~enje: • poravnanje - ukazuje da li granica segmenta po~inje na adresi tipa bajt, re~, paragraf ili
stranica. Ako se druga~ije ne nazna~i inicijalno (by default) se dodeljuje poravnanje tipa PARA, to zna~i da je po~etna granica segmenta odredjena paragrafom (Kod DOS-a paragraf se definie kao 16 bajtova, tj. svaki segment po~inje na 16-bajtnoj granici).
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-53
• tip_koji_se_kombinuje - ukazuje linkeru da li segmente istog tipa treba povezati zajedno ili ne. Tipi~ne opcije su STACK ili PUBLIC. Ako je tip_koji_se_kombinuje tipa PUBLIC linker e kombinovati taj segment sa drugim segmentima istog tipa u ostalim modulima. To zna~i da je mogue kombinovati vei broj kôdnih segmenata sa razli~itim imenima u kôdni: segment koji ima jedinstveno ime.
• ime_klase - postoje sledee ~etiri opcije: 'CODE', 'STACK', 'DATA' i 'EXTRA' koje su uokvirene jednostrukim navodnicama. Koristi se za kombinovanje segmenata istog tipa koji pripadaju razli~itim modulima.
Definicija segmenta magacina u modulu GLAVNI kojom se eliminiu upozorenja od strane linkera da segment nije definisan je oblika
ime SEGMENT PARA STACK 'STACK' Ako u drugim modulima segment podataka nije definisan tada se koristi sledea definicija
ime SEGMENT PARA 'DATA' Ako je segment podataka definisan u nekom drugom modulu tada direktiva PUBLIC treba da se nalazi izmedju PARA i 'DATA'. Sledeim definicijama segmenata kombinuju se segmenti podataka i kôda iz razli~itih modula
ime SEGMENT PARA PUBLIC 'CODE' ime SEGMENT PARA PUBLIC 'DATA'
Treba naglasiti da kada se kombinuju razli~iti segmenti iz razli~itih modula u jedinstveni segment, tada imena segmenata moraju biti takodje jedinstvena. Kod programa prikazanog na Slici 2.32 vri se potpuno nova definicija svih segmenata u poredjenju sa programom prikazan na Slici. 2.31 (Kodni segmenti nisu tipa PUBLIC). TITLE PROG_2 Isti kao PROG_1 ali sa potpunom definicijom segmenata PAGE 60,132 EXTRN PP_1:FAR EXTRN PP_2:FAR PUBLIC VR1,VR2,ZBIR,PROIZ ; segment magacina SMAG SEGMENT PARA STACK 'STACK' DB 100 DUP (?) SMAG Ends ; segment podataka SPOD SEGMENT PARA 'DATA' VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP(?) PROIZ DW 2 DUP(?) SPOD Ends ; kodni segment PR_SEG0 SEGMENT PARA 'CODE' GLAVNI PROC FAR ASSUME CS:PR_SEG0,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DX,AX Call PP_1 ; poziv potprograma Sabiranje Call PP_2 ; poziv potporgrama mno`enje Mov AH,4Ch GLAVNI Endp PR_SEG0 Ends
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-54
End GLAVNI ; ***************a) Modul GLAVNI *************** ; ovaj program izra~unava zbir dve spoljno definisane re~i i smeta sumu na lokaciji ; koju definie pozivni program TITLE PP_1 Program za sabiranje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN ZBIR:WORD PUBLIC PP_1 PR_SEG1 SEGMENT PARA 'CODE' PP_1 PROC FAR ASSUME CS:PP_1 Sub BX,BX Mov AX,VR1 Mov DX,VR2 Add AX,DX Adc BX,00 Mov ZBIR,AX Mov ZBIR+2,BX Ret PP_1 Endp PR_SEG1 Ends End ; ******************b) Modul Sabiranje **************** ; ovaj program izra~unava proizvod dve eksterno definisane re~i i smeta proizvod na ; lokaciji koju definie pozivni program TITLE PP_2 Program za mno`enje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD PUBLIC PP_2 PR_SEG2 SEGMENT PARA 'CODE' PP_2 PROC FAR ASSUME CS:PR_SEG2 Mov AX,VR1 Mov CX,VR2 Mul CX Mov PROIZ,AX Mov PROIZ+2,DX Ret PP_2 Endp PR_SEG2 Ends End ; ****************c) Modul Mno`enje*****************
Start Stop Length Name Class 00000h 00063h 00064h SMAG STACK
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-55
00070h 0007Bh 0000Ch SPOD DATA 00080h 00092h 00013h PR_SEG0 CODE 000A0h 000B5h 00016h PR_SEG1 CODE 000C0h 000D0h 00011h PR_SEG2 CODE
d) memorijska mapa
Slika 2.32 : Program kod koga su segmenti potpuno definisani
Na Slici 2.32 d) prikazana je mapa memorije koja se odnosi na po~etak i kraj svakog od segmenata nakon obavljenog linkovanja. Uo~imo da je po~etak svakog segmenta definisan 16-bitnom granicom : 00070h, 00080h,... . Kôdni segmenti PR_SEG0, PR_SEG1 i PR_SEG2 su odvojeni, a njihovi po~eci na 16-bajtnim granicama definisani su sa PARA. Kôdni segmenti se mogu spojiti u jedinstveni koristei opciju PUBLIC. Spajanje kôdnih segmenata je mogue pod uslovom da svi oni imaju jedinstveno ime u budu deklarisani kao PUBLIC. Memorijska mapa koja se dobija u tom slu~aju za program sa Slike 2.32, imae sledei oblik
Start Stop Length Name Class 00000h 00063h 00064h SMAG STACK 00070h 0007Bh 0000Ch SPOD DATA 00080h 000D0h 00051h PR_SEG0 CODE
Ve smo ranije ukazali da se kod makro asemblera Microsofta MASM 5.0 pa navie, i Borlanda TASM verzija 1 pa navie umesto potpune definicije setgmenata ~ee koristi pojednostavljena definicija segmenata. U tom slu~aju modularan program sa Slike 2.32 imae oblik kao na Slici 2.33. TITLE PROG_3 Isti kao PROG_2 ali sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL .STACK 64 .DATA PUBLIC VR1,VR2,ZBIR,PROIZ VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP(?) PROIZ DW 2 DUP(?) ; program .CODE EXTRN PP_1:NEAR EXTRN PP_2:NEAR GLAVNI Mov AX,#DATA Mov DS,AX Call PP_1 Call PP_2 Mov AH,4Ch Int 21h End GLAVNI ; ****************a) modul GLAVNI *************** TITLE PP_1 Program za sabiranje sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL EXTRN VR1:WORD EXTRN VR2:WORD
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-56
EXTRN ZBIR:WORD .CODE PUBLIC PP_1 PP_1 PROC NEAR Sub BX,BX Mov AX,VR1 Mov DX,VR2 Add AX,DX Adc BX,00 Mov ZBIR,AX Mov ZBIR+2,BX Ret PP_1 Endp End ; **********************b) modul Sabiranje ******************** TITLE PR_2 Program za mno`enje sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD .CODE PUBLIC PP_2 PP_2 PROC NEAR Mov AX,VR1 Mov CX,VR2 Mul CX Mov PROIZ,AX Mov PROZ+2,DX Ret PP_2 Endp End ; *******************c) modul za Mno`enje ****************
Slika 2.33 : Modularni program koji koristi pojednostavljenu definiciju segmenata
Test pitanje 2.48
Kako se vri 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~ee prenos parametara izmedju modula vri se preko registara, memorije ili magacina. 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, smeta ih u memoriji, a zatim poziva rutinu za konverziju broja u binarni. Kona~no rezultat smeta u memoriji. Registri BX i SI se koriste da ukazuju na odredjene podatke pre nego to se modul pozove a pozvani modul smeta rezultat u registar AX pre nego to se izvri povratak iz pozvane rutine u pozivnu.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-57
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 PETO CIFARSKI BROJ', '$' DESET DW 10 SPOD Ends ; segment programa SPROG SEGMENT EXTRN ASC2B_KON:FAR ; konverzija ASCII u binarni GLAVNI PROC FAR ASSUME CS:SPROG,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX ; prikazivanje poruke (PROMPT) Mov AH, 09 ; prenos parametra preko Mov DX, OFFSET PORUKA ; registara 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 potprograma 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. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-58
Naj~ee prenos parametara se vri 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 sledeeg razloga: Kada se modul pozove, u magacin se smeta 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 smeta ih u magacin, a zatim poziva potprogram. Potprogram dobavlja podatke iz magacina, sabira ih, smeta rezultat u registar, i obavlja povratak u pozivni program. Glavni program memorie 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 ; smetaj parametara u magacin Push VR2 Push VR1 Call PP_6 ; poziv potprograma Mov REZ,AX ; smetaj 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
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-59
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 izvrenja 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.49
Kako se vri kombinovanje programa na asemblerskom jeziku i programskom jeziku C?
Odgovor I pored toga to se programi napisani na asemblerskom jeziku za dati procesor najbr`e izvravaju oni nisu univerzalni iz prostog razloga to se asemblerski jezici od jednog procesora do drugog razlikuju. Na primer, asemblerski jezik za Intelove proceosre iz familije 80x86 razlikuje se od asemblerskog jezika za Motoroline procesore iz familije 680xx. Daleko bolje reenje je ono koje bi koristilo neki univerzalni programski jezik jer bi takvo reenje obezbedjivalo prenosivost programa sa jedne maine na drugu. Na`alost takav jezik do dana dananjeg ne postoji. Ali programski jezik
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-60
C zadnje dve decenije ~ini se da postaje sve vie univerzalni jezik za veliki broj procesora. Ilustracije radi veliki broj programa za PC maine, radne stranice zasnovane na procesorima iz familije Motorola MC 680xx, i mnogo drugih maina napisan je na jeziku C. U sutini C je univerzalni programski jezik koji sa neznatnom izmenom ili skoro bez modifikacije mo`e da se izvrava na bilo kojem procesoru. Program napisan na C-u treba samo rekompajlirati za dati procesor. Imajui u vidu da je C prenosivi jezik on sve vie postaje dominantan jezik posebno kod aplikacija koje se odnose na rad u realnom vremenu. Danas ~esto se sreemo sa sledeom situacijom: Oko 70% do 80% od nekih programa je napisan na C-u a ostatak na asemblerskom jeziku. Postoje dva na~ina za umetanje kôda napisanog na asemblerskom jeziku u C-u. Prva metoda se naziva in-line asembliranje, a kod druge iskaz u C poziva external asemblerski jezik.
Test pitanje 2.50
Kako se vri umetanje 80x86 asemlerskog kôda u program na C-u?
Odgovor Sagledaemo sada metod in-line koji se koristi kod Borland-ovog Turbo C (Microsoftov C takodje koristi in-line metod koji je sli~an Borlandovom, ali ranije verzije C-a ne podr`avaju ovaj metod). Analiziraemo sledeu sekvencu: Kako u programu napisanom na C-u izvriti postavljanje kursora na poziciji vrsta = 20 i kolona = 30. Kada je u pitanju Borlandov C tada ispred svake asemblerske instrukcije stoji prefiks "asm" koji predstavlja rezervisana re~ (Microsoft-ov C koristi rezervisanu re~ "_asm"). Dve verzije Borlandovog formata za in-line asembliranje oblika su: /*verzija 1 : koristi klju~nu re~ asm pre svake linije u in-line kodu */ main () asm mov ah, 2; /*svaka linija zavrava sa ";" ili <CR>*/ asm mov bh, 0; asm mov dl, 20 /* komentar mora da ima C-ov a ne ";" asemblerski stil */ asm mov dh, 10; asm int 10h; /* verzija 2 : koristi kljuj~nu re~ asm pre bloka in-line koda */ main () asm mov ah, 2 mov bh, 0 mov dl, 20 mov dh, 10 int 10h
Sledea dva programa prikazuju kako se vri prikaz niza podataka. Primer_1 je napisan strogo na C-u. Kod Primer_2 koristi se kombinacija Borlandovog Turbo C-a i asemblerskog kôda. Uo~imo da se kod kombinovanja C-a i asemblera asemblerske direktive tipa OFFSET (kao kod instrukcije Mov DX, OFFSET PORUKA) ne prepoznaju od strane C-a.
Primer_1 : Program na jeziku C
# include <stdio.h> main() printf ("Student Mika. \n");
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-61
Primer_2 : Turbo C sa in-line asembliranjem
char const *PORUKA = "Student Mika. \"$"; main () asm mov ah, 9; asm mov dx, PORUKA; asm int 21h;
Sledea programska sekvenca prikazuje takodje in-line asembliranje. In-line kd postavlja kursor na poziciji definisanoj sa vrsta = 15 i kolona = 30, a zatim prikazuje niz podataka koristei kombinaciju Borlandovog C-a i asemblera. main () int const vrsta = 15; int const kolona = 30; char const *PORUKA = Student Mika. \n $"; asm mov ah, 2 mov bh, 0 mov dl, kolona mov dh, vrsta int 10 h /* postavi kursor na poziciju */ mov ah, 09 mov dx, PORUKA int 21 h /* prika`i poruku */
Test pitanje 2.51
Kako C program poziva asemblerske procedure?
Odgovor I pored toga to je in-line asembliranje jednostavno u praksi se ~esto koristi sledei pristup: Kreiraju se potprogrami na asmblerskom jeziku a zatim se oni pozivaju iz C-a isto kao i funkcije C-a. (Treba ukazati da termin funkcija koji se koristi u C-u ima isto zna~enje kao termin procedura (ili potprogram) u asemblerskom jeziku). Ali pre nego to se po~ne sa pisanjem rutina na asemblerskom jeziku koje e se koristiti od strane C-a neophodno je prvo da se razume tehnika koja se odnosi na na~in prenosa parametara iz C-a u asemblerski jezik. Kod svih viih programskih jezika kakvi su C, Fortran, Pascal i dr. prenos parametara potprogramima (funkcijama) vri se preko magacina. Neki od kompilatora, kakvi su Pascal i C, prenose parametre po vrednosti, dok kod drugih kompilatora (kakvi su Fortran, Basic) predaju se adrese vrednosti. Tako na primer, kod Basic-a predaje se samo ofset adresa, dok se kod Fortrana predaju kako adresa segmenta tako i ofset adresa. Termin konvencija poziva (calling convention) se odnosi na tehniku kojom jezik predaje parametre potprogramu u trenutku kada ga pozove. U daljem tekstu analiziraemo konvenciju poziva koju koristi programski jezik C.
Test pitanje 2.52
Koje se konvencije poziva koriste kod C-a?
Odgovor
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-62
Konvencija poziva kod C-a koja se koristi za kombinovanje C-a sa MASM asemblerskim jezikom bie ilustrovana na primeru prikazanom na Slici 2.37. Za slu~aj da je pre poziva procedure _KURSOR, pokaziva~ magacina SP ukazivao na adresu 198Ch tada sadr`aj magacina u toku izvrenja ovog potprograma imae oblik kao na Slici 2.38.
extrn kursor (int, int), main () kursor (15, 12); printf ("Ovaj program postavlja kursor"); ; kursor.asm .MODEL SMALL .CODE PUBLIC _KURSOR ; ova procedura je pisana sa ciljem da se pozove iz C-a _KURSOR PROC Push BP ; sa~uvaj vrednost BP-a Mov BP, SP ; koristi BP kao indeks magacina Mov DH, [BP + 4] ; dobavi x = vrsta iz magacina Mov DL, [BP + 6] ; dobavi y = kolona iz magacina Mov AH, 02 ; postavi registar za poziv Int Int 10h Pop BP ; obnovi sadr`aj BP-a Ret _KURSOR Endp
Slika 2.37 : Poziv procedure napisana na asemblerskom jeziku iz C-a
000C
000F
IP
BP
Adrese198C198B198A19891988198719861985198419831982
BP+6 ~uva vrednosty=12=0Ch
BP+4 ~uva vrednostx=15=0Fh
BP+2 ~uva adresupovratka
SP=BP
Slika 2.38 : Sadr`aj magacina
Procedura na asemblerskom jeziku koja se poziva iz C-a mora da potuje sledea pravila: (1) Parametri se predaju po vrednostima u obrnutom redosledu od onog kako je nazna~eno. Na primer, funkcija prog(x,y,z) prvo predaje z, zatim y, a na kraju x. (2) Nakon to su parametri predati u magacin se smeta par CS : IP. Ako je C kompajliran u SMALL ili COMPACT memorijski modul (ili ako je procedura NEAR) tada se smeta samo IP. Ako je C kompajliran za MEDIUM, LARGE ili HUGE (ili je procedura FAR) tada se u magacin smetaju CS i IP (prvo CS a zatim IP). (3) U magacin se smeta BP a zatim se parametrima pristupa preko registra BP uz korienje odgovarajueg razmetaja. U daljem toku rada BP ~uva ofset u odnosu na segmentni registar SS. (4) Zadnja instrukcija treba da je Ret sa brojem kao operand, jer je posao C-a da vrati magacin u po~etno stanje a tako|e i pozivnom kdu vrati upravljanje.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-63
(5) Ispred bilo kog imena deklarisanog kao "PUBLIC" mora da stoji "_" (kao na primer _KURSOR). Samo prva osam slova imena se prepoznaju, ostala se zanemaruju. (6) Kada C prenosi parametre o podacima tipa polja tada se ti podaci ne prenose po vrednostima nego kao pokaziva~i adresa (by reference). (7) Ako je C kompajliran u MEDIUM, HUGE ili LARGE modelu, tada se za procedure na asemblerskom jeziku koristi opcija FAR, a ako je kompajliran sa SMALL modelom tada se za procedure na asemblerskom jeziku koristi opcija NEAR. Analizirajmo sada kako izgleda kd procedure cursor (x,y) gde su x i y vrednosti vrste i kolone respektivno, napisana na asemblerskom jeziku da bi bila pozvana od strane C-a. Specifi~nost procedure je ta to se i sadr`aji registara AX, BX i CX smetaju u magacin. Sadr`aj magacina u toku izvrenja pozvane procedure prikazan je na Slici 2.39 b). .MODEL SMALL .CODE PUBLIC _KURSOR ; ova procedura je pisana da bude pozvana iz C-a _KURSOR PROC Push BP ; BP u magacin Mov BP, SP Push AX ; smesti registre ~iji se sadr`aj Push DX ; menja u toku izvrenja ovog modula Push BX ; u magacin Mov DH, [BP + 4] ; x = vrsta smesti u DH Mov DL, [BP + 6] ; y = kolona smesti u DH Mov AH, 02 ; postavi uslove za poziv Int Int 10h Pop BX ; obnovi sadr`aj registra Pop DX Pop AX Pop BP Ret _KURSOR Endp End ; **************a) procedura _KURSOR ***************
000C
000F
IP
BP
AHAL
DHDL
BHBL
200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF4
BP+6 ~uva vrednost y=12
BP+4 ~uva vrednost x=15
BP+2 ~uva adresu povratka
SP=BP
AX
BX
DX
b) sadr`aj magacina
Slika 2.39 : Procedura _KURSOR koja se poziva iz C-a
Test pitanje 2.53
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-64
Kako se parametri vraaju C-u? Odgovor U prethodnim test pitanjima smo ukazali kako se parametri predaju iz C-a u magacin a zatim kako se oni koriste od strane procedure napisane na asemblerskom jeziku. Suprotno pitanje bi bilo sledee: [ta se deava kada funkcija u C-u o~ekuje da primi argumenat? Kada C o~ekuje argumenat od procedure na asemblerskom jeziku tada on o~ekuje da nadje povratni parametar u odredjeni registar ili registre. Parametri u zavisnosti od obima smetaju se shodno pravilima definisanim na Slici 2.40. registar obim tip podatka u C-u AL 1 bajt char, short AX 2 bajta int DX:AX 4 bajta long
Slika 2.40 : Povratne vrednosti koje C o~ekuje od procedure
Ako je vrednost koju procedura vraa tipa pokaziva~ (adresa) tada u AX e se nalaziti IP za slu~aj da je procedura NEAR, a u DX:AX bie CS:IP kada je procedura tipa FAR. Analizirajmo sada sledei primer: Tri vrednosti, x, y i z, tipa int, od strane funkcije na C-u se predaju proceduri na asemblerskom jeziku. Kd na asemblerskom jeziku obavlja njihovo sabiranje a sumu vraa nazad C-u, koji prikazuje rezultat. Ovaj programski primer je prikazan na Slici 2.41 a), a izgled magacina na Slici 2.41 b). extrn unsigned long suma (int, int, int), main() printf ("Suma je jednaka % u", suma (200, 450, 138)); Procedura suma .asm je oblika .MODEL MEDIUM .CODE .PUBLIC _SUMA ; ova procedura tipa FAR pribavlja tri re~i iz magacina sabira ih, a sumu vraa preko ; registarskog para DX:AX _SUMA PROC FAR Push BP ; sa~uvaj BP Mov BP,SP ; koristi BP kao pokaziva~ Sub AX, AX ; AX = 0 Mov DX, AX ; DX = 0 Add AX, [BP+6] ; x + 0 = AX Adc DX, 0 ; saberi prenos Add AX, [BP+8] ; x + y = AX Adc DX, 0 ; saberi prenos Add AX, [BP+10] ; x + y + z = AX Adc DX, 0 ; saberi prenos Pop BP ; obnovi sadr`aj BP-a Ret ; vrati se u C _SUMA Endp End ; ************************a) programski primer *********************
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-65
Z
Y
X
CS
IP
BP
200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF4
BP+10 pokazuje na Z
BP+8 pokazuje na Y
BP+6 pokazuje na X
SP=BP
b) izgled magacina
Slika 2.41 : Programski primer _SUMA
Test pitanje 2.54
Kako se novi asembleri povezuju sa C-om?
Odgovor Verzije asemblera skorijeg datuma kakvi su Microsoftov MASM 5.1 ili Borlandov TASM 1.0 pa navie u~inili su da povezivanje modula na asembleru i C-u bude lake. Kao prvo nema potrebe da se vodi briga o razmetaju ili po~etku imena koje se, ili koja se, zajedni~ki koriste od C-a i asemblera (tj. da se pamti BP i da svako ime po~inje simbolom '_' kao to je bio slu~aj sa _KURSOR). Ilustracije radi program sa Slici 2.41 prepisan je na Slici 2.42. Uo~imo umetanje slova C u direktivi ".MODEL MEDIUM C". Ova direktiva omoguava asembleru da automatski izra~unava [BP+n] za sve parametre.
.MODEL MEDIUM , C .CODE .PUBLIC _SUMA SUMA PROC FAR POD1 : WORK, POD2 : WORD, POD3 : WORD Sub AX, AX Mov DX, AX Add AX, POD1 Adc DX, 0 Add AX, POD2 Adc DX, 0 Add AX, POD3 Adc DX, 0 Ret _SUMA Endp End
Slika 2.42 : Procedura SUMA - nova verzija
Test pitanje 2.55
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-66
Kako se vri predaja adresa polja iz C-a preko magacina?
Odgovor Programski jezik C predaje promenljive po vrednosti preko magacina a strukture podataka tipa polja kao pokaziva~e. Naime ofset adresa polja se smeta u magacin ako je memorijski model SMALL ili MEDIUM, ina~e u magacin se smeta par CS:IP. Primer na Slici 2.43 ilustruje ovaj aspekt. U primeru se koristi polje iz C-a koje ukazuje na dnevne zarade radnika za sva pet dana u nedelji koristei za definiciju podatak unsigned int (0 do 255). Nakon toga se koristi asemblerski kd za njihovo sabiranje i vraanje sume C-u radi prikazivanja.
int zarade [5] = 196, 214, 178, 126, 249 ; extern unsigned short ned_plata (int zarade [ ]); main ( ) printf ("Nedeljna plata = % u", ned_plata (zarade)); ned_plata.asm ima sledei oblik .MODEL MEDIUM .CODE .PUBLIC _NED_PLATA ; ovom procedurom se sabiraju pet bajtova ; na kraju suma se ~uva u registar AX _NED_PLATA PROC FAR Push BP ; sa~uvaj BP Mov BP,SP Push SI ; sa~uvaj SI Sub AX, AX Mov CX, 5 ; broja~ bajtova Mov SI, [BP+6] PONOVI : Add AL, [SI] ; dodaj dnevnu zaradu Adc AH, 0 Inc SI ; inkrementiraj pokaziva~ na Inc SI ; narednu zaradu Loop PONOVI Pop SI Pop BP Ret _NED_PLATA Endp End
Slika 2.43 : Program za odredjivanje nedeljne plate
Test pitanje 2.56
Kako se vri povezivanje rutina na asemblerskom jeziku sa C-om? Odgovor Pravila koja va`e kod povezivanja Microsoftovog Quick C sa MASM asemblerskim rutinama su sledea: 1. Proveri da li procedura na asemblerskom jeziku deklarie proceduru kao PUBLIC. Ime procedure treba da po~ne simbolom "_". Na primer, ako se procedura u C-u zove "mika" tada se ona u asembleru mora nazvati "_mika". Ako je memorijski model SMALL tada procedura u asembleru treba da je NEAR, a za slu~aj da je MEDIUM procedura traba da je tipa FAR. 2. U programu napisan na C-u deklarii proceduru kao external.
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-67
3. Asembliraj program na asemblerskom jeziku sa MASM kako bi se generisao objektni fajl, kao na primer mika.obj. 4. Kompajliraj program na C-u kako bi se generisao objektni fajl, kao na primer program.obj. (Quick C inicijalno generie memorijski model MEDIUM). 5. Pove`i oba objektna fajla u jedan izvrivi C>link program.obj _ mika.obj Kod Borlandovog C++ oni se povezuju zajedno na sledei na~in C > bcc program.C mika.asm Za vie detalja o ovoj problematici ~itaocu se preporu~uje da konsultuje izvornu literaturu Microsoft-a i Borlanda
Test pitanje 2.57
Potrebno je da se izvri grananje na adresi ADR1 ako je LS bit pozicija operanda, koji se ~uva u 16-bitnom registru R1, jednaka 1. Pokazati kako se ova aktivnost mo`e izvesti korienjem instrukcija: TEST i BNZ Napomena: efekat TEST instrukcije je sledei TEST Rx,Ry,Rz ; if Ry =Rz then Z=1, else Z=0 Efekat instrukcije BNZ (branch if not zero) je BNZ LAB1 ; if Z=0 goto LAB1, else continue
Test pitanje 2.58
Neka su zadata dva 8-bitna broja A=0011 0001 i B=10011100 (a) Odrediti decimalni ekvivalenat za svaki broj usvajui da su oni : (1) neozna~ene celobrojne vrednosti; i (2) ozna~ene celobrojne vrednosti. (b) Sabrati oba binarna broja i interpretirati sumu, usvajui da su oni: (1) neozna~ene; i (2) ozna~ene celobrojne vrednosti. (c) Nakon operacije sabiranja odrediti vrednost statusnih markera C (carry), Z (zero), N (sign) i V (overflow). (d) Koja e, od instrukcija uslovnog grananja (Slika 2.44), imati uslov true (istinit) nakon izvrenog sabiranja.
Uslov grananja mnemanik test uslov branch if zero BZ Z=0 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=0 branch if plus BNN N=0 branch if overflow BV V=1 branch if not overflow BNV V=0
Slika 2.44 Instrukcije uslovnog grananja i stanje uslovnih markera Napomena: Smatrati da operaciju sabiranja izvodi hipoteti~ki procesor.
Test pitanje 2.59
Lokacija na vrhu magacina, TOS, sadr`i vrednost 4130. Pokaziva~ magacina, SP, ima vrednost 3600. Instrukciju tipa CALL PP1 ~ine dve re~i. Prva re~ predstavlja opkôd i nalazi se na adresi 1200, a druga re~ ~ija je vrednost 2500 predstavlja po~etnu adresu potprograma PP1 i nalazi se na adresi 1202. Kakvi su sadr`aji PC-a, SP-a i TOS-a :
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-68
(a) pre nego to se instrukcija CALL PP1 pribavi iz memorije
(b) nakon izvrenja instrukcije CALL PP1
(c) nakon povratka iz procedure
Test pitanje 2.60 Neka je zadat 8-bitni operand C=11001100. Za hipoteti~ki procesor napisati nezavisne sekvence
koje obavljaju sledee operacije:
(a) SET b0 i b4
(b) RESET b2 i b6
(c) FLIP b1 i b7
(d) SIFT b0 i b7
Napomena:
(1) Bitovi u okviru bajta su definisani kao b7b6b5b4b3b2b1b0 gde je b7 MSB a b0 LSB;
(2) Za A=10101101 operacije FLIP b3, SIFT b5, RESET b2 SET b1 su definisane kao
FLIP b3 : A=10100101, gde A=A⊕B, i B=00001000
SHIFT b5 : A=00100000, gde A=A⋅B, i B=00100000
RESET b2 ; A=10101001, gde A=A⋅B, i B=1111 1011
SET b1 : A=10101111, gde A=A+B, i B=00000010
Test pitanje 2.61
Pokazati da jedna~ina Z+(N⊕V)=1 predstavlja potpuni test za uslov ACC≤0 kada se koristi aritmetika dvoji~nog komplementa. Na osnovu tablice istine, odredi slo`enost logike kojom se implementika uslov ACC≤0
Test pitanje 2.62
Pokazati da jedna~ina Z+(N⊕V)=0 predstavlja potpuni test za uslov ACC>0 kada se koristi aritmetika dvoji~nog komplementa. Na osnovu tablice istine, odredi slo`enost logike kojom se implementira uslov ACC>0.
Test pitanje 2.63
Pokazati da li su korektna imena testova i jedna~ine koje va`e za te testove, kada se manipulacije vre nad brojevima u dvoji~nom komplementu. Ime testa jedna~ina Carry set C=1 Carry clear C=0 Overflow V=1 no overflow V=0 negative N=1 positive N=0 (ACC)=0 Z=1 (ACC)≠0 Z=0 (ACC)>0 Z+(N⊕V)=0
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-69
(ACC)<0 (N⊕V)=1 (ACC)≥0 (N⊕V)=0 (ACC)≤ 0 Z+(N⊕V)=2 (ACC)>(B) (C+Z)=0 (ACC)<(B) (N⊕V)=1 (ACC)≥(B) C=0 (ACC)≤(B) (C+Z)=1
Test pitanje 2.64
U sledeem programu napisanom na asemblerskom jeziku mikroprocesora 80x86 popuniti blanko mesta. Glavni program definie podatke i poziva drugi modul koji sabira 5 bajtova podataka, a zatim ~uva rezultat. Napomena: Neka blanko mesta mogu biti suvina
.MODEL SMALL
.STACK 100h
.DATA
.PUBLIC ______, _______ POD1 DB 16,14,27,36,12 REZUL DW ?
.CODE EXTRN ________:FAR
POC: MOV AX,@POD1 MOV DS,AX CALL SUMA MOV AH,4Ch INT 21h END ________
; u drugom fajlu postoji modul za sabiranje 5 bajtova podataka
.MODEL SMALL _______POD1:BYTE _______REZUL:WORD
BROJ EQU 5 .CODE _______SUMA
SUMA PROC ______ MOV BX,OFFSET POD1 SUB AX,AX MOV CX,BROJ
_______: ADD AL,BYTE PTR[BX] ADC AH,0 INC BX LOOP PONOVI MOV REZUL,AX RET
_______ ENDP END ______
Test pitanje 2.65
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-70
Neka postoje ~etiri posebna modula ~ija su segmentna imena KODS1, KODS2, KODS3 I KODS4, respektivno. Ulazna ta~ka KODS1 je 00060h a mapa koja je dobijena nakon procesa linkovanja je sledeeg oblika.
Start Stop Length Name 00060 ---------- 0000Bh KODS1
--------- ---------- 00014h KODS2 --------- ---------- 00025h KODS3 --------- ---------- 00041h KODS4
(a) popuniti blanko polja ako su svi segmenti definisani kao PARA (b) popuniti blanko polja ako su svi segmenti definisani kao WORD
Zadatak 2.38
Kreirati program na asemblerskom jeziku mikroprocesora 80x86 koga ~ine sledee komponente: (a) U glavnom programu su definisane dve vrednosti: 1228 i 52400 (b) Glavni program poziva dva posebna modula, i predaje vrednosti (prenosi parametre) preko magacina. (c) U prvom modulu vri se mno`enje oba broja, a rezultat ponovo se vraa nazad glavnom modulu. (d) U drugom modulu vri se deljenje oba broja i predaje se glavnom programu koli~nik i ostatak. (e) Ukazati na sadr`aj magacina u toku izvrenja svakog modula ako je neposredno pre prve instrukcije CALL u glavnom programu sadr`aj registra SP=FFF8h.
Zadatak 2.39
Koristei 80x87 instrukcije, kreirati program za izra~unavanje izraza: z=(x2+y2)1/2, gde su x=3,12 a y=5,43.
Zadatak 2.40
Koristei 80x87 instrukcije, kreirati program za izra~unavanje izraza: y=2x2+5x+12,34, za x=1,25.
Zadatak 2.42
Koristei 80x87 instrukcije, kreirati program za izra~unavanje: 3(πr3)/4 za r=25,5.
Test pitanje 2.66
Ukazati koji se adresni na~ini rada za izvorini i odredini operand koriste kod svake od nabrojanih instrukcija instrukcija adresni na~in rada za drugi
izvorini i odredini operand adresni na~in rada za prvi izvorini operand
MOV A,B direktno memorijski direktno memorijski LD A,R3 direktno memorijski registarsko direktno LD R3,A registarsko direktni direktno memorijski LDI R3,#413 registarsko direktni neposredni MOV R4,D registarsko direktni direktno memorijski IN AL,D8 registarsko direktni direktni ADD (R0),R2 registarsko direktni registarsko direktni
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-71
(odgovor je tamnije rafirani deo) Test pitanje 2.67 Napisati programsku sekvencu za impementaciju izraza A = (B+C)*(D+E) kod 3-, 2-, 1- i 0-adresnih maina. U toku programiranja pridr`avati se sledeeg pravila: Izra~unavanje izraza ne sme da promeni vrednosti njegovih operanada.
Odgovor T-je memorijska lokacija gde se ~uva privremeno promenljiva 3-adresna 2-adresna 1-adresna 0-adresna ADD A,B,C LDA A,B LDA A PUSH D ADD T,D,E ADD A,C ADD E PUSH E MPY A,A,T LDA T,D STA T ADD ADD T,E LDA B PUSH C MPY A,T ADD C PUSH B MPY T ADD STA A MPY POP A
Test pitanje 2.68
Nezavisno od tipa maine, 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 pomou kojih se spcificira: (1) koja operacija treba da se obavi, tipi~ni primeri su ADD, MOV, LDA, SUB,... (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 maina, 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 izvrenja Branch ili Jump adresa mora biti zadata kao deo tekue 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 - omoguava programeru da od programa napisanih na asemblerskom jeziku generie programe na mainskom jeziku. Prevodi iskaze asemblerskog jezika u binarne ekvivalente.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-72
(3) linker - povezuje posebno asemblirane module u jedinstveni modul koji je pogodan za punjenje i izvrenje (4) loader - puni izvrive binarne kôdove u memoriju i transformie neke logi~ke adrese u odgovarajue fizi~ke. (5) debugger - omoguava programeru da nadgleda (kontrolie) detalje koji se odnose na izvrenje programa (6) razvojni sistem - celina hardvera i softvera koja se koristi da podr`i razvoj novih sistema
Test pitanje 2.70
Koristei instrukcije date u sledeoj tabeli klasa instrukcije C instrukcije asemblerskog jezika kopiranje podataka a=b MOV b,a aritmeti~ko/logi~ke b=c+d*e ADD c,b,a upravlja~ke go to LAB1 BR LAB1 prevesti sledee iskaze napisane na programskom jeziku C u odgovarajue asemblerske. Usvojiti da su sve promenljive tipa Integer. a) A = (B+C) * (D+E); b) A = B*C+D*E; c) X = X+ Y; d) U = V; W = X * Y;
Odgovor Neka s i t predstavljaju memorijske lokacije u kojima se privremeno ~uvaju podaci
a) ADD B,C,s ADD D,E,t MPY s,t,A b) MPY B,C,s MPY D,E,t ADD s,t,A c) ADD X,Y,X d) MOV V,U MPY X,Y,W
Test pitanje 2.71 Stavke koje prate specifikaciju instrukcije su: a) koja operacija treba da se obavi, b) gde se nalazi operand ili operandi ako postoje, c) gde se smeta rezultat ako postoji , i d) gde se nalazi naredna instrukcija Kako treba specificirati instrukciju uslovnog grananja koja uporedjuje dva broja i obavlja grananje ako su oni jednaki?
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-73
Odgovor 1) opkod : odgovara insturkciji Branch-equal 2) operandi : gde se nalaze oba operanda koji se uporedjuju 3) rezultat : ovu stavku nije potrebno specificirati 4) naredna instrukcija : lokacija naredne instrukcije ako je uslov istinit.
Test pitanje 2.72
Objasniti zna~enje sledeih termina: (a) segment; (b) ofset; (c) grani~na adresa
Test pitanje 2.73
Koja je uloga magacina? Koja je inicijalna vrednost vrha magacina (Top of Stack - TOS) i kako se adresira magacin?
Test pitanje 2.74
U toku izvrenja programa CS=74A5h, SS=752Bh, IP=54h i SP=24h. Izra~unati adrese: (a) instrukcije koja se izvrava, i (b) tekue lokacije vrha magacina.
Test pitanje 2.75
Kakva je namena (svrha) instrukcije INTn ?
Test pitanje 2.76
Objasniti razlike izmedju kompajlera i asemblera.
Test pitanje 2.77
Objasniti razlike izmedju direktiva i instrukcija i dati po dva primera od svake.
Test pitanje 2.78
(a) Objasniti ulogu procedure (b) Kako se definie po~etak i kraj procedure? (c) U kom slu~aju procedura se definie kao FAR? (d) U kom slu~aju procedura se definie kao NEAR?
Test pitanje 2.79
Kakav e biti generisani heksadecimalni kôd za: (a) DB 34; (b) DB '34'; (c) DB 4DUP(0)
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-74
Test pitanje 2.80
Sa aspekta izvrenja koja razlika postoji izmedju sledee dve instrukcije? ADD CX,2548h ADD CX,[2548h]
Test pitanje 2.81
Sa ta~ke gledita izvrenja ukazati na razlike izmedju sledee dve instrukcije ADD BX,25 ADD [BX],25
Test pitanje 2.82
Objasniti koju aktivnost obavlja sledea instrukcija ADD DX,[BX+SI+8]
Test pitanje 2.83
Kod specifikacije sledeeg iskaza postoji greka ADD [BX],[DI] (a) Izvriti identifikaciju greke (b) Objasniti kako se mo`e ispraviti greka
Test pitanje 2.84
Za zadate definicije podataka pronai greke u iskazima, i obaviti odgovrajue kodiranje da bi se iste ispravile BAJTA DB 23 BAJTB DB 49 RECC DW 162 (a) ADD BAJTA,BAJTB (b) ADD AL,RECC (c) SUB BL,047Bh
Test pitanje 2.85
Objasniti kakav efekat imaju instrukcije INT i IRET na magacin.
Test pitanje 2.86
Napisati program za izra~unavanje Fibona~ijevog niza 1,1,2,3,5,8,13,... (Sa izuzetkom prva dva broja niza, svaki broj se dobija kao suma prethodna dva). Koristi instrukciju LOOP da bi postavio granicu na 12 iteracija.
Test pitanje 2.87
a) Odrediti vrednost svake fizi~ke adrese 1000H : 1234H 0100H : ABCDH
2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
2-75
A200H : 12CFH B2C0H : FA12H b) Odrediti nepoznate vrednosti za svaku fizi~ku adresu A000H :? = A0123H ?: 14DAH = 235DAH D765 : ? =BABC0H ?: CD21H = 32D21H
Test pitanje 2.88
Segment podataka je lociran po~ev od adrese A0000H do AFFFFH. Koja vrednost mora biti napunjena u DS?
Test pitanje 2.89
Odrediti vrednost fizi~ke adrese izvornog operanda za sledeu 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
Test pitanje 2.90
Identifikovati adresne na~ine rada izvorinih i odredinih operanada u sledeim instrukcijama (a) MOV AL,BL (b) MOV AX,0FFH (c) MOV [DI],AX (d) MOV DI,[SI] (e) MOV [BX]+0400H,CX (f) MOV [DI]+0400H,AH (g) MOV [BX][DI]+0400H,AL
Test pitanje 2.91
Kako se naziva proces otklanjanja greaka u programu?
Test pitanje 2.92
Koja je razlika izmedju sintaksne greke i greke u izvrenju programa?
Test pitanje 2.93
Opisati kakav se rezultat dobija nakon izvrenja sledee sekvence instrukcija. Rezultat se ~uva u registru AL.
2. Zbirka zadataka iz Mikroprocesora i mikrora~unara
2-76
MOV AL,01010101B AND AL,00011111B OR AL,11000000B XOR AL,00001111B NOT
Odgovor AL = 25H
Test pitanje 2.94
Napisati programsku sekvencu za sabiranje dve heksadecimalne cifre koje su smetene na bajt lokaciji ALFA. Rezultat smestiti u AL.
Odgovor MOV AL,ALFA MOV BL,AL MOV CL,04H ROR BL,CL AND AL,OFH AND BL,OFH ADD AL,BL
Zadatak 3.1
Neka su, za strukture staze podataka prikazane na Slici 3.1 i Slici 3.2, propagaciona kanjenja signala du` magistrale mag_A i mag_B, Tmag_A i Tmag_B iznose 10ns, a propagaciono kanjenje 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 odgovarajuih blokova povezanih na magistrali je 5ns. Odrediti potrebno vreme da bi se obavile sledee operacije za strukture CPU-a sa Slike 3.1 i 3.2?
(a) prenos podatka iz jednog registra u drugi za sledee slu~ajeve:
(a1) u toku istog taktnog intervala istovremeno izvo|enje operacija Read i Write nad sadr`ajem istog registra nije mogue, tj. dozvoljena je samo operacija tipa (Rm)←(Rz) za z≠m.
(a2) mogua 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 sledee 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.
3. Procesori - sinteza staze podataka i upravlja~ka jedinica
ö õ
Procesori - sinteza staze podataka i upravlja~ka jedinica
2
. . .
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 maine prikazanu na Slici 3.1.
(a1) S obzirom da u istom taktnom intervalu nije dozvoljena operacija Read i Write sadr`aja istog registra, operaciju premetanja sadr`aja registra Rm u registar Rz razbiemo u sledee 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 kanjenje 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 vee od vremena trajanja najdu`e operacije. U
Procesori - sinteza staze podataka i upravlja~ka jedinica
3
konkretnom slu~aju Ta.1.2>Ta.1.1. Ako usvojimo da je trajanje taktnog intervala Tcp=75ns, tada ukupno za izvrenje 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 izvrenja operacije iznosi:
Ta2=TOE+Tmag_A+TALU+Tmag_B+Ts+TH
=5+10+50+10+8+5=88ns
Usvojiemo 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
4
=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 izvrenja operacije (PC)+1→(PC) iznosi:
Tb2=TOE+Tmag_A+TALU+Tmag_B+Ts+TH
=5+10+50+10+8+5=88ns.
Usvojiemo da je Tcp=90ns.
II slu~aj koga e mo analizirati se odnosi na strukturu maine 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)
Odgovarajua vremena bie:
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 izvri operacija je:
Tuk1=2*Tcp=160ns
ALU u ovom slu~aju obavlja operaciju F=B
Operacija tipa (PC)→(PC)+1 ~ine sledee dve aktivnosti
k21: (PC)+1→(Z)
k22: (Z) →(PC)
Odgovarajua vremena bie:
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 izvrenje operacije (PC)→(PC)+1 potrebno je vreme od
Tk2=2*Tcp=160ns
Procesori - sinteza staze podataka i upravlja~ka jedinica
5
Zadatak 3.2
Analizirajmo izvrenje 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 izvrenja ove instrukcije?
ALU je u stanju da obavlja sledee 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 izvrenja jedne mikrooperacije) istovremeno izvrenje 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. Imajui 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
dekoder instrukcija +upravlja~ka logika
Y
kam em oriji
adresnam agistrala
m agistralapodataka
Z
A ddSubupravlja~k
isignaliA LU -a
M D R
M A R
PC
SP
R0
R n-2
Ci
reset
set
C in
A L UBA
F
interniupravlja~kisignali
internam agistrala
a) Organizacija staze podataka CPU-a oko jedinstvene interne magistrale
Procesori - sinteza staze podataka i upravlja~ka jedinica
6
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 izvrenje instrukcije Add sadr`aja
memorijske lokacije BROJ sa sadr`ajem registra R1 i smetaj rezultata u registar R1.
Slika 3.3: Organizacija CPU-a, princip upravljanja i sekvenca izvrenja operacije Add.
Test pitanje 3.1
Za strukturu procesora sa Slike3.3a) (zadatak 3.2) izvriti analizu na nivou mikrooperacija aktivnosti koje se obavljaju u toku ciklusa pribavljanje-re~i-iz-memorije. Usvojimo da se adresa memorijske lokacije kojoj se pristupa nalazi u registru R1, a da podatak koga ~itamo smetamo u registar R2.
Napomena: Usvojimo da se impuls Read generie u toku drugog taktnog intervala, stanje na liniji Ready testira na sredini treeg taktnog intevala, kada podatak nije spreman ubacuju se stanja ~ekanja, a ako je podatak spreman upisuje se u MDR na kraju treeg taktnog intervala
Procesori - sinteza staze podataka i upravlja~ka jedinica
7
Odgovor korak akcija 1. R1out, MARin 2. Read 3. Wait for Ready, MDRin 4. MDRout, R2in, End
Napomena: Vreme trajanja koraka 3 zavisi od vremena pristupa memoriji.
Test pitanje 3.2
Za strukturu procesora sa Slike 3..3 a) (zadatak 3.2), izvriti analizu na nivou mikrooperacija aktivnosti koje se obavljaju u toku ciklusa upis-re~i-u-memoriju. Usvojimo da se re~ koju treba memorisati ~uva u R2, a adresa memorijske lokacije gde treba smestiti tu re~ nalazi u R1.
Napomena: Usvojimo da se impuls Write generie u toku drugog taktnog intervala, stanje na liniji Ready se testira na sredini treeg taktnog intervala, a podatak upisujemo u memoriju na kraju treeg taktnog intervala.
Odgovor korak akcija 1. R1out, MARin 2. R2out, MDRin,
Write 3. Wait for Ready,
End Napomena: Treba ukazati da se aktivnosti 1 i 2, ako to arhitektura dozvoljava, mogu izvoditi paralelno.
Test pitanje 3.3
Za strukturu procesora sa Slike 3.3 a), iz zadatka 3.2, izvriti analizu ciklusa aritmeti~ke ili logi~ke operacije. Ilustracije radi ciklus sabiranja sadr`aja registra R1 sa sadr`ajem registra R2 i smetaj rezultata u registar R3 imae sledei oblik:
korak akcija 1. R1out, Yin 2. R2out, F=A+B,
Zin 3. Zout, R3in,
End
Test pitanje 3.4
Za strukturu procesora sa Slike 3.3 a), iz zadatka 3.2, odrediti upravlja~ku sekvencu koja va`i kod izvrenja instrukcije bezuslovnog grananja. Adresa grananja se dobija sabiranjem ofseta X koji je specificiran u okviru adresnog polja instrukcije grananja sa tekuom vrednou 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
8
5. Adresno_polje_IRout, F=A+B, Zin 6. Zout, PCin, End
Test pitanje 3.5
Za strukturu procesora sa Slike 3.3 a), iz zadatka 3.2, odrediti upravlja~ku sekvencu koja va`i kod izvrenja instrukcije uslovnog grananja tipa BRN (Branch on Negative). Adresa grananja se dobija sabiranjem ofseta X koji je specificiran u okviru adresnog polja uslovne instrukcije grananja sa tekuom vrednou PC-a.
Odgovor korak akcija 1. PCout, MARin, Read, Clear Y, Set Cin,
F=B+Cin, Zin 2. Zout, PCin, Wait for Ready 3. MDRout, IRin 4. PCout, Yin, if not N = True then End 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 sledee operacije:
saberi sadr`aj memorijske lokacije BROJ sa sadr`ajem registra R1 i sadr`aj smesti u BROJ.
saberi sadr`aj memorijske lokacije BROJ sa sadr`ajem registra R1 i sadr`aj smesti u R1
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 optem 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 izvorinih i odredinih operanada.
Napomena: U toku jednog taktnog intervala istovremeno izvrenje 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 izvorinog i odredinog operanda
sekvenca mikrooperacija karakteristi~nih za izvrenje 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,
Procesori - sinteza staze podataka i upravlja~ka jedinica
9
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 izvrenje 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 izvrenje 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 izvrenje operacije Add BROJ,BROJ,R1, je oblika:
korak
akcije
1. PCout, MARin, Read,F=B+1,
Procesori - sinteza staze podataka i upravlja~ka jedinica
10
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 izvrenje 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
11
. . .
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 sledee 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 izvrenja instrukcije JSR (Jump to Suboutine). Prva re~ je opkôd, a druga predstavlja po~etnu adresu potprograma. Povratna adresa se smeta u magacin. Na vrh magacina pokazuje registar SP.
Odgovor Sekvenca mikroperacija ima sledei 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
12
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 izvrenje 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 sledei: 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 proiruje 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. Opkd instrukcije je 16-bitni. Ofset adresa i direktna adresa izvorinih i odredinih operanada specificiraju se u okviru druge ili tree re~i
Procesori - sinteza staze podataka i upravlja~ka jedinica
13
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 sledeih instrukcija:
a) Sub.W 200(R3),D4 b) Cmp.W (R2)+,D1 Odgovor Operacija je tipa D4-M(R3+200)→D4, a odgovorajua sekvenca je oblika:
korak akcije komentar 1. PCout, MUX0, F=B, MARin, Yin,
Read ; pribavi se opkôd instrukcije
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 ; privremeno se smeta 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)
Procesori - sinteza staze podataka i upravlja~ka jedinica
14
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
Zadatak 3.6
Interna organizacija 32-bitnog CPU-a prikazana je na Slici 3.7. Kao to se vidi sa Slike 3.7, svi interni registri i putevi podataka su obima 32-bita, dok je magistrala podataka kojom se CPU povezuje sa memorijom 16-bitna. Registar MDR ~ine dve polovine MDRH i MDRL, oba povezana na magistralu za podatke. Postoje dve operacije ~itanja RDH i RDL, koji ~itaju podatke iz memorije i pune ih u MDRH i MDRL, respektivno. Registar Y se mo`e postaviti na vrednost 0, 2 ili 4. Bilo koji od registara u istom upravlja~kom koraku (mikrooperaciji) se mo`e pojaviti kao izvorite i kao odredite, kao na primer R2out, Set Y=4, Add, R2in tj. sabira se 4 sa sadr`ajem registra R2.
Napisati upravlja~ke sekvence koje su potrebne za implementaciju sledeih CPU-ovih instrukcija:
a) Move.W #100,D1 b) Add.W (A2),D3 c) Add.B (A2),D3 gde .B/.W/.L ukazuju na obim operanda tipa bajt, re~ i dupla re~.
Odgovor a) Move.W #100,D1 ; 100→D1 Prva 16-bitna re~ predstavlja opkôd instrukcije a druga neposredni podatak 100.
korak
akcije
1. PCout, MUX-a, Set Y0, F=A+B, Yin,
Procesori - sinteza staze podataka i upravlja~ka jedinica
15
MARin, ReadRDL 2. Yout, MUX2, F=A+B, Yin, Wait for
Ready 3. MRDLout, IRin 4. MUX2, Yout, F=A+B, MARin, Yin,
ReadRDH 5. Yout, MUX2, F=A+B, PCin, Wait for
Ready 6. MRDHout, MUX0, Set Y0, F=A+B, D1in.w
b) Add.W (A2),D3 korak akcije 1. PCout, MUX0, Set Y0, F=A+B, Yin,
MARin, ReadRDL 2. Yout, MUX2, F=A+B, Yin, Wait for
Ready 3. MRDLout, IRin 4. MUX2, Yout, F=A+B, PCin 5. A2out, MUX0, Set Y0, F=A+B, MARin,
ReadRDH 6. D3out.w, MUX0, Set Y0, F=A+B, Yin,
Wait for Ready 7. MRDHout, MUX0, Yout, F=A+B, D3in.w
c) Add.B (A2),D3 korak
akcije
1. PCout, MUX0, Set Y0, F=A+B, Yin, MARin, ReadRDL
2. Yout, MUX2, F=A+B, Yin, Wait for Ready
3. MDRLout, IRin 4. MUX2, Yout, F=A+B, PCin 5. A2out, MUX0, Set Y0, F=A+B, MARin,
READRDH 6. D3out.B, MUX0, Set Y0, F=A+B, Yin,
Wait for Ready 7. MRDHout, MUX0, Yout, F=A+B, D3in.B
Procesori - sinteza staze podataka i upravlja~ka jedinica
16
32
dekoderinstrukcija
IR
MAR
MDRH | MDRL
PC
R0
R7
InternamagistralaA
Internamagistrala
B
adresnelinije
linijezapodatke
D0
D7
2
32 32
Y
16
M 0 U 1 X 2 3
mag_Amag_A
upravlja~kisignali
ALUBA
F
0
4
20
4
Slika 3.7 : Modifikovana interna organizacija 32-bitnog CPU-a organizovana oko dve magistrale
Zadatak 3.7
Za strukturu staze podataka prikazanu na Slici 3.8, napisati upravlja~ku sekvencu koja je potrebna za implementaciju sledeih CPU-ovih instrukcija
(a) JSR $30A16 (b) SUB.W $76C(A5),D0 Napomena: TEMP je registar za privremeno ~uvanje podataka. Usvojiti da se kao pokaziva~ magacina, SP, koristi registar R7. Simbol $ ukazuje da je neposredni podatak heksadecimalni broj.
Odgovor a) Implementacija instrukcije JSR $30A16
Format instrukcije koji se ~uva u memoriji je sledeeg oblika:
Procesori - sinteza staze podataka i upravlja~ka jedinica
17
opkôd JSR
0A16 LS deo adreseuslu`nog potprograma0003 MS deo adrese
uslu`nog potprogramaopkôd naredne instrukcije
tekueg programa
15 0
PC
PC+2
PC+4
PC+6
32-bitna adresauslu`ne rutine(potprograma)
Uobi~ajeno, registru R7 je dodeljena uloga pokaziva~a magacina, tj. R7=SP.
32
dekoderinstrukcija
IR
MAR
MDRH | MDRL
PC
R0
R7
InternamagistralaA
Internamagistrala
B
adresnelinije
linijezapodatke
D0
D7
2
32 32
Y
16
M 0 U 1 X 2 3
mag_Amag_A
upravlja~kisignali
ALUBA
F
0
4
20
4
TEMP
Slika 3.8: Interna organizacija 32-bitnog CPU-a oraganizovana oko dve magistrale
Procesori - sinteza staze podataka i upravlja~ka jedinica
18
korak akcije komentar
1. PCout, MUX0, Set Y0, F=A+B, Yin, MARin, ReadRDL
; pribavljanje opkoda instrukcije
2. Yout, MUX2, F=A+B, Yin, PCin, Wait for Ready
; (PC)=(PC)+2
3. MDRLout, IRin
4. MUX1, Yout, F=A+B, MARin, PCin, ReadRDL
; ~itanje LS adrese i smetanje u MDRL
5. MUX2, Yout, F=A+B,PCin, Wait for Ready
; (PC)=(PC)+2
6. PCout, MUX0, Set Y0, Yout, F=A+B, MARin, ReadRDH
; ~itanje MS adrese i smetanje u MDRH
7. PCout, MUX0, Set Y2, Yout, F=A+B, PCin, Wait for Ready
; (PC)=(PC)+2
8. MDRout, MUX0, Set Y0, Yout, F=A+B, TEMPin
; ~uvanje adrese u registar TEMP
9. R7out, MUX0, Set Y2, Yout, F=B-A, R7in, MARin, WriteDRL
; (SP)=(SP)-2
10. PCout, MUX0, Set Y0, Yout, F=A+B, MDRin, Wait for ReadyDRL
; (PC)LS→M(SP)
11. R7 out, MUX0, Set Y2, Yout, F=B-A, R7in, WriteDRH
; (SP)=(SP)-2, Adr→(PC)
12. TEMPout, MUX0, Set Y0, Yout, F=A+B, PCin, Wait for ReadyDRH, End
; (PC)MS→M(SP),
Napomena: 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) Aktivnost Yout mo`e biti izostavljena jer izlaz registra Y je direktno povazan na A ulaz ALU-a tako se ova aktivnost automatski podrazumeva. b) Implementacija instrukcije Sub.W $76C(A5), D0 je ekvivalentna aktivnosti (D0)=(D0)-M(A5+76Ch). Format instrukcije je sledei:
opkod Sub.W
neposredni operand 076C
PC
PC+2
korak akcije komentar
1. PCout, MUX0, Set Y0, Yout, F=A+B, Yin, MARin, ReadRDL
; pribavljanje opkôda instrukcije
2. Yout, MUX2, F=A+B, Yin, PCin, Wait for Ready
;(PC)=(PC)+2
3. MDRLout, IRin
4. MUX1, Yout, F=A+B, MARin, PCin, ReadRDH
; neposredni operand smeta se u Y
5. MUX2, Yout, F=A+B, PCin, Wait for Ready
; (PC)=(PC)+2
6. MDRHout, MUX0, Set Y0, Yout, F=A+B, MARin, TEMPin, ReadRDH
Procesori - sinteza staze podataka i upravlja~ka jedinica
19
7. A5out, MUX0, Yout, F=A+B, PCin, Wait for Ready
; M(A5+76C)→Y
8. PCout, MUX0, Set Y0, Yout, F=A+B, MARin, TEMPin, ReadRDH
9. MDRLout, MUX0, Set Y0, Yout, F=A+B, Yin
10. D0out, MUX0, Yout, F=B-A, D0in, End
Test pitanje 3.6
Kod 16-bitne bajt-adresibilne maine, nakon pribavljanja instrukcione re~i iz memorije PC treba da se inkrementira za 2. Sugerisati neku modifikaciju maine sa Slike 3..3 a) (zadatak 3.2), tako da se pojednostavi ova operacija (mikrooperacija).
Odgovor
Y
MUX
Z
+2
Selekt
0 1
Izme|u izlaza registra Y i A ulaza ALU-a ugra|uje semultiplekser MUX1 tipa 2-na-1. Na jednom od ulazaMUX1 direktno se dovodi konstantna vrednost 2 a nadrugom izlaz registra Y. Stanje signala Selekt definie kojie se od ulaza MUX1 biti prisutan na A ulazu ALU-a.
ALUBA
F
Test pitanje 3.7
Neka se od veeg broja flip-flopova prikazanih na Slici 3.9, formiraju registri CPU-a sa Slike 3.10. [ta e se desiti ako se u istom taktnom intervalu pokua izvrenje operacije R1←[R1]+Y ? Koji je tip memorijskih elemenata potreban da bi se izvrila ova operacija?
Odgovor Ako su signali Zin i Zout, prikazani na Slici 3.9, aktivni u toku celog taktnog intervala operacije sabiranja, kolo sa Slike 3.9 ponaa se kao transparentni le~ pa se, u elektri~nom smislu, zatvara sledea petlja:
R1out→mag_A→ALUbin→ALUout→mag_B→R1in
Procesori - sinteza staze podataka i upravlja~ka jedinica
20
S
R
Q
Q
Zout tro-stati~kidrajver
Zin
Din
Dout
Slika 3.9 : ulaz i izlaz jednog registarskog bita
Ovo zna~i da se, nakon prvog sabiranja, dobija R1=R1+Y. Za slu~aj da operacija sabiranja traje kratko, a trajanje taktnog intervala je znatno du`e od ukupnog vremena propagacije signala kroz petlju, pa e tada obaviti ponovno sabiranje, tako da e mo imati R1=(R1+Y)+Y. Ova konstatacija ukazuje da, ako je vreme propagacije signala kroz petlju k puta krae od trajanja taktnog intervala, tada, nakon k sabiranja, imaemo da je R1=R1+kY. Naime, kona~na vrednost koja se smeta u R1 bie zavisna od vremena propagacije signala kroz petlju i vremena trajanja taktnog impulsa. Da bi se dobio korektan rezultat u toku izvrenja ove operacije, potrebno je da flip-flop sa Slike 3.9 bude Master-Slave tipa.
Test pitanje 3.8
Kako je mogue, kod strukture sa Slike 3.10, da se u jednom taktnom intervalu izvede operacija Ri←[Ri]+[Y].
Procesori - sinteza staze podataka i upravlja~ka jedinica
21
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.10 Organizacija CPU-a oko dve magistrale
Odgovor Uvo|enjem master-slave flip-flopa pomou kojih se realizuju osnovne elije registara.
(Odgovor je dat u test pitanju 3.7)
Zadatak 3.8
Organizacija CPU-a oko tri magistrale mag_1, mag_2, mag_3, prikazana je na Slici 3.11. Kod arhitekture sa Slike 3.11 mogu je istovremeni prenos podataka po sve tri magistrale, kao na primer RA←[MDR] - po mag_1, RB←[Ri] - po mag_2, ALUout→MARin po mag_3.
Napisati sekvencu koraka koji su potrebni da se implementira sledea instrukcija:
Add (R8),X(R9) Usvojiti da su ovi putevi podataka 16-bitni, a bilo koja konstanta potrebna za implementaciju ove instrukcije nalazi u nekom od internih registara. Registar RB mo`e ako treba da radi u transparentnom re`imu rada. U ovom na~inu rada, podaci koji pristi`u na ulaz registra isovremeno su prisutni i na izlazu, ~ime je obezbe|eno da se podatak iz nekog registra RF polja prenese ka MAR ili MDR, i obrnuto od MDR u nekom od registara RF polja, u jednom koraku (jednom taktnom intervalu, tj. mikrooperaciji).
Napomene: (1) Aktivnost naredbe je sledeeg tipa :
Procesori - sinteza staze podataka i upravlja~ka jedinica
22
M(R9+X)+M(R8)→M(R9+X) (2) Format naredbe je sledei:
opkôd Add
ofset X
PC
PC+2
(3) RF polje CPU-a ~ine n registara vidljivih programeru, R0-Rn, i dva nevidljiva registra koji se koriste za privremeno ~uvanje podataka RT i RZ. Neki od vidljivih registara se koriste za ~uvanje konstanti i sledee su namene: R0=zero, R1=1, R2=2, R3=4, R4 se koristi kao PC, a R5 kao pokaziva~ magacina SP. (4) Upravlja~ki signal RBT postavlja registar RB u transparentni na~in rada. (5) Upravlja~ki signal Rkin upisuje podatak u registar Rk (k se odnosi na sve registre u emi), a upravlja~ki signal Rkout aktivira izlazni stepen registra Rk. (6) Upravlja~ki signal Sel A0 (Sel B0) selektuje ulaz 0 multipleksera MUXA (MUXB), a aktiviranjem signala Sel A1 (Sel B1) selektuje se ulaz 1 odgovarajueg multipleksera.
(7) ALU je u stanju da obavlja sledee operacije: F=A, F=B, F=A+B, F=A+B+Cin, F=A-B, tj. F=A+ B +Cin (8) Operacijom Set Cin postavlja se marker uslova Cin na logi~ku jedinicu, a operacijom Clear Cin brie se. (9) Read i Write se odnose na aktiviranje spoljnih signala za ~itanje i upis. (10) Wait for Ready je spoljni ulaz koga procesor testira radi zavretka operacije upis ili ~itanje.
Odgovor korak akcije komentar 1 PCout, Sel A1, RAin, Sel B1, RBT, Clear
Cin, F=B, MARin, Read ; pribavljanje opkoda
2 R2out, Sel B1, RBT, F=A+B, PCin, Wait for Ready
; (PC)=(PC)+2
3 MDRout, IRin 4 PCout, Sel A1, RAin, Sel B1, RBT, Clear
Cin, F=B, MARin, Read ; X→RA
5 R2out, Sel B1, RBT, F=A+B, PCin, Wait for Ready
; (PC)=(PC)+2
6 MDRout, Sel A0, RAin 7 R9out, Sel B1, RBT, F=A+B, MARin, RZin,
Read ; M(R9+X) →RA
8 R8out, Sel B1, RBin, Wait for Ready ; R9+X→RZ 9 MDRout, Sel A0, RAin, F=B, MARin, Read ; M(R8) →RB 10 Clear Cin, Wait for Ready 11 MDRout, Sel B1, RBT, F=A+B, RTin ;M(R8)+M(R9+X)
→RT 12 RZout, Sel B1, RBT, MARin, Write ; RT→M(R9+X) 13 RTout, Sel B1, RBT, MDRin, Wait for
Ready
14 Clear Cin, End
Procesori - sinteza staze podataka i upravlja~ka jedinica
23
dekoderinstrukcija
IR
0 1MUX A
RA
0 1MUX B
RB
Registri(RF - polje)
MDR
MAR
CinCoutspoljnjemagistrale
upravlja~kisignali
Sel A Sel Bmag_2
mag_1
mag_3
ALUBA
F
Slika 3.11 : Organizacija CPU-a oko tri magistrale
Zadatak 3.9
Za organizaciju CPU-a prikazanu na Slici 3.11, i sve napomene koje va`e iz prethodnog zadatka napisati sekvencu upravlja~kih koraka kojom se mo`e implementirati instrukcija CMP #BROJ,(R3)+.
Test pitanje 3.9
Na Slici 3.12 prikazan je blok dijagram staze podataka jednog 32-bitnog procesora.
RF polje ~ine 32 registra opte namene R0 do R31. U registru R0 uvek se ~uva 0, u registru R1 vrednost 1, a u registru R2 vrednost 4.
Procesor izvrava sledeih pet razli~itih tipova instrukcija:
• aritmeti~ko-logi~ke tipa registar-registar,
• aritmeti~ko-logi~ke tipa registar-konstranta,
• obraanje 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 izvrenja nabrojanih instrukcija.
Odgovor Dijagram stanja ciklusa pribavljanje/dekodiranje prikazan je na Slici 3.13.
Procesori - sinteza staze podataka i upravlja~ka jedinica
24
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 sledee aktivnosti:
MAR ¬ PC IR ¬ MDR PC ¬ PC + 4 Nakon faze dekodiranja, koja je identi~na za sve instrukcije, sledi faza izvrenja koja se razlikuje od instrukcije do instrukcije. A. Kod aritmeti~ko/logi~kih instrukcija tipa registar-registar, obavlja se sledea aktivnost
Rd ¬ Rs1 <operacija> Rs2 gde su Rs1 i Rs2 sadr`aji izvorinih registara, a Rd sadr`aj odredinog registra.
Sa aspekta magistrala, ova aktivnost se mo`e ras~laniti na sledee korake:
S1_mag ¬ Rs1; S2_mag ¬ Rs2 D_mag ¬ S1_mag <operacija> S2_mag
Procesori - sinteza staze podataka i upravlja~ka jedinica
25
Rd ¬ D_mag Format instrukcije imao bi oblik:
opkôd Rd Rs1 Rs2 neiskorieno
6 5 5 5 11
B. Kod aritmeti~ko logi~kih instrukcija tipa registar-konstanta imali bi sledee aktivnosti
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
obraanjememoriji
branch
store
dekodiranje
pribavljanjeinstrukcije
izvrenje
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 izvrenja aritmeti~ko/logi~ke instrukcije registar-registar
Format instrukcije bi imao oblik:
Procesori - sinteza staze podataka i upravlja~ka jedinica
26
opkôd Rd Rs1 konstanta
6 5 5 16
C. Instrukcija Load/Store ima sledee 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
odredini adresni
a) Load format
opkôd Rd Rs1 16-bitni ofset
izvorini adresni
b) Store format
Aktivnosti koje se obavljaju u toku Load instrukcije su sledee (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> Rd ¬ D_mag Napomena: <ALU*op> je operacija tipa F = A Za instrukciju Store klju~ne su sledee aktivnosti
S1_mag ¬ Rs1; S2_mag ¬ IR15-0 D_mag ¬ S1_mag + S2_mag MAR ¬ D_mag 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
odredini izvorite 1 izvorite 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 sledei na~in:
A_mag ¬ Rs1 ; B_mag ¬ Rd uslov ¬ A_mag - B_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 sutini, kona~ni korak predstavlja punjenje PC-a ako je uslov ispunjen, na sledei na~in:
Procesori - sinteza staze podataka i upravlja~ka jedinica
27
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 izvrenja 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 mogue 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] obavie se sledee aktivnosti: S1_mag ¬ Rs1; S2_mag ¬ IR15-0 D_mag ¬ S1_mag + S2_mag PC ¬ D_mag
Test pitanje
Kakav je efekat sledeih instrukcija:
J L1 BEQ R3,R3,L1
Test pitanje 3.10
Tipi~na lista uslova kod arhitektura sa Slike 3.12 (Test pitanje 3.9), prikazana je na Slici 3.15. je sledea:
mnemonik uslov LL notacija BL Branch if less than <
BG Branch if greater than >
BGE Branch if greater or equal to >=
BLE Branch if less or equal to <=
BE Branch if equal ==
BNE Branch if not equal !=
Slika 3.15 Lista uslova
Procesori - sinteza staze podataka i upravlja~ka jedinica
28
Ako su poznati sadr`aji registara R3 i R4, odrediti koje odnose testiraju sekvence prikazane na Slici 3.16.
Koje uslove testiraju sledee sekvence:
kodna sekvenca uslov a) BL R3,R4,L1 R3 < R4 b) BL R4,R3,L1 R3 > R4 c) BL R4,R3,L1 R3 > =R4 BEQ R3,R4,L1 d) BL R3,R4,L1 R3 < =R4 BEQ R3,R4,L1 e) BEQ R3,R4,L1 R3= = R4 f) BL R3,R4,L1 R3 ! =R4 BL R4,R3,L1
Slika 3.16 Uslovi koji se testiraju
Odgovor Napomena: Reenje je dato na Slici 3.16 i predstavlja njen tamnije osen~eni deo.
Zadatak 3.10
Za model procesora ~ija je staza podataka prikazana na Slici 3.12, identifikovati osnovne korake karakteristi~ne za izvrenje instrukcija Call i Ret. Usvojiti da se R31 koristi kao pokaziva~ magacina, tj. R31 = SP.
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.
Procesori - sinteza staze podataka i upravlja~ka jedinica
29
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 sledea 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 izvrio instrukciju, procesor mora da obavi sledee osnovne korake:
G1. pribavi instrukciju G2. inkrementira PC G3. dekodira instrukciju G4. izvri instrukciju
F A
15 13 0
Slika 3.19 Format instrukcija MIN-a
operacija Funkcijski kôd Sto 0
Sub 1
Procesori - sinteza staze podataka i upravlja~ka jedinica
30
JNG 2
Slika 3.20 Funkcijski kodovi MIN-a
Ilustracije radi, aktivnosti koje se odnose na izvrenje instrukcije Sto su sledei:
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 napiemo istu semantiku u registar-transfer formi dobiemo mainski oblik instrukcije koji je prihvatljiviji za programera.
Neka IRH i IRL ozna~avaju vii i ni`i deo registra IR, a F i A su polja instrukcije koja se ~uvaju u IR. Simbol ":=" predstavlja operator dodele. Mikrooperacije pomou kojih se implementira instrukcija Sto su sledee:
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 izvrenja instrukcije JNG procesor testira sadr`aj ACC-a i, u zavisnosti od ishoda testa, mo`e da preuzme sledee aktivnosti:(a) kada uslov nije ispunjen inkrementira PC kako bi ukazao na narednu instrukciju u programu (JNG ponaa 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 izvrenjem naredne instrukcije u programu. Nakon izvrenja instrukcije Sub, u
Procesori - sinteza staze podataka i upravlja~ka jedinica
31
registar ACC upisae 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 izvrejna instrukcije.
Programska sekvenca kojom se u ACC upisuje sadr`aj memorijske lokacije X ima oblik (memorijska lokacija u kojoj se privremeno ~uva podatak nazvaemo 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←T ⇒ ACC=-(-X)=X Ova programska sekvenca ekvivalentna je operaciji Ld X, tj. Load X to ACC.
Programska sekvenca kojom se vri 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'-T ⇒ 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
Zadatak 3.11
Napisati program za procesor MIN koji po~inje sa nepoznatim stanjem ACC-a a zavrava sa ACC=x+y, gde su x i y sadr`aji memorijskih lokacija X i Y, repektivno.
Zadatak 3.12
Dizajn MIN procesora je promenjen tako da MIN ima sada dva akumulatora ACC1 i ACC2.
Koje aspekte u prezentaciji i interpretaciji instrukcije treba promeniti da bi se novi dizajn prilagodio promeni.
Zadatak 3.13
Polje Funkcijski kod koje se odnosi na format instrukcije MIN-a je proiren i ima sledei oblik:
Procesori - sinteza staze podataka i upravlja~ka jedinica
32
operacija funkcijski kôd
00 Sto 01 Sub 10 JNG 11 Nand
gde je:
Nand A; ACC←ACC' nand M(A) Napisati programske sekvence pomou kojih je mogue implementirati sledee logi~ke instrukcije:
a) Not A ; kona~ni efekat ACC←not M(A)
b) Or A ; kona~ni efekat ACC←ACC' or M(A)
c) And A ; kona~ni efekat ACC←ACC' and M(A)
d) Xor A ; kona~ni efekat ACC←ACC' xor M(A)
e) a:=a Or b ; M(A)←M(A) or M(B) e) a:=a And b ; M(A)←M(A) and M(B)
e)a:=a Nand b ; M(A)←M(A) nand M(B)
e) a:=a Xor b ; M(A)←M(A) xor M(B)
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 smeta u DR mo`e biti 16- ili 32-bitni. Ako je D 16-bitni tada se on u trenutku upisa u memoriji automatski proiruje 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 proirenja (ekstenzije) definisan je drugim markerom, pri ~emu E = 0 ozna~ava proirenje nulama, a E = 1 proirenje znaka. Izvriti projektovanje logike na nivou registra (RTL = Register Transfer Level) koja e biti u stanju da obavi neophodno proirenje 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
33
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 proirenje 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 mogunost proirenja sa nulom ili proirenja 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 koristei pri tome metod proirenja 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.
Izvriti projektovanje logike na RTL nivou koja implementira tehniku proirenja znaka.
Odgovor Reenje je prikazano na Slici 3.23.
Procesori - sinteza staze podataka i upravlja~ka jedinica
34
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 mogunost proirenja znaka
Zadatak 3.14
Akumulatorski zasnovana CPU tipa Load/Store, prikazana na Slici 3.21 (test pitanje 3.12), u svom repertoaru koristi skup od 10 instrukcija prikazanih na Slici 3.24.
a) kopiranje sadr`aja memorijske lokacije X u memorijsku lokaciju Y
b) inkrementiranje sadr`aja akumulatora ACC
c) grananje na specificiranu adresu adr ako je ACC≠0.
d) usvajajui da se koristi kôd tipa znak-moduo implementiraj instrukcije: (d1) ACC:=-M(X), (d2) testiraj LS bit b re~i koja je memoriji smetena na lokaciji X. Ako je b=1, obrii ACC, ina~e ostavi ACC nepromenjen (za maskiranje odredjenih bitova u re~i koristi instrukciju And)
tip instrukcija HDL format Asemblersko jezi~ki format
Komentar
Load ACC:=M(X) Ld X napuni X iz M u ACC
Store M(X):=ACC St X smesti sadr`aj ACC-a u M kao X
kopiraj registar DR:=ACC Mov DR,ACC kopiraj sadr`aj ACC-a u DR
Prenos podataka
kopiraj registar ACC:=DR Mov ACC,DR kopiraj sadr`aj DR-a u ACC
sabiranje ACC:=ACC+DR Add saberi DR sa ACC
oduzimanje ACC:=ACC-DR Sub oduzmi DR od ACC
Obrada podataka AND operacija ACC:=ACC and
DR And logi~ka AND DR sa ACC
Procesori - sinteza staze podataka i upravlja~ka jedinica
35
NOT operacija ACC:=not ACC Not komplementiraj sadr`aj ACC-a
Branch PC:=M(adr) BRA adr grananje na instrukciju sa adresom adr
Programsko-upravlja~ke
Branch zero if ACC=0 then PC:=M(adr)
BZ adr grananje na instrukciju adr ako je ACC=0
Slika 3.24 Skup instrukijca CPU-a Napomena: Simbol M se odnosi na memorijsku lokaciju Koristei skup instrukcija sa Slike 3.24, pokazati kako se mogu implementirati sledee operacije koje kod najveeg broja ra~unara odgovraju jedinstvenoj instrukciji:
Odgovor a)
Ld X ; kopiraj sadr`aj memorijske lokacije X u ACC St Y ; kopiraj sadr`aj ACC-a u memorijsku lokaciju Y b) Jedan00...001 ; definicija konstante Jedan . . . Mov DR,ACC ; kopiraj sadr`aj ACC-a u DR
Ld Jedan ; napuni ACC konstantom jedan Add ; saberi sadr`aje DR i ACC i smesti rezultat u ACC c) BZ bdr ; granaj se na bdr ako je ACC=0 BRA adr ; ako je ACC¹0, granaj se na adr bdr: . . . . . . adr: . . . d1) Ld X ; napuni X u ACC Mov DR,ACC ; kopiraj X iz ACC u DR Sub ; izra~unaj ACC =X-X=0 Sub ; izra~unaj ACC=0-X=-X d2) maska00...001 ; LS bit pozicija maske je na logi~koj jedinici nula 00...000 ; konstanta nula akum dd...ddd ; lokacija u koju se ~uva sadr`aj ACC-a St akum ; smesti ACC u memoriji Ld X ; kopiraj X u ACC Mov DR,ACC ; kopiraj X iz ACC u DR Ld maska ; napuni masku u ACC And ; AND sadr`aja registara DR i ACC BZ izlaz ; testiraj ACC za nulu Ld nula ; ACC¹0; obrii ACC BRA kraj izlaz:Ld akum ; ACC=0; obnovi ACC na po~etnu vrednost kraj:. . .
Zadatak 3.15
a) Za jednostavnu akumulatorski-zasnovanu CPU jedinicu sa Slike 3.21 (test pitanje 3.12) i raspolo`ivi skup instrukcija prikazan na Slici 3.24 (zadatak 3.14), kreirati programsku sekvencu za izra~unavanje izraza ACC:=ACC*N, gde mno`enik predstavlja inicijalnu vrednost akumaulatora a
Procesori - sinteza staze podataka i upravlja~ka jedinica
36
mno`ilac je promenljiva koja je smetena u memoriji. Usvojiti da su mno`enik i mno`ilac neozna~eni celi brojevi i da su dovoljno mali da je za prezentaciju njihovog proizvoda dovoljna jedna re~. Implementirati ACC*N u obliku ACC+ACC+...+ACC, tj. izvri se N puta osnovna instrukcija Add.
b) Za kreiranu programsku sekvencu pod a) prikazati proces izvrenja programa kojim se obavlja mno`enje, tj. ACC:=ACC*N.
Odgovor a) Program mno`enja prikazan je na Slici 3.25. Telo glavnog programa (linije 5 do 17) se izvravaju N-puta.
linija lokacija instrukcija ili podaci komentar 0 jedan 00...001 konstanta jedinica
1 mnoze N mno`enik
2 akum dd...ddd lokacija inicijalne vrednosti Y dodeljena ACC-u
3 proiz 00...000 lokacija (parcijalnog) proizvoda P
4 St Y smesti inicijalnu vrednost ACC-a u Y
5 Ponovi: Ld mnoze napuni N u ACC i testiraj za kraj
6 BZ Kraj kraj if N=0; else continue
7 Ld jedan napuni 1 u ACC
8 Mov DR,ACC kopiraj 1 iz ACC u DR
9 Ld mnoze napuni N u ACC radi dekrementiranja
10 Sub oduzmi 1 od N
11 St mnoze sa~uvaj dekrementiranu vrednost N
12 Ld akum napuni po~etnu vrednost Y u ACC
13 Mov DR,ACC kopiraj Y iz ACC u DR
14 Ld proiz napuni tekuu parcijalnu sumu P
15 Add saberi Y sa P
16 St proiz smesti novu parcijalnu sumu u P
17 BRA Ponovi granaj se na Ponovi
18 Kraj: ...
Slika 3.25 Programska sekvenca kojom se obavlja operacija ACC:=ACC*N
Na kraju, proizvod P se smeta u memorijsku lokaciju proiz.
b) Usvojiemo sledee:
svaka instrukcija je obima jedne re~i,
instrukcija se pribavlja iz memorije za jedan taktni interval,
vreme izvrenja instrukcije iznosi jedan taktni interval
svaki ciklus pribavljanja naredbe uklju~uje sledei par operacija tipa registarski prenos
IR.MAR := M(PC) , PC := PC + 1
tj. za PC se koristi registar koji se okida ivi~no, a to zna~i da se u okviru jednog taktnog intgervala prvo mo`e ~itati a nakon toga vriti upis u registar.
podacima i programu su dodeljene memorijske lokacije po~ev od 1000, 1001, 1002,...
Sekvenca trasiranja koja odgovara operaciji mno`enja prikazana je na Slici 3.26.
Taktni interval
tip instrukcije PC MAR akcije UJ-e akcije PJ-e
1 St akum 1004 IR.MAR:=M(PC), PC:=PC+1
Procesori - sinteza staze podataka i upravlja~ka jedinica
37
2 1002 M(MAR):=ACC 3 Ld mnoze 1005 IR.MAR:=M(PC),PC:=PC+1 4 1001 AC:=M(MAR) 5 BZ kraj 1006 IR.MAR:=M(PC),PC:=PC+1 6 1001 testiraj N,nema akcije if N¹0 nema akcije 7 Ld jedan 1007 IR.MAR:=M(PC),PC:=PC+1 8 1000 ACA:=M(MAR) 9 Mov DR,ACC 1008 IR.MAR:=M(PC),PC:=PC+1 10 dddd DR:=ACC 11 Ld mnoze 1009 IR.MAR:=M(PC), PC:=PC+1 12 1001 ACC:=M(MAR) 13 Sub 1010 IR.MAR:=M(PC),PC:=PC+1 14 dddd ACC:=ACC-DR 15 St mnoze 1011 IR.MAR:=M(PC),PC:=PC+1 16 1001 M(MAR):=ACC 17 Ld akum 1012 IR.MAR:=M(PC),PC:=PC+1 18 1002 ACC:=M(MAR) 19 Mov DR,ACC 1013 IR.MAR:=M(PC),PC:=PC+1 20 dddd DR:=ACC 21 Ld proiz 1014 IR.MAR:=M(PC),PC:=PC+1 22 1003 ACC:=M(MAR) 23 Add 1015 IR.MAR:=M(PC),PC:=PC+1 24 dddd ACC:=ACC+DR 25 St proiz 1016 IR.MAR:=M(PC),PC:=PC+1 26 1003 M(MAR):=ACC 27 BRA Ponovi 1017 IR.MAR:=M(PC),PC:=PC+1 28 1005 PC:=MAR nema akcije 29 Ld mnoze 1005 IR.MAR:=M(PC),PC:=PC+1 30 1001 ACC:=M(MAR) 31 BZ Kraj 1006 IR.MAR:=M(PC),PC:=PC+1 32 1018 testiraj N:PC:=MAR if N=0 nema akcije 33 1018 . . .
Slika 3.26 Trasiranje tipa ciklus-po-ciklus u toku izvrenja instrukcije mno`enja
Test pitanje 3.14
Savremeni mikroprocesori koriste razli~ite tehnike za ubrzanje rada CPU-a kao to su: paralelizam na nivou instrukcija, proto~nost, rad sa ke memorijom dr.
Zna~ajno poboljanje paralelne obrade na instrukcionom nivou mo`e se ostvariti i kod jednostavnog procesora ~ija je ema prikazana na Slici 3.21 ( test pitanje 3.12). Analizom se mo`e ustanoviti da se aktivnosti jedinica PJ i UJ obavljaju u razli~itim taktnim intervalima. Ako ove dve aktivnosti ne dele isti resurs, kao to je sistemska magistrala, one se mogu izvravati istovremeno. Na primer, sekvenca od tri instrukcije kojom se menja prvobitni sadr`aj akumulatora ACC u -ACC ima oblik:
Taktni interval
tip instrukcije PC akcije UJ-e akcije PJ-e
1 Mov DR,ACC 2000 IR.MAR:=M(PC),PC:=PC+1 2 2001 DR:=ACC 3 Sub 2001 IR.MAR:=M(PC),PC:=PC+1
Procesori - sinteza staze podataka i upravlja~ka jedinica
38
4 2002 ACC:=ACC-DR 5 Sub 2002 IR.MAR:=M(PC),PC:=PC+1 6 2003 ACC:=ACC-DR
Preklapanjem ciklusa izvrenja svake instrukcije sa pribavljanjem naredne, pokazati kako je mogue ostvariti proto~nost u obradi na primeru prethodne sekvence i grafi~ki ilustrovati rad dvostepenog proto~nog sistema.
Odgovor Taktni interval
tip instrukcije PC akcije UJ-e akcije PJ-e
1 Mov DR,ACC 2000 IR.MAR:=M(PC),PC:=PC+1 2 Mov/Sub1 2001 IR.MAR:=M(PC),PC:=PC+1 DR:=ACC 3 Sub1/Sub2 2002 IR.MAR:=M(PC),PC:=PC+1 ACC:=ACC-DR 4 Sub2 2003
IF EX
IF EX
IF EX
6543210
Sub1
Sub2
Mov
t
Test pitanje 3.15
Postoji vei broj na~ina kako se mo`e poboljati bazi~na arhitektura prikazana na Slici 3.21 (test pitanje 3.12). Najvei broj CPU-ova uvode modifikacije (proirenja) koje imaju za cilj da u zna~ajnoj meri poboljaju performanse i olakaju programiranje. Bitnije modifikacije se odnose na:
korienje vienamenskih registara za manipulisanje sa adresama i podacima
manipulisanje sa dodatnim tipovima podataka, instrukcija i adresnih na~ina rada
uvodjenje registra koji ukazuje na status izra~unavanja
uvodjenje logike koja e manipulisti magacinom.
Uzimajui u obzir pomenute izmene pokazati kako izgleda modifikovana arhitektura sa Slike 3.21.
Odgovor
Procesori - sinteza staze podataka i upravlja~ka jedinica
39
RFpolje
ALU
SR DR
Sistemska magistrala
MAR IR
Logika zagenerisanje
adresa
Upravlja~kalogika
Interni upravlja~kisignali
PC SP
UJ
PJ
Ka memorijii U/ I
podsistemu
Slika 3.27 Modifikovana verzija arhitekture CPU-a sa Slike 3.21.
Test pitanje 3.16
Kod najveeg broja mikrora~unarskih sistema CPU ne upravlja direktno memorijom ili sistemskom magistralom. Umesto toga ugra|uje se dodatni kontroler magistrale ~iji je primarni zadatak da ostvari ulogu bafera. Koje osnovne blokove sadr`i kontroler magistrale?
Odgovor Kontroler magistrale generie neophodne upravlja~ke signale za magistralu; razli~itih bafera koji se koriste za privremeno ~uvanje podataka, kao i poveanje fan-out i fan-in (opteretljivost) izme|u CPU-a i RAM-a. Obi~no se kontroler magistrale realizuje kao posebno integrisano kolo ili kao sastavni deo procesora. Struktura kontrolera magistrale prikazana je na Slici 3.28, a tipi~na je za sisteme zasnovane na Intelovim mikroprocesorima.
Test Pitanje 3.17
Sprega CPU sa U/I podsistemom u najveem broju slu~ajeva ne ostvaruje se direktno nego preko odgovarajueg kontrolera magistrale. Kakva je struktura kontrolera magistrale koji upravlja U/I podsistemom?
Odgovor Struktura kontrolera magistrale koji upravlja U/I podsistemom, tipi~no za procesore iz Intel-ove familije, prikazana je na Slici 3.29.
Procesori - sinteza staze podataka i upravlja~ka jedinica
40
Din-Dout
A31..A2
D31..D0
BEX,ADS
CPU
generator takta
baferadrese
baferpodataka
upravljanjemagistralom
multi-plekseradresa
baferupisa i~itanja
blok zaupravljanjememorijom
memorija
CLK
CLK
kontroler magistrale
A10...A0
Ready,RAS,CAS,WEREADY,WR,RD,IO/M
Slika 3.28 Put CPU memorijski podsistem preko kontrolera magistrale
Din-Dout
A31..A2
D31..D0
BEX,ADS
CPU
generator takta
baferadrese
baferpodataka
upravljanjemagistralom
baferupisa i~itanja
U/Iupravljanje i
U/Idekodiranje
CLK
CLK
kontroler magistrale koji upravljaU/I podsistemom
READY,WR,RD,IO/M A15-A0
IORD, IOWRREADY
ka U/I portovima(diskovi, tastatura,displej,...)
Slika 3.29 Put CPU U/I podsistem preko odgovarajueg kontrolera magistrale.
Zadatak 3.16
16-bitna CPU, je bajt adresibilna maina. Bajtovi na parnim i neparnim adresama prenose se po MS i LS bit pozicijama magistrale podataka, respektivno. Pokazati kako treba organizovati strukturu registra MDR koji e podr`avati ovakav prenos. Kada se vri prenos bajta on je uvek prisutan na LS bit pozicijama unutar CPU-a.
Procesori - sinteza staze podataka i upravlja~ka jedinica
41
Odgovor a) postoji poravnanje b) ne postoji poravnanje
D 15 D 0
M S b a j t L S b a j t
m em orija
m agistralapo da taka
D 8 -D 1 5 D 7 -D 0
B 1 5-B 8
B 7 -B 0
8 8
8 8
parnan ep arn a
ad rese 1357
k -1k + 1
0246
k -2k
D 15 D 0
M S b a j t
L S b a j t
m em orija
D 8 -D 1 5 D 7 -D 0
B 15 -B 8
B 7-B 0
8 8
8 8
ad rese 1357
k -1k + 1
0246
k-2k
M D R M D R
Slika 3.30: Na~in pristupa procesora memoriji za slu~aj da postoji i nepostoji poravnanje re~i u memoriji
Da bi mogao da se ostvari prenos podataka ka/iz memorije, za slu~aj kada postoji i kada ne postoji poravnanje, neophodno je da se MDR spre`e sa magistralom podataka na na~in kako je prikazano na Slici 3.31:
D15 D0MDR
D15-D8 D7-D0
E3 E2 E1 E0
B15-B8
B7-B0
magistralapodataka
E0, E1, E2 i E3su dozvole radaizlaznihdrajverskihstepena
Slika 3.31 Sprezanje registra MDR sa magistralom
Test pitanje 3.18
Projektovati oscilator koji koristi invertore i elemenat za kanjenje. Ako elemenat za kanjenje, unosi kanjenje T, kolika je frekvencija oscilovanja?
Procesori - sinteza staze podataka i upravlja~ka jedinica
42
Modifikovati kolo oscilatora tako da se oscilacije mogu inicirati (startovati) i zaustavljati (stopirati) pod uticajem asinhronog ulaza RUN. Kada se oscilator zaustavlja, irina zadnjeg impulsa na njegovom izlazu treba da iznosi T, nezavisno od vremena u kojem stanje signala na ulazu RUN postane neaktivno.
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 sledei 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 povezani 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 nemogue nemogue
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 sledei 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 0 x x 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 ;
Procesori - sinteza staze podataka i upravlja~ka jedinica
43
(b) ** Slu~aj kada su R0, R1 i R2 realizovani kao le~evi koji se pune opadajuom 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 sledei 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
44
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
Procesori - sinteza staze podataka i upravlja~ka jedinica
45
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
Test pitanje 3.20
Na Slici 3.38 a)-c) prikazane su tri osnovne konfiguracije PLD kola (PLD - Programmable Logic Device). Identifikovati tipove kola.
fiksno ANDpolje (dekoder)
programabilnoOR polje
programabilnoAND polje
fiksno ORpolje
programabilnoAND polje
programabilnoOR polje
programibilne
veze
programibilne
veze
programibilneveze
programibilneveze
ulazi
ulazi
ulazi
izlazi
izlazi
izlazi
a)
b)
c)
Slika 3.38 Tri osnovne konfiguracije PLD kola
Odgovor
Procesori - sinteza staze podataka i upravlja~ka jedinica
46
Slika 3.38 a): PROM; Slika 3.38 b): PAL; Slika 3.38 c): PLA
Zadatak 3.20
ALU ra~unara se implementira pomou PLD kola prikazanog na Slici 3.39.
ulazni baferi i
invertori
ANDpolje
ORpolje
Izlaznibaferi
x1x2
xn
I1
I2n
P1 PkO1
Om
F1
Fm
.
.
.
.
.
.
. . .
.
.
....
Slika 3.39 Opti blok dijagram PLD kola
ALU prihvata dva dvo-bitna broja A, B, Cin i dvo-bitni funkcijski ulaz F. Izlaz ALU-a ~ini dvo-bitni rezultat i Cout. Operacije koje obavlja ALU definisane su shodno sledeoj tabeli
F0 F1 OPERACIJA Cout 0 0 A+B izlazni prenos 0 1 A∨Β 1 1 0 A∧B 0 1 1 A∨/B 0
Programirati PLD kolo definisanjem produkata tipa suma proizvoda (SOP -Sum of Products).
Zadatak 3.21
Digitalni kontroler sa Slike 3.40 ima dva ulaza, A i B, i tri izlaza, X, Y, i Z, a taktuje se spolja. Kontroler kontinualno prelazi kroz sledeu sekvencu doga|aja. Na po~etku prvog taktnog perioda X se postavlja na 1. Na po~etku drugog taktnog perioda, u zavisnosti od stanja na ulazu A, tj. da li je 1 ili 0, postavlja se na 1 linija Y ili Z, respektivno. Kontroler zatim ~eka sve dok se linija B ne postavi na 1. Sa narednom usponskom ivicom taktnog signala, kontroler postavlja izlaz Z na 1 u toku trajanja jednog taktnog perioda, a zatim resetuje sve izlazne signale na 0 u trajanju od jednog taktnog perioda. Sekvenca se ponavlja po~ev sa narednom pozitivnom ivicom taktnog signala. Projektovati logiku kontrolera koritei PLD kolo sa Slike 3.39.
kontroler(PLD kolo)
oscilator
A
B
XYZ
Slika 3.40 Blok ema digitalnog kontrolera
Procesori - sinteza staze podataka i upravlja~ka jedinica
47
Test pitanje 3.21
Zato za PROM ka`emo da je PLD kolo koje ima fiksno AND i programibilno OR polje?
Odgovor AND polje kod PROM-a je izvedeno kao dekoder adresa memorijskih lokacija. Struktura dekodera se ne mo`e menjati (programirati), dok se sadr`aj memorijskih lokacija OR polja mo`e programirati.
Test pitanje 3.22
Na Slici 3.41 prikazana je logi~ka ema jednobitnog pomera~a ulevo/udesno. Objasniti princip njegovog rada.
S1 S2 S3 S4 S5 S6 S7S0
D0 D7D6D5D4D3D2D1
C
Slika 3.41 : Logi~ka ema jednobitnog pomera~a
Test pitanje 3.23
Blok koji mo`e da pomera informaciju za 32 bit pozicije u jednom taktnom intervalu prikazan je na Slici 3.42. Objasniti princip njegovog rada.
Odgovor Blok sa Slike 3.42 predstavlja fanel (funnel) pomera~ i sastavni je deo staze podataka 32-bitnih RISC procesora. Logika pomera~a mo`e da pomera informaciju ulevo ili udesno do 32 bit pozicije kako ozna~enih tako i neozna~enih brojeva. Pomera~ ~ine est nivoa multipleksera proto~no organizovanih. Shamt se odnosi na iznos pomeranja ulevo za specificirani broj puta. Kod pomeranja udesno ova vrednost se invertuje, a to rezultira pomeranjem ulevo za 33-n bit pozicija. Multiplekseri na vrhu obezbe|uju ekstra pomeranje za jednu bit poziciju udesno i ponovno upisivanje bita znaka na MS bit poziciji kod aritmeti~kog pomeranja udesno. Naredna pet nivoa (odozgo nani`e) omoguavaju pomeranje ulevo za 16, 8, 4 , 2 i 1 bit poziciju, pri ~emu je iznos pomeranja definisan sa Shamt. Ukupno propagaciono kanjenje ovog pomera~a je ekvivalentno kanjenju od 6 gejtova i nezavisno je veli~ini pomeranja.
Procesori - sinteza staze podataka i upravlja~ka jedinica
48
Mux21_32
Mux21_32
Mux21bis
AN3 0/1_32
E0
E0
E0
E0
E0Shamt0
Z(31:0)
Shamt(4:0)
A(31:0)
ArithRight
C
B
Z
B
A
Z
Z
B
A
B
A
Z
B
A
Z
B
A
A
Z
G
F
E
D
C
B
A
Shamt 1
Shamt 2
Shamt 3
Shamt 4
Mux21_32
Mux21_32
Mux21_32
Mux21_32
Mux21_32 Mux21_16
Mux21_8
Mux21_4
Mux21_2
Mux21_32
Slika 3.42 Blok koji mo`e da pomera informaciju za 32 bit pozicije
Zadatak 3.22
Cilj ovog zadatka je da uka`e na postupak sinteze kona~nog automata (Finite State Machine) koji se koristi za prodavanje tetrapak sokova. Princip rada automata je sledei: Automat za prodavanje sokova izdaje jedno pakovanje tetrapak soka nakon to je primio novac u vrednosti od 1,5 dinar. Kao maina, automat u jednom trenutku prihvata po jedan nov~i u vrednosti od 1 dinar ili 50 para. Sastavni deo automata je senzorski elemenat koji ukazuje da li je u maini uba~ena vrednost apoena od 1 dinar ili 50 para. Smatraemo da kada kupac ubaci 2 dinara maina ne vri povraaj od 50 para.
Odgovor Postupak sinteze sproveemo kroz nekoliko koraka.
Korak 1: Razumevanje problema - ponaanje maine naj~ee se opisuje govornim jezikom pri ~emu je va`no da ne postaje dvosmislenosti u interpretaciji. Obi~no proces projektovanja po~inje crtanjem blok dijagrama maine (Slika 3.43) na kome treba jasno uo~iti uloge ulaza i izlaza.
Procesori - sinteza staze podataka i upravlja~ka jedinica
49
Nailaskom taktnog impulsa vrednost 50 para ili 1 dinar se potvrdjuje ako je odgovarajui nov~i uba~en u mainu. Mehanizam za predaju tetrapak soka se oslobadja (izbacuje se jedan tetrapak sok) ako je maina nakon zadnjeg Reset-a prihvatila 1,5 dinar (ili vie). Ovakvom specifikacijom se ne definie u potpunosti ponaanje FSM-a. Na primer, ta e se desiti ako neko umesto nov~i od 50 para ubaci nov~i od 10 para? Ili ta se deava sa mainom kada je sok predat kupcu? U principu, treba preuzimati razumljive korake, a to zna~i da: (a) Senzor nov~ia vraa apoen ako ga ne prepozna; i (b) Nakon predaje tetrapak soka maina se resetuje.
Senzoruba~enognov~ia
Automatza prodajusokova
Mehanizamza predaju
tetrapak soka
reset
Cp-takt
50 para
1dinar
oslobodi
Slika 3.43 Blok dijagram maine za prodaju sokova
Korak 2: Apstraktna prezentacija - nakon to smo razumeli ponaanje maine neophodno je izvriti preslikavanje specifikacije u pogodniju apstraktnu prezentaciju. Dobar pristup je da se izvri numerisanje svih moguih sekvenci koje dovode do predaje tetrapak soka kupcu:
• tri nov~ia od po 50 para: 50 para, 50 para, 50 para
• dva nov~ia od po 50 para i jedan od dinar: 50 para, 50 para, 1 dinar
• jedan nov~i od 50 para i jedan od dinar: 50 para, 1 dinar
• jedan nov~i od 1 dinar i drugi od 50 para: 1 dinar, 50 para
• dva nov~ia od dinar: 1 dinar, 1 dinar.
Na Slici 3.44, u obliku dijagrama stanja, prikazane su sve mogue ulazne sekvence koje dovode do predaje tetrapak soka kupcu.
Sa ciljem da dijagram sa Slike 3.44 bude jednostavan i ~itljiv ozna~eni su samo pralazi koji eksplicitno uzrokuju promenu. Na oprimer, ako se u stranju S0 ne ubaci nov~i od 1 dinar ili 50 para maina ostaje u stanju S0.
Korak 3: Minimizacija stanja - opis rada maine sa devet stanja nije "najbolji" mogui. Naime stanja: S4, S5, S6, S7 i S8 imaju identi~no ponaanje pa se zbog toga mogu kombinovati u jedinstveno stanje. Dalja redukcija broja stanja zasniva se na iznosu novca kojeg je maina prihbvatila. Drugim re~ima, do vrednosti od 1 dinar se mo`e doi ubacivanjem dva nov~ia od po 50 para ili jednog od 1 dinar. Dijagram stanja koji odgovara ovakvoj interpretaciji prikazan je na Slici 3.45. Kao to se mo`e uo~iti, u odnosu na Sliku 3.44, broj stanja maine sa Slike 3.45 je redukovan sa 9 na 4.
Korak 4: Kodiranje stanja - Prezentacija automata koji ima minimalni broj stanja odgovara simboli~koj notaciji i opisuje se simboli~kom tabelom stanja prelaza (Slika 3.46). Naredni korak se odnosi na kodiranje stanja. Na~in na koji se vri kodiranje stanja ima veliki uticaj na iznos ugradjenog hardvera pomou koga se implementira maina. S obzirom da postoje ~etiri stanja dozvoljena su dva bita za kodiranje tih stanja. Tabela kodiranih stanja prikazana je na Slici 3.47.
Procesori - sinteza staze podataka i upravlja~ka jedinica
50
S0reset
1dinar
1dinarS2
S6(oslobodi)
50para
S5(oslobodi)
50paraS1
1dinar50para
S4(oslobodi)S3
1dinar
S8(oslobodi)
50para S7(oslobodi)
Slika 3.44 Dijagram stanja maine za prodaju tetrapak soka
0 para
1,5dinar(oslobodi)
1dinar
50 para
50p,1d
50p1d
50p 1d
reset
Slika 3.45 Minimizirani dijagram stanja maine za prodaju sokova Napomena: 50p = 50 para; 1d = 1 dinar
tekue stanje ulazi naredno stanje izlaz oslobodi
1d 50p 0p 0 0 0p 0 0 1 50p 0 1 0 1d 0 1 1 x x
50p 0 0 50p 0 0 1 1d 0 1 0 1,5d 0 1 1 x x
1d 0 0 1d 0 0 1 1,5d 0 1 0 1,5d 0 1 1 x x
1,5d x x 1,5d oslobodi
Slika 3.46 Simboli~ka tabela stanja prelaza kod maine za prodavanje tetrapak sokova sa minimalnim brojem stanja
Procesori - sinteza staze podataka i upravlja~ka jedinica
51
Napomena: Simbol "x" ukazuje da do ovakve situacije ne mo`e da dodje, na primer, maina mo`e da prihvati ubacivanje samo po jedan nov~i istovremeno, a ne i dva
Korak 5: Implementacija - naredni korak se odnosi na implementaciju tabele stanja prelaza izborom odgovarajuih memorijskih elemenata. Analiziraemo implementacije zasnovane na D i J-K flip-flopovima.
Karnaugh-ovi dijagrami (K-mape) za implementaciju sa D flip-flopovima prijazani su na Slici 3.48.
tekue stanje ulazi naredno stanje Q1 Q0 1d 50p D1 D0
izlaz oslobodi
0 0 0 0 0 0 0
0 1 0 1 0
1 0 1 0 0
1 1 x x x
0 1 0 0 0 1 0 0 1 1 0 0
1 0 1 1 0
1 1 x x 0
1 0 0 0 1 0 0
0 1 1 1 0
1 0 1 1 0
1 1 x x x
1 1 0 0 1 1 1
0 1 1 1 1
1 0 1 1 1
1 1 x x x
Slika 3.47 Kodirana tabela stanja - prelaza kod maine za prodaju tetrapak sokova
Procesori - sinteza staze podataka i upravlja~ka jedinica
52
Q1Q0→
1d 50p
00 01 11 10
00 0 0 1 1
01 0 1 1 1
11 X X X X
10 1 1 1 1
Q1Q0→
1d 50p
00 01 11 10
00 0 1 1 0
01 1 0 1 1
11 X X X X
10 1 1 1 1
Q1Q0→
1d 50p
00 01 11 10
00 0 0 1 0
01 0 0 1 0
11 X X X X
10 0 0 1 0
D0=50p⋅Q0+Q0⋅50p+Q1⋅50p+Q1⋅1db) K-mapa za D0
D1=Q1+1d+Q0⋅50pa) K-mapa za D1
oslobodi=Q1⋅Q0c) K-mapa za oslobodi
Slika 3.48 K-mapa kada se automat za prodaju sokova implementira pomou D-flip-flopova
Logi~ka implementacija automata za prodaju tetrapak sokova prikazana je na Slici 3.49.
D Q
D Q
reset
Cp
Q0
oslobodi
Q1
Q1
Q0D0
Cp
D1
Q1
1d
Q0
50p
50pQ0
Q0
50p
Q1
50p
Q1
1d
reset
Slika 3.49 Maina za prodavanje tetrapak sokova zasnovana na implemnetaciji sa D flip-flopovima
Kada se kona~ni automat za prodavanje sokova implementira pomou J-K flip-flopova, tabela stanja prelaza imae oblik kao na Slici 3.50, a odgovrajui Karnaugh-ovi dijagrami kao na Slici 3.51. Minimizirane Boole-ove jedna~ine ulaza J-K flip-flopova su:
J1 = 1d + Q0⋅50p K1 = 0
Procesori - sinteza staze podataka i upravlja~ka jedinica
53
J0 = Q0⋅50p + Q1⋅1d K0 = Q1⋅50p
Napomena: Simbol '/ ' ukazuje na komplement vrednosti. Logi~ka implementacija je prikazana na Slici 3.52.
Uporedjivanjem logi~kih ema sa Slike 3.49 i Slike 3.52, zaklju~ujemo da je kod FSM-a sa D flip-flopovima potrebno ugraditi 8 gejtova, a kod reenja sa J-K flip-flopovima 7 gejtova.
tekue stanje ulazi naredno stanje
Q1 Q0 1d 50p Q1 Q0 J1 K1 J0 K0
0 0 0 0 0 0 0 x 0 x
0 1 0 1 0 x 1 x
1 0 1 0 1 x 0 x
1 1 x x x x x x
0 1 0 0 0 1 0 x x 0
0 1 1 0 1 x x 1
1 0 1 1 1 x x 0
1 1 x x x x x x
1 0 0 0 1 0 x 0 0 x
0 1 1 1 x 0 1 x
1 0 1 1 x 0 1 x
1 1 x x x x x x
1 1 0 0 1 1 x 0 x 0
0 1 1 1 x 0 x 0
1 0 1 1 x 0 x 0
1 1 x x x x x x
Slika 3.50 Kodirana tabela stanja - prelaza kod maine za prodaju tetrapak sokova implementirana sa J-K flip-flopovima
Procesori - sinteza staze podataka i upravlja~ka jedinica
54
Q1Q0→
1d 50p
00 01 11 10
00 0 0 X X
01 0 1 X X
11 X X X X
10 1 1 X X
Q1Q0→
1d 50p
00 01 11 10
00 X X 0 0
01 X X 0 0
11 X X X X
10 X X 0 0
Q1Q0→
1d 50p
00 01 11 10
00 0 X X 0
01 1 X X 1
11 X X X X
10 0 X X 1
Q1Q0→
1d 50p
00 01 11 10
00 X 0 0 X
01 X 1 0 X
11 X X X X
10 X 0 0 X
a) K- mapa za J1
b) K- mapa za K1
c) K- mapa za J0
d) K- mapa za K0
Slika 3.51 Karnaugh-ovi dijagrami koji se odnose na implementaciju maine za prodavanje sokova
sa J-K flip-flopovima
J Q
J Q
K
reset
K0Q0
oslobodi
Q1
Q1
Q0J0
Cp
J1
K1K
reset
50pQ0
1d
Q0
50p
Q1
1d
Q1
50p
Cp
Slika 3.52 Maina za izdavanje tetrapak sokova zasnovana na implementaciji sa J-K flip-flopovima
Procesori - sinteza staze podataka i upravlja~ka jedinica
55
Test pitanje 3.24
Objasniti princip rada staze podataka prikazane na Slici 3.53.
Slika 3.53 Staza podataka jednostavne arhitekture
Odgovor A.Opis strukture staze podataka
Kao to se vidi na Slici 3.53, stazu podataka ~ini RF polje od 16 identi~nih 16-bitnih registara, ozna~enih kao PC, AC, SP, ... , E i F. Registri ozna~eni kao +1, 0 i -1 se koriste za ~uvanje konstanti. Svaki od 16 registara mo`e postaviti svoj sadr`aj na jednu ili obe interne magistrale, Amag i Bmag, a svaki od magistara se mo`e puniti sa tree magistrale Cmag. 16-bitna ALU, u zavisnosti od stanja na upravlja~kim linijama F0 i F1, mo`e da obavlja jednu od sledee ~etiri
Procesori - sinteza staze podataka i upravlja~ka jedinica
56
operacije: A + B, A and B, A, not A. ALU, u zavisnosti od stanja tekueg izraza, generie dva statusna bita N, koji je postavljen kada je izlaz ALUa negativan, i Z koji se postavlja kada je izlaza ALUa nula.
Izlaz ALUa se vodi na ulaz bloka Pomera~ koji mo`e da pomera za jednu bit poziciju ulevo i udesno. Pomeranje za dve bit pozicije sadr`aja registra R obavlja se tako to ALU izra~unava prvo R + R (pomeranje za jednu bit poziciju) a zatim Pomera~ vri pomeranje sume za jo jednu bit poziciju.
Magistrale Amag i Bmag nisu direktno povezane na ulaze ALUa. U sutini obe magistrale su povezane na ulaz le~eva, Ale~ i Ble~, a izlazi le~eva na ulaze ALUa. Upis u Ale~ i Ble~ je regulisan signalima MAR i L1, respektivno.
Komuniciranje sa memorijom ostvaruje se preko registara MAR i MBR. Linija M0 definie upis u MAR. U MBR se mo`e upisivati sadr`aj registra Pomera~ aktiviranjem signala M1. Signalima M2 i M3 regulie se upis/~itanje podataka u/iz memorije. Podaci koji se ~itaju iz memorije mogu se dovesti na levi ulaz ALUa preko multipleksera AMUX aktiviranjem upravlja~ke linije A0.
B.Definisanje formata mikroinstrukcije
Za upravljanje gradivnim blokovima sa Slike 3.53 potrebno je ukupno 61 upravlja~ki signal. Upravlja~ke signale mo`emo podeliti u sledeih devet funkcionalnih grupa:
16 signala za definisanje stanja Amag sa nekog od izlaza registara iz RF polja,
16 signala za definisanje stanja Bmag sa nekog od izlaza registara iz RF polja,
16 signala za punjenje registara RF polja sa Cmag,
2 signala za upravljanje radom le~eva A i B
2 signala za izbor funkcije koju obavlja ALU,
2 signala za upravljanje radom Pomera~a,
4 signala za upravljanje radom registara MAR i MBR,
2 signala koji ukazuju memoriji da li je ciklus upis ili ~itanje
1 signal koji upravlja radom AMUXa
Aktivnosti koje staza podataka mo`e da obavi u toku jednog ciklusa koristei nabrojane upravlja~ke signale su sledee: Postavljanje vrednosti na Amag i Bmag, le~ovanje u Ale~ i Ble~, izvrenje koje operacija koje obavljaju ALU i Pomera~ i memorisanje rezultata u jedan od 16 registara RF polja i/ili registra MBR. Pored nabrojanog mogue je puniti i registar MAR i inicirati memorijski ciklus. Koristei registar obima 61 bit kod koga je svaki bit dodeljen jednom upravlja~kom signalu, mogue je ostvariti upravljanje. Uslovno usvojiemo da vrednost 1 na odgovarajuoj bit poziciji ozna~ava da je taj signal aktivan a vrednost 0 da je neaktivan.
Po ceni uslo`njavanja upravlja~ke logike mogue je smanjiti broj upravlja~kih signala. Tako na primer, umesto 16 mogue je koristiti 4 upravlja~ka signala pomou kojih se mo`e kodirati broj registra ~ije e stanje biti prisutno na Amag. Isti zaklju~ak va`i i Bmag. Tehni~ki ova mogunost se izvodi ugradnjom dekodera 4 u 16.
Kada se govori o Cmag, situacija mo`e biti neto druga~ija. U principu je mogue istovremeno vriti upis u vei broj registara RF polja, no u praksi se ova mogunost skoro da i ne koristi. Zbog toga, usvojiemo da je za upravljanje upisom sa Cmag dovoljno 4 upravlja~ka signala. Za signale L0 i L1 nije potrebno koristiti posebne upravlja~ke linije jer se oni generiu u toku svakog taktnog intervala.
Dodatni signal koji nije eksplicitno pomenut, ali je veoma koristan, je onaj koji dozvoljava/brani dozvolu upisa u registaru RF polja signala za Cmag. Naime, ~esto se javlja potreba da ALU obavi
Procesori - sinteza staze podataka i upravlja~ka jedinica
57
svoju operaciju, generie N i Z signale, ali ne upie rezultat (tipi~no je to za inctrukciju Compare sadr`aja registra/memorije sa sadr`ajem registra). Ovaj signal zvaemo ENC (Enable C), a njegova interpretacija je sledea: ENC=1 memorisanje sadr`aja Cmag je dozvoljeno, a za ENC=0 nije dozvoljeno.
Signali upravlja~ke magistrale RD i WR se mogu tako|e koristiti za upravljanje le~ovanjem registra MBR, t. za pruhvatanje signala sa/i za pobudu sistemske magistrale respekrivno.
Shodno prethodnoj diskusiji redukovali smo broj uravlja~kih signala sa 61 na 22. Na Slici 3.54 prikazan je odgovarajui format koji sadr`i dodatna dva polja COND i ADDR, ~ije emo zna~enje kasnije detaljno opisati. Mikoroinstrukciju ~ine 13 polja, od kojih 11 imaju sledee zna~anje:
AMUX - definie koji se signal dovodi na levi ulaz ALUa
=MBR sebira 1,
~Ale sa sebira 0,AMUX
ALU - odre|uje funkciju ALUa
ALU
operacija je
operacija je and
10, operacija je
11, operacija je
=
+
0001
,,
A BA BAA
SH - definie funkciju pomeranja Pomera~a
=
ulevo pomeranje10,
udesno pomeranje01,
pomeranjanema 00,
SH
MBR - definie punjenje MBR-a od Pomera~a
MBRne puni se
puni se=
01
,,
MBRMBR
MAR- definie punjenje MAR-a od Ble~a
MARne puni se
puni se=
01
,,
MARMAR
RD - ukazuje na operaciju ~itanja memorije
=memorije iz MBR punjenje 1,
itanja~nema 0,RD
WR - ukazuje na operaciju upis u memoriju
WRnema upisa
upis a u memoriju=
01
,, MBR
ENC - definie upis u registar RF polja
RDne vri se upis
vri se upis=
01
,,
Procesori - sinteza staze podataka i upravlja~ka jedinica
58
C - vri selekciju registra u kome se obavlja upis sa Cmag ako je ENC=1
C
bira se
bira se
1111, bira se
=
00000001
,,
PCAC
FM
B - bira se registar ~iji e sadr`aj biti prikazan na Bmag
B
bira se
bira se
1111, bira se
=
00000001
,,
PCAC
FM
A - bira se registar ~iji e sadr`aj biti prikazan na Amag
=
F sebira 1111,
AC sebira 0001,
PC sebira 0000,
AM
COND - sadr`aj ovog polja od zna~aja je kod instrukcija grananja
COND
nema grananja
grananje ako je
10, grananje ako je
11, bezuslovno grananje
===
0001 1
1
,,
NZ
ADDR - adresa potencijalnog naslednika tekue mikronstrucije
Slika 3.54 Mogui format mikroinstrukcije koji se koristi za upravljanje staze podataka
C. Vremenski redosled kod izvrenja mikroinstrukcije
U toku dosadanje analize ukazali smo samo na ~injenicu kojim se signalima mo`e vriti upravljanje stazom podataka sa Slike 3.53, bez ula`enja u detalje u kojim situacijama su ti upravlja~ki signali aktivni.
Da bi ukazali na ovaj problem neto detaljnije analiziraemo koje se aktivnosti obavljaju u toku ALU ciklusa: Prvo se vri postavljanje le~eva A i B, zatim se daje vremena da ALU i Pomera~ obave svoj posao, a na kraju vri se memorisanje rezultata. Na osnovu primera, jasno je da tok doga|aja mora da se odvija po pomenutoj sekvenci. Na primer, ako pokuamo prvo da upiemo podatak sa Cmag u neki od registara RF polja, pre nego to se postave A i B le~evi, informacija koja e se zapamtiti bie nekorektna. Da bi ostvarili korektno sekvenciranje doga|aja uveemo ~etvorofazno pomeranje. Struktura sistema za generisanje taktnih impulsa prikazana je na Slici 3.55.
Klju~ni doga|aji u toku svakog od podciklusa su sledei:
Procesori - sinteza staze podataka i upravlja~ka jedinica
59
U mikroinstrukcioni registar MIR puni se mikroinstrukcija koja treba da se izvri.
Postave se sadr`aji specifisiranih izvornih registara RF polja na Amag i Bmag i zapamte se u Ale~ i Ble~, respektivno.
Poto to su ulazi stabilni dozvoljava se (po isteku vremena) da ALU i Pomera~ obave svoju funkciju, generiu stabilan izlaz, i ako je potrebno i napune MAR.
Nakon to je izlaz Pomera~-a stabilan memorie se sadr`aj prisutan na Cmag i jedan od registara RF polja i napuni se, ako je potrebno, registar MBR.
Slika 3.55 Struktura sistema za formiranje ~etvoro-faznog taktovanja
Detaljan blok dijagram prethodno analizirane arhitekture prikazan je na Slici 3.56.
Kao to se mo`e uo~iti sa Slike 3.56, arhitekturu sistema ~ine sledee dve celine:
staza podataka - koja se nalazi na levoj strani slike, i
upravlja~ka jedinica na desnoj strani Slike 3.56.
Centralno mesto upravlja~kog dela dodeljeno je mikroprogramskoj memoriji kapaciteta 256 * 32 = 8192 bitova. Sastavni delovi upravlja~ke jedinice su registri MPC (Micro Program Counter) i MIR (Micro Instruction Registar).
Zadatak je upravlja~ke jedinice da permanentno iz mikroprogramske memorije kopira mikroinstrukciju na koju ukazuje MPC i MIR. MIR se puni u toku taktnog subciklusa 1. U toku subciklusa 2, izlaz MIR-a je stabilan, to zna~i da njegovi izlazi imaju efekat na upravljanje stazom podataka. U subciklusu 2 Amag i Bmag se koriste za prenos registarsko izvornih operanada koji se selektuju od strane dekodera A i B. U toku ovog subciklusa aktiviraju se le~evi A i B, ~ime se obezbe|uju uslovi da ulazi ALUa budu stabilni za ostatak ciklusa. Paralelno sa nabrojanim aktivnostima inkrementira se sadr`aj MPC-a (MPC←MPC+1), sa ciljem da MPC mo`e na adresu naredne sekvencijalne mikroinstrukcije. Za vreme ciklusa 3 ALU i Pomera~ obavljaju specificirane aktivnosti i generiu validan rezultat. Mikroinstrukciono polje AMUX odre|uje levi ulaz ALUa, dok je desni direktno povezan na Ble~. Ako je MAR polje mikroinstrukcije postavljeno na 1 preko Bmag puni se MAR.
Procesori - sinteza staze podataka i upravlja~ka jedinica
60
U toku subciklusa 4, podaci prisutni na Cmag, u zavisnosti od stanja upravlja~kih bitova ENC i MBR memoriu se u specificirani registar RF polja ili MBR. Upis u specificirani registar RF polja se vri ako su ispunjena sledea tri uslova:
a) ENC = 1
b) trenutak odgovora subciklusa 4
c) C polje specificira registar
Slika 3.56 Detaljan prikaz arhitekture sa Slike 3.53
Upis u MBR se vri u toku subciklusa 4 i ako je upravlja~ki bit MBR=1. Upravlja~ki signali RD i WR, aktivni su onoliko dugo koliko su prisutni u MIR. U sutini odgovarajua MIR polja deluju kao le~evi.
D. Sekvenciranje mikroinstrukcije
Veoma va`no u ovom trenutku je sagledti kako se bira, radi izvrenja, naredna mikroinstrukcija. Ve smo ukazali da se u toku subciklusa 2 MPC inkrementira sa ciljem da uka`e na narednu sekvencijalnu mikroinstrukciju. Ali, pored toga, neophodno je ugraditi i odre|eni mehanizam koji e omoguiti uslovno grananje. U tom cilju u formatu mikroinstrukcije sa Slike 3.54 koriste se dva polja, ADDR koje adresira potencijalni naslednik tekue mikroinstrukcije i polje COND koje odre|uje da li se naredna mikroinstrukcija pribavlja MPC+1 ili ADDR.
Procesori - sinteza staze podataka i upravlja~ka jedinica
61
Izbor naredne mikroinstrukcije vri blok Logika mikrosekvencera (Slika 3.56) u toku subciklusa 4 kada su signali N i Z sa izlaza ALU-a validni. Izlaz ovog bloka upravlja radom (selekcijom) multipleksera Mmux, tj. usmerava MPC+1 ili ADDR ka MPC-u.
U zavisnosti od stanja polja COND izbor naredne mikroinstrukcije se vri na sledei na~in:
00 - naredna mikroinstrukcija se pribavlja sa adrese MPC+1
01 - grananje na AADR ako je N=1
10 - grananje na ADDR ako je Z=1
11 - bezuslovno grananje na ADDR
Ako se MS bit polja COND ozna~i sa L a LS bit sa R tada upravlja~ki signal multipleksera Mmux bie zadat sledeem relacijom
Mmux LRN LRZ LR RN LZ LR= + + = + +
Kada je Mmux=1 multiplekser Mmux usmerava ADDR ka MPC a za Mmux=0 pribavlja se naredna mikroinstrukcija iz sekvence.
E.Skup instrukcija na mainskom jeziku
Mainu koju emo analizirati nazvaemo u daljem tekstu Mac_1. Memorija Mac_1 arhitekture je kapaciteta 4096 * 16 bitova. Programer vidi Mac_1 preko tri registra: SP - pokaziva~ magacina, PC - programski broja~ i AC - akumulator. Ukupno Mac_1 ima implementirana tri adresna rada: direktni, indirektni i lokalni. Rad instrukcija koje koriste direktno adresiranje 12-bitna apsolutna memorijska adresa specificira se pomou 12 LS bitova instrukcije na mainskom nivou. Ove instrukcije pogodne su za pristup globalno promenljivim programskim veli~inama. Indirektno adresiranje omoguava programeru da izra~una adresu, smesti je u AC, a zatim da pristupi memorijskoj lokaciji radi upisa ili ~itanja. Ovaj na~in adresiranja preferira se kod pristupa elementima tipa polje. Lokalnim adresiranjem specificira se ofset u odnosu na SP radi pristupa lokalnim promenljivim
Skup instrukcija arhitekture Mac_1 prikazana je na Slici 3.57.
Binarni oblik Mnemonik Instrukcija Zna~enje
0000xxxxxxxxxxxx LODD Load direct ac:=m[x] 0001xxxxxxxxxxxx STOD Store direct m[x]:=as 0010xxxxxxxxxxxx ADDD Add direct ac:=ac+m[x] 0011xxxxxxxxxxxx SUBD Subtract direct ac:=ac-m[x] 0100xxxxxxxxxxxx JPOS Jump positive if ac≥0 then
pc:=x 0101xxxxxxxxxxxx JZER Jump zero if ac=0 then
pc:=x 0110xxxxxxxxxxxx JUMP Jump pc:=x 0111xxxxxxxxxxxx LOCO Load constant ac:=x(0≤x≤4095
) 1000xxxxxxxxxxxx LODL Load local ac:= m[sp+x] 1001xxxxxxxxxxxx STOL Store local m[x+sp]:=ac 1010xxxxxxxxxxxx ADDL Add local ac:=ac+m[sp+x] 1011xxxxxxxxxxxx SUBL Subtract local ac:=ac-m[sp+x] 1100xxxxxxxxxxxx JNEG Jump negative if ac<0 then
Procesori - sinteza staze podataka i upravlja~ka jedinica
62
pc:=x 1101xxxxxxxxxxxx JNZE Jump nonzero if ac≠0 then
pc:=x 1110xxxxxxxxxxxx CALL Call procedure sp:=sp-1;
m[sp]:=pc; pc:=x
1111000000000000 PSHI Puch indirect sp:=sp-1; m[sp]:=m[ac]
1111001000000000 POPI Pop indirect m[ac]:=m[sp]; sp:=sp+1
1111010000000000 PUSH Puch onto stack sp:=sp-1; m[sp]:=ac
1111011000000000 POP Pop from stack ac:=m[sp]; sp:=sp+1
1111100000000000 RETN Return pc:=m[sp]; sp:=sp+1
1111101000000000 SWAP Swap ac, sp tmp:=as; ac:=sp; sp:=tmp
11111100yyyyyyyy INSP Increment sp sp:=sp+y(0≤x≤255)
11111110yyyyyyyy DESP Decrement sp sp:=sp-y(0≤x≤255)
Slika 3.57 Skup instrukcija na mainskom jeziku arhitekture Mac_1 Napomena: xx . . . x -predstavlja 12-bitnu adresu; yy . . . y predstavlja 8-bitnu konstantu F.Mikroasemblerski jezik
Mikroasemblerski jezik arhitekture Mac_1 zvaemo MAL (Micro Asembly Language). Sa ciljem da se MAL u~ini sli~nim konvenciji koja se koristi kod Pascala identifikatore emo obele`avati malim italic slovima.
Karakteristi~ni slu~ajevi su sledei:
iskaz dodele je oblika
ac:=a + ac
za funkciju ALUa 00, 01, 10 i 11 koristiemo sledeu notaciju:
ac:=a + ac, a:=band(ir,smask), ac:=c, a:=inv(a)
gde se band odnosi na Boolean AND a inv na invertovanje.
notacije lshift i rshift ukazuju na pomeranje ulevo i udesno respektivno. Tako na primer:
tir:=lshift(tir + tir)
postavlja sadr`aj registra tir na obe magistrale Amag i Bmag, obavlja sabiranje, pomera za jedan bit ulevo i smeta rezultat ponovo u tir.
Za bezuslovno grananje koristi se izraz goto
Kod uslovnog grananja testiraju se markeri n i z, tako na primer
if n then goto 27
Procesori - sinteza staze podataka i upravlja~ka jedinica
63
iskaze dodele i grananja mogue je kombinovati u jednu liniju. Problem se javlja kada je potrebno testirati stanje registra a ne vriti upis. Ovaj problem se reava na sledei na~in: Uvodi se pseudo promenlkjiva alu kojoj se dodeljuje vrednost izraza ALU. Tako na primer
alu:=tir; if n then goto 27
ozna~ava da tir prolazi kroz ALU (kôd ALU=10), testira se MS bit n, a bit polje ENC=0.
operacije ~itanje i upis memorije u izvornom programuprate identifikatori rd i wr.
Na Slici 3.58 dati su primeri MAL iskaza i odgovarajui oblik mikroinstrukcije
iskaz
AM
UX
CO
ND
ALU
SH
MB
R
MA
R
RD
WD
EN
C
C
B
A
AD
DR
mar:=pc; rd 0 0 2 0 0 1 1 0 0 0 0 0 00 rd 0 0 2 0 0 0 1 0 0 0 0 0 00 ir:=mbr 1 0 2 0 0 0 0 0 1 3 0 0 00 pc:=pc+1 0 0 0 0 0 0 0 0 1 0 6 0 00 mar:=ir; mbr:=ac; wr
0 0 2 0 1 1 0 1 0 0 3 1 00
alu:=tir; if n then goto 15
0 1 2 0 0 0 0 0 0 0 0 4 15
ac:=inv(mbr) 1 0 3 0 0 0 0 0 1 1 0 0 00 tir:=lshift(tir); if n then goto 25
0 1 2 2 0 0 0 0 1 4 0 4 25
alu:=ac; if z then goto 22
0 2 2 0 0 0 0 0 0 0 0 1 22
ac:=band(ir, amsk); goto 0
0 3 1 0 0 0 0 0 1 1 8 3 00
sp:=sp+(-1); rd 0 0 0 0 0 0 1 0 1 2 2 7 00 tir:=lshift(ir+ir); if n then goto 69
0 1 0 2 0 0 0 0 1 4 3 3 69
Slika 3.58 MAL iskazi
G.Mikroprogram
Struktura mikroprograma (~ini je 79 linija), pomou koje se interpretiraju instrukcije na mainskom jeziku arhitekture Mac_1, prikazana je na Slici 3.59.
Registar IR (Slika 3.53) je instrukcioni registar i koristi se za ~uvanje tekue mikroinstrukcije (opkôd instrukcije na mainskom jeziku koja se pribavlja iz memorije). Registar TIR je privremena kopija registra IR i koristi se za dekodiranje opkôd mainske instrukcije. AMASK je adresna maska, 007777 (oktalno) i koristi se da izdvoji opkôd i adresne bitove, a SMASK je maska magacina, 000377 (oktalno), a koristi se kod instrukcija INSR i DESR za izolaciju 8-bitnog ofseta.
0: mar := pc; rd; glavna petlja
1: pc := pc + 1; rd; inkrementiraj PC
2: ir := mbr; if n then goto 28;
memorii, dekodiraj mbr
3: tir := lshift(ir + ir); if n then goto 19;
4: tir := lshift(tir); if n then goto 11;
000x or 001x?
5: alu := tir; if n then goto 0000 or 0001?
Procesori - sinteza staze podataka i upravlja~ka jedinica
64
9; 6: mar := ir; rd
7: rd;
8: ac := mbr; goto 0;
9: mar := ir; mbr := ac; wr; 0001 = STOD
10: wr; goto 0;
11: alu := tir; if n then goto 9;
0010 or 0011?
12: mar := ir; rd; 0010 = ADDD
13: rd;
14: ac := mbr + ac; goto 0;
15: mar := ir; rd; 0011 = SUBD
16: ac := ac + 1; rd; Napomena: x - y = x + not y
17: a := inv(mbr);
18: ac := ac + a; goto 0;
19: tir := lsift(tir); if n then goto 25;
010x or 011x?
20: alu := tir; if n then goto 23;
0100 or 0101?
21: alu := ac; if n then goto 0;
0100 = JPOS
22: pc := band(ir, amask); goto 0;
obavi grananje
23: alu := ac; if n then goto 22;
0101 = JZER
24: goto 0; bezuslovni skok na po~etak
25: alu := tir; if n then goto 27;
0110 or 0111?
26: pc := band(ir, amask); goto 0;
0110 = JUMP
27: ac := band(ir, amask); goto 0;
0111 = LOCO
28: tir := lshift(ir + ir); if n then goto 40;
10xx or 11xx?
29: tir := lshift(tir); if n then goto 35;
100x or 101x?
30: alu := tir; if n then goto 33;
1000 or 1001?
31: a := ir + sp; 1000 = LODL
32: mar := a; rd; goto 7;
33: a := ir + sp; 1001 = STOL
34: mar := a; mbr := ac; wr; goto 10;
35: alu := tir; if n then goto 38;
1010 or 1011?
36: a := ir + sp; 1010 = ADDL
37: mar := a; rd; goto 13;
38: a := ir + sp; 1011 = SUBL
39: mar := a; rd; goto 16;
40: tir := lshift(tir); if n then goto 46;
110x or 111x
Procesori - sinteza staze podataka i upravlja~ka jedinica
65
41: alu := tir; if n then goto 44;
1100 or 1101?
42: alu := ac; if n then goto 22;
1100 = JNEG
43: goto 0;
44 alu := ac; if z then goto 0;
1101 = JNZE
45: pc := band(ir, amask); goto 0;
46: tir := lshift(tir); if n then goto 50;
47: sp : =sp + (-1); 1110 = CALL
48: mar := sp; mbr := pc; wr;
49: pc := band(ir, amask); wr;goto 0;
50: tir := lshift(tir); if n then goto 65;
1111, ispitati
51: tir := lshift(tir); if n then goto 59;
52: alu := tir; if n then goto 56;
53: mar := ac; rd; 11110000 = PSHI
54: sp : =sp + (-1); rd;
55: mar := sp; wr; goto 10;
56: mar := sp; sp : =sp + ; rd; 1111001 = POPI
57: rd;
58: mar := ac; wr; goto 10;
59: alu := tir; if n then goto 62;
60: sp : =sp + (-1); 1111010 = PUSH
61: mar := sp; mbr := pc; wr; goto 10;
62: mar := sp; sp : =sp + ; rd; 1111011 = POP
63: rd;
64: ac := mbr; goto 0;
65: tir := lshift(tir); if n then goto 73;
66: alu := tir; if n then goto 70;
67: mar := sp; sp : =sp + ; rd; 1111100 = RETN
68: rd;
69: pc := mbr; goto 0;
70: a := ac; 1111101 = SWAP
71: ac := sp;
72: sp := a; goto 0;
73: alu := tir; if n then goto 76;
74: ac := band(ir, smask); 1111110 = INSP
75: sp := sp + a; goto 0;
76: a := band(ir, smask); 1111111 = DESP
77: a := inv(a);
Procesori - sinteza staze podataka i upravlja~ka jedinica
66
78: a := a + 1; goto 75;
Slika 3.59 Struktura mikroprograma
Kao i svi interpreteri, program sa Slike 3.59 ~ini glavna petlja koja pribavlja, dekodira i izvrava instrukcije. Glavna petlja po~inje sa linije 0, tj. pribavljanjem mikroinstrukcije (mainske instrukcije) na koju pokazuje PC. Dok ~eka da pribavi instrukciju, mikroprogram inkrementira PC i zad`ava aktivan signal RD. Instrukcija se pribavlja u toku linije 2, smeta u IR i istovremeno testira MS bit (15 bit). Ako je MS bit jednak jedinici, dekodiranje produ`avanje sa linije 28, a ako nije sa linije 3. Ako usvojimo da je pribavljena instrukcija tipa LODD, na liniji 3 se testira bit 14, a TIR se puni sa po~etnim oblikom instrukcije pomeren ulevo za dve bit pozicije (pomeranje za jedan bit poziciju vri ALU, a za jo jednu Pomera~). Testiranje MS bit pozicije vri se u sutini testiranjem statusnog bita N sa izlaza ALUa.
Sve instrukcije koje imaju 00 na MS bit pozicije na liniji 4 testiraju bit 13, tako da sve instrukcije koje po~inju sa 001 prelaze naliniju 11. Liniju 5 karakterie mikroinstrukcija za koju je ENC=0, tj. testira se TIR ali se ne menja njegov sadr`aj. U zavisnosti od testa, selektuje se kôd LODD ili STOD.
Kod instrukcije LODD, potrebno je prvo pribaviti re~ iz memorije koja se direktno adresira punjenjem 12 LS bitova IR-a u MAR.
Liniju 7 karakterie aktivnost ~ekanja. Kada se re~ dobavi, kopira se u AC i ska~e na liniju 0. Izvrenja instrukcija STOD, ADDD i SUBD su sli~na. Jedina razlika je se sastoji u na~inu izvo|enja oduzimanja. U sutini koristi se prezentacija dvoji~nog komplementa, tako da va`i:
x y x y x y x y− = + − = + + = + +( ) ( )1 1
Dodavanje 1 sadr`aju AC vri se u liniji 16.
Mikrokôd za JPOS po~inje sa linije 21. Ako je AC<0, grananje se vri naliniju 0. Kada je AC≥0, vri se maskiranje 12 LS bitova IR-a a rezultat smeta u PC (maska je 007777 oktalno). JZER (linija 23) radi suprotno od JPOS. Kod JPOS kada je uslov ispunjen grananje se obavlja i vraamo se na liniju 0, dok kod JZER ako je uslov ispunjen, obavlja se grananje. Efekat instrukcije JUMP i LOCO se jasno uo~ava sa sl.7
Sa stanovita izvrenja interesantna je instrukcija LODL. Kod ove instrukcije apsolutna memorijska adresa kojoj se obraamo izra~unava se sabiranjem ofseta, koji je deo instrukcije, sa sadr`ajem SPa. Nakon toga inicira se ciklus ~itanja memorije. Imajui u vidu da je ostatak kôda identi~an kao i LODL i LODD koriste se linije 7 i 8. Analogni kôdovi se koriste za STOL, ADDL i SUBL. Kôd za JNEG i JNZE sli~an je kôdu JZER i JPOS.
Instrukcija CALL prvo dekrementira SP, zatim smeta u magacin povratnu adresu, i kona~no ska~e na proceduru. Ostale mikroinstrukcije imaju 1111 na svim MS bit pozicijama, tako da se na osnovu dekodiranja adresa odre|uje njihov po~etak.
Test pitanje 3.25
Na ta ukazuje pojam paralelne staze podataka?
Odgovor U toku analize prethodnih zadataka opisali smo, uglavnom, strukturu jednostavnih staza podataka, tj. procesora organizovanih oko jedne ili dve magistrale. Ali, na `alost, kod znatnog broja aplikacija koje karakterie rad pri velikim brzinama, jednostavne staze podataka su suvie spore. Zbog toga ako `elimo da poveamo performanse koje se odnose na brzinu obrade neophodno je izvriti redizajn spore staze podataka na takav na~in da ona bude sposobna da izvrava nekoliko operacija paralelno. Ovakvi tipovi staze podataka poznati su kao paralelne staze podataka.
Procesori - sinteza staze podataka i upravlja~ka jedinica
67
Jedno od reenja da se paralelizira staza podataka zasniva se na poveanju broja portova RF polja i korienje nekoliko funkcionalnih jedinica, kako je to prikazano na Slici 3.60.
U konkretnom slu~aju sastavni delovi staze podataka su dva multipleksera MUX_1 i MUX_2, 6-portno RF polje (~etiri porta se koriste za ~itanje a dva za upis), 6 magistrala (~etiri za operande i dve za rezultate), i ~etiri funkcionalne jedinice (ALU, pomera~, mno`a~ i deljitelj). Ovakav tip staze podatatka mo`e da obavlja dve operacije paralelno, jednu u ALU ili pomera~u, a drugu u mno`a~u ili deljitelju.
Staza podataka sa Slike 3.60, zbog ograni~enog broja resursa, karakterie se i ograni~enim paralelizmom. Na primer, ne mo`e istovremeno da obavlja mno`enje i deljenje ili pomeranje i ALU operaciju, jer ove jedinice koriste iste magistrale za izvorne operande i rezultate.
U optem slu~aju, da bi se postigla najbolja uskla|enost izme|u algoritama i staze podataka koja se projektuje shodno potrebama potrebno je koristiti vei broj razli~itih tipova resursa kao to su RF polja, registara, memorija i dr., koji se povezuju preko veeg broja portova na po nekoliko magistrala. Magistrale se uglavnom koriste kao putevi preko kojih se dobavljaju izvorni operandi i putevi preko kojih se rezultati operacija smetaju u memorijskim jedinicama. Mogue je tako|e da u svakoj jedinici bude ugra|eno vei broj ulaznih i izlaznih le~eva u kojima se privremeno pamte ulazni operandi i rezultati. Le~ovanjem mo`e zna~ajno da se skrati vreme koje magistrale koriste za prenos operanda i rezultata a time i povea saobraaj na magistrali. Sa druge strane le~ovanje zahteva neto komplikovanije upravljanje.
Jedan tipi~an primer staze podataka koja koristi jako izra`en paralelizam kod prenosa podataka a koja je namenski projektovana prikazana je na Slici 3.61. Stazu podataka ~ine broja~, registar, tro-portno RF polje i dvo-portna memorija. Sastavni deo strukture su ~etiri magistrale, tri funkcionalne jedinice (dve ALU i jedan mno`a~), vei broj multipleksera i le~eva. Ovakve eme se ~esto sreu kod ASIC kola.
Slika 3.60 Paralelna staza podataka
Procesori - sinteza staze podataka i upravlja~ka jedinica
68
Slika 3.61 Tipi~an primer jedne staze podataka projektovane za specifi~nu aplikaciju
Test pitanje 3.26
Koji tipovi upravlja~kih jedinica postoje?
Odgovor Razli~iti modeli upravlja~kih jedinica i Finite State Machine-a tj., FSM-a, su sli~ni medjusobno jer se sastoje od logike koja odre|uje naredno stanje, registra stanja i izlazne logike. Jedan klasi~an primer upravlja~ke jedinice kod koje registar stanja ~ine D-flip-flopovi a izlazna logika i logika narednog stanja se mo`e implementirati pomou dvo-nivovske AND-OR ili vienivovske logi~ke mre`e, prikazan je na Slici 3.62.
U odre|enim slu~ajevima upravlja~ka jedinica mo`e da ima stotinu stanja, veliki broj ulaza, izlaza i upravlja~kih signala tako da njena implementacija mo`e biti veoma slo`ena. Zbog ovoga koriste se aplikativni stilovi projektovanja koji imaju za cilj da pojednostave implementaciju ovih slo`enih upravlja~kih jedinica.
Sa ciljem da se pojednostavi implementacija izlazne logike i logike narednog stanja koristi se registar stanja i dekoder, kako je to prikazano na Slici 3.63.
Procesori - sinteza staze podataka i upravlja~ka jedinica
69
Slika 3.62 Model upravlja~ke logike
Kod ovog reenja svako stanje identifikuje signal-stanja koji je jednak 1 kada je registar-stanja u tom stanju, dok je u ostalim slu~ajevima 0. Ugradnjom dekodera pojednostavljuje se implementacija logike narednog-stanja kao i izlazne logike ali pojednostavljuju se tako|e i Bulovi izrazi koji se odnose na ulaze registra-stanja, upravlja~ke izlaze staze podataka (interne) i upravlja~ke izlaze (eksterne). U slu~ajevima kada stanje ovih signala zavisi samo od vrednosti registra stanja, isti se mogu implementirati sa n-ulaznim OR logi~kim kolima, gde n predstavlja broj stanja za koje je svaki signal aktivan. Pored toga, oni slu~ajevi kod kojih su ovi signali tako|e zavisni od stanja statusnih ili ulaznih signala, se mogu implementirati pomou AND-OR logike kod koje AND gejtovi imaju obi~no dva ulaza, od kojih jedan predstavlja izlaz dekodera stanja a drugi statusni ili ulazni signal (Slika 3.63).
Logiku narednog stanja mo`emo tako|e zna~ajno redukovati ako po|emo od predpostavke da FSM-ove karakterie bezuslovna sekvenca stanja kod koje svako stanje ima samo jednog naslednika. [ta vie, ako se stanja u toj sekvenci kodiraju tako da se svako kodirano stanje mo`e dobiti inkrementiranjem kodiranog stanja koje odgovara prethodnom stanju, tada se registar stanja mo`e zameniti broja~em. Reenje koje odgovara ovoj alternativi prikazano je na Slici 3.64. U ovom slu~aju, logika_narednog_stanja generie dodatna dva signala: (a) signal punjenje/brojanje, L/C; i (b) signal za selekciju ulaza multipleksera Sel_Mux. Uka`imo da signal L/C mo`e da inkrementira broja~ ili postavlja broja~ u novo stanje koje odgovara adresi grananja. Grananje mo`e biti interno, tj odre|eno od strane logike_narednog_stanja, ili eksterno (informacija o grananju se dobavlja spolja uz pomo upravlja~kih ulaza). Korektna vrednost koja odgovara stanju grananja bira se pomou MUX-1.
Procesori - sinteza staze podataka i upravlja~ka jedinica
70
Slika 3.63 Upravlja~ka jedinica zasnovana na registru-stanja i dekoderu
Slika 3.64 Upravlja~ka jedinica zasnovana na broja~ima
Napomena: L - punjenje (Load); C - brojanje (Count)
Drugi na~in da se modularizira implementacija upravljanja zasniva se na ideji kodiranja ~esto korienih zadataka u obliku potprograma. Na primer, umesto da se ponavlja ista sekvenca nekoliko puta sekvencu je mogue zameniti pozivom potprograma a nakon zavretka potprograma povratkom. Da bi se ovaj princip upravljanja izveo neophodno je da postoji magacin (push down stack) u kome se pamti stanje koje sledi nakon poziva potprograma. Reenje koje koristi ovaj princip rada, prikazano je na Slici 3.65. Kao to se mo`e uo~iti u magacin se ~uva stanje koje sledi nakon tekueg stanja. Nakon zavretka potprograma stanje koje je zapameno u magacinu puni se u registar-stanja. Uo~imo da kod ovog reenja logika_narednog_stanja generie dva dodatna signala koji se koriste za smetanje podataka u magacin (push) i izbavljanje podataka iz magacina (pop).
Procesori - sinteza staze podataka i upravlja~ka jedinica
71
Slika 3.65 Upravlja~ka jedinica zasnovana na rad sa registrom-stanja i magacina
Slika 3.66 Upravlja~ka jedinica zasnovanja na mikroprogramskom upravljanju
Kona~na strategija za pojednostavljenje upravlja~ke jedinice zahteva da se logika narednog-stanja zameni upravlja~kom memorijom, koja se uobi~ajeno implementira pomou ROM ili PROM. Kod ove strategije registar-stanja se koristi kao adresni-registar upravlja~ke memorije. Reenje koje se zasniva na ovom konceptu prikazano je na Slici 3.66. Treba ukazati da se kod ovog projektantskog reenja ograni~ava broj upravlja~kih i statusnih signala koji se koriste za selekciju narednog-stanja, jer se cena upravlja~ke memorije udvostru~ava sa svakim novim upravlja~kim ili statusnim signalom. Zbog toga se koristi samo jedan ulazni ili statusni signal za selekciju narednog stanja, to
Procesori - sinteza staze podataka i upravlja~ka jedinica
72
ograni~ava mogunost grananja na grananje u dva smera (two-way branching). Drugim re~ima, naredna adresa mo`e biti inkrement u odnosu na tekuu ili adresa na kojoj se vri grananje. Grananje u dva smera se implementira pomou dva multipleksera koji se u sutini koriste kao selektori adresa. Postoji tako|e i selektor (multiplekser) uslova koji bira da se jedan od upravlja~kih ili statusnih signala koristi za selekciju naredne adrese. Naredna adresa se bira izme|u inkrementirane tekue adrese ili adrese grananja koja se ~ita iz ROM-a, magacina ili iz spoljnjeg okru`enja. Ovaj stil upravljanja se zove mikroprogramsko upravljanje a ROM u kome se smeta informacija o upravljanju zovemo mikroprogramsku memoriju.
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 izvri sabiranje 100 brojeva shodno sledeoj relaciji:
suma= ∑=
100
1iix
Odgovor Izra~unavanje se mo`e implementirati iterativno, deklarisanjem promenljive suma kao privremene promenljive, inicijalno postavljena na nuli, a izvrenjem sledeih iskaza
suma=0 petlja:
for i=1 to 100 suma=suma + xi
end petlja Telo petlje se mo`e izvriti na 32-bitnoj stazi podataka koju ~ini jedan registar nazvan Akumulator i ALU. Promenljiva suma bie memorisana u Akumulatoru. Pri svakom taktnom intervalu ALU e vriti 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 manipuliu sa podacima obima 32-bita.
Pri svakom taktnom intervalu, specifi~na upravlja~ka re~ definie rad staze - podataka. Da bi odredili sumu od 100 brojeva potrebna su 102 takta intervala. Upravlja~ka re~ bie 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 generie na izlazu.
Procesori - sinteza staze podataka i upravlja~ka jedinica
73
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 izvrenje jednostavnih aritmeti~kih izraza, implementacija komplikovanijih izraza obi~no zahteva korienje 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 smeta 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.
Procesori - sinteza staze podataka i upravlja~ka jedinica
74
ulazni_port
selektorS
456
ALU
MS1
S0
12 pomera~
IL IR
S1
S0
S23
0
711
8-10
12-14
1516-18
ClK
WAWE
RAAREA
RABREB
8*mRF polje
3
3
3
izlazni_port
rezultantna mag.
A Bmag A mag B
"0" "0"
19
a) Staza podataka
M F1 F0 ALU operacija0 0 0 komplement A0 0 1 AND A0 1 0 ExOR A0 1 1 OR A1 0 0 dekrement A1 0 1 Add1 1 0 Sub1 1 1 inkrement Ab) Rad ALU-a
S2 S1 S0 rad Pomera~a0 0 0 prolaz0 0 1 prolaz0 1 0 ne koristi se0 1 1 ne koristi se1 0 0 pomeranje ulevo1 0 1 rotiranje ulevo1 1 0 pomeranje udesno1 1 1 rotiranje udesnoc) 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.24
Koristei stazu podataka sa Slike 3.68, (zadatak 3.23) projektovati strukturu sistema koja e biti u stanju da broji broj jedinica u ulaznoj re~i. Na kraju sekvence brojanja rezultat generisati na izlazni-port.
Odgovor Kod reavanja problema usvajamo da staza podataka prihvata podatke od strane spoljnog okru`enja preko ulaza ulazni-port. Koristiemo promenljive Podatak, Broj, Maska i Privremena za opis algoritama pomou koga brojimo jedinice. Promenljiva Podatak se koristi za ~uvanje podataka kod koga analiziramo broj nula i jedinica. Algoritam nakon toga analizira Podatak po~ev od LSB do MSB i dodaje 1 promenljivoj Broj za svaku jedinicu koju detektuje u Podatak. Promenljiva Maska koristi se za ~uvanje konstante 1, a promenljiva Privremena za privremeno ~uvanje LSB Podatak-a. Nakon inicijalizacije, algoritam izdvaja LSB Podatak-a, smeta ga u Privremena, sabira Privremena sa Broj i smeta u Broj, i kona~no pomera udesno jednu bit poziciju Podatak. Ovu sekvencu treba
Procesori - sinteza staze podataka i upravlja~ka jedinica
75
ponavljati sve dok Podatak ne sadr`i sve nule. Kada je obim re~i Podatak razli~it (recimo 8-, 16-, 64-bitni) algoritam treba da obavlja pomeranje razli~it broj puta u saglasnosti sa obimom re~i.
Na Slici 3.69 a) prikazan je osnovni algoritam za brojanje broja jedinica u re~i podatka. Iskazi 1, 2 i 3 se koriste za inicijalizaciju promenljivih. Iskazi 4 i 5 namenjeni su za dodavanje 1 promenljivoj Broj uvek kada je LSB Podatak-a jednak 1. Iskazom 6 promenljiva Podatak se pomera jedno mesto udesno a istovremeno na mesto MSB Podatak se upisuje 0. Iskaz 7 se koristi za aktiviranje izlaza Izlazni port. Simboli >> i << ukazuju na pomeranje podataka ulevo ili udesno uz iznos pomeranja koji prati simbole, tj. >>1 odgovara pomeranju od jedne bit pozicije udesno.
1. Podatak := ulazni port 2. Broj := 0 3. Maska := 1 while Podatak : ≠ 0 repeat 4. Privremena := Podatak and Maska 5. Broj := Broj + Privremena 6. Podatak := Podatak >>1 end while 7. Izlazni port := Broj
a) Osnovni algoritam za brojanje jedinica
Privremena R4
Broj R3:
Maska R2:
nula R0:
Podatak R1:
b) Dodela registara promenljivim, (Napomena: U R0 se uvek ~uva 0)
upravlja~ke re~i
S adresa upisa
adresa ~itanja A
adresa ~itanja B
ALU operacija
operacija pomeranja
OE
1 1 R1 X X X X 0 2 0 R3 R0 R0 Add prolaz 0 3 0 R2 R0 X Inkrement A prolaz 0 4 0 R4 R1 R2 And prolaz 0 5 0 R3 R3 R4 Add prolaz 0
6 0 R1 R1 R0 Add pomeranje udesno
0
7 0 nijedan R3 R0 Add prolaz 1 c) Upravlja~ke re~i kod broja~a jedinice
Slika 3.69 Algoritam za brojanje jedinica
Procesori - sinteza staze podataka i upravlja~ka jedinica
76
Kod implementacije ovog algoritma moramo prvo promenljivim da dodelimo registre u RF polju. Kao to se vidi sa Slike 3.69 b), promenljivima Podatak, Maska, Broj i Privremena se dodeljuju registri R1, R2, R3 i R4. Nakon to su promenljivime smetene u registre, mogue je napisati korektne upravlja~ke re~i za svaki iskaz sa Slike 3.69 a). Sadr`aj odgovarajuih upravlja~kih re~i prikazan je na Slici 3.69 c), gde se u odgovarajuim kolonama upravlja~ke re~i koriste mnemonici, adrese operanada i specificirani registri.
Da bi upravljali stazom-podataka, usvojiemo da je Broja~-jedinica izveden kao posebni modul koji e po~eti sa brojanjem jedinica u re~i podataka kad je signal Start jednak 1, a postavie Zavrio na 1 kada je rezultat dostupan. Kao to se vidi sa Slike 3.70, FSM prezentacija Broja~a-jedinica ~ini osam stanja. Broja~-jedinica ostaje u stanju S0 sve dok signal Start ne postane 1, a zatim u naredna sedam stanja S1, ......, S7 izvravae algoritam shodno aktivnostima specificiranim na Slike 3.70 a),. Kona~no, u stanju S7, generisae se rezultat, tj. postavie se signal Zavrio na 1, a nakon toga sledi povratak u po~etno stanje S0.
S0
S1
S2
S3
S4
S5
S6
S7
zavr
io=1
poda
tak=
0
podatak=0
start=1
start=0
Podatak=Ulazni_port
Broj=0
Maska=1
Privremena=Podatak and Mask
Broj=Broj+Privremena
Podatak=Podatak>>1 (pomeranje udesno)
Izlazni_port=Broj
Slika 3.70 FSM prezentacija broja~a - jedinica
Logika kontrolera Broja~a-jedinica prihvata dva ulazna signala Start i Podatak ≠ 0 a generie jedan izlazni signal Zavrio. Start i Zavrio se koriste za komuniciranje kod po~etka i zavretka sa ostatkom sistema. Signal Podatak ≠ 0 je u sutini statusni signal koga generie logika staze-podataka. U sutini, u toku svakog taktnog intervala, shodno Slici 3.68, (zadatak 3.23), logika kontrolera mora da generie 20 upravlja~kih signala (upravlja~ku re~ sl. 2b ~ine 20 bitova). Da bi implementirali osam stanja, potrebna su nam tri D-flip-flopa, koje emo ozna~iti kao Q2, Q1 i Q0. Na Slici 3.70 a), b) i c) prikazana je tabela naredno stanje, preslikavanje, i jedna~ine narednog stanja, respektivno.
Start, (Podatak = 0)
Procesori - sinteza staze podataka i upravlja~ka jedinica
77
stanja Q2 Q1 Q0 00 01 10 11 S0 0 0 0 000 000 001 001 S1 0 0 1 010 010 010 010 S2 0 1 0 011 011 011 011 S3 0 1 1 100 100 100 100 S4 1 0 0 101 101 101 101 S5 1 0 1 110 110 110 110 S6 1 1 0 100 111 100 111 S7 1 1 1 000 000 000 000
a) tabela naredno stanje
Q2 = 0 Q2 = 1
start Q1Q0 (Podatak ≠ 0) 00 01 11 10 00 01 11 10
00 000 010 100 011 101 110 000 100 01 010 010 100 011 101 110 000 111 11 001 010 100 011 101 110 000 111 10 001 010 100 011 101 110 000 100
Q2,Q1,Q0 b) Karnaugh-ova mapa
Q2 (naredno)= Q2 Q1 Q0 + Q2 Q1 + Q2 Q0
Q1 (naredno)= Q1 Q0 + Q2 Q1 Q0 + (Podatak=0) Q1 Q0
Q0 (naredno)= Q2 Q1 Q0 + Q2 Q1 Q0 + Start Q1 Q0 + (Podatak=0) Q2 Q0
c) jedna~ine narednog stanja
Slika 3.71 Logika narednog stanja kod Broja~a-jedinica
Upravlja~ka logika Broja~a-jedinica se mo`e izvesti na osnovu upravlja~kih re~i prikazanih na Slici 3.69 c) Na Slici 3.72 a) prikazana je tabela izlazne logike koja se izvodi na osnovu Slike 3.69 c), zamenom korektnih binarnih vrednosti za sve mnemonike. Uo~imo da su minimizirani izrazi za svaki upravlja~ki signal sa Slike 3.69 a) izvedeni shodno tehnikama za minimizaciju. Jedna~ina koje se odnose na upravljanje su date na Slici 3.72 b). Kona~no, na Slici 3.73 prikazana je ema broja~a-jedinica koji koristi stazu podataka prikazanu na Slici 3.68 a).
adresa upisa adresa ~itanja A adresa ~itanja B ALU
operacija
operacija
pomeranja
stanje
Q2, Q1, Q0
S WA2 WA1 WA0 WE RAA2RAA1 RAA0 REA RAB2RAB1 RAB0 REB M S1 S0 S2 S1 S0
OE
S0 0 0 0 0 X X X 0 X X X 0 X X X 0 X X X X X X 0 S1 0 0 1 1 0 0 1 1 X X X 0 X X X 0 X X X X X X 0 S2 0 1 0 0 0 1 1 1 X X X 0 X X X 0 1 0 1 0 0 0 0 S3 0 1 1 0 0 1 0 1 X X X 0 X X X 0 1 1 1 0 0 0 0 S4 1 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 S5 1 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 0 S6 1 1 0 0 0 0 1 1 0 0 1 1 X X X 0 1 0 1 1 1 0 0 S7 1 1 1 0 X X X 0 0 1 1 1 X X X 0 1 0 1 0 0 0 1
a) izlazi logi~ke tabele
IE= Q2 Q1 Q0 RAA2=0 RAB2= Q0 M= Q1+ Q0
Procesori - sinteza staze podataka i upravlja~ka jedinica
78
WA2= Q1 Q0
WA1=Q2Q0+ Q2 Q1
WA0= Q1 Q0+Q1 0Q
WE=Q2 Q1 + 2Q Q0+Q1 0Q
RAA1= Q0 RAA0=1 REA= Q1
RAB1= 0Q
RAB0=0
REB= Q2 1Q
S1= Q2 Q0
S0=1 S2=S1= Q2 Q1 0Q S0=0 OE= Q2 Q1 Q0
b) Jedna~ine koje definiu stanje izlaznih signala upravlja~ke logike
Slika 3.72 Izlazna logika kontrolera Broja~a-jedinica
Slika 3.73 Struktura logike broja~-jedinica
Procesori - sinteza staze podataka i upravlja~ka jedinica
79
Zadatak 3.25
Projektovati red ~ekanja tipa FIFO, kapaciteta 1k RAM koji e biti prazan kada pokaziva~i zaglavlja i repa ukazuju na istu lokaciju, a pun kada se pokaziva~i zaglavlja i repa razlikuju za 1
Zadatak 3.26
Projektovati stazu podataka koja se koristi za izra~unavanje sledeih izraza:
∑=
⋅n
iii xa
1
i
n
iii bxa +⋅∑
=1
∑=
++n
iiii cxx
1
2
Zadatak3.27
Neka je staza podataka, prikazana na Slici 3.68 (zadatak 3.23), obima 8 bita.
(a) Kreirati algoritam za sabiranje dve pozitivne celobrojne 8-bitne vrednosti i generisanje 9-bitnog rezultata. Odrediti sadr`aj upravlja~ke re~i za svaki iskaz algoritma.
(b) Definisati i implementirati upravlja~ku jedinicu (kontroler) za stazu podataka, koja e izvravati algoritam definisan pod a).
Zadatak 3.28
Projektovati RF polje kapaciteta 8*n sa:
1. jednim portom za upis i dva za ~itanje;
2. dva porta za upis i jednim za ~itanje;
3. dva porta za upis i dva za ~itanje.
Zadatak 3.29
Koristei tro-adresne instrukcije, kreirati programke sekvence koje se koriste za ~itanje i upis u:
a) magacin koji raste nani`e;
b) red ~ekanja tipa FIFO;
c) red ~ekanja tipa LIFO.
Zadatak 3.30
Kreirati procedure za ~itanje i upis u red ~ekanja tipa FIFO. Format instrukcija je dvo-adresni. Procedure kreirati koristeisledee adresne na~ine rada:
(i) direktno adresiranje;
(ii) indirektno adresiranje;
(iii) relativno adresiranje.
Procesori - sinteza staze podataka i upravlja~ka jedinica
80
Zadatak 3.31
Kreirati procedure za izbacivanje i umetanje elemenata u listi. Usvojiti da svaka lista elemenata koristi dve memorijske re~. Prva re~ predstavlja vrednost elementa a druga adresu narednog elementa u listi. Koristiti isklju~ivo tro-adresni format instrukcija, za sledee adresne na~ine rada: (a) direktno adresiranje; (b) indirektno adresiranje.
Zadatak 3.32
Napisati sekvencu instrukcija za hipoteti~ki procesor koja se koristi za izra~unavanje izraza:
∑=
⋅100
1iii xa , pri ~emu je: A=[a1, a2, ..., a100] i X=[x1, x2, ..., x100]. Koristiti dvo-adresne instrukcije za
sledee adresne na~ine rada: a) direktno adresiranje; b) relativno adresiranje; c) indeksno adresiranje sa auto-inkrementiranjem.
Test pitanje 3.27
Objasniti princip rada struktura na Slici 3.74.
Odgovor a) Na osnovu tablice istinitosti:
c1 c2 funkcija
0 1 Apsolutna vrednost
1 0 Minimun
1 1 Maksimum
zaklju~ujemo da se radi o jedinici za izra~unavanje minimuma (od a i b), maksimuma i apsolutne vrednosti.
b) Na osnovu tablice istinitosti:
c1 c0 funkcija
0 0 Sabiranje
0 1 Minimun
1 0 Oduzimanje
1 1 Maksimum
zaklju~ujemo da se radi o jedinici za izra~unavanje zbira, razlike, munimuma i maksimuma.
c) Na osnovu tablice istinitosti:
c1 c0 funkcija
1 0 Sabiranje
0 1 Apsolutna vrednost
1 1 Oduzimanje
zaklju~ujemo da se radi o jedinici za izra~unavanje zbira, apsolutne vrednosti i razlike
Procesori - sinteza staze podataka i upravlja~ka jedinica
81
Sabira~
MUX01
MUX01
C1
C0
Bit znaka
a b
Sabira~
MUX01
MUX01
C1
C0
Bit znaka
a b
Sabira~
MUX01
C1
C0
Bit znaka
a b
C0
Bit znaka
a b
Sabira~
MUX01
C2
C1
MUX01
a) b)
c) d)
Slika 3.74 Tipovi kola za procesiranje
d) Na osnovu tablice istinitosti:
c2 c1 c0 funkcija
0 0 1 Sabiranje
1 0 0 Apsolutna vrednost
1 0 1 Oduzimanje
1 1 0 Minimun
1 1 1 Maksimum
zaklju~ujemo da se radi o jedinici za izra~unavanje zbira, apsolutne vrednosti, razlike, munimuma i maksimuma.
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).
Procesori - sinteza staze podataka i upravlja~ka jedinica
82
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ôd R0 000 Registar 0 F=1 00000 Funkcija 0 nema Write 0 R1 001 Konstanta 1 F =A+1 00001 ulaz podataka 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
Procesori - sinteza staze podataka i upravlja~ka jedinica
83
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 smetanje rezultata u R1 definisana kao:
R1←R2+R3 +1, kodira se na sledei na~in:
Polje: DA AA BA MB FS MD RW Simbol: R1 R2 R3 Registar F=A+/B+1 Funkcija WriteBinarna vrednost:
001 010 011 0 00101 0 1
Odrediti sadr`aj svih polja upravlja~ke re~i sa Slike 3.75 b), za sledee 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 sledei na~in:
mikro operacija DA AA BA MB F3 MD RW R1←R2+/R3+1 R1 R2 R3 Registar F=A+/B+1 Funkcija 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 - Konstanta F=A+B Funkcija Write izlaz podatka←R3
- - R3 Registar - - nema Write
R4← ulaz podatka
R4 - - - - ulaz podatka Write
R5← 0 R5 R0 R0 Registar F=AÅB Funkcija Write Binarno upravlja~ka re~, za odgovarajuu operaciju, kodirana je na sledei na~in:
mikrooperacija DA AA BA MB FS MD RWR1←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
Procesori - sinteza staze podataka i upravlja~ka jedinica
84
R5←0 101 000 000 0 01100 0 1
Zadatak 3.34
Specificirati sadr`aj upravlja~ke re~i kod staze podataka sa Slike 3.75 a) (zadatak 3.33), sa ciljem da se implementiraju sledee mikrooperacije:
a) R3←R5-R2 b) R2←ulaz podatka c) R6 ← 0 d) R1 ← R0+1 e) R4 ← srR3 f) R7 ← R5 + ulaz konstante g) R3 ← R2 Å R7 h) R2 ← sl R3
Zadatak 3.35
Staza podataka procesora i odgovarajua upravlja~ka re~ definisane su na Slici 3.75 (zadatak 3.33). Registri RF polja su obima 8 bitova i inicijalno su postavljeni na sledee vrednosti: R0=0, R1=1, R2=2, ... , R7=7. tj. Ri=i (i=0,...,7).
Odrediti koji se tip mikrooperacije obavlja za sledee kôdove:
a1) 110 100 101 0 01000 01 a2) 110 001 100 0 00101 01 a3) 101 010 000 0 10000 01 a4) 101 000 000 0 00000 11 a5) 111 111 000 1 01100 01 a6) 010 000 000 0 01100 01
Odrediti sadr`aj registara RF polja nakon izvrenja svake mikrooperacije.
Test pitanje 3.28
[ta predstavlja pojam barel-pomera~?
Odgovor Barel (barrel) pomera~ je digitalno kolo koje mo`e da odjednom pomeri ulaznu informaciju za proizvoljan broj bit pozicija. Na primer, kod barel- pomera~a sa osam ulaza, u jednom prolazu, ulaz mo`e rotirati od 0 do 7 pozicija. Barel pomera~i se koriste za implementaciju operacija bit-ekstrakcije koje su podr`ane od strane velikog broja skupova instrukcija ra~unara.
Opisaemo rad ovog pomera~a na sledei na~in:
Ozna~imo 8 ulaznih podataka sa D7, D6, ..., D0, 8 izlaznih podataka sa O7, O6, ..., O0, a tri upravlja~ka ulaza sa S2, S1 i S0. Pomera~ mo`e da realizuje 8 izlaznih funkcija, pri ~emu svaka zavisi od 11 ulaza: S2, S1, S0, D7, D6, ..., D0. Najjednostavniji na~in da se razume ponaanje pomera~a je tabulacija izlaznih vrednosti u upravlja~kih signala, kako je to prikazano na Slici 3.76.
S2S1S0 O7 O6 O5 O4 O3 O2 O1 O0
Procesori - sinteza staze podataka i upravlja~ka jedinica
85
000 D7 D6 D5 D4 D3 D2 D1 D0
001 D6 D5 D4 D3 D2 D1 D0 D7
010 D5 D4 D3 D2 D1 D0 D7 D6
011 D4 D3 D2 D1 D0 D7 D6 D5
100 D3 D2 D1 D0 D7 D6 D5 D4
101 D2 D1 D0 D7 D6 D5 D4 D3
110 D1 D0 D7 D6 D5 D4 D3 D2
111 D0 D7 D6 D5 D4 D3 D2 D1
Slika 3.76 Funkcije koje obavlja barel pomera~
Izlazi u funkciji 11 ulaznih signala se mogu opisati sledeim relacijama:
0S2S1S0D...S0D6S1S2D7S0S1S2O7 +++=
S2S1S0D7...S0D5S1S2D6S0S1S2O6 +++=
. . .
1S2S1S0D...S0D7S1S2D0S0S1S2O0 +++=
Analizom Boole-ovih jedna~ina, mo`emo da zaklju~imo sledee: Sve kombinacije ulaza Si su potrebne kod svake funkcije i svaki izlaz Dj se javlja u ta~no jednom ~lanu tipa suma proizvoda. U konkretnom slu~aju, to zna~i da za implementaciju sa diskretnim gejtovima, po jednoj funkciji, bie potrebno 8 ~etvoroulaznih gejtova i jedan osmoulazni. Ukupno, za ceo pomera~, potrebno je 32 ~etvoroulazna i osam osmoulaznih gejtova.
Alternativno reenje se zasniva na korienju multipleksera. Nije teko uo~iti da se svaki ulaz mo`e implementirati pomou multipleksera tipa “8 na 1”, kako je to prikazano na Slici 3.77.
MUX
O0
S2S1S0
D0 D1 D2 . . . D6 D7
MUX
O1
D0 D1 D2 . . . D6 D7
MUX
O7
D0 D1 D2 . . . D6 D7
S2S1S0
S2S1S0
Slika 3.77 Barel pomera~ implementiran pomou osam multipleksera tipa 8_na_1
4. RISC procesori
4-1
4. RISC procesori
ö õ
Konvencije kod korienja registara MIPS-a
ime broj registra korienje 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 sledei iskaz programskog jezika C na asemblerski jezik mikroprocesora MIPS.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-2
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.
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 sledei 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
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 sledei 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 smeta na lokaciji tipa re~ koja neposredno sledi iza lokacije zadnjeg elementa vektora A[9].
Odgovor
4. RISC procesori
4-3
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
a10A9=2640
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 kd mikroprocesora MIPS za odgovarajui kdni 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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-4
Test pitanje 4.4 Neka je dat vektor A koga ~ine 400 elemenata. Elementi vektora su tipa re~ (32-bitni). Ako usvojimo da se u registru $t1 ~uva bazna adresa polja A a u $s2 promenljiva h, tada se sledei iskaz na programskom jeziku C.
A[300] = h + A[300]; kompajlira u
Lw $t0,1200($t1) #A[300]->$t0 Add $s0,$s2,$t0 #$s0 = h + $t0 Sw $s0,1200($t1) #$t0->A[300]
Kakav e biti kôd na mainskom jeziku mikroprocesora MIPS za ove tri instrukcije?
Odgovor opkod rs rt rd adresa/iznos
pomeranja funkcija
• 35 9 8 1200
0 18 8 8 0 2
43 9 8 1200
Odgovarajui binarni ekvivalent imae oblik:
100011 01001 01000 0000 0100 1011 0000
000000 10010 01000 01000 00000 000010
101011 01001 01000 0000 0100 1011 0000
Zadatak 4.1
(a) U sledeem 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 smetene u pet registra $s0 do $s4, respektivno. Kakav e biti kompilovani kod mikroprocesora MIPS?
(b) Koristei iste promenljive i registre iz slu~aja pod (a) kompajliraj sledei 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)
4. RISC procesori
4-5
i==j?
f=g+h f=g-h
i=j i≠j
Else:
Izlaz:
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: ---
Zadatak 4.2 Neka je data sledea 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 kd za odgovarajuu 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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-6
Neka je data sledea 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 odgovarajui segment na C-u?
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.6 Objasni efekat instrukcije Slt.
Odgovor Testiranje na jednakost ili nejednakost je verovatno najpopularniji test, ali je ponekad po`eljno da se proveri da li je neka promenljiva manja od druge promenljive. Na primer, kod petlje tipa for ~esto je po`eljno proveravati da li je indeksna promenljiva manja od 0. Ovo uporedjenje kod asemblerskog jezika na mikroprocessoru MIPS obavlja se instrukcijom Slt. Instrukcija Slt uporedjuje dva registra i postavlja trei na 1 ako je prvi manji od drugog, ina~e postavlja trei registar na 0.
Tako na primer, instrukcija
Slt $t0, $s3, $s4
postavie $t0 na 1 ako je sadr`aj $s3 manji od sadr`aja $s4, ina~e e registar $t0 biti postavljen na 0.
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 vri 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 bess than)
Zadatak 4.3 Neka jed dat sledei 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 */
4. RISC procesori
4-7
case 3: f = i - j ; break; /* k = 3 */
Usvojimo da se est promenljivih, od f do k, ~uvaju u odgovarajuih est registara $s0 do $s5, a da se u $t2 smeta 4. Napisati odgovarajui 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, podeavanje indeksa tabele Add $t1,$t1,$t1 # $t1 = 4 * k, svaki podatak je 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 sledei na~in:
Add $t1,$s1,$s1 # $t1 = adresa Jump Tabela[k] Lw $t0,0($t1) # $t1 = Jump Tabela[k] # skok se sada obavlja sledeom 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: .... # zavretak iskaza switch
Zadatak 4.4
Neka je data sledea procedura na programskom jeziku C:
int primer_1 (int g, int h, int i, int j)
int f; f = (g + h) - (i + j); return f; Napomena: Parametarske promenljive g, h, i, i j ~uvaju se u argument regstrima $a0, $a1, $a2 i $a3, a promenljiva f u registru $s0.
Kakav e biti kompajliran kôd na asemblerskom jeziku mikroprocesora MIPS?
Odgovor # kompajlirani program mora da po~ne na adresi koja je difinisana labelom # procedure a u konkretnom slu~aju je to primer_1. U toku izvrenja procedure # koristiemo registre $s0, $t0 i $t1 pa zbog toga njihov sadr`aj, odmah nakon # ulaska u proceduru, sa~uvaemo u magacin. Sekvenca kojom se u magacinu kreira # prostor od tri re~i a zatim smetaju stare vrednosti, ima oblik:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-8
primer_1: Sub $sp,$sp,12 # oslobodi prostor u magacinu za 3 elementa Sw $t1,8($sp) # sa~uvaj $t1 Sw $t0,4($sp) # sa~uvaj $t0 Sw $s0,0($sp) # sa~uvaj $s0 # izgled magacina pre, u toku, i nakon izvrenja procedure # primer_1 prikazan je na Slici 4.1 telo procedure ~ine sledee tri naredbe Add $t0,$a0,$a1 # $t0 = g + h Add $t1,$a2,$a3 # $t1 = i + j Sub $s0,$t0,$t1 # $t1 = f = (g + h) - (i + j) # vrednost koju procedura vraa kao rezultat smeta se u registar $v0
Add $v0,$s0,$zero # $v0 = $s0 + 0 # pre povratka iz procedure treba obnoviti stare vrednosti registara $s0, $t0 i $t1, tj. obaviti operacije Pop Lw $s0,0($sp) # Pop $s0 Lw $t0,4($sp) # Pop $t0 Lw $t1,8($sp) # Pop $t1 Add $sp,$sp,12 # podesi magacin da izbaci tri elementa # procedura zavrava sledeom instrukcijom: Jr $ra # povratak pozivnoj rutini
Zadatak 4.5
Cilj ovog zadatka je da uka`e na na~in korienja ugnje`djenih procedura.
Kao prvo, proceduru koja ne poziva na dalje druge procedure, naziva se procedura tipa list (leaf). Kada jedna procedura pozove drugu, a druga treu, i td., ka`emo da dolazi do gne`djenja (nesting). Rekurzivne procedure nazivamo one koje pozivaju same sebe. Kada se govori o mikroprocesoru MIPS analiziraemo sledei scenario: Neka glavni program pozove proceduru A, prethodno prenosei argument ~iju vrednost 3 smeta u registar $a0, a zatim sledi izvrenje instrukcije Jal A. Pretpostavimo, sada, da procedura A poziva proceduru B uz pomo instrukcije Jal B prenosei argumenat ~ija je vrednost 7, koga smeta u registar $a0. S obzirom da procedura A jo nije zavrena, postoji mogui konflikt oko korienja registra $a0. Na sli~an na~in postoji takodje konflikt koji se odnosi na povratnu adresu koja se ~uva u $ra, imajui u vidu da se u registru $ra sada nalazi (~uva se) povratna adresa za proceduru B. Da ne bi dolazilo do konflikata potrebno je preduzeti odgovarajue korake. Jedno od reenja je sledee: Smestiti u magacin (push) sadr`aj svih registara koje e pozvana procedura koristiti. Argumenti koji se prenose smetaju se u registre $a0 do $a3 ili u $t0 do $t9. Takodje u magacin se smeta stanje registra $ra i svih, ili nekih, od registara $s0 do $s7. Pokaziva~ magacina se podeava da uka`e na broj registara koji se smeta u magacin. Nakon povratka iz procedure, obnavlja se stanje registara a pokaziva~ magacina podeava da poka`e na korektnu vrednost (lokaciju).
4. RISC procesori
4-9
$sp
ni`eadrese
$sp
vieadrese
a) b) c)Napomena: SP uvek pokazuje na punu lokaciju
$sp
sadr`aj registra$t1
sadr`aj registra$t0
sadr`aj registra$s0
Slika 4.1 Vrednosti pokaziva~a magacina i magacina :
(a) pre poziva procedure; (b) u toku izvrenja procedure; (c) nakon povratka iz procedure
Da bi ukazali na ovaj problem sa neto vie detalja analiziraemo jednu rekurzivnu proceduru na C-u koja se koristi za izra~unavanje faktorijela:
int fakto (int n)
if (n < 1) return (1); else return (n * faktor(n - 1));
Kakav e biti kompilovani MIPS-ov asemblerski kôd?
Odgovor # Parametarsku promenljivu n pozivni program predaje preko registra $a0. # Kompajlirani program po~inje instrukcijom ispred koje stoji labela fakto, zatim se # u magacin smetaju povratna adresa i stanje registra $a0.
fakto: Sub $sp,$sp,8 # podesi magacin za dva elementa
Sw $ra,4($sp) # sa~uvaj povratnu adresu Sw $a0,0($sp) # sa~uvaj vrednost argumenta n
# prvi put kada se procedura fakto pozove instrukcija Sw smeta u magacin adresu # programa iz koga je izvren poziv. Naredne dve instrukcije testiraju if n < 1, ako # je n >= 1 go to L1. Slt $t0,$a0,1 # testiraj za n < 1 BEQ $t0,$zero,L1 # if n >= 1, go to L1 # Ako je n < 1, procedura fakto vraa vrednost 1 upisom 1 u registar $v0, tj sabira 1 # i 0 i smeta rezultat u $v0. Zatim izbavlja iz magacina obe zapamene vrednosti i
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-10
# ska~e na povratnu adresu: Add $v0,$zero,1 # povratna vrednost = 1 Add $sp,$sp,8 # Pop dva elementa magacina Jr $ra # povratak na instrukciju nakon Jal # Pre izbavljanja dve stavke iz magacina treba napuniti $a0 i $ra. S obzirom da se # $a0 i $ra ne menjaju kada je n < 1 ove dve instrukcije se preska~u. # Ako n nije manje od 1, dekrementira se vrednost argumenta, a zatima poziva # procedura fakto sa dekrementiranom vrednou n: L1: Sub $a0,$a0,1 # n > = 1 : argument postaje (n - 1) Jal fakto # Call fakto sa (n - 1)
# Naredna instrukcija je ona koja se odnosi na povratak iz procedure fakto. Sada se # obnavlja stara povratna adresa i stara vrednost argumenta, zajedno sa pokaziva~em magacina: Lw $a0,0($sp) # povratak iz Jal: obnovi argument n Lw $ra,4($sp) # obnovi povratnu adresu Add $sp,$sp,8 # podesi pokaziva~ magacina za pop dva elementa # Nakon ovoga u registar $v0 treba smestiti proizvod starog argumenta i tekue # vrednosti. Ovo se obavlja na sledei na~in:
Mult $v0,$a0,$v0 # povratna vrednost n * fakto (n - 1) # Kona~no fakto ska~e ponovo na povratnu adresu
Jr $ra # povratak pozivnom programu
Na Slici 4.2 prikazano je koje se vrednosti ~uvaju u magacinu, a koje ne, u toku poziva procedure.
~uvaju se ne ~uvaju se
argument registri: $a0-$a3 registri povratne vrednosti: $v0-$v1
registri za ~uvanje promenljivih:$s0-$s7 registri za ~uvanje privremenih: $t0-$t9
pokaziva~ magacina: $sp
registar povratne adrese: $ra
magacin iznad pokaziva~a magacina magacin ispod pokaziva~a magacina
Slika 4.2 [ta se pamti, a ta ne, u magacinu
Test pitanje 4.8 Da li se kod mikroprocesora MIPS, osim registarskog, koristi i neki drugi na~in za prenos parametara izmedju pozivne i pozvane procedure?
Odgovor Magacin se, takodje, koristi kao medijum za prenos parametara, obi~no kada je njihov broj veliki tako da se svi podaci ne mogu smestiti u registre, ili kada se prenose strukture tipa polja/vektori. Segment magacina u kome se ~uva stanje registara (koje je potrebno zapamtiti kao lokalne promenljive) naziva se okvir procedure ili aktivacioni zapis. Na Slici 4.3 prikazano je stanje magacina pre, nakon, i posle poziva procedure.
Kao to se vidi sa Slike 4.3, softver mikroprocesora MIPS koristi pokaziva~ okvira ($fp - frame pointer) koji pokazuje na prvu re~ okvira procedure. Obi~no pokaziva~ magacina ($sp) menja svoju
4. RISC procesori
4-11
vrednost u toku izvrenja procedure. Ove promene rezultiraju reazli~itim ofsetima (pomerajima) u toku izvrenja procedure u odnosu na pristup promenljivima, pa je zbog toga taj pristup teko razumljiv i ote`an. Sa druge strane, $fp karakterie stabilna bazna adresa tako da je obraanje promenljivima razumljivo za programera i relativno jednostavno.
Test pitanje
Zato su programi za RISC mikroprocesore du`i od programa CISC mikroprocesa?
Test pitanje
[ta je to Harvard arhitektura? Da li je ona karakteristi~na samo za RISC-ove? Da li CISCsistem mo`e da koristi Harvard arhitekturu?
Test pitanje
[ta predstavlja pojam zakanjeno grananje?
$sp
ni`eadrese
$sp
vieadrese
a) b) c)
$sp
sa~uvani argument-registri, ako ih ima
$t1
zapameno stanjeregistara za ~uvanjepromenljivih, ako
ih ima
lokalna polja istrukture, ako ih
ima
$fp $fp
$fp
zapamena adresapovratka
Slika 4.3 Dodela prostora magacina (a) pre; (b) u toku; (c) nakon poziva procedure
Test pitanje 4.9
Koje instrukcije koristi procesor MIPS radi: ~itanje podatka tipa bajt iz memorije i njegovo smetanje na mesto LS bajta registra $t0
upis podatka tipa bajt u memoriju ako se isti pribavi iz LS bajta registra $t0.
Odgovor
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-12
(a) Lb $t0,0($sp) # ~itanje bajta iz izvorita (b) Sb $t0,0($gp) # upis bajta u odredite
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 podeava prvo sp a zatim smeta $s0 u magacin kopiniz:Sub $sp,$sp,4 #podeavanje magacina za vie 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 smeta u $t3 a nakon toga znak iz $t2 na tu adresu: Add $t3,$a0,$s0 # adresa od x[i] u $t3 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 izvriti povratak: Lw $s0,4($sp) # y[i] = = 0; kraj niza obnovi staru vrednost $s0 Add $sp,$sp # izbavi jednu re~ iz magacina
4. RISC procesori
4-13
Jr $ra # povratak
Test pitanje 4.10
Napisati programsku sekvencu kojom se pokaziva~u magacina $sp, mikroprocesora MIPS, dodaje konstanta vrednost.
Odgovor Lw $t0,konst($zero) # $t0 = konstanta Add $sp,$sp,$t0 # $sp = $sp + $t0
Ili, alternativno reenje bi bilo: Addi $sp,$sp,konst # $sp =$sp + konstanta
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 vee te`ine, 61 decimalno, pomou 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 sledei na~in:
Addi $s0,$s0,2304
# 2304 decimalno = 0000 1001 0000 0000 binarno # kona~na vrednost $s0 bie 0000 0000 0011 1101 0000 1001 0000 0000
Test pitanje 4.12
Za klasi~nu petlju na C-u:
while (sima[i] = = k) i = i + j;
odgovarajui kompajlirani kôd na semblerskom jeziku mikroprocesora MIPS je sledei:
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 izvrava po~ev od memorijske lokacije 80000, kakav e biti mainski kôd mikroprocesora MIPS za datu petlju?
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-14
Odgovor U sledeoj tabeli prikazana je sekvenca izvrenja, pri ~emu je, za svaku instrukciju dat njen format i odgovarajua 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...
Test pitanje 4.13
Neka je data sledea instrukcija grananja:
BEQ $s0,$s1,L1 # if($s0 = = $s1) go to L1
Zameniti je parom instrukcija koje nude veu distancu grananja.
Odgovor BNE $s0,$s1,L2 # preskok za jednu instrukciju
J L1 L2: ...
Test pitanje 4.14
Za MIPS-ov kôd koji sledi,opii koju aktivnost obavlja. Usvojimo da se $a0 koristi ulazni registar podataka i inicijalno sadr`i n, pozitivna celobrojna vrednost, a registar $V0 kao izlazni.
Pocetak: Addi $t0,$zero,0 Addi $t1,$zero,1 Ponovi: Slt $t2,$a0,$t1 BME $t2,$zero,Kraj Add $t0,$t0,$t1 Addi $t1,$t1,2 J Ponovi Kraj : Addi $v0,$t0,$zero
Odgovor Uokvireni i rafirani deo koji se odnosi na komentar, predstavlja deo odgovora. Prikazanom programskom sekvencom izra~unava se zbir neparnih brojeva do najveeg neparnog
# $t0 = 0 + 0 # $t1 = 0 + 1 # if($a0<$t1) $t2 =1, else $t2= 0 # if($t2 !=$zero) go to Kraj # $t0 = $t0 + $t1 # $t1 = $t1 + 2 # go to Ponovi # $v0 = $t0 + 0
4. RISC procesori
4-15
broja koji je manji ili jednak inicijalnoj vrednosti n, tj odredjuje se vrednost 1 + 3 + 5 + ... + n (ili n - 1 ako je n paran broj).
Test pitanje 4.15 Programski segment koji sledi koristi se za procesiranje strukture podataka tipa niz a kao rezultat generie dve va`ne vrednosti koje se smetaju u registre $v0 i $v1. Usvojimo da niz ~ine 5000 re~i koje se indeksiraju po~ev od 0 do 4999, da se bazna adresa niza ~uva u registru $a0, a obim (veli~ina = 5000) u registru $a1.
U kratkim crtama ukazati koju aktivnost ovaj kôdni segment obavlja, i koje se vrednosti smetaju u $v0 i $v1.
Odgovor Add $a1,$a1,$a1 Add $a1,$a1,$a1 Add $v0,$zero,$zero Add $t0,$zero,$zero Iznova: Add $t4,$a0,$t0 Lw $t4,0($t4) Add $t5,$zero,$zero Add $t1,$zero,$zero Ponovi: Add $t3,$a0,$t1 Lw $t3,0($t3) BNE $t3,$t4,Skok Addi $t5,$t5,1 Skok : Addi $t1,$t1,4 BNE $t1,$a1,Ponovi Slt $t2,$t5,$v0 BNE $t2,$zero,Naredni Add $v0,$t5,$zero Add $v1,$t4,$zero Naredni: Addi $t0,$t0,4 BNE $t0,$a1,Iznova Ovom kôdnom sekvencom odredjuje se koja se re~ naj~ee javlja u nizu. Takodje, pomenuta re~ se upisuje u $v1, a vrednost koja ukazuje na to koliko se puta ona pojavljuje u nizu, ~uva se u registru $v0.
Test pitanje 4.16
Usvojimo da se kôdni segment iz prethodnog test pitanja izvrava na maini ~ija je taktna frekvencija 500MHz, a vreme izvrenja odgovarajuih instrukcija je dato sledeom tabelom:
instrukcija taktni intervali
Add, Addi, Slt 1
Lw, BNE 2
Za najgori slu~aj, odredi koliko je vremena potrebno da se izvri pomenuta programska sekvenca?
Odgovor Ako zanemarimo 4 instrukcije pre petlje, uo~avamo da spoljnu petlju koja se izvrava 5000 puta, u najgorem slu~aju, ~ine 4 instrukcije pre unutranje petlje i 6, nakon unutranje petlje. Vreme potrebno
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-16
da se izvre ovi delovi petlje iznosi 1+2+1+1=5 taktna intervala (odnosi se na instrukcije Add, Lw, Add i Add) i 1+2+1+1+1+2=8 taktnih intervala (odnosi se na instrukcije Slt, BNE, Add , Add, Addi i BNE), to ukupno iznosi 13 taktnih intervala po iteraciji, ili 5000*13 po spoljnoj petlji. Za unutranju petlju potrebno je 1+2+2+1+1+2=9 taktnih intervala po iteraciji (~ine je instrukcije Add, Lw, BNE, Addi, Addi i BNE), a ona se ponavlja 5000*5000 puta. To zna~i da je ukupno potrebno vreme u trajanju od 9*5000*5000 taktnih intervala. Prema tome, ukupno vreme izvrenja bie aproksimativno:
tu = (5000*13 + 9*5000*5000)/(500*106) = 0,45 s
Na osnovu dobijene vrednosti za tu vidimo da dominantni uticaj na vreme izvrenja programske sekvence ima unutranja petlja.
Test pitanje 4.17 Koja je minimalna sekvenca instrukcija potrebna da mikroprocesor MIPS izvri sledei iskaz na C-u:
x = y + 300 Napomena: Usvojimo da se vrednost x ~uva u registru $t0, a vrednost y u registru $t1.
Odgovor Addi $t0,$t1,300
Test pitanje 4.18
Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora MIPS koja odgovara sledeem iskazu na C-u:
x[8]= x[12] + b Napomena: Usvojimo da se b ~uva u registru $t0, a bazna adresa polja x iznosi 4.000.000 (decimalno).
Odgovor Binarni ekvivalenat bazne adrese x je: 4.000.000(decimalno) = 0000 0000 0011 1101 0000 1001 0000 0000(binarno)
Ova vrednost ukazuje da je neophodno koristiti naredbu Lui kako bi napunili registar $t1 baznom adresom:
Lui $t1,0000000000111101 # MS adresa u MS deo $t1 Ori $t1,$t1,0000100100000000 # MS adresa logi~ka OR sa LS adresom u $t1 Lw $t2,48($t1) # $t2 = x [12] Add $t2,$t2,$t0 # $t2 = x [12] + b Sw $t2,36($t1) # $t2 ->M(x[8])
Zadatak 7 Sledea programska sekvenca se koristi za kopiranje 32-bitnih re~i sa adrese na koju pokazuje sadr`aj registra $a0, na adresu na koju pokazuje $a1, pri ~emu sadr`aj registra $v0 ukazuje na broj kopiranih re~i. Program zaustavlja kopiranje kada naidje na re~ ~ija je vrednost 0. Zadnju re~ treba kopirati ali ne i brojati.
Ponovi: Lw $v1,0($a0) # ~itaj narednu izvorinu re~ Addi $v0,$v0,1 # inkrementiraj broja~ kopiranih re~i Sw $v1,0($a1) # upii re~ u odredite Addi $a0,$a0,1 # inkrementiraj pokaziva~ izvorita
4. RISC procesori
4-17
Addi $a1,$a1,1 # inkrementiraj pokaziva~ odredita BNE $v1,$zero,Ponovi # Ponovi ako je kopiran podatak ≠ nule
Analizom programa mo`e se ustanoviti sledee:
a) Postoji vei broj greaka u MIPS-ovoj programskoj sekvenci. Locirati greke i dati korektnu verziju programa.
b) Za nekorektnu programsku sekvencu odredi format instrukcije (mainski kôd) za svaku instrukciju kao i decimalnu vrednost svakog polja.
Odgovor Korektna verzija programa, je oblika:
Addi $v0,$zero,-1 # inicijaliziraj se $v0 sa ciljem da se # izbegne odbrojavanje nultog (praznog) niza Ponovi: Lw $v1,0($a0) # ~ita se naredna re~ izvornog niza Addi $v0,$V0,1 # inkrementira se broja~ kopiranih re~i Sw $v1,0($a1) # upis re~i u odredini niz Addi $a0,$a0,4 # inkrementira se pokaziva~ izvorinog niza Addi $a1,$a1,4 # inkrementira se pokaziva~ odredinog niza
BNE $v1,$zero,Ponovi # go to Ponovi ako kopirana re~ ≠ nula
Greke koje postoje u nekorektnom programu su sledee:
(1) Broja~ re~i, $v0, nije inicijaliziran,
(2) Odbrojava se re~ ~ija je vrednost nula (kada je niz prazan)
(3) Pokaziva~ izvorinog niza se inkrementira za 1 umesto za 4
(4) Pokaziva~ odredinog niza se inkrementira za 1 umesto za 4.
a) Mainski kôd nekorektne verzije programa ima oblik:
instrukcija format opkod rs rt neposredna vrednost
Lw $v1,0($a0) I 35 4 3 0
Addi $v0,$v0,1 I 8 2 2 1
Sw $v1,0($a1) I 43 5 3 0
Addo $a0,$a0,1 I 8 4 4 1
Addi $a1,$a1,1 I 8 5 5 1
BNE $v1,$zero,Ponovi I I 5 3 0 -20
Zadatak 4.8
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-18
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 odgovarajui 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 sledee:
(1) pri svakom prolasku kroz petlju izvrava se jedna instrukcija uslovnog i jedna bezuslovnog grananja;
(2) samo loi kompilatori generiu kôd sa ovoliko suvinosti (dve instrukcije koje se odnose na promenu toka programa).
Problem koji treba reiti je sledei: 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 izvrava 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 izvravaju kod prvobitne verzije asemblerskog programa, za 10 potpunih iteracija i jedan izlazak 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 izvrava za ovu verziju programa iznosi: 5 + 10 * 6 = 65
Za slu~aj da se vrednost 4*j izra~unava pre petlje, mogue je dalja modifikacija ~iji je oblik sledei:
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
4. RISC procesori
4-19
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 izvravaju iznosi 7+10*3 = 37
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 pomou 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 reenje
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 reenje. U delu reenja koristi se instrukcija Li koja se implementira kao u slu~ajevima 3 i 4.
Zadatak 4.10
Neka je data sledea kodna sekvenca na C-u:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-20
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 registru $s0 promenljiva c.
Napisati odgovarajui kôd na asemblerskom jeziku mikroprocesora MIPS. Koliko se instrukcija izvri prilikom izvrenja programa? Koliko puta se vri obraanje memoriji podataka u toku izvrenja programa?
Odgovor # Inicijaliziraemo 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 smeta u $t1 sledeom 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. Usvojiemo da se one nalaze u memoriji # na lokacijama Konst4 i Konst401 u trenutku kada se vri 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] 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 izvrava iznosi 4+101*8 = 812
Broj obraanja memoriji podataka je 3+101*2 = 205
Test pitanje 4.19
Pokazati koja je najkraa sekvenca MIPS-ovih instrukcija kojom se odredjuje apsolutna vrednost celobrojne vrednosti date u prezentaciji dvoji~nog komplementa. Izvriti konverziju ove instrukcije (instrukcija koju asembler procesora MIPS prihvata):
Abs $t2,$t3 Zna~enje je sledee: registar $t2 ~uva kopiju registra $t3 ako je registar $t3 pozitivan, ili, ~uva dvoji~ni komplement registra $t3 ako je $t3 negativan.
Odgovor Addu $t2,$zero,$t3 # kopiraj $t3 u $t2
4. RISC procesori
4-21
BGEZ $t3,Dalje # if $t3 > = 0 go to Dalje Sub $t2,$zero,$t3 # - $t3 kopiraj u $t2 Dalje: ...
Test pitanje 4.20
Ukazati na najkrau sekvencu instrukcija mikroprocesora MIPS kojom se odredjuje da li postoji izlazni prenos (carry out) u toku sabiranja sadr`aja dva registra, recimo registre $t3 i $t4. Postavi 0 ili 1 u registar $t2 ako je izlazni prenos 0 ili 1, respektivno.
Odgovor Addu $t2,$t3,$t4 Sltu $t2,$t2,$t4 ili, alternativno reenje bi bilo:
Addu $t2,$t3,$t4 Sltu $t2,$t2,$t3
Test pitanje 4.21
Ukazati na najkrau sekvencu instrukcija mikroprocesora MIPS kojom se vri sabiranje celobrojnih vrednosti u duploj preciznosti. Usvojimo da je jedna 64-bitna celobrojna vrednost u prezentaciji dvoji~nog komplementa smetena u registre $t4 i $t5 a druga u registre $t6 i $t7. Sumu smestiti u registre $t2 i $t3. U konkretnom slu~aju MS re~i 64 bitnih celobrojnih vrednosti se ~uvaju u parno numerisanim registrima, a odgovarajue LS re~i u neparno numerisanim registrima.
Odgovor Ako ne `elimo overflow detekciju, tada mo`emo koristiti sledeu sekvencu.
Addu $t3,$t5,$t7 # $t3 = $t5 + $t7 Sltu $t2,$t3,$t5 # if ($t3 < $t5) then $t2 = 1; else $t2 = 0 Addu $t2,$t2,$t4 # Carry out + $t4 = $t2 Addu $t2,$t2,$t6 # $t2 + $t6 = $t2
Kada `elimo da detektujemo da li postoji premaaj (overflow) tada je potrebno koristiti sledeu sekvencu:
Addu $t3,$t5,$t7 Sltu $t2,$t3,$t5 Add $t2,$t2,$t4 Add $t2,$t2,$t6 # detektuje se premaaj
Zadatak 4.11
Napisati programsku sekvencu na asemblerskom jeziku za mikroprocesor MIPS xx pomou koje je mogue obaviti sledeu logi~ku funkciju:
cbacbacbacbaS ⋅⋅+⋅⋅+⋅⋅+⋅⋅=
Promenljive a, b i c ~uvaju se u memorijskim lokacijama A, B i C, respektivno.
Kod reavanja zadataka koristiti sledeu registarsku konvenciju, koja va`i za MIPS procesor:
Odgovor lzraz se mo`e srediti na sledei na~in:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-22
)baba(cb)aba(cS ⋅⋅+⋅⋅+⋅+⋅⋅=
zczcS ⋅+⋅= ,
gde je z = baba ⋅⋅+⋅ = a Å b i babaz ⋅+⋅=
S = c Å a Å b
Programska sekvenca ima sledei 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
Test pitanje 22 Neka je dat sledei HLL iskaz:
a := (b >= c) or (d == e)
Napisati odgovarajuu programsku sekvencu na asemblerskom jeziku mikroprocesora MIPS xx. Promenljive a, b, c, d i e se ~uvaju u memorijskim lokacijama A, B, C, D i E, respektivno. Za pisanje programa koristiti standardnu MIPS-registarsku konvenciju, datu na Slici 1.
Odgovor Ideja se zasniva na sledeem konceptu:
a = True (tj. a = 1) ako je uslov ispunjen, ili a = False (tj. a = 0) ako uslov nije ispunjen.
Test pitanje 4.23
Za sledee tri situacije identifikuj tipove zavisnosti po podacima
upis
~itanje
instrukcija 1
instrukcija 2
a)
~itanje
upis
instrukcija 1
instrukcija 2
b)
4. RISC procesori
4-23
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.24
Ukazati na osnovne tipove hazarda po podacima (RAW, WAR i WAW) koje postoje izmedju sledeih instrukcija :
i1 : Add R1, R2, R3 ; R1 = R2 + R3 i2 : Add R4, R1, R4 ; R4 = R1 + R4 i3 : Add R3, R1, R2 ; R3 = R1 + R2 i4 : Add R1, R1, R4 ; R1 = R1 + R4
Test pitanje 4.25
Format instrukcija RISC procesora MIPS RX000 prikazan je na Slici 4.4.
3 1 2 5 0o p k o d a d re s a g r a n a n ja A d ra ) fo r m a t J - t ip a
3 1 2 5 2 0 1 5 0o p k ô d R s R t n e p o s re d n i o p e ra n d I m m
a d r e se r e g is ta ra(2 )
b ) fo r m a t I - t ip a
3 1 2 5 2 0 1 5 1 0 5 0o p k ô d R s R t R d iz n o s p o m e ra n ja fu n k c i ja
a d r e se r e g is ta ra(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 tekue izvrava, smetena na lokaciji (memorijskoj adresi) FFFF FF00 h.
a) Ako I nije instrukcija grananja, na kojoj se memorijskoj adresi nalazi instrukcija koja se izvrava neposredno nakon instrukcije I?
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-24
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 izvravati neposredno nakon instrujkcije I?
Odgovor a) Adresa naredne instrukcije bie
FFFF FF00h + 4 = FFFF FF04h
b) Instrukcija bezuslovnog grananja ima format J-tipa
J Adr
To zna~i go to Adr. Imajui u vidu da su memorijske adrese kod RX000 obima 32-bita, CPU treba da proiri 26-bitno asdresno polje sa slike 1 na 32 bita. Proirenje se izvodi automatski od strane procesora u sledea dva koraka:
Temp := PC[31 : 28].Adr.00 ; PC := Temp ;
Prva ~etiri MS bita programskog broja~a PC se smetaju 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 dobiemo:
A = FAA7 FFFCh.
Test pitanje 4.26
Neka je dat 32-bitni mikroprocesor P, RISC tipa, ~iji jedini adresni na~ini rada za:
registarsko -registarske instrukcije - su neposredni i direktni;
Load/Store instrukcije - je registarsko indirektni sa ofsetom.
Usvojimo da procesor P ima 32 registra opte namene R0 : R31 koji se mogu koristiti kao registri za podatke i adrese. Jedinstveni 32-bitni format instrukcije ~ine sledea ~etiri polja: (i) opkôd; (ii) specifikacija dva registra; (iii) 16-bitna neposredna adresa.
Odrediti:
Koliki je maksimalan broj opkôd tipova;
Koristei tipi~nu asemblersko jezi~ku notaciju sa jasnim komentarom, opisati aktivnost instrukcija koje mikroprocesor P obavlja, za svaku od sledee tri operacije:
Load re~ iz memorije M
Store bajt u memoriji M
Dupliraj broj koji se ~uva u registar (opkôd za mno`enje ne postoji).
4. RISC procesori
4-25
Odgovor a) Za specifikaciju adresa oba registra potrebno je 10 bitova, a za neposredni operand 16 bitova. Za opkod ostaje 32-16-10 = 6 bitova, to odgovara 26 = 64 opkôd tipa.
b) Neka Rd i Rs ozna~avaju odredini i izvorini registar, respektivno. Koristei notacije procesora RX000, imaemo:
Ldw Rd,offset(Rs) ; Rd := M([Rs + ofset]) Stb offset(Rs),Rd ; M(Rs + ofset) := Rd[7 : 0] Lsh Rd ; Logi~ki pomeri ulevo za jednu bit poziciju
Test pitanje 4.27
Neka je dat 32-bitni RISC procesor P definisan u prethodnom test-pitanju. Objasni kako se, pomou jedne ili veeg broja instrukcija procesora P, mogu izvriti sledee tri instrukcije:
Swap Rx,Ry ;medjusobno razmeni sadr`aj dva registra Clr Rx ; obrii sadr`aj registra Push Rx ; smesti u magacin
Ponovo koristi tipi~nu asemblersku jezi~ku notaciju sa jasnim komentarima.
Odgovor Usvojiemo da je sadr`aj registra R0 jednak 0.
• Operacija SWAP
Add Rk,Rx,R0 ; Rx + 0 -> Rk, operacija Mov, Rk = privremeni registar Add Rx,Ry,R0 ; Ry + 0 -> Rx Add Ry,Rk,R0 ; Rk + 0 -> Ry, tj. Rx -> Ry
• Operacija Clear
Sub Rx,Rx,Rx ; Rx - Rx -> Rx
Alternativna instrukcija bi bila:
And Rx,Rx,#0 ; Rx and 0 -> Rx
• Operacija Push
Neka pokaziva~ magacina bude registar Rk
Sub Rk,Rk,#4 ; Rk - 4 -> Rk Add #0(Rk),Rx ; M(Rk) := Rx
Test pitanje 4.28
Koja od sledeih instrukcija ne postoji kod RISC-ova?
a) Add Rx,Ry b) Move Rx,Immediate
c) Or Rx,Memory
Odgovor Instrukcija Add Rx,Ry se realizuje kao: Add Rx,Rx,Ry, instrukcija Move Rx,Immediate se realizuje kao: Add Rx, R0, Immediate, a instrukcija Or Rx, Memory ne mo`e se realizovati jedinstvenom instrukcijom, ve kao pseudo-instrukcija, na sledei na~in:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-26
Lw Ry,Memory(R0) Or Rx,Rx,Ry
Test pitanje 4.29
Na kom principu rade superkalrni procesori?
Odgovor Superskalarno procesiranje predstavlja sposobnost iniciranja veeg broja instrukcija u jednom taktnom intervalu. Tipi~ni superskalarni procesor iz dolazeeg niza instrukcija pribavlja i dekodira po nekoliko instrukcija istovremeno. U toki procesa pribavljanja, sa ciljem da se obezbedi tok izvrenja instrukcija, ishodi koji prate uslovne instrukcije granjanja (granaj se ili ne) uvek se unapred predvi|aju (recimo, uvek se predpostavlja da e se grananje desiti, ili suprotno). Niz instrukcija se nakon toga analizira i detektuju zavisnosti po podacima, a zatim se pre svega od tipa, inicira paralelno izvrenje instrukcija u funkcionalnim jedinicama. Naredno paralelno izvrenje instrukcija se inicira dr`ei se sledeeg principa: Inicira se ivrenje onih dekodiranih instrukcija za koje su spremni operandi i za koje postoje slobodne funkcionalne jedinice (resursi) na kojima se one izvravaju, a ne kakav je njihov prvobitni redosled u programu. Ova osobina, koja je karakteristi~na za veliki broj superskalarnih implementacija, poznata je kao dinami~ko planiranje izvrenja instrukcija (dynamic instruction scheduling). Nakon izvrenja aktivnosti izvrenja, rezultati instrukcija se resekvenciraju kako bi isti mogli da se koriste kod a`uriranja stanja procesa koje odgovara konkretnom (sekvencijalnom) programskom redosledu a ne iniciranom ~ak i za slu~aj da se javo prekid. S obzirom da se individualne instrukcije posmatraju kao celine koje se paralelno izvravaju za superskalarni procesor se ka`e da koristi paralelizam na nivou instrukcija (instruction level parallelism).
Test pitanje 4.30
Na ta se oslanja razvoj svakog novog procesora?
Odgovor Razvoj softvera i hardvera izuzetno je dinami~an. Zbog toga svaki arhitekta nekog novog procesora mora da zna sa kakvom bazom znanja polazi u reavanje novog zadatka. Za najvei broj procesora akumulirano znanje predstavlja prethodna verzija/generacija procesora. Tako na primer, prethodnik za CISC procesor i486 je bio i386, za MC68030 je bio MC68020 itd. Sli~na je situacija i kod superskalarnih procesora. Klju~na komponenta akumuliranog znanja kod ovih procesora je binarna kompatibilnost, koja se odnosi na mogunost izvrenja mainskog programa koji je napisan za stariju generaciju procesora. Jo od ranije projektanti softvera su uo~ili da se zna~ajne prednosti u projektovanju skupa instrukcija posti`u kada je skup instrukcija novog procesora kompatibilan sa razli~itim modelima iste generacije procesota. Iz brojnih prakti~nih razloga osnova za o~uvanje softverske kompatibilnosti osvojeno je da bude jezika na binarno mainskom nivou.
Test pitanje 4.31
[ta su to sekvencijalni i paralelni model izvrenja?
Odgovor Va`na osobina procesora ranijih generacija predstavlja sekvencijani model izvrenja (sequential execution model). Kod ovog modela PC se koristi da se u jednom ciklusu pribavi iz memorije
4. RISC procesori
4-27
jedinstvena instrukcija. Instrukcija se zatim izvrava. Nakon zavretka instrukcije procesor inkrementira PC a iz memorije se pribavlja naredna instrukcija. Za model sekvencijalnog izvrenja ka`emo da je prirodno da poseduje koncept preciznog stanja. Naime u trenutku prekida precizno stanje maine (arhitekturno vidljivi registri i memorija) odslikava ono stanje koje odgovara stanju maine koje strogo prati sekvencijalni model izvrenja programa. Zbog toga se ponovni start implementira tako to se izvrenje programa nastavlja od one instrukcije u programu kod koje je dolo do prekida.
Implementacije koje se odnose na superskalarne procesore zna~ajno se razlikuju od sekvencijalnog modela izvrenja, jer je kod superskalarnih procesora cilj da se to vei broj aktivnosti obavi paralelno. Kao rezultat takvog koncepta rada program treba sada posmatrati kao specifikaciju : [ta se mo`e uraditi (izvriti) a ne kako se to realno izvrava.
Kada se govori o programu, pojam bolje performanse uvek indirektno asocira na krae vreme izvrenje. U principu za svaku instrukciju je potreban vremenski period kako bi se ona pribavila i izvrila. Ovaj period se zove latencija instrukcije. Skraenje vremena izvrenje sekvence instrukcija (~itaj programa) mo`e se postii: (1)smanjenjem latencija individualnih instrukcija; i (2) paralelnim izvrenjem veeg broja instrukcija. Kod najveeg broja slu~ajeva pristup (1) zahteva ugradnju obimnog i slo`enog hardvera, dok se pristup (2) oslanja na implementaciju veeg broja relativno jednostavnih gradivnih blokova. Ovo je razlog zato se rad superskalarnih procesora oslanja na paralelizam.
Test pitanje 4.32
[ta se hardverski implementira kod superskalarnih procesora?
Odgovor Sa aspekta hardvera kod superskalarnih procesora se implementiraju:
1. Strategija simultanog pribavljanja veeg broja instrukcija. U najveem broju slu~ajeva ishod uslovnog grananja unapred se predvi|a, tj. optimisti~ki se pribavljaju instrukcije sa puta za koga se smatra da e se nastaviti
2. Metod za odre|ivanje zavisnosti RAW tipa. Da bi se odredila ova zavisnost potrebno je da se poznaje tok instrukcija, vrednosti koje se ~uvaju u registrima i mehanizmi za prenos ovih vrednosti (tipi~no su to mehanizmi premoavanja) na onim mestima gde su u toku izvrenja instrukcija ti mehanizmi i potrebni
3. Metod za paralelno iniciranje izvrenja (issuing) veeg broja instrukcija
4. Resursi za paralelno izvrenje veeg broja instrukcija (u samom procesoru ugra|uje se vei broj proto~no organizovanih funkcionalnih jedinica)
5. Hijerarhijska organizacija memorije koja je u stanju da istovremeno podr`ava vei broj obraanja memoriji
6. Metodi za komunikaciju sa memorijom isklju~ivo preko instrukcija tipa Load i Store
7. Interfejs memorije koji e prilagoditi hijerarhijsku organizaciju memorije strategiji izvrenja instrukcije sve u ciju dobijanja maksimalnih performansi
8. Metodi koji e dovesti proces u konkretan redosled. Ovim mehanizmima, spolja posmatrano, obezbe|uje se korektno sekvencijalno izvrenje procesa.
Test pitanje 4.33
Kako se predstavlja program i kako se izvrava stati~ki program kod superskalarnih procesora?
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-28
Odgovor Najvei broj aplikacionih programa napisan je danans na nekom od HLL-ova. Takvi programi se zatim prevode (kompajliraju) na binarne programe ili programe na stati~kom mainskom nivou. U sutini stati~ki program opisuje skup izvrenja. Svakom izvrenju odgovara odre|eni skup podataka koji je karakteristi~an za to izvrenje. Implicitno stati~kim programom se specificira sekvencijalni model izvrenja, tj. koji odgovara prirodnom redosledu izvrenja instrukcija. Ilustracije radi, na Slici 4.5 a) prikazan je HLL program napisan na C-u. Program je preveden na neoptimizovani stati~ko-asemblerski program (Slika 4.5 b)). Program sa Slike 4.5 odgovara delu rutine za sortiranje. Susedne vrednosti polja a[ ] se upore|uju i uzajamno zamenjuju mesta kada je a[i] > a[i+1]. Promenljiva izmena ~uva trag o broju promene mesta. Ako je na kraju prolaska kroz polje promenljiva izmena=0 tada ka`emo da je polje sortirano.
Stati~ki program sa Slike 4.5 izvrava se nad specifi~nim skupom ulaznih podataka. Sekvenca instrukcije koje se izvravaju slede jedna za drugom, za stati~ke instrukcije ka`emo da ulaze u dinami~ku sekvencu jednostavnim inkrementiranjem PC-a koji pokazuje na narednu instrukciju koju treba izvriti. Kada se u programskoj sekvenci javi instrukcija uslovno grananje ili bezuslovni skok tada se vrednost PC-a a`urira na neredoslednu adresu. Za neku instrukciju ka`emo da je upravlja~ko zavisna (control dependent) u odnosu na prethodnu(e) dinami~ku(e) instrukcij(e) kada tok programa (eksplicitno) specificira da prvo mora da se izvri prethodna instrukcija. Drugim re~ima, oba metoda za modifikaciju PC-a (inkrementiranje i a`uriranje) rezultuju postojanju upravlja~ke zavisnosti.
4. RISC procesori
4-29
for (i=0;i<zadnji;i++)
if (a[i] > a[i+1]
temp=a[i];a[i]=a[i+1]a[i+1=temp;izmena++;
a) HLL program napisan na C-u
LAB2: Move r3,r7 //* r3 → a[i]
Lw r8,(r3) //* Load a[i]
prvi blok Add r3,r3,4 //* r3 → a[i+1]
Lw r9,(r3) //* Load a[i+1]
BLE r8,r9,LAB3 //* Branch a[i]>a[i+1]
Move r3,r7 //* r3 → a[i]
Sw r9,(r3) //* Store a[i]
drugi blok Add r3,r3,4 //* r3 → a[i+1]
Sw r8,(r3) //* Store a[i+1]
Add r5,r5,1 //* izmena++
LAB3: Add r6,r6,1 //* i++
trei blok Add r4,r7,4 //* r4 → a[i]
BLE r6,r4,LAB2 //* Branch i<zadnji
b) Kompilovana verzija
Slika 4.5 Deo rutine za sortiranje
Test pitanje 4.34
Kako se prevazilaze upravlja~ke zavisnosti kod superskalarnih procesora?
Odgovor Prvi korak ka poveanju paralelizma na nivou instrukcija zasniva se na eliminaciji upravlja~ke zavisnosti. Upravlja~ke zavisnosti koje rezultuju usled inkrementiranja PC-a su jednostavnije u odnosu na one koje se javljaju zbog a`uriranja vrednosti PC-a. Uka`imo na specifi~nosti svake od njih.
a) Upravlja~ke zavisnosti zbog inkrementiranja PC-a
U principu, stati~ki program se mo`e posmatrati kao skup osnovnih blokova. Svaki osnovni blok predstavlja neprekidni blok instrukcija koji ima po jednu ulaznu i jednu izlaznu ta~ku. Kod asemblerskog kôda sa Slike 4.5 b), postoje tri osnovna bloka. Prvi blok ~ini pet instrukcija izme|u oznake LAB3 i instrukcije BLE. Drugi blok ~ine instrukcije izme|u BLE i LAB3, a trei od instrukcije koja po~inje oznakom LAB3 do instrukcije BLT. Nakon to je osnovni blok pribavljen (od strane logike za pribavljanje) sledi njegovo eventualno izvrenje. Zbog ovoga, bilo koja sekvenca instrukcija koja pripada osnovnom bloku se mo`e, kao jedinstvena celina, inicirati radi
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-30
izvrenja u konceptualni prozor izvrenja (window of execution). Cilj je da se prozor izvrenja odr`ava uvek pun jer instrukcije koje se nalaze u njemu mogu paralelno da se izvravaju. Naime, nakon to su instrukcije inicirane u prozoru izvrenja, ako apstrahujemo zavosnost po podacima, one mogu paralelno da se izvravaju.
b) Upravlja~ke zavisnosti zbog a`uriranja PC-a
U okviru individualnih blokova postoji odre|eni paralelizam, ali da bi se poveao iznos paralelizma, upravlja~ke zavisnosti koje se javljaju zbog a`uriranja PC-a a posebno one koje su posledica uslovnih grananja moraju biti prevazi|ene. Jedan od na~ina da se uradi ovo je da se predvidi ishod instrukcije uslovno grananje i da se spekulativno pribave i izvre instrukcije sa predvi|enog puta. (Pribavljanje i iniciranje izvrenja instrukcija, kod superskalarnih procesora, pod predpostavkom da se ishodi grananja korektno predvi|aju i da se izuzeci nee javiti zove se spekulativno izvrenje (speculative execution)). Instrukcije sa predvi|enog puta se unose u prozor izvrenja. Ako se kasnije, za predvi|anje ustanovi da je bilo korektno, tada je spekulativni status instrukcija od koristi, tako da njegov efekat na stanje maine je identi~an kao i efekat ostalih instrukcija. Kada se za predikciju ustanovi da nije bila korektna, tada i spekulativno izvrenje nee biti korektno. Sa ciljem da se stanje procesora ipak sa~uva korektno neophodno je da se iniciraju akcije obnavljanje korektnog stanja koje je va`ilo pre instrukcije grananja. U konkretnom slu~aju, instrukcija BLE sa Slike 4.5b) kreira upravlja~ku zavisnost. Da bi se premostila ova zavisnost, kao ishod izvrenja ove instrukcije treba predvideti izlaz “ne granaj se”. Pri tome se instrukcije koje se nalaze izme|u instrukcija grananja i instrukcije na oznaci LAB3 treba spekulativno izvravati.
Test pitanje 4.35
Kako se definie zavisnost po podacima kod superskalarnih procesora?
Odgovor Izme|u instrukcija koje se nalaze u prozoru izvrenja 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 verovatnoa 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 (read-after-write), jer instrukcija tipa potroa~, mo`e da pro~ita vrednost nakon to je instrukcija proizvo|a~ upisala rezultat.
Pored pravih kod superskalarnih procesora postoje i veta~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 upie 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 vei 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.
4. RISC procesori
4-31
LAB2: Move r3, r7Lw r8, r3Add r3, r3, 4Lw r9, (r3)BLE r8, r9, LAB3
RAWWAW
WAR
Slika 4.6 Primer zavisnosti po podacima
Test pitanje 4.36
Kako se vri planiranje izvrenja instrukcija kod superskalarnih procesora?
Odgovor Nakon reavanja problema koji se ti~u upravlja~kih zavisnosti i zavisnosti-po-podacima inicira se izvrenje instrukcija “~ime po~inje njihovo paralelno izvrenje". U sutini planiranje paralelnog izvrenja instrukcija (parallel execution schedule) se realizuje hardverski. Planer uzima u obzir realna ograni~enja kao to su prave zavisnosti po podacima i broj raspolo`ivih funkcionalnih jedinica.
Planiranje paralelnog izvrenja ~esto zna~i da instrukcije zavravaju svoje izvrenje u redosledu razli~itom od onog specificiranog sekvencijalnim modelom. [ta vie mo`e da se desi da se odre|ene instrukcije izvre u potpunosti i pored toga to sekvencijalnim modelom njihovo izvrenje nije bilo predvi|eno (tipi~no ovaj slu~aj se javlja kada se pribave spekulativne instrukcije sa nekorektno predvi|enog puta grananja). Zbog ovoga, memorijski elementi date arhitekture (registri i memorijske lokacije) ne smeju da se a`uriraju odmah nakon to se instrukcija zavri. Umesto toga rezultat instrukcije privremeno se pamti sve do trenutka kada nai|e trenutak da se on stvarno preda. U me|uvremenu da bi se postigle visoke performanse, rezultati moraju radi korienja biti dostupni zavisnim instrukcijama. U trenutku kada se odredi da je ekvivalentni sekvencijalni model izvrio instrukciju svi privremeni rezultati se ~ine stalni a shodno tome i a`uriraju arhitekturno stanje. Ovaj proces se uobi~ajeno zove predaja rezultata (committing ili retiring) instrukcije.
Na Slici 4.7 prikazan je paralelni metod izvrenja kakav sreemo kod najveeg broja superskalarnih procesora. Instrukcije su zadane stati~kim programom. Dinami~ki niz instrukcija formiraju pribavljene instrukcije i one za koje je izvrena predikcija grananja. Dinami~ki niz instrukcija se ispituje radi detekcije i eliminisanja veta~ke zavisnosti. Nakon toga one se smetaju u prozor izvrenja. U prozoru izvrenja redosled instrukcija ne odgovara sekvencijalnom redosledu, ali su one parcijalno ure|ene. Ure|enost je odre|ena pravom zavisnou i dostupnou resursa. Na kraju nakon zavretka instrukcija, instrukcije se ponovo vraaju u redosled koji odgovara sekvencijalom modelu a njihovi rezultati korektno a`uriraju arhitekturno stanje procesa.
Na Slici 4.7, na konceptualnom nivou je prikazano izvrenje sekvence kod superskalarnih procesora.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-32
stati~kiprogram
pribavljanjeinstrukcija ipredikcijagrananja
isporu~ivanjeinstrukcije
iniciranjeizvrenjainstrukcije
izvrenjeinstrukcija
preure|enjeinstrukcija ipredaja
Slika 4.7: Rad superskalarnih procesora na konceptualnom nivou
Napomena: Faze obrade su prikazane na gornjem delu
Test pitanje 4.37 Objasniti pojam odmotavanje petlje (loop unrolling).
Odgovor Osnovna ideja odmotavanja petlje sastoji se u tome to je potrebno ponoviti izvrenje tela petlje onoliko puta koliko je to predvidjeno samim kôdom, tj. u~initi kôd petlje sekvencijalnim. Odmotavanjem se eliminie 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~ei slu~aj kod do i for petlji.
Zadatak 4.12
Neka je data sledea 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 maine.
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 bie 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
4. RISC procesori
4-33
Ponovi: Fmul [r2],4.13,[r1] ; mno`enje koristei indirektno adresiranje Inc r1,4 ;inkrementiranje pokaziva~a na naredni element bloka podat. a(i)
Inc r2,4 ; inkrementiranje pokaziva~a na naredni element bloka podat. b(i)
Dcr r3 ; dekrementirnje broja~a petlje
BNZ Ponovi ; granaj se na Ponovi ako broja~ petlje nije nula
Osnovna karakteristikla ove programske sekvence je ta to instrukcija Fmul koristi indirektno adresiranje radi pristupa memorijskim operandima.
Nasuprot ovakvom pristupu, kompajlirani kod kod RISC maine, za istu petlju i izvrenje instrukcije Fmul, koristi registarske operande. [ta vie, za ovakav slu~aj, imajui u vidu da je petlja kratka, vri se odmotavanje petlje ~ime se kôd koji se odnosi na dekrementiranje i testiranje eliminie, 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 vri ubacivanje (insertovanje, ili tzv. umetanje) celog tela potrograma svaki put kada se on pozove u ta~ki poziva, umesto da se telo petlje posebno memorie 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 proiriti. Standardno korieni metod se sastoji u sledeem:
Petlja se odmotava odredjeni broj puta, recimo tri puta, i postavlja broja~ petlje na rezultantnu grupu odmotanih petlji. Nakon toga se vri 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 zavrni-kôd (epilog-kôd) kako bi se sve aktivnosti uspeno i korektno obavile. Tako na primer, ako `elimo prethodnu petlju da izvrimo 30 puta, koristiemo sledei kôd:
Lw r1,A1 Lw r2,B1 Lw r3,30 Ponovi: Fmul 0(r2),4.13,0(r1) Addi r1,4
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-34
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.
Test pitanje 4.38
Ukazati na osnovni smisao koncepta softverska proto~nost.
Odgovor Softverska proto~nost je tehnika koja je, po analogiji, sli~na tehnici hardverske proto~nosti. Osnovna ideja zasniva se na paralelnom izvrenju kôda petlje na ILP procesoru (ILP - Instruction Level Processor). U sutini, ILP procesor ~ini veliki broj izvrnih jedinica koje rade paralelno. Da bi ukazali na ovaj problem neto detaljnije, analiziraemo izvrenje sledee HLL petlje:
for i=1 to 7 do b(i) = 4.13*a(i)
Neka kompajlirani kôd RISC maine bude:
Lw r1,b(1) Fmul r1,4.13,r1 St a(i),r1
Da bi objasnili princip softverske proto~nosti, ograni~imo se samo na telo petlje a ne i na prolog- i epilog-kôd. Pri analizi, uveemo sledee pretpostavke:
Maina poseduje posebne jedinice za manipulaciju sa FP i FX brojevima, posebnu logiku za Lw i St instrukcije. Sve jedinice su u stanju da paralelno izvravaju operacije. Svaka od jedinica omoguava, u svakom taktnom intervalu, iniciranje nove operacije. Pretpostavimo da FP jedinica generie rezultat instrukcije Fmul, za period od tri taktna intervala, dok je latencija instrukcija Lw i St jedan taktni interval.
Obavimo sada razvijanje petlje i pokuajmo da izvrimo to je mogue veu paralelizaciju. Po~nimo sa izvrenjem prve iteracije:
taktni interval instrukcija komentar
4. RISC procesori
4-35
k Lw r1, b(1) puni se a(1)
k+1 Fmul r1, 4.13, r1
k+2 Subi r3, 1 r3 je broja~
k+3 Add r0, r0, r0 operacija Nop
k+4 St a(1)+, r1 smesti a(i), i inkrementiraj i
Napomena: Instrukcija tipa Store sa autoinkrementiranjem indeksa ne postoji kod MIPS-a. Ona je ovde data da bi se skratio kôd, a vie ukazalo na smisao uvedene tehnike.
U konkretnom slu~aju, pretpostavili smo da je latencija operacije Fmul tri taktna intervala, to zna~i da u taktnom intervalu k+3 rezultat jo nije dostupan, pa je zbog toga neophodno ubaciti operaciju Nop. Pod ovakvim pretpostavkama, druga iteracija se mo`e inicirati u taktnom intevalu k+1 punjenjem podatka a(2). Ipak, da bi se izbegla interferencija sa prvom iteracijom, tj. da bi se izbegao konflikt kod korienja r1, u drugoj iteraciji se vri preimenovanje registara r1 u r2 i r3 u r4. Shodno prethodnom, obe iteracije se mogu sada izvravati paralelno, tako da je sekvenca oblika:
taktni interval 1. iteracija 2. iteracija
k Lw r1, b(1)
k+1 Fmul r1, 4.13, r1 Lw r2, a(2)
k+2 Subi r3, 1 Fmul r2, 4.13, r2
k+3 Add r0, r0, r0 Subi r4, 1
k+4 St b(1)+, r1 Add r0, r0, r0
St b(2)+, r2
Mo`emo sada produ`iti sa narednim iteracijama na sli~an na~in.
Stvarni prikaz tehnike softverske proto~nosti prikazan je na Slici 4.8.
Analizirajmo sada taktne intervale k+4, k+5 i k+6, u toku kojih se uo~ava efekat tehnike foftverska proto~nost. Klju~ni aspekt stvarnih aktivnosti u toku ovih taktnih intervala ogleda se u tome to je paralelizam u radu izmedju susednih iteracija u petlji, u potpunosti ostvaren. Na primer, u taktnom intervalu k+4 paralelizam je sledei:
(1) memorie se rezultat iteracije 1, tj. a(1) se smeta u b(1), a pri tome se inkrementira i indeks.
(2) dekrementira se broja~ petlji, tj. r3 = r3-1
(3) obavlja se FP mno`enje 4,13*a(4)
(4) puni se operand iteracije 5, tj. smeta u b(5)
taktni interval
broj iteracije
1 2 3 4 5 6 7
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-36
k Lw
k+1 Fmul Lw
k+2 Subi Fmul Lw
k+3 Addi Subi Fmul Lw
k+4 St Addi Subi Fmul Lw
k+5 St Addi Subi Fmul Lw
k+6 St Addi Subi Fmul Lw
k+7 St Addi Subi Fmul
k+8 St Addi Subi
k+9 St Addi
k+10 St
Slika 4.8 Paralelno izvrenje petlje na ILP procesoru sa veim brojem proto~no-izvrnih jedinica
Uo~imo da aktivnosti u taktnim intervalima k+4 do k+6 imaju repetitivni oblik, to se ti~e planiranja izvrenja (scheduling), pa se zbog toga mogu zameniti odgovarajuom petljom. Pri ovome, svaka iteracija nove petlje sadr`i vei broj aktivnosti (operacija) koje pripadaju razli~itim iteracijama po~etne petlje, tj.:
Loop: Sti; Subi+2; Fmuli+3, Lwi+4; BC Loop; petlja se izvrava za i=1, 2 i 3.
Kako je to prikazano na Slici 4.9, softversko-proto~ni kôd ~ine tri dela: (1) glavni deo - ima repetitivni oblik i predstavlja novo telo petlje; (2) inicijalni kôd - nazvan prolog; i (3) zavrni kôd - nazvan epilog.
prolog
epilog
novo telo petlje
(a) paralelno izvrenje (b) softversko-proto~no izvrenje
Slika 4.9 Struktura softversko-proto~nog kôda
Zadatak 4.13
Neka se na nekom hipoteti~kom RISC procesoru izvrava sledei program na asemblerskom jeziku:
Ld r4,#A ; napuni konstantu A u registar r4 Ld r5,#B ; napuni konstantu B u registar r5
4. RISC procesori
4-37
Ld r6,#C ; napuni konstantu C u registar r6 Ld r9,#0 ; obrii 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 nita 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)
Sledee 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:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-38
(I4, I6)(I4, I7)(I4, I8)(I6, I7) zbog r9(I6, I8)(I7, I8)
Kod odre|ivanja ovih zavisnosti usvojene su sledee pretpostavke:
a) ne postoji ograni~enje u pogledu broja proto~nih stepeni, tj. dubine proto~ne obrade
b) ne postoji ograni~enje u pogledu mogunosti da bilo koji stepen ~ita ili upisuje operande
Test pitanje
Zato se RISC arhitektura naziva Load/Store?
Test pitanje
Kreirati RISCprogramsku sekvencu kojom se izvrava sledea pseudo-instrukcija:
Add Mem,Reg,Mem
Test pitanje
Koja je prednost kada su sve instrukcije mikroprocesora istog obima?
Zadatak 4.14
Staza podataka jedne proto~ne petostepene jedinice, kod koje nisu izvedene povratne veze, tj. premoavanja, 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 sledea:
(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 smeten u memoriji nakon faze ME.
4. RISC procesori
4-39
(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
Napomena: IF1 se odnosi na pribavljanje opkoda instrukcije koja u programu neposredno sledi iza instrukcije grananja; IF2 se odnosi na pribavljanje opkda ciljne instrukcije grananja; Simbol '*" se odnosi na zastoj.
d) Upis raspolo`ivog operanda u neki od registara RF polja vri se u toku prve polovine taktnog impulsa, a ~itanje sadr`aja registra se obavlja u toku druge polovine. Kao posledica je mogue preklapanje faze ID i WB, tj. ID mo`e da pribavi operand koji se memorie u toku faze WB.
Za sledei 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 izvrenje instrukcije u vremenu. Reenje treba da ima oblik kao onaj na Slici 4.11.
Ako pretpostavimo da su sva obraanja memoriji tipa ke pogodak, koliko je taktnih intervala potrebno da se petlja izvri?
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 maine za jednu potpunu iteraciju petlje i prve instrukcije naredne iteracije.
Napomena: Radi preglednosti slike umesto notacije faza IF, ID, EX, MF, i WB koriena su obele`avanja F, D, E, M i W , respektivno.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-40
Zastoji se javljaju iz sledeih razloga:
taktni intervali razlog
3-4 Addi zaustavlja ID sve dok Addi ne upie operand u r1
6-7 Sw zaustavlja ID sve dok Addi ne upie operand u r1
10-11 Sub zaustavlja ID sve dok Addi ne upie operand u r2
13-14 BNZ zaustavlja ID sve dok Sub ne upie 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 zavrila. 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 izvrava 99 puta, ukupni broj taktnih intervala, da se izvri 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 sledeih 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 sledee:
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.
I_mem R EX D_mem W
4. RISC procesori
4-41
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 premoavanje: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 izvrenja instrukcije, formati instrukcija i strukture staze podataka jednog ~etvorostepenog RISC procesora prikazane su na Slici 4.13.
Pribavljanje instrukcije idekodiranje
FD
Pribavljanje operanda iliadresa
OF
Izvrenje operacije iliizra~unavanje efektivne
adreseEX
Smetaj rezultataWB
Slika 4.13 (a) Ciklus grananja instrukcije
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-42
Pokazati kako izgleda izvrenje sledeih programskih sekvenci:
a) x=a+b
y=b-c
z=c+d
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 premoavanja (isprekidane linije) kod CPU-a sa Slika 4.13 nisu izvedeni, napisati programsku sekvencu i nacrtati vremenski dijagram za sledeu programsku sekvencu:
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 premoavanja (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 instrukcijearitmeti~ke,logi~ke,pomeranja i iftovanja
(b) Instrukcije koje seobraaju memorijiLoad i Store
(c) Instrukcije za upravljanjetokom programaJump i Branch
(d) Ostale instrukcijeNop, Clear, Set, Reset
imeOP Dest, Src1, Src2OP Dest, Src1, ConstantMove Dest, Src1Shift Dest, Src1,Constant
imeLw immU DestLw immL DestLw rel Dest, Src2, OffsetSt rel Src1, Src2, Offset
imeJump OffsetJump Src2, OffsetBrel Src2, Offset
imeNo-opClear DestSstat DestRstat Dest
AkcijaRF[Dest]←RF[Src1] Op RF[Src2]RF[Dest]←RF[Src1] Op ConstantRF[Dest]←RF[Src1]RF[Dest]←RF[Src1] shift Constant
AkcijaRF[Dest](31...16)←OffsetRF[Dest](15...0)←OffsetRF[Dest]←Mem[RF[Src2]+Offset]Mem[RF[Src2]+Offset]←RF[Src1]
AkcijaPC←PC+OffsetPC←RF[Src2]+Offset
[ ]RF[Src2] relnot RF[Src1] ifOffsetPCPCRF[Src2] rel RF[Src1] if1PCPC
+←+←
Akcijanema efektaRF[Dest]←0Status[Dest] ←1Status[Dest] ←0
(b) formati instrukcija
Napomena: RF-registarsko polje; Status-marker registar
4. RISC procesori
4-43
dekoderskalogika
Upravlja~ki registar
IR
Memorija zainstrukcije
PC
MUX1
+1 +
Offsetregistar
Upravlja~kiregistar
Destregistaar
Dest registar Offsetregistar
--
3
MUX2
Status44 4 4
2
1
MUX3
ALU&shifter
RFpolje
reg_B reg_A
MAR44
MUX2
Memorijaza podatke
MDR
(c) blok RISC procesora
Napomena: Veze prikazane isprekidanim linijama se odnose na puteve premoavanja
Slika 4.13 : ^etvorostepeni RISC procesor
Odgovor a) Sekvenca instrukcija na asemblerskom jeziku i odgovarajui vremenski dijagram koji se odnosi na redosled izvrenja 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
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-44
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_regB
(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) Odgovarajua sekvenca instrukcija na asemblerskom jeziku kao i vremenski dijagrami karakteristi~ni za izvrenje sekvence prikazani su na slici 4.15
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 premoavanje
4. RISC procesori
4-45
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 premoavanje
Slika 4.15 : Princip rada RISC maine ciklus-po-ciklus kod izvrenja sekvence instrukcija var=x+y; zbir=var+c; kada postoji zavisnost po podacima
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 premoavanje
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-46
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 izvrenja instrukcija kada je izvedeno premoavanje
Slika 4.16 Program na asemblerskom jeziku i vremenski dijagram za slu~aj b) kada je premoavanje izvedeno
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, vea, tj. manja.
Inicijalno, promenljiva a je smetena u registar R1, premenljiva a je smetena u registar R1, promenljiva b u registar R2, veu 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 sledei 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 tekue instrukcije PC se ne inkrementiras za 4 jo u fazi FD kako se to izvodi kod veine 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. RISC procesori
4-47
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 DDR
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
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-48
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 izvrava 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 izvrava ako do (uslovnog) grananja na do|e prikazan je na slici 4.18b).
Kao to se vidi sa slike 4.18a) procesor izvrava instrukcije na adresama 104, 108 i 112 kao da grananje ne postoji. Ali u taktnom intervalu 3, kada je predikcija potvr|ena, procesor produ`ava da pribavlja narednu instrukciju sa adrese 116, ne znajui 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~ujui 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 izvrava 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 izvrenje 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 izvrava 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 verovatnoa da e dogradnja da doe do 50%, tada procesor, koristei 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 "troie" nekoliko taktnih intervala vie (po instrukciji uslovnog grananja) u odnosu na onaj procesor kod koga je mehanizam predikcije implementiran.
4. RISC procesori
4-49
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
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-50
Zadatak 4.19
Za sistem zanovan na RISC procesoru prikazan na slici 4.13 kreirati program i nacrtati vremenske dijgrame za izra~unavanje apsolutne vrednosti promenljive a, za sledee slu~ajeve:
a) bez predikcije grananja
b) sa predikcijom grananja
Zadatak 4.20
Neka su a i b dve ozna~ene celogrojne vrednosti. Vrednost 22 ba + aproksimativno se odre|uje na osnovu sledeeg izraza:
22 ba + ≈max((0,975x+0,5y),x)
gde je x=max(|a|,|b|), a y=min(|a|,|b|)
Kreirati program na asemblerskom jeziku, za sistem zasnovan RISC mokroprocesoru prikazan na
slici 4.13, pomou koga se izra~unava aproksimativna vrednost izraza 22 ba + za sledee slu~ajeve:
(a) bez korienja tehnike premoavanja i predikcije grananja
(b) koristiti tehniku premoavanja a ne predikciju grananja
(c) ne koristiti tehniku premoavanja a koristiti predikciju grananja
(d) koristiti tehnike premoavanja i predikcije grananja
Napomena: Vrednost 0.875x izra~unati na sledei na~in. Prvo podeliti vrednost x sa 8, tj. x/8=0.125x. Operacija deljenja se izvodi se izvodi pomeranjem vrednosti x tri puta u desno. Zatim izvriti operaciju x-0.125x=0.875x.
Zadatak 4.21
Napisati program za sistem zasnovan na RISC procesoru prekiazan na slici 4.13 koji se koristi za izra~unavanje izraza y=x2+2x+3 za dato x. Usvojimo da ALSU (ALU&Shifter) obavlja operaciju mno`enja za jedan taktni interval. Nacrtati vremenski dijagram rada sistema.
Zadatak 4.22
Koristei skup instrukcija RISC procesora sa slike 4.13c) koje su prikazane na slici 4.13b) predlo`iti promene formata instrukcija koje e omoguiti:
(1) Pristup RF polju koga ~ine:
(a) 16-registara R0-R15
(b) 32-registara R0-R31
(c) 64-registara R0-R63
(d) 256-registara R0-R255
(2) Poveanje polja ofseta
4. RISC procesori
4-51
Test pitanje 4.39
U kom se registru RF polja, kod RISC mikroprocesora, uvek ~uva vrednost nula, nezavisno od toga koja se operacija izvrava?
Test pitanje 4.40
O kom je tipu zavisnosti popodacima radi u sledeim slu~ajevima:
a)
i1: Add r2,r3,r4 ; r2 = r3 + r4
i2: Add r5,r2,r1 ; r5 = r2 + r1
b)
j1: Add r2,r3,r4 ; r2 = r3 + r4
j2: Add r4,r5,r6 ; r4 = r5 + r6
c)
k1: Add r2,r3,r4 ; r2 = r3 + r4
k2: Add r2, r5,r6 ; r2 = r5 + r6
Odgovor a) RAW
b) WAR
c) WAW
Test pitanje 4.41
Ukazati na tipove hazarda po podacima koji postoje izmedju sledeih instrukcija:
i1: Add r1,r2,r3 ; r1 = r2 + r3
i2: Add r4,r1,r4 i3: Add r3,r1,r2 i4: Add r1,r1,r4
Test pitanje 4.42
Ukazati na prednosti i nedostatke superskalarnih i superproto~nih procesora.
Test pitanje 4.43
Na koji na~in se mo`e ostvariti odlaganje izvrenja (delaying of execution) instrukcija kod RISC procesora? Usvojiti da proto~ni sistem ~ine sledei stepeni: IF, ID, OF, EX i WB.
Odgovor Da bi ukazali na ovaj problem, razmotrimo izvrenje instrukcija i1 i i2 izmedju kojih postoji zavisnost po podacima:
i1: Add r2,r3,r4 ; r2 = r3 + r4
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-52
i2: Add r5,r2,r1 Odlaganje izvrenjka se mo`e ostvariti na sledea dva na~ina:
a) Kod prvog reenja odla`e se izvrenje 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 izvrenja faze OF
IF ID EXOF WB
-- IF-- ID OF WBEX
taktni intervali
1 2 3 4 5 6 7 8
i1
i2
b) Odlaganje izvrenja faze IF
Slika 4.19 Odlaganje izvrenja
Da bi se umetnulo kanjenje, u procesor je potrebno ugraditi dodatnu hardversku komponentu koja se naziva pipeline interlock - PI. Blok PI detektuje zavisnosti i unosi kanjenje kod izvrenja izmedju zavisnih instrukcija, sve dok se konflikt ne rei.
b) Kod drugog reenja, kompilator reava problem zavisnosti. U toku kompilacije kompilator detektuje zavisnosti izmedju podataka i instrukcija, a nakon toga, preuredjuje ove instrukcije tako da zavisnosti nisu vie hazardne (opasne) sa aspekta rada sistema. U slu~aju kada nije mogue da se izvri preuredjenje instrukcija, umetaju se instrukcije tipa Nop i na taj na~in stvara kanjenje. Ilustracije radi, posmatrajmo izvrenje sledeih instrukcija:
i1: Add r2,r3,r4 i2: Add r5,r2,r1 i3: Add r6,r6,r7 i4: Add r8,r8,r7 Redosled izvrenja 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 sledei na~in:
4. RISC procesori
4-53
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 premoavanja.
Odgovor Termin premoavanje (bypassing / forwarding) se odnosi na tehniku direktne predaje rezultata jedne instrukcije drugoj instrukciji, sa ciljem da se izbegne (eliminie), najpre memorisanje dobijenog rezultata, a nakon toga, i njegovo pozivanje. Premoavanje se mo`e ostvariti na nivou kompilatora, ~ime se izbegavaju nepotrebna obraanja memorijskim lokacijama putem prosledjivanja vrednosti preko registara a ne preko memorijskih lokacija. Premoavanje (prosledjivanje) rezultira poveanjem brzine izrenja operacija iz razloga to procesor br`e pristupa svojim internim registrima u odnosu na memorijske lokacije. Premoavanje 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, premoavanjem se eliminiu pristupi registrima na taj na~in to se koriste br`i putevi za prenos podataka.
Kompilator koristi sledee tri tehnike premoavanja:
1) Store-Fetch Forwarding - SFF
2) Fetch-Fetch Forwarding - FFF
3) 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 obraanje memoriji.
Kod SFF pristupa, operand se direktno uzima iz procesorsko-operandskog registra. Na primer, sledei kôd:
St 200(r0),r2 ; kopira se sadr`aj registra r2 u memorijsku lokaciju 200
; pri ~emu je r0 jednako 0
Lw r3,200(r0) ; kopira sadr`aj memorijske lokacije 200 u registar r3
se mo`e redukovati:
St 200(r0),r2 Add r3,r2,r0 ~ime se eliminie jedno obraanje memoriji.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-54
Kod FFF pristupa, viestruki pristupi istoj memorijskoj lokaciji se eliminiu ako se u~ini da se svi pristupi odnose na operand kojise, nakon ~itanja, smeta 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 eliminiu dva obraanja memoriji.
Kod SSO pristupa, eliminie se jedna ili vei broj operacija tipa upis bez posrednih operacija koje se odnose na pamenje 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 greaka kod najveeg broja programa.
Interno premoavanje (Internal forwarding) predstavlja hardversko premoavanje koje se implementira od strane registara procesora ili puteva (magistrala) podataka i nije vidljivo programeru. Intrerno premoavanje se mo`e aplicirati na proto~nom izvrenju instrukcija sa ciljem da se eliminiu obraanja registrima opte namene, tj. registrima RF polja. Na primer, kod sledee kodne sekvence:
Add r3,r2,r5 Subi r4,r3,#8 operaciji Subi je potreban sadr`aj registra r3 koji se generie od strane instrukcije Add. Instrukcija e se zaustaviti u stepenu OF i ~ekae da vrednost r3 postane va`ea. Internim premoavanjem prosledjuje se vrednost koju treba smestiti u r3, direktno, na ulaz stepena EX.
Bez premoavanja, 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 premoavanja 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 izvri premoavanje na ulaz stepena EX, kako je to isprekidanim vezama , prikazano na Slici 4.20).
Premoavanje se mo`e proiriti na prosledjivanje rezultata veem broju instrukcija, kako je to prikazano u sledeoj 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 premoavanja, do zastoja u radu sistema ne bi dolazilo.
4. RISC procesori
4-55
U principu, premoavanje iziskuje dodatnu logiku u proto~noj implementaciji, ali je kao princip veoma atraktivno kada se govori o poveanju performansi RISC procesora.
IF OF EX WB
premoavanjesa EX na EX
(opciono)
premoavanje 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 premoavanja
Test pitanje 4.45
Ukazati kako se kod RISC maina reava problem dodele registara (register allocation).
Odgovor Arhitekture koje koriste registarske prozore sa preklapanjem, kakve su BRISC I i II, rade najbr`e kada se sve ili se skoro sve lokalne promenljive ~uvaju u registrima. Kod procedura koje manipuliu sa malim brojem promenljivih obi~no se ne javljaju problemi, ali kada je broj promenljivih vei od broja raspolo`ivih registara tada se odredjene promenljive moraju ~uvati u memoriji. Sa ciljem da se minimizira ovaj problem, i da se sa~uva filozofija rada RISC-a tj. intenzivira rad sa registrima potrebno je to je mogue vie posla dodeliti kompilatoru. Naime, najvei broj komplilatora te`i da optimizira korienje registara i redukuje broj promenljivih koje se ~uvaju u memoriji. Jedan opti pristup se zasniva na sledeem principu: Vremenski se vri rasporedjivanje korienja pojedinih registara u odnosu na programske promenljive u toku pojedinih vremenskih intervala u okviru procedure. Iz konkretnog programa se mo`e videti stanje svih promenljivih. Kru`ii ukazuju kada odredjena promenljiva postaje aktivna (o`ivi), a kockice kada promenljiva prestaje da postoji (izumire).
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-56
n broj jedin. nula pola rez
1 function Moszero (n:integer):boolean; 2 var broj, jedin, nula, pola:integer; 3 rez:boolean; 4 begin 5 broj:=n*n; 6 jedan:=0; 7 nula:=0; 8 while broj>0 do 9 begin 10 pola:=broj div 2; 11 if 2*pola=broj 12 then nula:nula+1 13 else jedan:jedan+1; 14 broj:=pola 15 end 16 if nula>jedan 17 then rez:=true 18 else rez:=false; 19 Moszero:=rez 20 end;
Kao to se vidi Pascal funkcija prihvata jedan parametar n, izra~unava n2 a zatim se odbrojava u binarnoj prezentaciji broja n2 broj bitova koji su postavljeni na 1 kao i broj bitova postavljenih na 0. Ako postoji vei broj 0 od 1 rezultat koji se vraa je True, ina~e se vraa False. Bit najvee te`ine rezultata koji je postavljen na 0 ne broji se. Princip rada je sledei: Broj koji se testira deli se na dva i zatim se proverava da li je on paran ili neparan. Na ovaj na~in se detektuje vrednost na koju je postavljen LS bit. Testiranje za neparan-paran izvodi se u linijama 10 i 11 (uka`imo da deljenjem neparnog broja sa dva, a zatim dupliranjem koli~nika, ne generie po~etni broj, dok kod deljenja parnog broja sa dva a zatim mno`enjem koli~nika sa dva dobija se ponovo po~etna vrednost).
Funkcija koristi est promenljivih: n, broj, jedin, nula, pola i rez. Prva promenljiva n je parametar dok su ostale lokalne promenljive. U svaku ta~ku izvrenja funkcije, svaka promenljiva mo`e biti u jedno od dva stanja. Za varijablu se ka`e da je aktivna ako vrednost koju ona sadr`i je potrebna. Formalnije, promenljiva V je aktivna u ta~ki P ako postoji tok upravljanja od ulazne ta~ke procedure preko iskaza koji dodeljuje vrednost promenljivoj V i zatim od P ka drugom iskazu U koji koristi V bez intervencije dodele promenljivoj V izmedju P i U. Sledei primer pokazuje da je V aktivna izmedju P i U.
ulaz u proceduru
P V:=3
V je aktivna u ovom periodu
V X:=V
Sa druge strane, u sledeem slu~aju, V nije aktivna izmedju P i Q jer ona prima novu vrednost u Q. Za promenljivu koja nije aktivna ka`emo da ne postoji.
4. RISC procesori
4-57
ulaz u proceduru
P V:=3
Q V:=4
V je aktivna u ovom periodu
V X:=V Koncept aktivnog postojanja je va`an kod dodele registara jer dve ili vei broj promenljivih mogu da koriste isti registar ako nisu nikad aktivne istovremeno. U odnosu na Pascal funkciju MosZero vidimo da su promenljive n, pola i rez u razli~itim delovima funkcije. Optimizirajui komplilator e zbog toga dodeliti sve tri promenljive istom registru.
Poznat je vei broj algoritama za maksimiziranje pakovanja promenljivih u registre. Najpopularniji od svih je tzv. graph coloring, kod koga se svaka procedura predstavlja kao usmereni graf sa iskazima kao ~vorovi a upravlja~kim puitevima izmedju njih kao potezi. Svakoj promenljivoj se dodeljuje boja tako da ne postoje dve istovremeno aktivne promenljive koje imaju istu boju. Cilj algoritma je da odredi minimalan broj boja potreban grafu, tj. da odredi chromatic number (CN). Ako je CN manji ili jednak broju dostupnih registara, sve promenljive e se ~uvati u registre, tj. nee biti potrebno koristiti instrukcije Load i Store.
Test pitanje 4.46 a) RISC maina koristi princip rada sa prozorima koji se preklapaju. Ukupno jednoj proceduri se dodeljuje 32 registra, od kojih se 8 koristi za globalne promenljive. Ostala 24 registra su namenjena za ~uvanje ulaznih parametara, lokalnih promenljivih i izlaznih parametara. Ukazati na mogue na~ine korienja 24 registra koji se dodeljuju izmedju ove tri kategorije.
b) Ako procedura ne poziva druge procedure, da li registri koje normalno koristimo za prenos izlaznih parametara se jednostavno gube?
c) Od 32 registra koji su datom trenutku vidljivi RISC I maini 10 su globalni, 6 se koriste za ulazne parametre, 10 za lokalne promenljive, a 6 za izlazne parametre. Za koliko registra se inkrementira prozor nakon poziva nove procedure?
Test pitanje 4.47
Load i Store instrukcije koje postoje kod tipi~ne 32-bitne RISC maine su sledee:
Load ozna~eni bajt
Load neozna~eni bajt
Store bajt
Load ozna~enu polu re~ (16 bitova)
Load neozna~enu polure~
Store polu re~
Load re~ (32-bita) Store re~
Postoje ukupno pet Load a samo tri Store. Zato?
Test pitanje 4.48
Zbirka zadataka iz Mikroprocesora i mikrora~unara
4-58
Proceduru ~ine 20 iskaza, i 12 lokalno proimenljivih, A do L. Lista i opseg iskaza u toku kojih je svaka promenljiva aktivna je sledea
A : 1-5 E : 6-10 I : 1-4
B : 3-12 F : 12-20 J : 5-8
C : 10-15 G : 14-19 K : 7-12
D : 13-20 H : 1-6 L : 16-19
Koji je minimalni broj registara potreban da se ~uvaju ove promenljive, i kako se promenljive mogu pakovati (dodeljivati registrima) da bi se postigao ovaj minimum?
Test pitanje 4.49
Proceduru ~ine 17 uzastopnih iskaza bez iskaza Jump. Promenljiva x se dodeljuje iskazima 4,9 i 15, a koristi se u iskazima 7, 10, 12 i 17. Dati listu koja ukazuje na opseg iskaza u toku kojih je promenljiva x aktivna.
5. Memorije
5-1
5. Memorije
ö õ
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. Koristei 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 odgovarajui izlaz dekodera 74LS138 va`ei.
Slika 5.1: Logi~ka ema i tablica istine 3-u-8 linijskog dekodera 74LS138
Izlazi
Selektorski ulazi
Ulazi dozvole
rada
Izlazi Ulazi
Zbirka zadataka iz Mikroprocesorskih sistema
5-2
2764
A0-A12
D0-D7
OE
CE
podaci
adrese
RD
~ipselekt
Slika 5.2. Memorijski ~ip 2764
Odgovor
a) Struktura memorijskog sistema
A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 . . . A0 Opseg sele-ktovanih adresa
1 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 memorijskog prostora lociranog u adresnom prostoru F0000h - FFFFFh
Adrese
Podaci
A13 A14 A15
A16
A17A18A19
A0 ⋅ A12 O0 ⋅ O7
2764
74LS138
5. Memorije
5-3
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 odgovarajui izlaz PROM-dekodera va`ei.
A0-A8
O0-O7G
adrese
dozvolarada
podaci
Slika 5.4 Logi~ki dijagram bipolarnog PROM tipa TPB28L42
Odgovor
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 O7 0 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
Zbirka zadataka iz Mikroprocesorskih sistema
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 promou ~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?
Slika 5.7 Logi~ki dijagram kola PAL16L8
Odgovor Programiranje ~ipa PAL16L8 vri se sledeom programskom sekvencom. Sekvenca je napisana na HDL jeziku PALASM.
Logi~ki dijagram
5. Memorije
5-5
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 pomou kola PAL16L8, U1, dekodiraju osam EPROM ~ipova 2764, U2-U9, prikazana je na slici 5.8
Slika 5.8 PAL16L8 kao dekoder adresa EPROM memorijskog prostora realizovan pomou osam ~ipova 2764
Zbirka zadataka iz Mikroprocesorskih sistema
5-6
Test pitanje 5.1
Na slici 5.9 prikazano je kako se pomou 16 SRAM ~ipova tipa 62256 (32k*8) formira memorijski podsistem, i isti povezuje na mikrora~unarski sistem zasnovan na mikroprocesoru 8088. Slika 5.9 Stati~ki memorijski podsistem kapaciteta 512kB koji koristi 16 SRAM ~ipova tipa 62256
5. Memorije
5-7
[tampana plo~a na kojoj su smetene komponente sa slike 5.9, koristi dva dekodera tipa 74LS138 za selekciju 16 razli~itih SRAM komponenti, a treim dekoderom (tipa 74LS138) bira se odgovarajua memorijska banka. Sa 16 SRAM ~ipova kapaciteta 32k*8 se formira memorijski prostor veli~ine 512kB (u konkretnom slu~aju je to prostor po~ev od lokacije 00000h do 7FFFFh). Ukratko ukazati na princip organizacije logike za dekodiranje i funkcije ostalih komponenti u sistemu. Odgovor Prvi dekoder (U4) na emi sa slike 5.9 selektuje ostala dva dekodera (U3 i U9). Pomou adresa koje po~inju sa A19 A18 = 00 selektuje se dekoder U3, a pri A19A18 = 01 bira se dekoder U9. Treba uo~iti da se slobodni pinovi dekodera U4 mogu iskoristiti za dalja proirenja. Sa A19 i A18 obezbedjena je selekcija do ~etiri 256k*8 RAM blokova (4*256k*8), naravno uz dogradnju jo dodatna dva dekodera tipa 74LS238 koji bi se koristili za selekciju prostora od 512k do 1M. Analizirajui sliku 5.9 uo~avamo da su adresni ulazi kod ove memorijske sekcije baferovani, a takodje se baferuju signali D0 - D7 kao i upravlja~ki signali /RD i /WR. Baferovanje je va`no kada se na jednoj plo~i pobudjuje vei broj kola (kao to je u ovom slu~aju sa memorijskim ~ipovima). Bez baferovanja na svakoj plo~i, optereenje na sistemskoj adresnoj magistrali, magistrali za podatke i upravlja~koj magistrali postoje suvie veliko i dovodi da rad sistema bude nekorektan (fan-in i fan-out CPU-a i memorijskih ~ipova nije veliki). U konkretnoj realizaciji sa slike5.9 kao baferi LS adresa se koriste kola U1 i U2 (le~ 74LS244), a kao bafer upravlja~kih signala /RD, /WR i MS adrese A17-A19 se koristi kolo U3 (74LS244). Na magistrali za podatke povezan je primo-predajnik U5 (74LS245). Ostala kola U6A (74LS20), U7A (74LS00) i U8A formiraju logiku koja odredjuje smer prenosa podataka po magistrali za podatke, tj. od CPU-a ka memoriji ili od memorije ka CPU-u. Test pitanje
Za memorijski sistem definisan zadatkom 5.2 projektovati kolo dekodera adresa TPB28L42, kod koga je EPROM prostor kapaciteta 64kB, mikrora~unarskog sistema zasnovanog na CPU 8088 lociran: a) u adresnom prostoru po~ev od adrese 30000h do 3FFFFh b) u adresnom prostoru po~ev od adrese 60000h do 6FFFFh. Test pitanje 5.2
[ta je to "Flash" memorija, zato se koristi? Ukazati na jednu njenu tipi~nu aplikaciju? Odgovor Flash memorija je komponenta tipa EEPROM. Uobi~ajeno se koristi za memorisanje "setup" informacije razli~itih interfejs kartica (video kartice, disk kontroler kartice, itd) kao i sistemskog BIOS-a kod PC maina. Drugim re~ima flash memorije se uglavnom apliciraju za ~uvanje informacije koja se povremeno menja. Jedina razlika izmedju flash memorije i SRAM-a je u tome to flash memorija zahteva napon od 12V za programiranje kako kod operacije brisanja tako i operacije upis. Jedna tipi~na aplikacija Intel-ove flash memorije 28F400 koja se koristi kod sistema zasnovanog na CPU-u 8088 prikazana je na slici 5.10. Memorija 28F400 (~ip U?) se mo`e koristiti kao ~ip kapaciteta 512k*8 ili 256k*16. Pinovi OE (Output Enable), CE (Chip Enable) i WE (Write Enable) imaju istu ulogu kao i oni kod SRAM ~ipova. Novi pinovi su: VPP - povezuje se na 12V kod brisanja i programiranja; PWD - selektuje "power down mode" kada je na logi~koj nuli, ali se takodje koristi i kod programiranja; BYTE - selektuje na~in rada bajt (0) ili re~ (1); pin DQ15 funkcionie kao LS adresni ulaz u bajt na~inu rada. Logi~ki simbol dekodera adresa U?A, tipa 74LS139, sa slike 10, i njegova odgovarajua tablica istine prikazani su na slici 5.11.
Zbirka zadataka iz Mikroprocesorskih sistema
5-8
Slika 5.10 Sprega flash memorije 28F400 kod sistema zasnovanog na mikroprocesoru 8088
Slika 5.11 Dekoder 74LS139
Selektorskiulazi
Selektorski ulazi
Ulaz dozvole rada
Ulaz dozvole rada
Izlazi
Izlazi
Ulazi Izlazi
5. Memorije
5-9
Dekoder 74LS139 sa slike 5.10 koristi adresu A19 i upravlja~ki signal MIO/ kao ulaze. Signal A15 selektuje flash memoriju po~ev od lokacije 80000h do FFFFFh, pri ~emu za MIO/ =0 rad dekodera je dozvoljen.
Test pitanje 5.3
Logi~ki dijagram generatora/detektora parnosti SN74LS280 prikazan je na slici 5.12a) a funkcionalna tabela na slici 5.12b).
izlazi broj ulaza od A do I koji su na visoko å paran å neparan
0, 2, 4, 6, 8 H L 1, 3, 5, 7, 9 L H
b) a)
Slika 5.12 Logi~ki dijagam (a); i funkcionalna tabela generatora/detektora parnosti SN74AS280 (b) Napomena: H-visoko (high); L - nisko (low)
Ako na raspolaganju imamo SRAM ~ipove 62556 kapaciteta 32k*8, projektovati 64k*8 SRAM memorijski sistem koji ima ugra|eno kolo za detekciju greke parnosti. Bitove parnosti koje generie 74LS280 ~uvati u SRAM 6287 kapaciteta 64k*1. Koristei dekoder adresa 74LS138, SRAM kapaciteta 64kB, smestiti u memoriju po~ev od lokacije 80000h do 8FFFFh. Memorijski sistem projektovati za mikroprocesor 8088.
Odgovor Struktura memorijskog sistema prikazana je na slici 5.13. Analizom slike mo`emo doi do sledeih zaklju~aka:
(a) osam linija D0-D7 povezano je na ulaze A-H kola U6 (74LS280), dok je ulaz I=0. To zna~i da kada se na ulazima U6 pojavi paran broj jedinica, logi~ka jedinica koja se generie na izlazu å paran upisuje se u U5 (RAM parnosti 6287). Kada je broj jedinica na ulazu neparan, u U5 se upisuje logi~ka nula. Sa aspekta kodiranja podataka koji se smetaju u memoriju koristi se neparna parnost.
(b) kod ~itanja podataka iz memorije, svaki podatak se dovodi na (drugo) kolo za proveru parnosti U7 (74AS280). U ovom slu~aju koriste se svi ulazi ~ipa U7. Ulazi A do H povezani su na izlaze SRAM-ova a ulaz I na izlaz RAM-a parnosti, U5 (6287). ^ip U5 se ~ita kada je selektovan (CE* = 0), a u U5 se upisuje kada je /CE = 0 i /WE = 0. Ako je parnost neparna (ne postoji greka) izlaz å paran kola U7 (74AS280) se postavlja na logi~ku nulu. Ako se zbog kakvih razloga pro~itana informacija iz memorije promeni, izlaz kola U7 e se postaviti na 1.
(c) izlaz å paran kola U7 povezan je preko D flip-flopa U8A (74LS74) na ulaz nemaskirajueg prekida NMI. Izlaz NMI (ulaz u CPU) logika sa slike 5.13 ne mo`e nikad da postavi na logi~ku nulu (nakon uklju~enja sistema na napajanje, RESET je taj signal koji postavi NMI na logi~ku nulu). Ako se NMI postavi na 1, program koji se izvrava se prekida, a nakon toga izvrava specijalni potprogram (sistemska rutina) kojom se ukazuje da je u memorijskom sistemu detektovana greka parnosti.
A B C D E F G H I
74AS 280
åparan åneparan
Zbirka zadataka iz Mikroprocesorskih sistema
5-10
Slika 5.13 SRAM sistem kapaciteta 64 kB koji sadr`i kolo za detekciju greaka parnosti
Test pitanje 5.4
Magistrale podataka kod mikroprocesora 8086/80186/80286/80386SX su dvaput veeg 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 via-banka i sadr`i sve neparno numerisane lokacije. Kada pristupa vioj-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 vri 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 vri shodno sledeoj tabeli :
aktivni dekoderi 16-bitni prenos 8-bitni prenos - via banka 8-bitni prenos - ni`a banka
U1, U2, U3 U1, U2 U1, U3
5. Memorije
5-11
a) memorijske banke do 1 MB /BHE /BLE (A0) funkcija
0 0 selektovane su obe banke : 16-bitni prenos 0 1 selektovana je via-banka : 8-bitni prenos 1 0 selektovana je ni`a-banka : 8-bitni prenos 1 1 banke nisu selektovane
b) selekcija banaka pomou signala /BHE, /BLE (tj. A0) Slika 5.14 Memorijske banke i na~in selekcije
Test pitanje 5.5
Za generisanje "write strobe" signala memorijskog podsistema kod mikrora~unara zasnovanih na CPU-u 8086 koristi se sledea ema.
HWRWR
AOLWR
(MWTC)
BHE
Kod 80286/80386 umesto /WR se koristi signal /MWTC. Kod mikrora~unara zasnovanog na CPU-u 80286/80386 16-bitna memorija je locirana u adresnom prostoru po~ev od lokacije 060000h do 06FFFFh. Koristei PAL16L8 kao dekoder adresa, projektovati strukturu memorijskog sistema (dekoder + 16-bitna memorija). Usvojiti da se kao SRAM ~ipovi koriste komponente 62256 (32k*8) a da dekoder adresa generie signal /SEL (/CS), /HWR i /LWR.
Odgovor Adrese koje treba dekodirati se nalaze u opsegu od 0000 0110 0000 0000 0000 0000 = 060000h do 0000 0110 1111 1111 1111 1111 = 06FFFFh tj. 0000 0110 XXXX XXXX XXXX XXXX = 06XXXXh
Via banka
Zbirka zadataka iz Mikroprocesorskih sistema
5-12
Slika 5.15 Selekcija banaka kod 80386SX
PAL16L8 treba programirati na sledei na~in
TITLE Adresni_Dekoder PATTERN Test 2 REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 6/8/97 CHIP DEKODER2 PAL16L8 ; pins 1 2 3 4 5 6 7 8 9 10 A23 A22 A21 A20 A19 A18 A17 A16 AO GND ; pins 11 12 13 14 15 16 17 18 19 20 BHE SEL LWR HWR NC NC MWTC NC NC VCC EQUATIONS /SEL = /A23* /A22*/A21*/A20*/A19*A18*A17/A16 /LWR = /MWTC+/A0
5. Memorije
5-13
/HWR = /MWTC+/BHE Struktura memorijski sistem plus dekoder prikazana je na slici 5.16.
Slika 5.16 Struktura dekodera adresa
Zadatak 5.3
Kod mikrora~unarskog sistema zasnovanog na CPU-u 8086 treba ugraditi dve memorijske sekcije, RAM i EPROM. Za EPROM sekciju na raspolaganju imamo ~etiri ~ipa 27128 (16k * 8) od kojih treba realizovati memoriju kapaciteta 32k*16 lociranoj u prostoru po~ev od adresa F0000h do FFFFFh. RAM sekciju realizovati sa ~etiri ~ipa 62256 (32k*8) tako da se dobije memorija kapaciteta 64k*16 po~ev od lokacije 00000h do 1FFFFh. Kao dekoder adresa koristiti kolo 74LS139. Odgovor Struktura memorijskog sistema prikazana je na slici 5.17. [ema se karakterie sledeim karakteristi~nim reenjima.
(1) Jedna polovina dvostrukog adresnog dekodera U7A tipa 74LS139 se koristi za selekciju RAM (~ipovi U2 do U5) a druga U7B za selekciju EPROM sekcije (~ipovi U6 do U11). Memorija se uvek ~ita kao 16-bitna. Signal /RD je povezan na sve EPROM i RAM /OE ulazne pinove.
(2) Upravlja~ki signali /LWR i /HWR su povezani na razli~ite banke RAM memorije. Ovakvo reenje obezbedjuje da se mo`e vriti kako 16-bitni, tako i 8-bitni upis podataka u RAM prostor.
(3) Kod najveeg broja reenja pristup EPROM sekciji zahteva ubacivanje odredjenog broja stanja- ~ekanja. U konkretnoj realizaciji signal sa izlaza kola U12 (74LS30) mo`e se voditi ka
generatoru- stanja-~ekanja (detalji koji se odnose na generatora-stanja-~ekanja nisu prikazani na slici 5.17).
Napomena : Kod 80386SX umesto /BLE se koristi A0
Zbirka zadataka iz Mikroprocesorskih sistema
5-14
Slika 5.17 Memorijski sistem kod 8086 koji sadr`i 6kB EPROM i 128kB SRAM
Zadatak 5.4
Projektovati memorijski sistem CPU-a 80386SX koga ~ine sledee dve sekcije: EPROM kapaciteta 256kB realizovana od ~etiri ~ipa 27512 (64k*8), i SRAM kapaciteta 128kB realizovana sa ~etiri ~ipa 62256 (32k*8). Kao dekoder adresa koristiti kolo PAL16L8, koje pored ~ip selekt signala za memorijske ~ipove treba da generie i signale upisa /LWR i /HWR. PAL kolo treba da dekodira 16-bitne memorijske adrese koje pripadaju prostoru od 000000h do 01FFFFh za SRAM, i prostoru od FC0000h do FFFFFFh za EPROM . Odgovor PAL16L8 treba programirati na sledei na~in
TITLE Dekoder_adresa PATTERN 3 REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 6/8/97 CHIP DEKODER_3 PAL16L8 ;pins 1 2 3 4 5 6 7 8 9 10 MWTC A0 A16 A17 A18 A19 A20 A21 A22 GND ;pins 11 12 13 14 15 16 17 18 19 20 NC HWR A23 BHE LWR CS0 CS1 CE0 CE1 VCC
5. Memorije
5-15
EQUATIONS /LWR = /MWTC + /A0 /HWR = /MWTC +/BHE /CS0 = /A23*/A22*/A21*/A20*/A19*/A18*/A17*/A16 /CS1 = /A23*/A22*/A21*/A20*/A19*/A18*/A17*A16 /CE0 = A23*A22*A21*A20*A19*A18*/A17 /CE1 = A23*A22*A21*A20*A19*A18*A17
Slika 5.18 Memorijski sistem CPU-a 80386 koji sadr`i 256k EPROM i 128k SRAM
Test pitanje 5.6
Koliki prostor mo`e da adresiraju mikroprocesori 80386DX ili 80486? Kojim se upravlja~kim signalima vri selekcija banaka, i uka`i na na~in formiranja signala "write-strobe" za svaku banku. Odgovor Mikroprocesori 80386DX ili 80486 mogu da adresiraju memoriju kapaciteta 2GB (adresa je 32-bitna). Magistrala za podatke je 32-bitna, a to zna~i da je memorija organizovana u ~etiri banke (slika 5.19). Selekcija banaka se vri pomou upravlja~kih signala BE0 i BE1 ,BE2 ,BE3 . Kada su selektovane sve banke, vri se 32-bitni prenos podataka, kada su selektovane dve banke (/BE3 i /BE2, ili /BE1 i /BE0) vri se 16-bitni prenos podataka, a kod 8-bitnog prenosa selektuje se jedna banka. Na slici 5.20 prikazana je logika za generisanje upravlja~kih signala za upis WR3 i WR2 ,WR1 ,WR0 .
Zbirka zadataka iz Mikroprocesorskih sistema
5-16
Slika 5.19 Organizacija memorije kod mikroprocesora 80386DX i 80486
Slika 5.20 Upravlja~ki signali za upis u odgovarajue banke kod 80386 DX i 80486 Zadatak 5.5
Kod sistema zasnovanog na mikroprocesoru 80486 projektovati SRAM memorijski sistem kapaciteta 256k*8. Memoriju realizovati pomou SRAM ~ipova tipa 62256 (32k*8), a locirati je u adresnom prostoru po~ev od lokacije 02000000h do 0203FFFFh. Za dekodiranje adresa koristiti ~ipove PAL16L8. Odgovor Struktura memorijskog sistema prikazana je na slici 5.21. Dekodiranje adresa je organizovano u dva nivoa. Program za dekoder U1 oblika je
TITLE Dekoder_adresa PATTERN Test4 (PAL U1) REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 6/8/97 CHIP DEKODER4 PAL16L8 ; pins 1 2 3 4 5 6 7 8 9 10 MWTC BE0 BE1 BE2 BE3 A17 A28 A29 A30 GND ; pins 11 12 13 14 15 16 17 18 19 20 A31 CS1 U2 NC WR0 WR1 WR2 WR3 CS0 VCC EQUATIONS /WR0 = /MWTC */BE0
5. Memorije
5-17
/WR1 = /MWTC */BE1 /WR2 = /MWTC */BE2 /WR3 = /MWTC */BE3 /CS0 = /A31*/A30*/A29*/A28*/A17*/U2 /CS1 = /A31*/A30*/A29*/A28*A17*/U2
Slika 5.21 SRAM kapaciteta 256 k kod sistema zasnovan na mikroprocesoru 80486 Napomena: Signali *MRDC, *MWTC, *BE0, *BE1, *BE2 i *BE3 su aktivni kao niski Dekoder U2 je programiran na sledei na~in:
TITLE Dekoder_adresa PATTER Test5 (PAL U2) REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 6/8/1997 CHIP DEKODER5 PAL16L8 ; pins 1 2 3 4 5 6 7 8 9 10 A18 A19 A20 A21 A22 A23 A24 A25 A26 GND ; pins 11 12 13 14 15 16 17 18 19 20 A27 U2 NC NC NC NC NC NC NC VCC EQUATIONS /U2 = /A27*/A26*/A25/A24*/A23*/A22*/A21*/A20*/A19*/A18 Test pitanje 5.7
Zbirka zadataka iz Mikroprocesorskih sistema
5-18
Kako je kod mikroprocesora Pentium i Pentium Pro (sa izuzetkom verzije P24T) organizovana memorija, i kakva je struktura kola za generisanje odgovarajuih "write strobe" signala? Odgovor Magistrala podataka kod mikroprocesora Pentium je 64-bitna. Memorija je organizovana u osam banaka (slika 5.22). Struktura kola za generisanje signala "write strobe" prikazana je na slika 5.23.
Slika 5.22 Organizacija memorije kod mikroprocesora Pentium
Slika 5.23 Struktura kola za generisanje upravlja~kih signala "write strobe" Napomena: Signal /MWTC se dobija kombinovanjem signala M|/IO i W|/R.
Zadatak 5.6
5. Memorije
5-19
Kod sistema zasnovanog na mikroprocesoru Pentium koristei EPROM ~ipove 27512 (64k*8) projektovati memorijski sistem obima 1MB koji se nalazi po~ev od memorijske lokacije FFF00000h do FFFFFFFFh. Dekodiranje adresa organizovati u dva nivoa koristei komponente PAL16L8. Odgovor Struktura memorijskog sistema prikazana je na slici 5.24
Slika 5.24 Organizacija 512kB EPROM prostora kod mikroprocesora Pentium
Dekoderi adresa U1 i U2 su programirani na sledei na~in:
TITLE Dekoder_adresa PATTERN Test6 (PAL U1) REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 10/8/97 CHIP DEKODER5 PAL16L8 ; pins 1 2 3 4 5 6 7 8 9 10
Zbirka zadataka iz Mikroprocesorskih sistema
5-20
A29 A30 A31 NC NC NC NC NC NC GND ; pins 11 12 13 14 15 16 17 18 19 20 U2 CE NC NC NC NC NC NC NC VCC EQUATIONS /CE = /U2*A29*A30*A31 TITLE Dekoder_adresa PATTERN Test7 (PAL U2) REVISION A AUTHOR SIMA RUS COMPANY ELEF DATE 10/8/1997 CHIP DEKODER5 PAL 16 L8 ; pins 1 2 3 4 5 6 7 8 9 10 A19 A20 A21 A22 A23 A24 A25 A26 A27 GND ; pins 11 12 13 14 15 16 17 18 19 20
A28 NC NC NC NC NC NC NC U2 VCC EQUATION /U2 = A19*A20*A21*A22*A23*A24*A25*A26*A27 Napomena: Memorija je smetena po~ev od lokacije F8000000h do FFFFFFFFh. Test pitanje 5.8
Neka je broj adresnih ulaza memorijskog ~ipa: (a) 8; (b) 11; (c) 12; i (d) 13. Odredi broj memorijskih lokacija kojima se mo`e pristupati. Odgovor (a) 256; (b) 2048; (c) 4096; (d) 8192 Test pitanje 5.9
Koje namene imaju sledei pinovi kod memorijskih komponenata: (a) /CS (kod RAM-a) ili /CE (kod EPROM-a ili ROM-a), (b) /OE (c) /WE (kod RAM-a) Odgovor (a) /CS ili /CE pin se koristi da selektuje ili dozvoli rad memorijskoj komponenti tako da ona mo`e da obavlja operaciju ~itanje ili upis. (b) /OE dozvoljava aktiviranje izlaznih stepeni ~ipa u toku operacije ~itanje pod uslovom da je /CS ili /CE aktivan. (c) /WE uzrokuje da se obavi operacija ~itanja memorije pod uslovom da je /CS ili /CE aktivan. Test pitanje 5.10
Dekoder adresa realizovan pomou 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 pomou NAND kola prikazan na slici 5.25 tako da mo`e da selektuje memoriju lociranu u sledeem adresnom prostoru: (a) DF800h - DFFFFh (b) 40000h - 407FFh
5. Memorije
5-21
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 sledea adresna selekcija
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 imaemo
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 imaemo
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.
adresni prostor procesora 8088Magistrala podataka procesora 8088
Zbirka zadataka iz Mikroprocesorskih sistema
5-22
Slika 5.26 Logi~ka ema dekodera adresa koji selektuje memorijski prostor po~ev od adrese DF800h do DFFFFh
A19A18A17A16A15A14A13A12A11
IO/M
123
45
67
1011
1213
1415
9
74ALS133
Slika 5.27 Logi~ka ema dekodera adresa u opsegu 40000h do 407FFh
Test pitanje 5.11
Modifikovati logiku dekodera adresa prikazanog na slici 5.3a) tako da dekoder mo`e da selektuje memoriju ~ije su adrese locirane u opsegu od: (a) 70000h - 7FFFFh (b) 40000h - 4FFFFh Odgovor a) Za selekciju adresa u opsegu 70000h - 7FFFFh va`ie
0111 xxxx xxxx xxxx xxxx ili 0111 0000 0000 0000 0000 = 70000h do 0111 1111 1111 1111 1111 = 7FFFFFh
Logi~ka ema dekodera adresa prikazana je na slici 5.28
5. Memorije
5-23
b) Za selekciju adresa u opsegu od 40000h do 4FFFFh imaemo
0100 xxxx xxxx xxxx xxxx ili 0100 0000 0000 0000 0000 = 40000h do 0100 1111 1111 1111 1111 = 4FFFFFh
Logi~ka ema dekodera adresa prikazana je na slici 5.29
A Y0B Y1C Y2
Y3G1 Y4G2 Y5G3 Y6
Y7
70000h-71FFFh72000h-73FFFh74000h-75FFFh76000h-77FFFh78000h-79FFFh7A000h-7BFFFh7C000h-7DFFFh
A13A14A15
A18A19
74LS138
A17A16
Slika 5.28 Logi~ka ema dekodera adresa za opseg od 70000h do 7FFFFh
Slika 5.29 Logi~ka ema dekodera adresa za opseg od 40000h do 4FFFFh Test pitanje 5.12
Reprogramiraj bipolarniPROM sa slike 5.4 tako da isti mo`e dekodirati memorijske adrese koje pripadaju sledeim opsezima: (a) 30000h - 3FFFFh (b) 80000h - 8FFFFh Odgovor Na~in programiranja bipolarnog PROM-a za slu~ajeve pod a) i b) je prikazan na sledeim tabelama: a)
OE A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7
Zbirka zadataka iz Mikroprocesorskih sistema
5-24
0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0
(b)
OE A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0
Test pitanje 5.13
Modifikuj kolo prikazano na slici 5.8 programiranjuem PAL komponente, koja ima funkciju dekodera adresa, tako da je mogue adresirati memorijski prostor po~ev od lokacije: (a) B0000h do BFFFFh (b) 40000h do 4FFFFh Odgovor (a) deo programa koji se odnosi na jedna~ine na osnovu kojih se programira PAL16L8 ima sledei oblik 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 (b) EQUATIONS /O1 = /A19*A18*/A17*/A16*/A15*/A14*/A13 /O2 = /A19*A18*/A17*/A16*/A15*/A14*A13 : /O8 = /A19*A18*/A17*/A16*A15*A14*A13
Test pitanje 5.14
Na slici 5.30 prikazano je kako se osam EPROM ~ipova tipa 2732 mogu povezati na mikrora~unarski sistem zasnovan na procesoru 8088.
5. Memorije
5-25
(a) Modifikovati kolo sa slike 5.30 tako da dekoder adresa mo`e da selektuje memorijski prostor po~ev od lokacije 68000h do 6FFFFh.
(b) Modifikovati kolo sa slike 5.30 tako da dekoder adresa mo`e da selektuje osam 2764 (8k*8) EPROM ~ipova po~ev od lokacije 10000h do 1FFFFh .
Slika 5.30 Na~in povezivanja osam EPROM ~ipova tipa 2731 kod mikrora~unara zasnovanog na procesoru 8088
Odgovor (a) (b) reenje problema za ovaj slu~aj treba da da ~itaoc. Test pitanje 5.15
Adrese
Podaci
74LS13
Zbirka zadataka iz Mikroprocesorskih sistema
5-26
Modifikuj kolo sa slike 5.17 tako da je EPROM prostor lociran po~ev od lokacije C0000h do CFFFFh, a RAM prostor od lokacije 30000h do 4FFFFh. Test pitanje 5.16
Kod mikrora~unarskog sistema zasnovanog na mikorpocesoru 80386SX izvriti projektovanje memorijske plo~e tipa SRAM obima 16 -bitova tako da je SRAM prostor lociran u adresnom opsegu po~ev od adrese 200000h do 21FFFFh.
Test pitanje 5.17
Izvriti projektovanje 32-bitnog memorijskog interfejsa koji ima instaliranu EPROM memoriju po~ev od lokacije DDDD0000h do FFFFFFFFh, koristei pri tome EPROM ~ipove 27128 i kolo PAL16L8 kao dekoder adresa.
Odgovor
Test pitanje 5.18
Za mikrora~unarski sistem zasnovan na procesoru Pentium/PentiumPro izvri projektovanje memorijske plo~e obima 64 bita koja sadr`i EPROM prostor po~ev od lokacije FFF00000h do FFFFFFFFh, i SRAM prostor po~ev od lokacije 00000000h do 003FFFFFh. Izbor EPROM i SRAM ~ipova kao i dekodera adresa treba da obavi projektant. Zadatak 5.7
Neka su data sledea ~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 greku. Odgovor
5. Memorije
5-27
a) Checksum se odredjuje sabiranjem bajtova 25h + 62h + 3Fh + 52h 118 Suma iznosi 118h, tako da ako se zanemari prenos dobiemo 18h. Checksum bajt je dvoji~ni komplement od 18h a to iznosi E8h. b) Sabiranjem niza bajtova uklju~ujui 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 25h + 62h + 3Fh + 52h + E8h 200h (prenos se zanemaruje) c) Sabiranjem niza bajtova uklju~ujui i checksum bajt pokazuje se da je rezultat razli~it od nule, a to zna~i da je vrednost jednog ili veeg broja bajtova promenjena 25h + 22h + 3Fh + 52h + E8h 1C0h (zanemarujui prenos dobija se C0h). Test pitanje 5.19
Odredi opseg adresa za koje je signal /CS aktivan :
CS
A15A16A17A18A19
.
.
.
A0
A14
32k*8
Zadatak 5.8
Kreiraj Checksum rutinu za testiranje 8kB ROM BIOS-a kod IBM PC/XT maine. Na po~etnu lokaciju Checksum rutine ukazuje par DS:[BX] . Odgovor Cheksum PROC NEAR Mov CX, 8192 ; broj bajtova za sabiranje Xor AL, AL ; AL = 0 TEST: Add AL,DS : BX ; dodaj naredni bajt Inc BX ; naredni bajt Loop TEST ; sabrani svi bajtovi Or AL, AL ; SUMA = 0 ?
Zbirka zadataka iz Mikroprocesorskih sistema
5-28
Ret Checksum ENDP Test pitanje 5.20
Koristei NAND kola i invertore izvri projektovanje dekodera adresa koji e selektovati memorijske lokacije po~ev od adrese 0C0000h do 0C0FFFh. Test pitanje 5.21
Odredi opseg adresa koji se mogu selektovati kada izlazi dekodera adresa 74LS138 Y0, Y3 i Y6 postanu aktivni.
AB Y0C
G2A Y3G2B
Y6G1
CS
74LS138 16K*8A14A15A16
A17A18
A19
Zadatak 5.9
Propusnost magistrale, BW, se meri u MB/s i izra~unava se kao
BW=(1/tcik)*W
gde je: tcik - vreme trajanja ciklusa magistrale; W - obim magistrale u bajtovima. Taktna frekvencija mikroprocesora 8088 je 5MHz a memorijski ciklus bez ubacivanja stanja ~ekanja iznosi ~etiri taktna intervala. Odredi propusnost magistrale pod uslovom: (a) da se ne vri ubacivanje stanja ~ekanja, (b) da se ubacuje jedno stanje ~ekanja. Uporedi dobijene rezultate sa performansma koje se odnose na mikroprocesor 8086 pod istim uslovima. Odgovor Magistrala podataka maikroprocesora 8088 je 8-bitna a memorijski ciklus je trajanja tcik=4*200ns = 800ns. a) BW8088 = (1/800ns)*1B = 1,25MB/s Magistrala podataka mikroprocesora 8086 je 16-bitna, pa BW8086 =(1/800ns)*2B = 2,5MB/s
b) Pod uslovom da se vri ubacicanje jednog stanja ~ekanja memorijski ciklus trajae 5 taktnih intervala, tj. tcik = 5*200s = 1000ns, a propusnost magistrale u tom slu~aju iznosie
BW'8088 = (1/1000ns)*1B = 1MB/s
BW'8086 = (1/1000ns)*2B = 2MB/s
5. Memorije
5-29
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-10MHz 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
BW8086/1WS =(1/500ns)*2 = 4MB/s
BW8086/2WS =(1/600ns)*2 = 3.3MB/s
BW286/0WS =(1/200ns)*2 = 10MB/s
BW286/1WS =(1/300ns)*2 = 6.6MB/s
BW286/2WS =(1/400ns)*2 = 5MB/s Zadatak 5.11
Odredi vreme trajanja ciklusa memorije koje se odnosi na operaciju ~itanje i upis kod mikroprocesora 80286, pri: (a) 12MHz sa 1WS (b) 16MHz sa 1WS (c) 16MHz sa 2WS Napomena: Memorijski ciklus procesora 80286 traje dva taktna intervala .
Odgovor (a) tcik|12 = (1+2)*80ns = 3*80ns = 240ns (b) tcik|16 = (1+2)*62ns = 3*62ns = 186ns (c) tcik 16|2WS = (2+2)*62ns = 4*62ns = 248ns Napomena: U optem slu~aju va`i formula: tcik = (broj WS + memorijski ciklus) * t cpu
za 80286 memorijski ciklus = 2, a tcpu je taktna frekvencija procesora.
Test pitanje 5.22
Neka mikroprocesor Pentium izvrava sledee instrukcije. Odredi logi~ko stanje signala /BE7 - /BE0 za svaku od sledeih instrukcija: a) Mov AL, [0000] b) Mov AX, [0000] c) Mov EAX, [0000] Odgovor
Zbirka zadataka iz Mikroprocesorskih sistema
5-30
instrukcija /BE7 /BE6 /BE5 /BE4 /BE3 /BE2 /BE1 /BE0 Mov AL, [0000] 1 1 1 1 1 1 1 0 Mov AX, [0000] 1 1 1 1 1 1 0 0 Mov EAX, [0000] 1 1 1 1 0 0 0 0 Test pitanje 5.23 Usvojimo da procesor 486 izvrava instrukciju Mov EAX, [0005]. Koji e /BEx signali biti aktivni? Koliko je ciklusa magistrale potrebno da se izvri ova instrukcija? Odgovor Instrukcijom Mov EAX, [0005] pristupa se 32-bitnom podatku (4-bajta) koji je u memoriji lociran po~ev od adresa 0005 do 0008. S obzirom da za poravnanje memorije va`i ema sa sl. 5.31:
.
.
.
0
4
8
C
3
7
B
Slika 5.31 : Poravnjanost 32-bitnih re~i u memoriji
To zna~i da su za pristup potrebna dva ciklusa magistrale: (a) U toku prvog aktivan je signal /BE3 a pristupa se bajtu na memorijkoj lokaciji 0008; (b) a u toku drugog aktivni su signali /BE0-/BE2 i vri se prenos bajtova koji su locirani po~ev od memorijske lokacije 0005 do 0007. Zadatak 5.12
Za upravljanje memorijom mikrora~unarski sistem koristi tehniku strani~enja. Predpostavimo da se javlja potreba za korienjem stranica po sledeem redosledu: 12, 14, 2, 34, 56, 23, 14, 56, 34, 12 a da je u glavnoj memoriji mogue istovremeno ~uvati do 4 stranice. Izlistati stranice u glavnoj memoriji nakon svakog prenosa stranice koristei sledee algoritme zamene: (a) FIFO (b) LRU Ukazati kad dolazi do greke strani~enja. Odgovor
5. Memorije
5-31
Usvojimo da je memorija pre po~etka ispra`njena. a) FIFO princip
b)LRU
Test pitanje 5.23
Koje osnovne tipove memorija danas naj~ee sreemo kod mikrora~unarskih sistema? Odgovor Naj~ee korieni memorijski medijumi kod mikrora~unarskih sistema prikazani su na slici 5.32.
memorija
opti~ki magnetni poluprovodni~ki
mogue je samo~itanje
mogue je~itanje i upis
trake diskovi proizvoljanpristup
serijskipristup
ROM RAM
CDWORMCD-R
magneto-opti~ki
start-stopstrimer
flopikruti
pomera~kiregistarCCD
PROMEPROMEEPROMFle
stati~kidinami~ki
Slika 5.32 : Klasifikacija memorijskih medijuma
Napomena : CD-R- recordable CD Zadatak 5.13
Adresni dekoder dozvoljava CPU-u da selektuje, na sistemskoj magistrali, memorijsku lokaciju, interfejs modul, ili kontroler periferije. Koristei dekoder sa slike 5.33 projektovati adresni dekoder koji selektuje jedan od osam adresnih blokova koji pripadaju adresnom prostoru od FC00h do FFFFh.
* * * * - - -
12
- -
14 12
- 2
14 12
34 2 14 12
56 34 2
14
23 56 34 2
14 23 56 34
14 23 56 34
145 23
56 34
12 14 23 56
*-dolazi do greke strani~enja
+ +
+ + +
* * * * - - -
12
- -
14 12
- 2
14 12
34 2 14 12
56 34 2
14
23 56 34 2
14 23 56 34
14 23 56 34
1423 56 34
12 14 23 56
*-dolazi do greke strani~enja
+ - pogodak
Zbirka zadataka iz Mikroprocesorskih sistema
5-32
upravlja-~ki ulazi
A0A1A2 dekoder 3:8EN1EN2EN3
.
.
.
adresniulazi
CS7CS6
CS1CS0
Slika 5.33
Odgovor
EN1
EN2
EN3 dekoder 3:8A2A1A0
A15A14A13A12A11A10
Data_Req
A9A8A7
CS7
CS0
.
.
.
a) Dekoder adresa
FF80-FFFF
FF00-FF7FFE80-FEFFFE00-FE7F
FD80-FDFF
FD00-FD7F
FC80-FCFFFC00-FC7F
CS7
6543
2
10
b) selektovani memorijski blokovi
Slika 5.34 : Logika adresnog dekodera Kao to se vidi sa slike 5.34, svaka memorijska lokacija u okviru bloka selektuje se pomou ni`ih sedam adresnih linija (A6-A0), a obim bloka je 128 lokacija. Test pitanje 5.24
Koliko bajtova ~ine memorije sledeeg kapaciteta: kilobajt, megabajt, gigabajt, terabajt, petabajt, exebajt, zettabajt, i yottabajt. Odgovor
jedinica skraenica kapacitet u jedinicama kapacitet u bajtovima kilo-bajt kB ili k 1024 bajtova 1,024
mega-bajt MB ili M 1024 k-bajtova 1,048,576 giga-bajt GB 1024 mega-bajtova 1,073,741,824 tera-bajt TB 1024 giga-bajtova 1,099,511,627,776 peta-bajt PB 1024 tera-bajtova 1,125,899,306,843,624 exa-bajt EB 1024 peta-bajtova 1,152,921,504,607,870,976
zetta-bajt ZB 1024 exa-bajtova 1,180,591,620,718,458,879,424 yotta-bajt YB 1024 zetta-bajtova 1,208,925,819,615,701,892,530,176 Zadatak 5.14
5. Memorije
5-33
Koliko RAM ~ipova kapaciteta 32k*8b je potrebno ugradiditi da bi se realizovala memorija kapaciteta 256 kB? Skicirati blok dijagram 256k*8b RAM sistema, ako je struktura jednog RAM ~ipa ( kapaciteta 32k*8b) data na slici 5.35.
Adr
CS
R/W
32k*8b
PodD0-D7
A0-A14
selekcija
upis/~itanje
slika 5.35 : RAM kapaciteta 32k*8b
Odgovor
32k*8bAdrCS PodR/W
32k*8bAdrCS PodR/W
32k*8bAdrCS PodR/W
.
.
.
A2 "0"A1 "1"A0
dekoder3÷8
E "7"
D0-D7
upis/~itanje
A17
A16
A15
CS
CS0
CS1
.
.
.
A0-A14
Slika 5.36 : Struktura 256*8b RAM-a
Kao to se vidi sa slike 5.36 ukupno je potrebno osam RAM ~ipova kapaciteta 32k*8 bitova. Zadatak 5.15
Koristei 64k*8b RAM ~ipove i dekoder adresa kao onaj na slici 5.35, konstruisati RAM memorijski blok kapaciteta 256k*16. Test pitanje 5.25
Pokazati kako izgledaju logi~ke strukture osnovne stati~ke RAM elije, modela RAM bit "slice"-a i 16*1b RAM ~ipa. Odgovor Logi~ke strukture stati~ke RAM elije, modela RAM bit "slice"-a i 16*1b RAM ~ipa prikazane su na slici 5.37 i 5.38.
Zbirka zadataka iz Mikroprocesorskih sistema
5-34
Q
Q
R
S
Select
B
B C
C
a) Stati~ka RAM elija
RAM cell
RAM cell
RAM cell
Read/Write logic
Data in Data out
Read/ Bit selectWrite
Wordselect1
Wordselect2n-1
Wordselect0
Select
B
B
Q
Q
R
S
C
C
Select
Q
Q
R
S
Q
Q
R
Bit select
ReadWrite
Write logic
Read logic
Data out
Data in
Ram cell
Ram cell
Wordselect2n - 1
Wordselect0
(b1) logic diagram
(b2) Symbol
(b) Model RAM bit "slice"-a
Slika 5.37 : Struktura stati~ke RAM elije model RAM bit "slice"-a i struktura 16*1b RAM ~ipa. Test pitanje 5.26
Unutar RAM ~ipa radi pristupa RAM elijama umesto jedinstvenog dekodera, sa k ulaza i 2k izlaza koji zahteva ugrednju 2k AND kola sa po k ulaza po gejtu, koriste se dva dekodera sa po k/2 ulaza. Jedan od dekodera upravlja "word" selekt linijama a drugi upravlja "bit" selekt linijama (slika 5.38), to rezultira dvodimenzionalnoj matri~noj selektorskoj emi. Ako RAM ~ip ~ine m re~i sa 1 bit po re~i, tada emom sa slike 5.38 selektuje se ona RAM elija koja se nalazi na preseku
5. Memorije
5-35
WordSelect vrste i BitSelect kolone. S obzirom da WordSelect linija na selektuje striktno re~i (word) ona se naj~ee naziva Row Select. Izlaz dekodera koji selektuje jednu ili vei broj bit "slice"-ova naziva se Column Select.
RAM cell 0
RAM cell 4
RAM cell 8
RAM cell 12
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 1
RAM cell 5
RAM cell 9
RAM cell 13
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 2
RAM cell 6
RAM cell 10
RAM cell 14
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 3
RAM cell 7
RAM cell 11
RAM cell 15
Read/Writelogic
Data in
Data out
Read/ BitWrite select
2-to-4Decoder
21
20
3
2
1
0
Rowselect
A3
A2
Row decoder
Dataoutput
Data inputRead/Write
0 1 2 3
2-to-4 Decoderwith enable
2 1 2 0 Enable
A1 A0Chip select
Columndecoder
Slika 5.38 : Dijagram 16*1 RAM koji koristi polje elija formata 4*4
(a) kako se naziva na~in selekcija RAM elije prikazan na slici 5.38. (b) kako izgleda blok dijagram 8*2b RAM-a organizovan kao polje elija formata 4*4 Odgovor (a) ovakav na~in dekodiranja se naziva koincidentna selekcija
Zbirka zadataka iz Mikroprocesorskih sistema
5-36
(b)
RAM cell 0
RAM cell 4
RAM cell 8
RAM cell 12
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 1
RAM cell 5
RAM cell 9
RAM cell 13
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 2
RAM cell 6
RAM cell 10
RAM cell 14
Read/Writelogic
Data in
Data out
Read/ BitWrite select
RAM cell 3
RAM cell 7
RAM cell 11
RAM cell 15
Read/Writelogic
Data in
Data out
Read/ BitWrite select
2-to-4Decoder
21
20
3
2
1
0
Rowselect
A2
A1
Row decoder
0 1
1-to-2 Decoderwith enable
20 Enable
Columndecoder
Column select
A0 Chip select
Dataoutput 1
Dataoutput 0
Data input 0Data input 1Read/Write
Slika 5.39 : Blok dijagram 8*2b RAM-a koji koristi polja elija formata 4*4
Zadatak 5.16
16k*4b RAM ~ip koristi koincidentno dekodiranje (deli interni dekoder na dva dekodera, jedan za selekciju vreste a drugi za selekciju kolone). (a) ako se usvoji da je polje RAM elija kvadratnog tipa, kakvog je tipa svaki od dekodera i koliko je AND kola potrebno za dekodiranje adrese? Odrediti koje "row" i "column" selekcione linije su aktivirane kada je binarna ulazna adresa ekvivalentna (9000)10.
5. Memorije
5-37
Odgovor Pojednostavljena organizacija dekodera po vrsti i koloni prikazana je na slici 5.40. Organizacija od 16k*4b rezultira 64kb tj. 64k elija, koje se organizuju u formi 256*256. Binarna adresa od (9000)10 ekvivalentna je A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 1 0 0 0 1 1 0 0 1 0 1 0 0 0 2 3 2 8 = heksadecimalno 8960 40 = decimalno b) aktiviraju se 40 vrsta i 35 kolona
0
1
8 na 256
255
0
256
64k-256
1
257
64k-255
2
258
64k-254
3
259
64k-253
4
260
64k-252
5
261
64k-251
6
262
64k-250
7
263
64k-249
252 253
509
64k-2
254
510
64k-1
255
511
64k
dekodervrsta
.
.
.
A7
A6
A0
R/WD0D1D2D3
0 1 2 . . . . . . . . . . . . . . . . . . . . . 62 636 na 64
dekoderkolona
A13 A12 . . . A8 Cs
508
64k-3
.
.
.
Slika 5.40 : Pojednostavljena organizacija RAM-a 16k*4b Zadatak 5.17
Na raspolaganju imamo ra~unarski sistem koji koristi strni~enje. Kapacitet glavne memorije je tri stranice. Izvrenje programa Q iziskuje obraanje pet razli~itim stranicama Pi, gde i=1, 2 , 3, 4 , 5 pri ~emu je i adresa stranice. Niz adresa stranica koji se formira u toku izvrenja programa Q je 232152453252, to zna~i da se prvo obraamo stranici P2 zatim P3, itd. Stranice se dodeljuju glavnoj memoriji shodno politici zamene FIFO, LRU ili OPT (optimal replacement policy). Grafi~ki prikazati na~in dodele stranica za sve tri nabrojane politike.
Zbirka zadataka iz Mikroprocesorskih sistema
5-38
Vreme 1 2 3 4 5 6 7 8 9 10 11 12 broj stranice 2 3 2 1 5 2 4 5 3 2 5 2 Test pitanje 5.27
Kada se govori o pakovanju DRAM memorijskih ~ipova ~esto se koriste termini SIMM i DIMM. Objasni njihovo zna~enje.
Odgovor Prvenstveno zbog visoke gustine pakovanja DRAM-ovi predstavljaju danas jezgro memorije kod najveeg broja mikrora~unarskih sistema. Na primer, nije nita neobi~no da mikrora~unar ima instalirano 64MB (DRAM) glavne memorije, 8MB (DRAM) video memorije i jo 16MB (DRAM) hard-disk ke memorije. Danas se memorijski ~ipovi pakuju kao integrisana kola standardno nazvana diskretni ~ipovi. Kod ranijih maina ovi diskretni ~ipovi su bili instalirani u odgovrajua podno`ja uobi~ajeno 9 ~ipova po memorijskoj banci. Pojavom 32-bitnih mikroprocesora zahtevi za ugradnjom memorije veeg kapaciteta su postali izra`eniji pa su memorije postale po kapacitetu suvie velike, a sa druge strane njihova realizacija sa diskretnim ~ipovima je postala neprakti~na. Naime, za realizaciju samo jedne banke potrebno je 36 ~ipova, tako da ugradnja veeg broja banaka dovodi do iskorienja celokupno dostupnog, fizi~kog prostora. Sa ciljem da se minimizira povrina koja se koristi za ugradnju DRAM-ova na tampanoj plo~i, moderna (savremena) alternativna pakovanja standardno koriste memorijske module. Kod ovakvih modula nekoliko diskretnih memorijskih ~ipova se smeta na jednu malu plug-in tampanu plo~icu. Memorijski moduli su kompaktniji i pouzdaniji od diskretnih ~ipova iz dva razloga. Prvo, ~ipovi se leme na modulu, instalirani su veoma blizu jedan drugom tako da je iskorienje prostora veoma dobro. Drugo, diskretnim ~ipovima koji se instaliraju na memorijskim modulima nikad se ne pristupa kao pojedina~nim ~ipovima ve kao grupi, pa je povrina za pakovanje kompaktnije iskoriena, a kvarovi i nepouzdanosti u radu lake se lociraju, dok se moduli jednostavnije i br`e zamenjuju.
Postoji vei broj razli~itih tipova memorijskih modula. U najveem broju slu~ajeva oni imaju CELP (Card Edge Low Profile) konektore sa 30 do 83 kontakata na svakoj strani modula. Kod tampanih plo~a nazvanih SIMM (Single In-line Memory Modules) kontakti se ostvaruju na suprotnoj strani, po~ev od one strane na kojoj su izlemljeni ~ipovi, tako da svaki par kontakata (jedan sa prednje a drugi sa zadnje) obezbedjuje samo jedan kontakt tj. aktivan je samo zadnji. Sa druge strane, kod tampanih plo~a nazvanih DIMM (Dual In-line Memory Modules) kontakti sa obe strane plo~a su aktivni ( tj. koriste se oni sa prednje i sa zadnje strane) i slu`e za razli~ite namene. Postoji i trei vid tampanih plo~a, koje se danas sve redje koriste, poznate pod imenom SIPP (Single In-line Pin Package) moduli koji koriste pin konektore. Veze kod SIPP modula se izvode kao iglice uredjene u kolinearnoj formi. Ovakvi moduli su uglavnom namenjeni za direktno
⊕ ⊕ ⊕ ⊕ ⊕ ⊕
⊕ ⊕ ⊕ ⊕ ⊕
⊕ ⊕ ⊕
2* - -
2* 3 -
2* 3 -
2 3 1
5 3* 1
5 2 1*
5* 2 4
5* 2 4
3 2* 4
3 2* 4
3 5 4*
3* 5 2
2* - -
2* 3 -
2 3* -
2 3* 1
2* 5 1
2 5 1*
2 5* 4
2* 5 4
3 5
4*
3 5* 2
3* 5 2
3* 5 2
2 - -
2 3 -
2 3 -
2 3 1
2 3 5
2 3 5
4 3 5
4 3 5
4 3 5
2 3 5
2 3 5
2 3 5
FIFO
LRU
OPT
* - prvi uao ⊕ - pogodak
* - prvi kandidat za zamenu ⊕ - pogodak
⊕ - pogodak
5. Memorije
5-39
lemljenje na tampanoj plo~i. Ponekad se sreu i specijalna SIPP podno`ja koja predstavljaju niz rupa poredjanih u liniji u koje se “ubada” modul.
Moduli se razlikuju i po broju veza koje imaju. Danas uglavnom sreemo sledee tipove modula:
• 30-pinski SIMM
• 72-pinski SIMM
• 72-pinski Small Outline DIMM (SODIMM)
• 168-pinski DIMM
• 30-pinski SIPP.
Test pitanje 5.28
Uka`i na osnovne karakteristike pakovanja tipa SIMM.
Odgovor Razlikujemo dva tipa pakovanja tipa SIMM:
- 30-pinski SIMM - jednobajtni - 72-pinski SIMM - ~etvorobajtni.
Izgled 30-pinskog pakovanja tipa SIMM prikazan je na slici 5.41.
Slika 5.41 30-pinsko 9-bitno SIMM pakovanje
Ovaj tip pakovanja karakterie bajtovski prenos. Kada se govori o memorisanju podataka, koriste se 9-bitni SIMM-ovi (sa proverom parnosti) i 8-bitni SIMM-ovi (bez provere parnosti). Kolo za detekciju parnosti ne pripada SIMM plo~ici ali je deo ukupnog memorijskog sistema. Kao to se
Zbirka zadataka iz Mikroprocesorskih sistema
5-40
vidi sa Slike 5.41, za proveru parnosti koriste se pinovi 26, 28 i 29. Kod 8-bitnog SIMM-a pomenuti pinovi su tipa NC (not connected). S obzirom da 30-pinski SIMM-ovi koriste 8-bitnu magistralu za prenos podataka, za realizaciju jedne banke potrebno je ugraditi vei broj SIMM-ova. Tako na primer, kod 16-bitnih CPU-ova kakvi su 286 i 386SX potrebna su dva 30-pinska SIMM-a po banci. Kod 32-bitnih CPU-ova kakvi su 386DX i 486 potrebna su ~etiri 30-pinska SIMM-a po memorijskoj banci. Kod CPU-ova koji imaju 64-bitnu magistralu za podatke kakav je Pentium potrebno je ugraditi osam 30-pinskih SIMM-ova po memorijskoj banci. Ovaj broj je suvie veliki tako da se danas 30-pinski SIMM-ovi skoro i ne koriste. Izgled 72-pinskog SIMM pakovanja prikazan je na Slici 5.42. Kao to se vidi sa slike, prenos se vri po ~etiri bajta sa- i bez bita parnosti na nivou svakog bajta, tj. kada parnost nije implementirana prenose se 32 bita a kada je implementirana 36 bitova.
sa strane Slika 5.42 Izgled tampane plo~e za 8M*32 (32 MB) SIMM-a
Namena pinova SIMM-a sa Slike 5.42 je sledea:
5. Memorije
5-41
naziv pina namena
A0-A10 adresni ulazi CAS0-CAS2 strobe adresa kolone DQ0-DQ31 ulaz/izlaz podataka nc nije povezan PD1-PD4 PD1 - PD4 RAS0-RAS3 strobe adresa vrste Vcc 5V napajanje GND masa, tj. Vss WE dozvola upisa
detekcija prisutnosti
brzina PD1 PD2 PD3 PD4 (ns) (67) (68) (69) (70) 50 nc GND GND GND 60 nc GND nc nc 70 nc GND GND nc 80 nc GND nc GND
Kao to se vidi sa Slike 5.42 (pogled sa strane), memorijski ~ipovi kod ovog tipa SIMM pakovanja leme se sa obe strane tampane plo~e. Ilustracije radi na Slici 5.43 prikazano je ekvivalentno kolo 32MB SIMM pakovanja koje koristi memorijske ~ipove TM 893CBK 32 (8M*32) proizvod firme Texas Instruments.
Slika 5.43 Ekvivalentno kolo 32 MB SIMM (8M*32) bez provere parnosti
Zbirka zadataka iz Mikroprocesorskih sistema
5-42
Test pitanje 5.29 Ukazati na osnovne karakteristike pakovanja tipa DIMM.
Odgovor 72-pinska SIMM pakovanja su postala usko grlo kada su se na tr`itu pojavile PC maine zasnovane na procesorima Pentium i Pentium Pro. Imajui u vidu da su magistrale podataka kod ovih procesora 64-bitne neophodno je bilo ugaraditi dva SIMM-a po jednoj banci, upravo kako su svojevremeno maine zasnovane na CPU-u 486 zahtevale ugradnju ~etiri 30-pinska SIMM-a. Da bi se izalo na kraj zahtevima maina ~ija je magistrala podataka obima 64-bita projektanti memorijskih sistema razvili su memorijske module sa veim brojem veza koje dodatno omoguavaju i adresiranje veeg memorijskog prostora. Novi moduli imali su ukupno 168 razli~itih veza, po 84 sa svake od strane modula, a nazvani su DIMM-ovi. Na Slici 5.44 prikazan je izgled jednog tipi~nog 168-pinskog DIMM-a.
Slika 5.44 168 pinsko DIMM pakovanje
Kao to se vidi sa Slike 5.44, svaka strana konektora je podeljena na tri grupe medjusobno razdvojene procepima. Prvu grupu ~ine pinovi 1-10 (85-94) drugu grupu pinovi od 11-40 (86-116), a treu grupu pinovi 41-84 (116-168). Brzina odziva memorijskog modula signalizira se CPU-u preko pinova PD1-PD8 shodno sledeoj tabeli:
signal pin 60 ns 70 ns 80 ns PD1 79 L L L PD2 163 L L L PD3 80 H H H PD4 164 L L L PD5 81 L L L PD6 165 H L H PD7 82 H H L PD8 166 H H H
Veoma ~esto, kod minijaturnih verzija PC maina, umesto 72-pinskog SIMM pakovanja koristi se 72-vo pinsko SODIMM (Small Out line Dual In-line Memory Module) pakovanje (Slika 5.45).
Slika 5.45 72 pinsko DODIMM pakovanje
5. Memorije
5-43
U elektri~nom pogledu 72-pinsko SODIMM pakovanje ekvivalentno je 72-pinskom SIMM pakovanju. Svako SODIMM pakovanje ~ine ~etiri izdvojene banke koje omoguavaju da magistrala podataka bude obima 8, 16 ili 32 bita.
Test pitanje 5.30 Ukazati na osnovne karakteristike pakovanja tipa SIPP.
Odgovor SIPP (Single In-line Pin Package) moduli koriste pin-konektore. Izgled 30-pinskog SIPP memorijskog modula prikazan je na Slici 5.46
Slika 5.46 30-pinski SIPP modul
Izvodi konektora SIPP modula standardno su namenjeni za direktno lemljenje na tampanoj plo~i. Ne tako ~esto ovi moduli se instaliraju i u SIPP podno`ja.
U elektri~nom pogledu SIPP i SIMM pakovanja su identi~na, a sa funkcionalne ta~ke gledita ovi moduli se mogu realizovati od identi~nih memorijskih ~ipova, tehnologija i kapaciteta.
Test pitanje 5.31 Da li postoji standardna notacija na osnovu koje je mogue identifikovati tipove memorijskih ~ipova.
Odgovor Ne postoji jedinstveni standard na osnovu koga bi bilo mogue identifikovati tip memorijskog ~ipa. Ipak najvei broj proizvodja~a pridr`ava se sledeeg pravila
Zbirka zadataka iz Mikroprocesorskih sistema
5-44
WWW XX YYYY - ZZ gde je:
• WWW - kôd proizvodja~a
• XXX - identifikacija tipa memorije (EPROM, SRAM, DRAM itd)
• YYYY - kapacitet memorisanja u bitovima
• ZZ - vreme pristupa u nanosekundima
Tako na primer, ~ip MC 27256-10 identifikujemo kao:
• WWW = MC, kôd za Motorola Semiconductor
• XX = 27 kôd za EPROM, DRAM se identifikuje sa 41 ili 51, fle memorija sa 28, SRAM se ozna~ava sa 62 ili 7C
• YYYY = 256, ukupni kapacitet memorisanja ~ipa (256 kbita)
• ZZ = 10, vreme pristupa je 100 ns.
Na osnovu fabri~kog broja nemogue je identifikovati na koji na~in je organizovana memorija kapaciteta 256 kbita. Kada se govori o EPROM ~ipovima, oni su skoro uvek bajtovske organizacije, tako da u konkretnom slu~aju imamo ~ip 32 kB (32 k * 8 = 256 kbita).
Test pitanje 5.32 Koli~ina podataka (merena u bajtovima) koje procesor mo`e da prenese u toku jedne sekunde naziva se brzina prenosa podataka (DTR Data Transfer Rate), a izra~unava se kao:
magistraleciklusa jednog vreme
magistrale ciklusu jednom bajtova po prenetihbrojDTR = (1)
Vreme potrebno da se obavi jedan ciklus magistrale iznosi:
CM = n * Tcp = cpfn
(2)
gde: n - predstavlja broj sistemskih taktova po jednom ciklusu magistrale, Tcp - vreme trajanja spoljne taktne pobude magistrale, fcp - frekvencija takta magistrale.
Zamenom (2) u (1) dobijamo:
DTR =n
f * magistrale ciklusu jednom bajtova po prenetihbroj (3)
Odrediti DTR za CPU 8088 koji radi na frekvenciji 4,77 MHz i uporediti ovaj rezultat sa DTR-om mikroprocesora Pentium ~ija je taktna frekvencija magistrale 66 MHz.
Odgovor
suioda/prenotaktna per 4MHz 4,77 *bajt 1
DTR88 =
= 1,19 MB/s
suioda/prenotaktna per 2
MHz 66 *bajtova 8DTR PEN =
5. Memorije
5-45
= 264 MB/s
221=88
PEN
DTR
DTR
Ilustracije radi, u sledeoj tabeli prikazani su DTR-ovi za procesore iz familije Intel 80x86.
mikroprocesor obim magistrale (bajtovi)
broj prenetih bajtova po
memorijskom ciklusu
broj taktova po memorijskom
ciklusu
radna frekvencija magistrale
(MHz)
DTR1
(MB/s)
8088 1 1 4 8 2 8086 2 2 4 10 5 80386 4 4 2 33 66 80486 4 4 2 50 100 80486 4 16 5 50 1602
Pentium 8 8 2 66 264 Pentium 8 32 5 66 4223
Pentium 8 32 4 66 5284
Pentium Pro 8 8 2 66 264 Pentium Pro 8 32 5 66 4223
Pentium Pro 8 32 4 66 5284
Napomena: 1(DTR se izra~unava prema jedna~ini (3)) 2(2-1-1-1- burst na~in rada, podaci su poravnjani na 16-bajtovnim granicama, ciklus je tipa samo-~itanje, prenosi se 16 bajtova po ciklusu) 3(2-1-1-1- burst na~in rada, ciklus je tipa ~itanje ili upis, prenose se 32 bajta po ciklusu) 4(1-1-1-1- burst na~in rada, iskoriena je mogunost proto~no odredjivanje adresa).
Test pitanje 5.33 Na Slici 5.47 prikazani su vremenski dijagrami magistralnih ciklusa tipa Upis (Write) i ^itanje (Read) za mikroprocesore 8086 i 8088.
a) Shodno talasnim dijagramima prikazanim na Slici 5.47, dati kratak komentar koji se odnosi na cikluse ^itanje i Upis.
b) Ako vreme pristupa pristupa procesora definisano na slici 5.47 iznosi 2.3 TCPU, gde je TCPU= 209 ns, a vreme pristupa memoriji se nalazi u granicama od 200-300 ns odrediti da li e sistem korektno raditi bez ubacivanja stanja ~ekanja.
Odgovor a) komentar treba da dâ ~italac na osnovu analize vremenskih dijagrama; b) vreme pristupa procesora iznosi 2.3*209=481 ns, a to je du`e od 300 ns. Prema tome, nije potrebno ubacivati stanja ~ekanja.
Zbirka zadataka iz Mikroprocesorskih sistema
5-46
Slika 5.47 Vremenski dijagrami magistralnih ciklusa kod operacija tipa ^itanje i Upis za mikro-
procesore 8086 i 8088.
Test pitanje 5.34 Kada memorija ili U/I podsistem ne mo`e da dostavi podatke CPU-u brzinom sa kojom on to o~ekuje, sa ciljem da se uskladi brzina rada oba delova sistema, ubacuju se stanja ~ekanja. Na koji na~in se reava problem stanja-~ekanja?
Odgovor Globalno posmatrano, postoje sledea tri reenja za ovaj problem:
1. Smanjenje taktne frekvencije sistema
2. Ugradnja br`ih memorijskih ~ipova ili U/I jedinica
3. Programiranje memorijske jedinice (ili U/I podsistema) tako da, pri svakom pristupu memoriji (ili U/I podsistemu), izda zahtev za generisanjem stanja ~ekanja - obi~no se to izvodi signalom READY.
Test pitanje 5.35 Na Slici 5.48 prikazani su magistralni memorijski ciklusi ^itanje i Upis koji va`e za mikroprocesore 386, 486 i Pentium. Shodno talasnim dijagramima sa Slike 5.48, dati odgovarajui komentar.
5. Memorije
5-47
Slika 5.48 Talasni dijagram operacija ^itanje i Upis
Test pitanje 5.36 Na Slici 5.49 prikazano je procesorsko vreme pristupa memoriji za mikroprocesore iz familije 80x86. Odrediti:
(a) vreme trajanja taktne prirode procesora u ns;
(b) vreme trajanja pristupa procesora memoriju u ns.
Odgovor
spoljni takt vreme pristupa CPU-a memoriji
procesor frekvencija u MHz perioda u ns T stanja vreme u ns
8088 4,77 209 2.3 480,0
8086 10 100 2.3 230,0
80386 33 33 1.5 49,5
80486 50 20 1.5 30,0
Pentium 66 15 1.5 22,5
Pentium Pro 66 15 1.5 22,5
Slika 5.49 Vreme pristupa procesoru 80x86 memoriji
Napomena: Tamnije rafirani deo se odnosi na odgovor
Zbirka zadataka iz Mikroprocesorskih sistema
5-48
Test pitanje 5.37 Kada se govori o operaciji ^itanje ili Upis a re~ je o mikroprocesorima 486, Pentium i Pentium Pro ukazati na zna~enje pojma burst ciklus.
Odgovor Kao to se mo`e primetiti sa Slike 5.48, procesorima 386, 486 i Pentium, da bi preneli jedan podatak u toku operacije Upis ili ^itanje, potrebna su dva taktna intervala po magistralnom ciklusu. Po~ev od procesora 486 pa navie, implementiran je novi re`im rada nazvan burst bus ciklus. Sutina se sastoji u sledeem: Prvi burst bus ciklus karakterie trajanje od 2T ciklusa magistrale, ali zato, svaki naredni ciklus magistrale trajanja je samo T. Na ovaj na~in brzina prenosa podataka se duplira u odnosu na nonburst na~in rada. Primarni cilj burst na~ina rada je da obezbedi to je mogue br`e popunjavanje interne procesorske ke memorije. U sutini, burst ciklusi se mogu implementirati za bilo koji pristup memoriji. Ograni~enja koja va`e su sledea:
(1) Kod mikroprocesora 486, ciklus je ograni~en na prenos od samo 16 bajtova (obim jedne linije ke memorije) po burst ciklusu. Kod 16-bajtnog poravnjanja podaci pripadaju memorijskoj oblasti po~ev od adrese XXXX XXX0 do XXXX XXXF. U okviru ove oblasti mogua su sledea ~etiri burst redosleda (a) 0-4-8-C; (b) 4-0-C-8; (c) 8-C-0-4; i (d) C-8-4-0. Na primer, za prenos 16 bajtova u burst re`imu rada po~ev od adrese 0000 0100 potrebna su ~etiri ciklusa magistrale. Jedna od moguih sekvenci je:
ciklus 1 - bajtovi 100 - 103
ciklus 2 - bajtovi 104 - 107
ciklus 3 - bajtovi 108 - 10B
ciklus 4 - bajtovi 10C - 10F
(2) Kod mikroprocesora Pentium u toku burst ciklusa prenose se 32 bajta (odgovara obimu linije internog kea). U ovom slu~aju, takodje, svi podaci koji se prenose moraju da se nalaze u okviru granica po~ev od adrese XXXX XXX0 do adrese XXXX XX1F. Ponovo su mogua ~etiri burst redosleda (a) 0-8-10-18; (b) 8-0-18-10; (c) 10-18-0-8; (d) 18-1-8-0.
(3) Kod mikroprocesora 486 burst ciklusi tipa Upis nisu dozvoljeni, dok su kod Pentiuma dozvoljena oba, kako burst Upis, tako i burst ^itanje.
Za prenos podataka u burst na~inu rada potrebna su ~etiri ciklusa magistrale. Oni se ozna~avaju kao 2-1-1-1. To zna~i da prvi ciklus magistrale traje 2T, a ostala tri ciklusa 1 T. Koristei adresnu proto~nost (address pipelining), kada se memorijska adresa generie pre po~etka magistralnog ciklusa u toku koga se vri prenos podataka, procesor Pentium mo`e da generie burst cikluse tipa 1-1-1-1.
Zadatak 5.18 Na Slici 5.50 prikazan je memorijski interfejs koji odgovara memorijskoj mapi sa Slike 5.51. Kao dekoder adresa se koristi programibilno kolo PAL 16L8.
Kreirati izvorni kôd za PAL adresni dekoder.
5. Memorije
5-49
256K x 8RAM
RDWR
CE
RAM 0
256K x 8RAM
RDWR
CE
RAM 1
256K x 8RAM
RDWR
CE
RAM 2
64K x 8RAM
RD
CE
ROM 0
64K x 8RAM
RD
CE
ROM 1
20 19 18 17 16 15 14 13 12 11
1 2 3 4 5 6 7 8 9 10
PAL16L8
8088CPU
modulA0-A17 A0-A17 A0-A15 A0-A15
A16A17A18A19IOM
D7-D0
A0-A17
RAM0
RAM1 RAM2
ROM0ROM1
+5V
Slika 5.50 Memorijski interfejs
ROM164K
ROM064K
RAM2256K
RAM1256K
RAM0256K
1 MB
FFFFFF0000
E0000
C0000
80000
40000
00000
Slika 5.51 Memorijska mapa
Zadatak 5.19 32-bitni memorijski interfejs koji podr`ava memoriju kapaciteta YYY MB je prikazan na Slici 5.52. Njega ~ine osam SIMM-ova kapaciteta ZZ MB (SIMM0-7), i kolo Ul tipa 74LS138 kao 3-u-8 linijski dekoder. Svaki SIMM ima ugra|eno po ~etiri memorijska modula. Kapacitet svakog memorijskog modula je 4 MB. Odrediti:
(a) kapacitet memorijskog interfejsa YYY izra`en u MB
(b) kapacitet jednog SIMM pakovanja ZZ izra`en u MB
(c) za koji adresni opseg je va`ei svaki od osam izlaza adresnog dekodera U1
Zbirka zadataka iz Mikroprocesorskih sistema
5-50
(d) rad sa koliko memorijskih interfejsa kao onaj sa Slike 5.52 podr`ava sistem
(e) nacrtati memorijsku mapu i nazna~iti mesta gde se preslikavaju SIMM0 do SIMM7.
Slika 5.52 Memorijsko polje koga ~ini osam SIMM-ova
Deo odgovora: Izlazi dekodera U1, “0” do “7”, aktiviraju se shodno sledeoj tabeli:
izlaz opseg adresa “0” 0000 0000 - 00FF FFFF “1” 0100 0000 - 01FF FFFF “2” 0200 0000 - 02FF FFFF “3” 0300 0000 - 03FF FFFF “4” 0400 0000 - 04FF FFFF “5” 0500 0000 - 05FF FFFF “6” 0600 0000 - 06FF FFFF “7” 0700 0000 - 07FF FFFF
5. Memorije
5-51
A31 A30 A29 28 A27 A26 A25 A24 A23 A22 A3 A2 BE3 BE2 BE1 BE0
Korienje adresnih- i BE linija za adresiranje memorije kapaciteta 128 MB
Ovih pet linija moraju biti na “niskom”kako bi se dozvolio rad dekodera
Ove tri linije selektuju jedanod osam SIMM-ova
Ove 22 linije selektuju jedan bajt usvakom 4 MB x 8 DRAM-u, svakog
SIMM-a
Ove ~etiri linije selektuju bajt, re~ili duplu re~ (preko ~etiri DRAM
modula na svakom SIMM-u)
SIMM7
SIMM6
SIMM5
SIMM4
SIMM3
SIMM2
SIMM1
SIMM0
FFFFFFFF
F8000000
10000000
08000000
00000000
A27-A31 = 11111
A27-A31 = 00001
A27-A31 = 0000016 MB
128 MB
Zadatak 5.20 Struktura 32-bitnog memorijskog SRAM interfejsa prikazana je na Slici 5.53. Sistem je zasnovan na procesoru 386/486. Odredi:
(a) kapacitet interfejsa
(b) strukturu dekodera adresa (logi~ku emu), ako se memorijski interfejs preslikava na dno fizi~ke memorije tj. po~ev od adrese 0000 0000.
(c) koja je krajnja adresa zadnjeg bajta ovog interfejsa, i u kom je ~ipu smeten ovaj bajt?
Zbirka zadataka iz Mikroprocesorskih sistema
5-52
D0-D7
A0-A15
CS2
WE OE CS1
D0-D7
A0-A15
CS2
WE OE CS1
D0-D7
A0-A15
CS2
WE OE CS1
D0-D7
A0-A15
CS2
WE OE CS1
BE0
Dekoder
BE1 BE2 BE3
Selekcija memorije
+5V +5V +5V +5V
SRAM-A SRAM-B SRAM-C SRAM-D
MEMWMEMR
D0-D7
Upravlja~kamagistrala
A2-A17
D8-D15
D16-D23
D24-D31
Magistralapodataka
Adresnamagistrala
Slika 5.53 32-bitni memorijski SRAM interfejs
Test pitanje 5.38 Usvojimo da je CS = FF25h. Odrediti najviu i najni`u fizi~ku adresu za memorijski prostor koga adresiraju mikroprocesori: (a) 8088/86 (b) 80286 Specificirati sadr`aj bita A20.
Odgovor (a) najni`a fizi~ka adresa je FF250 h, a najvia 0F24F h (FF250 h + FFFF h). S obzirom da kod procesora 8088/86 postoje samo adresne linije A0-A19, prenos kod operacije sabiranja adresa se zanemaruje.
(b) kod 286 najni`a fizi~ka adresa je identi~na kao i kod 8088/86 i iznosi FF 250 h, ali je najvia fizi~ka adresa 10 F24F h pa je zbog toga A20 = 1.
Test pitanje 5.39
Za UV - EPROM ~ip 27128 odrediti kapacitet, organizaciju, broj adresnih pinova kao i broj pinova za podatke.
Odgovor Kapacitet ~ipa 27128 je 128 kb. Organizacija EPROM ~ipova je YY k * 8. To zna~i, za konkretni slu~aj, da je organizacija ~ipa 16k*8, to ukazuje da je broj pinova za podatke 8, a broj adresnih pinova 14, tj. 214 = 16k.
Test pitanje 5.40 Koliko je adresnih pinova dodeljeno svakom od memorijskih ~ipova:
5. Memorije
5-53
(a) 16k * 4 DRAM
(b) 16k * 4 SRAM
Odgovor Broj adresa je 14 s obzirom da je 214 = 16k a) kod DRAM-a postoje 7 adresnih pinova (A0 - A6) i dva pina za RAS i CAS b) kod SRAM-a postoje 14 adresnih pinova A0 - A13 Broj linija za podatke kod obe memorije, DRAM i SRAM, je identi~an i iznosi 4, tj. D0 - D3.
Test pitanje 5.41 Talasni dijagrami koji va`e kod operacije ^itanje SRAM-a i DRAM-a (standardni model) prikazani su na Slici 5.54.
a) vremenski dijagrami koji se odnose na operaciju ^itanje, kod SRAM-a, predstavljeni su na Slici 5.54 a).
Uporediti minimalna CPU-ova vremena potrebna da se pro~itaju 150 proizvoljnih memorijskih lokacija date banke, za sledee slu~ajeve:
i) DRAM sa tACC = 100 ns i tRC = 190 ns
ii) SRAM sa tACC = 100 ns
Odgovor i) DRAM-u je potrebno 190 ns da pristupi svakoj lokaciji. Zbog toga ukupno je potrebno 150
* 190 = 28,500 ns
ii) U slu~aju SRAM-a potrebno je vreme od 150 * 100 = 15.000 ns.
Test pitanje 5.42 Jedan od na~ina da se eliminie uticaj tRP (RAS precharge time) vremena kod DRAM-ova je korienje interleaving metode. Kod ove metode, jedna pored druge se postavljaju dve banke, a CPU pristupa svakoj banci alternativno. Na ovaj na~in tRP vreme jednog skupa banaka se preklapa sa vremenom pristupa drugoj banci. To zna~i da dok CPU pristupa jednom skupu banaka, drugi skup se ponovo puni (precharge). Da bi objasnili princip analizirajmo Slici 5.55.
Ako usvojimo da 80386SX radi na 20 MHz, memorijski ciklus CPU-a bie 100 ns, tj. trajanje dva taktna intervala. Pod uslovom da je instaliran DRAM ~ije je vreme pristupa 70 ns a precharge vreme 65 tada dobiemo da je vreme ciklusa DRAM-a 135 ns, to je znatno du`e od 100 ns koliko traje memorijski ciklus CPU-a. Ovaj problem se reava korienjem interleaving-a memorije. U konkretnom slu~aju nakon to je CPU 80386SX pristupio skupu A on prelazi na pristup skupu B dok za skup A se odvija akcija precharge. Na sli~an na~in, dok procesor pristupa skupu A, za skup banaka B se odvija akcija precharge.
b) odrediti vreme pristupa 1024 proizvoljnim bitovima kod memorije kapaciteta 1M * 1 pri tRAC = 85 ns, a tRC = 165 ns.
c) odrediti vreme pristupa svim 1024 memorijskim lokacijama ako se koristi metod interleaving-a memorije.
Zbirka zadataka iz Mikroprocesorskih sistema
5-54
va`ea adresa
tRC
adrese
RD
tAC
a) vremenski dijagrami operacije ~itanja kod SRAM-a
tRAC - vreme pristupa od RAS
tCAC - vreme pristupa od CAS
tRC- vreme trajanja ciklusa ~itanja
tRP - RAS precharge vreme
b) talasni dijagrami koji se odnose na operaciju ^itanje, kod DRAM-ova, predstavljeni su na Slici
5.54 b).
tRC
adrese
RAS
tRAC
tRAC - vreme pristupa od RAStCAC - vreme pristupa od CAStRC - vreme trajanja ciklusa ~itanjatRP - RAS precharge vreme
b) vremenski dijagrami operacije ~itanja kod DRAM-a
tRP
podaci
CAS
tCAC
Slika 5.54 Vremenski dijagrami kod DRAM-ova i SRAM-ova
5. Memorije
5-55
00030007000B
00020002000A
skup B
8 8
D15-D8 D7-D0
000100050009
000000040008
skup A
8 8
D15-D8 D7-D0
Slika 5.55 DRAM interleaving organizacija
Odgovor a) vreme potrebno da se pro~itaju sve 1024 lokacije iznosi: t
S = 1024 * tRC
= 1024 * 165 ns = 168.960 ns b) Kada se koristi interleaving, tada vreme potrebno da se pro~ita svih 1024 lokacija iznosi: t’
S = 1024 * tRAC
= 1024 * 85 ns
= 87.040 ns
Test pitanje 5.43 Na koji na~in su organizovane memorijske elije kod sledeih DRAM ~ipova:
(a) 256 k * 1 (b) 1 M * 1 (c) 4 M * 1
Odgovor a) Memorija kapaciteta 256 k * 1 ima 9 adresnih pinova (A0 - A8), a elije su organizovane u obliku matrice 29 * 29 = 512 * 512, tj. 512 vrsta od kojih svaka ima 512 kolona elija.
b) 1024 * 1024
c) 2048 * 2048
Test pitanje 5.44 Neka DRAM-ovi tipa : (a) 256k*1; (b) 1M*1; (c) 4M*1; rade u strani~nom na~inu (re`imu) rada (page mode). Pokazati na koji na~in je svaki ~ip organizovan u stranice. Odrediti broj kolona po stranici za slu~ajeve pod (a), (b) i (c).
Zbirka zadataka iz Mikroprocesorskih sistema
5-56
Odgovor (a) za 1 M * 1 imamo 512 stranica, pri ~emu svaka stranica ima 512 kolona elija (b) 1024 stranica, gde svaka stranica ima 1024 bitova, tj. kolona (c) 2048 stranica svaka po 2048 bitova
Test pitanje 5.45 Odrediti ukupno vreme koje CPU potroi da bi pristupio celoj stranici memorije ako memorijske banke rade u strani~nom na~inu rada, za slu~aj da je DRAM kapaciteta 1 M * 1 a tRC = 165 ns, tRAC = 85 ns, a tPC = 50 ns. Odgovor U strani~nom na~inu rada, da bi se pro~italo 1024 bitova, porebno je vreme od:
ts = tRAC + 1023 * tPC
= 85 ns + 1023 * 50 ns
= 51.235 ns.
Napomena: Videti vremenske dijagrame u koji su prikazani na slici 5.56
Test pitanje 5.46 Na Slici 5.56 prikazani su talasni dijagrami koji va`e za a) page mode, b) static column mode; c) nibble mode. Dati komentar i ukazati kako se ra~una ukupno vreme prenosa podatka izme|u CPU-a i memorije.
Test pitanje 5.47 Odrediti ukupno vreme koje je potrebno CPU-u da pristupi celoj stranici memorije ako memorijske banke koriste static-column mode, a DRAM-ovi su kapaciteta 1 M * 1 sa tRC = 165 ns, tRAC = 85 ns, i tSC = 50 ns.
Odgovor t
S = tRAC + 1023 * tSC
= 85 + 1023 * 50 ns = 51,235 ns. Test pitanje 5.48 Odrediti ukupno vreme koje je CPU-u potrebno da pristupi: (a) 4 bita kod nibble mode DRAM-a (b) svim 1024 bita kod nibble mode DRAM-a ako je tRAC = 85 ns, tNC = 85 ns, tRP = 70 ns.
Odgovor a) Da bi pristupio 4 bita u nibble mode potrebno je t4N = tRAC + 3 tNC = 85 + 3 * 40 ns = 205 ns.
5. Memorije
5-57
Slika 5.56 Re`imi rada DRAM-a
b) Da bi pristupio svim 1024 bita koriste se 256 pristupa kod 4 nibble mode, tako da je ukupno vreme
t4N = 256 (tRAC + 3 tNC + tRP)
= 256 (85 + 3 * 40 + 70)
= 70.400 ns.
Napomena: Za definiciju tRP videti Sliku 5.54 b).
Zbirka zadataka iz Mikroprocesorskih sistema
5-58
Zadatak 5.21 Koristei kataloke podatke za 1 M * 1 DRAM ~ip, date na Slici 5.57, odrediti potrebno vreme da se pristupi 4 bita za sledee re`ime rada:
(a) standard mode
(b) page mode
(c) static column mode
Uporediti rezultate sa onim dobijenim u prethodnom test pitanju koji va`i za nibble mode DRAM.
Vreme pristupa (ns) Standard Page Static Column Nibble
Access time from row, tRAC 85 85 85 85
Access time from column, tCAC 25
Access time from column, tAA 45
Access time from column, tNC 20
Vreme ciklusa
Read cycle time, tRC 165
Page mode cycle time, tPC 50
Static column time, tSC 50
Nibble mode cycle time, tNC 40
Slika 5.57 Karakteristika 1 M * 1 DRAM ~ipa
Odgovor Ozna~imo sa t4xx vreme potrebno da se pro~itaju 4 bita u odgovarajuem re`imu rada.
(a) za Standard mode:
t4sm = 4 tRC = 4 * 165 = 660 ns
(b) za Page mode:
t4pm = tRAC + 3 tPC = 85 + 3 * 50 = 235 ns
(c) za Static column mode:
t4sc = tRAC + tSC = 85 + 3 * 50 = 235 ns
(d) kod Nibble mode imali smo t4Nm = 205 ns
Test pitanje 5.49 Ukazati na osnovne fizi~ke razlike izmedju sledeih tipova memorijskih tehnologija: SRAM, fle memorije, magnetni flopi disk, opti~ki hard disk, i CD-ROM.
Odgovor Osnovne karakteristike SRAM-a, Fle memorije, magnetnog flopi diska, opti~kog hard diska, i CD ROM-a prikazane su u sledeoj tabeli:
5. Memorije
5-59
tehnologija medijum memorisanja
metod pristupa
izmenljivost permanentnost vreme pristupa
SRAM elektronski proizvoljan ~itanje/upis NDRO, gubi se sadr`aj
(5-20) ns
fle memorija
elektronski proizvoljan ~itanje re~i/ upis bloka
NDRO, gubi se sadr`aj
(50-100) ns
magnetni flopi disk
magnetni serijski ~itanje bloka/ upis bloka
NDRO, gubi se sadr`aj
(10-50) ns
opti~ki hard disk
opti~ki serijski ~itanje bloka/ upis bloka
NDRO, gubi se sadr`aj
(50-100) ns
CD-ROM opti~ki serijski ~itanje bloka/ upis bloka
NDRO, gubi se sadr`aj
(50-100) ns
Napomena: NDRO - ne destruktivno ~itanje (non destructive readout) Zadatak 5.22 RAM prostor veli~ine 128 MB je projektovan od RAM ~ipova kapaciteta 2 N * 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 reenju ugradi minimalan broj integrisanih kola.
(a) Pokazati kako izgleda reenje memorijskog podsistema, ako usvojimo da svaki RAM ~ip kapaciteta 2M*4 bita, ima jedinstvenu ~ip selekt liniju. Ponuditi reenje ~ija je struktura sli~na onoj koja je prikazana na Slici 5.58 ili Slici 5.59.
(b) Ako svaki RAM ~ip ima dve ~ip selekt linije CS1 = CS2 = 1 pokazati kakva je slo`enost memorijskog sistema
2m wRAM
CS WE OE
2m wRAM
CS WE OE
2m wRAM
CS WE OE
2m wRAM
CS WE OE
w w w
4w
podaci D
madresa A
CS WE OE
Upravlja~kelinije
Slika 5.58. Poveanje obima re~i RAM-a za ~etiri puta
Odgovor (a) RAM veli~ine 128 MB se mo`e realizovati kao 64M * 2 * 8 bitova, tj. pomou 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 adresnih bitova A26 : A21 sa ciljem da se pristupi adresama vrsta. Ovakav dekoder se mo`e realizovati u dva nivoa pomou devet dekodera adresa tipa 1-od-8 izlaza. Svaki izlaz rezultujueg dekodera je povezan na CS
Zbirka zadataka iz Mikroprocesorskih sistema
5-60
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 reenje koje se zasniva na organizaciji sa Slike 5.59.
2m wRAM
CS WE OE
2m wRAM
CS WE OE
2m wRAM
CS WE OE
2m wRAM
CS WE OE
w
w podaci D
adresa A
~ip selekt
dozvola upisa
izlaz
w
w
2
mm+2
w
dekoder“1_od_~etiri”
E
Slika 5.59 Poveanje broja re~i koje se ~uvaju u RAM-u za faktor ~etiri
Napomena: 2m*w = 2M*4
Jevtinije reenje 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.
5. Memorije
5-61
.
.
....
.
.
.
. . .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
Zadatak 5.23 Koristei 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 veeg kapaciteta koristiti eme prikazane na slikama 5.58 i slici 5.59.
Zbirka zadataka iz Mikroprocesorskih sistema
5-62
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
Slika 5.61 Organizacija RAM prostora veli~ine 128 MB u formi 2D-polja kada RAM ~ipovi imaju
dve ~ip selekt linije
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
5. Memorije
5-63
Odgovor Za realizaciju memorijskog prostora veli~ine 256 M * 32 bita pomou DRAM ~ipova obima 8 M * 8 bitova potrebno je ugraditi:
1288
328
256=*
kopija DRAM integrisanih kola sa Slike 5.62, koristei 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 Reenje koje se odnosi na organizaciju memorijskog prostora veli~ine 256M*32bita prikazana je na Slici 5.63.
8Mx8b RAMA DQ
RAS
CAS WE OE
8Mx8b RAMA DQ
RAS
CAS WE OE
8Mx8b RAMA DQ
RAS
CAS WE OE
32
32
32podaci D
012
3031
E
~ip selekt
adresa A0 A12
adresa A13:A175
13
RAS
CAS
dozvola upisa WEdozvola 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 pomou dvo-ulaznih OR logi~kih kola. Reenje 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.50 Za DRAM ~ip kapaciteta 8M*8 ~ija je struktura prikazana na slici 5.62 odrediti koje je minimalno vreme potrebno da se pro~itaju sadr`aji svih adresibilnih lokacija memorije: (a) Kada se adrese generiu u proizvoljnoj sekvenci,
Zbirka zadataka iz Mikroprocesorskih sistema
5-64
(b) Kada se koristi page mode.
Napomena: (i) trajanje ciklusa ~itanja kod generisanja proizvoljnog niza adresa iznosi 90 ns; (ii) u page mode vreme prenosa jednog podatka iznosi 30 ns.
Odgovor (a) Broj lokacija DRAM-a sa Slike 5.62 iznosi 223 = 8 M. Vreme potrebno da se pro~itaju sve lokacije je:
TR = 223 * 90 ns = 0,755 s
(b) u page mode-u, u okviru jedne stranice postoje 1024 pristupa, a broj stranica je 8192, tako da je ukupno vreme:
TS = (1024 * 30) * 8192 = 0,254 s
Zadatak 5.24
Potrebno je projektovati RAM prostor kapaciteta 16 MB. Projektant na raspolaganju ima sledea tri DRAM ~ipa ~ija je opta struktura prikazana na Slici 5.64.
tip kapacitet cena po ~ipu
1 4 M * 1 bit 22 din
2 1 M * 2 bita 10 din
3 256 k * 8 bitova 4,5 din
Cena ostalih kola, - komponenata (tampana plo~a, konektori i dr) koje se ugradjuju u memorijski sistem, izra~unava se indirektno kao: Cost. = x + 10 y (dinara) gde su:
x - broj ugradjenih RAM ~ipova y - broj adresnih bitova koje treba dekodirati spolja
Odrediti koja e ugradnja (tip DRAM ~ipova) rezultirati minimalnom cenom memorije.
RAM2m w
CS WE OE
wmadresa A
OE - dozvola izlazaCS - ~ip selekt
WE - dozvola upisa
Slika 5.64 RAM komponenta
5. Memorije
5-65
Odgovor tip memorije broj mem.
~ipova cena mem.
~ip. tip dekodera cena pristupa ukupna cena
4 M*1 b 32 32*22 = 704 1-od-2 32+20=52 704+52=756
1 M*2 b 64 64*10 = 640 1-od-16 64+40=104 640+104=744
256 k *4 b 128 128*4,5 =576 1-od-64 128+60=186 576+186=762
Na osnovu dobijenih vrednosti, zaklju~ujemo da je najjeftinije ugraditi ~ipove tipa 1 M * 2 bita
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.
(a) Identifikovati banke kojima se vri pristup na osnovu sledee ~etiri adrese: 01234, ABCDE, 91272 i FFFFF.
(b) Ako je jedna od memorijskih banaka zauzeta, koja je verovatnoa da e zahtev biti zakanjen (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) Verovatnoa sudara zbog pristupa toj banci je 1/4 = 0,25.
Test pitanje 5.52 Magnetni disk ima sledee karakteristike:
• broj pisti na povrini zapisa 200
• rotacija diska 2400 obrtaja/minuti
• kapacitet memorisanja po pisti 62500 bitova/in~
Proceni prose~nu latentnost kod prenosa podataka ka/od diska.
Napomena: 1 in~ = 2,54 cm
Odgovor Prose~na latencija tL je vreme potrebno da se disk zaokrene za polovinu kruga, a u konkretnom slu~aju iznosi:
Zbirka zadataka iz Mikroprocesorskih sistema
5-66
ms5122400
50,
,t L ==
Brzina prenosa podataka iznosi:
bit/s2,54
000000262,54
62500*40
2,5462500
*60
2400v ===
Test pitanje 5.52 Za odredjeni magnetni hard disk definisani su sledei parametri:
• broj diskova (povrine na kojima se vri zapis) 14(27)
• broj pisti po povrini zapisa 4925
• ukupan broj sektora na svim povrinama 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.
Odgovor Veli~ina sektora se dobija kao:
bajtova 512
,10*9,09
zapisza a povrinamsvimna sektora broj ukupnidiska kapacitetiformatiran
BP
9
=
=
=
6175517
Prose~no vreme pristupa tB predstavlja zbir prose~nog vremena pozicioniranja ana pisti tS, 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/s 9060
5400r == = 0,09 obr/ms
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==
5. Memorije
5-67
Prose~no vreme pristupa:
tBP= tS + tL + tI
= 11,5 + 5,56 + 0,01
= 17,07 ms
Zadatak 5.25 Vreme pozicioniranja magnetne glave diska zavisi od toga koliko se brzo vri pomeranje upisno-~itajue 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-~itajuoj 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. Najkrae vreme pozicioniranja glave je 0 a najdu`e Nt. Postavlja se sledee 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-~itajua glava pomeri za treinu 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
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 ii 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:
Zbirka zadataka iz Mikroprocesorskih sistema
5-68
1(N-1)+2(N-2)+3(N-3)+...+1(N-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 optem slu~aju
( )
21nn
in
1i
+=∑
=
(2)
i:
( )( )
612n1nn
in
1i
2 ++=∑
=
(3)
zamenom (2) i (3) u (1) dobijamo:
( ) ( )( )
612N1NN
N2
21NN
N2
D2sred
−−+
−=
3N
13N2N1ND
2
sred
−−−−=
3N1
3N
Dsred −=
3N
Dlim sred =>− αN
Zbog ovoga:
3
NDt t
sredts ≈=
Proverom za N = 8 imamo
2,625241
38
3N1
3N
=−=−
a to odgovara vrednosti dobijenoj iz tabele.
Test pitanje 5.53
Magnetna traka je du`ine 800 m. Zapis na traci se vri po 9 pisti. Traka prolazi ispod glave za zapis brzinom od 500 cm/s. Kolika treba da je linearna gustina zapisa na traci ako `elimo da ostvarimo brzinu prenosa od 107 bita/s? (b) Usvojimo da su podaci na traci organizovani u blokove veli~ine 32 kB. Razmak izmedju dva bloka je 1 cm. Koliko bajtova je mogue memorisati na traci?
5. Memorije
5-69
Odgovor a) Gustina zapisa D jednaka je:
traketanja brzina krebajtovima uaka nosa podatbrzina pre
D =
bajta/cm *,*500*8
10D
73
3
7
1052104
10===
b) du`ina svakog 32 kB-nog bloka podataka je
cm 12,810*2,510*32
3
3
≈=l
Maksimalan broj bajtova koji mo`e da se memorie na traci du`ine 800 m, pod uslovom da se ceo dostupan prostor koristi za memorisanje podataka, izra~unava se kao:
blokova izm.razmak bloka jednogdu`ina trakedu`ina ukupna
dataka blokova po broj ukupan+
=
= ( ) blokova 58000,138800
m0,010,128800m
≈=+
ukupan broj bajtova = 5800*32 000 = 1,856*107 bajtova
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 najvei broj aplikacija. Ukazati na najmanje dva na~ina pomou kojih je ovo vreme mogue smanjiti sa 10-4 na 10-5 s, i dati komentar u vezi cene, kako sa hardverske tako i softverske ta~ke gledita.
Odgovor Ukazaemo na tri na~ina na koje je mogue smanjiti tA sa 10-4 na 10-5 s.
(1) Poveanje stope pogodaka H: ovo se mo`e ostvariti poboljanjem algoritma memorijskog preslikavanja (memory mapping algorithm). Tipi~no se to izvodi korienjem bolje politike zamene stranica ili promenom du`ine stranice. Cena koja mora da se plati je uglavnom softverska. ^esto je mogue poveati H poveanjem kapaciteta glavne memorije, a to direktno zna~i da se poveava cena hardvera. Prvo odredimo tekuu vrednost za H na osnovu relacije
tA = H×tA1 + (1 - H) tA2 (1)
gde je tA = 10-4, tA1 = 10-6, a tA2 = 10-3
Preuredjenjem po H dobiemo:
H = (tA - tA2)/(tA1 - tA2) (2)
= (10-4 - 10-3)/(10-6 - 10-3)
= 0,901.
Zbirka zadataka iz Mikroprocesorskih sistema
5-70
Da bi se dobilo prose~no vreme pristupa tA = 10-4 potrebno je poveati H na H', tako da je:
H' = (10-5 - 10-3)/(10-6 - 10-3)
= 0,991.
To zna~i da `eljeno smanjenje vremena pristupa tA sa 10-4 na 10-5 neminovno dovodi do poveanja stope pogodaka H sa 0,901 na 0,991.
(1) Smanjenjem tA2 - mogue je zameniti sekundarnu memoriju sa uredjajem ~ije je vreme pristupa krae. Na ovaj na~in u zna~ajnoj meri se poveava 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
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 reenje ukazuje da je neophodno smanjiti tA2 za faktor reda 10, tj. sa 10-3 na 10-4.
(2) Smanjenje tA1 - mogue je smanjiti tA . Ovaj slu~aj se javlja kada se glavna memorija realizuje br`om tehnologijom.
Preuredjenjem jedna~ine (1) dobiemo
tA1 = (tA + (1 - H) tA2)/H (3)
5. Memorije
5-71
Zamenom za tA = 10-5, H = 0,901 i tA2 = 10-3 u (3), dobiemo: za tA1 = - 0,998 * 10-6, tj. negativnu vrednost. To zna~i da je nemogue ostvariti `eljenu vrednost za tA od 10-4 ugradnjom br`ih memorijskih ~ipova.
Zadatak 5.27 Dvo-nivovsku organizaciju memorije (M1 i M2) karakterie 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)
= (1,53486 * 10-8 - 10-3)/(10-8 - 10-3)
= 0,999846.
To zna~i da stopa pogodaka mora biti H ≥ 0,999846, da bi l ≥ 0.
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 verovatnoe da informacija koju zahteva CPU bude dodeljena memoriji Mi. Ako usvojimo da se sva informacija, koja se ~uva u Mi , takodje, javlja i u Mi +1, tada va`i uslov H1 < H2 <... <Hn = 1. Koristei ovu definiciju za Hi generalizovati izraz koji va`i za dvo-nivonsku memorijsku hijerarhiju (tA = H×tA1 + (1 - h) tA2) na n-nivovsku memorijsku hijerarhiju.
Odgovor U~estanost pristupa nivou Mi memorijske hijerarhije se definie kao verovatnoa da e se obraanje stavki X od strane CPU-a obaviti (ostvariti) na nivou Mi, tj. da je Mi najvii 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.
Zbirka zadataka iz Mikroprocesorskih sistema
5-72
Zadatak 5.29 Hijerarhijska struktura memorije ra~unara C1 organizovana je u ~etiri nivoa, ozna~ena kao M1, M2, M3 i M4, sa odgovarajuom stopom pogodaka od 0,8, 0,9, 0,99 i 1, respektivno. Neka se u toku izvrenja programa Q obraanje memoriji vri 3000 puta. Odrediti ta~an broj obraanja memoriji Ri koja se obave u toku izvrenja programa Q, a odnose se na nivo Mi.
Odgovor Neka I = 3000 bude ukupan broj obraanja memoriji od strane programa Q, i neka Hi bude stopa pogodaka memorije Mi. U optem slu~aju za broj obraanja memoriji Ri va`i izraz:
Ri = (Hi - Hi-1) I ,
gde je H0 = 0.
Za konkretan primer imaemo:
R1 = 0,80 * 3000 = 2400
R2 = (0,95 - 0,80) * 3000 = 450
R3 = (0,99 - 0,95) * 3000 = 120
R4 = (1,0 - 0,99) * 3000 = 30
Napomena: Treba naglasiti da je ∑Ri = I.
Zadatak 5.30 Ostatak-stope-pogodaka - RHi nivoa Mi, kod hijerarhijski organizovanog memorijskog sistema, se definie kao odnos broja zahteva za pristup, koji u sutini dolaze do Mi, prema broju zahteva koje Mi zadovoljava . To zna~i da je RHi <= Hi, jer Mi mo`e da ispuni (zadovolji) bilo koji zahtev za pristupom koji je zadovoljen od strane viih, br`ih nivoa hijerarhije.
Odrediti RHi svakog nivoa kod ~etvoro-nivovske organizacije memorije za program Q definisan u prethodnom zadatku.
Odgovor Ako je Hi stopa pogodaka memorije Mi, tada va`i RHi = Hi- Hi-1, gde je H0 = 0. Zamenom odgovarajuih vrednosti dobijamo:
RH1 = H1 = 0,8 RH2 = 0,95 - 0,8 = 0,15 RH3 = 0,99 - 0,95 = 0,04 RH4 = 1 - 0,99 = 0,01
Napomena: SRHi = 1,0, sa izuzetkom RH1, va`i da je RHi << Hi.
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.
nivo i vreme verovatnoa pristupa vreme prenosa
5. Memorije
5-73
pristupa tA(s) pi stranice tBi(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 promaaj, dolazi do zamene stranice izmedju nivoa Mi i Mi+1, uz prose~no vreme zamene stranice tBi.
(a) Odrediti prose~no vreme za koje procesor pro~ita jednu re~ iz memorije.
(b) Neka se projektantu da zahtev da u~inimo da tA <= 1,1 * 10-7. To zna~i da tA ne sme da premai vreme pristupa memoriji za vie od 10%. Poboljanje se mo`e ostvariti ako se M3 zameni memorijskom tehnologijom kod koje se tB2 smanji na vrednost tB2'. Kolika je vrednost tB2'.
(c) Sugerisati i ukazati na opravdanje kako se na jeftiniji na~in mo`e doi do zadovoljavajueg reenja, tj. kako se mo`e smanjiti tA a da se pri tome ne smanjuje tB2 na vrednost tB2'.
Odgovor (a) Prose~no vreme pristupa se izra~unava kao:
tA = p1tA1 + p2(tA1 + tB1) + p3(tA1 + tB1 + tB2) (5) = tA1 + (p2 + p3) tB1 + p3tB2 = 10-7 + 0,00001 * 0,0005 + 0,000001 * 0,01 s = (1,0 + 0,05 + 0,1) * 10-7 s
= 1,15 * 10-7
(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'B2
Sledi 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 postii ako se M3 zameni sekundarnom memorijom koja je dvaput br`a od tekue instalirane, to predstavlja skupo reenje.
(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 krae vreme pristupa za 5%, a ~ini se da se taj cilj mo`e ostavariti po ni`oj ceni. Alternativno reenje je da se neznatno povea p1 a efektivno smanje p2 i p3. Poveanje p1 (zavisno je od ponaanja programa) se mo`e ostvariti po nekoj srednje prihvatljivoj ceni a to zna~i ili da se povea kapacitet memorije M1, ili pobolja 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 sledeom tabelom:
memorija kapacitet cena ($/B) vreme pristupa stopa pogodaka
Zbirka zadataka iz Mikroprocesorskih sistema
5-74
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 kea eliminisan iz sistema. Odrediti rezultujui 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 sledee 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)
= (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 verovatnoa da re~ kojoj se obraamo 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 verovatnoa da e se obraanje memoriji procesirati od strane nivoa Mi. Sledi da je pi = Hi - Hi-1, gde H0 = 0. Shodno prethodnoj konstataciji, imaemo da je:
tA = p1tA1 + p2tA2 + p3tA3 + p4tA4.
Odgovarajuom zamenom za pi, i=1,..., 4, dobiemo:
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
b) 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 kea na nivou-2, na osnovu jed. (7), imaemo:
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 povealo 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.
5. Memorije
5-75
Zadatak 5.33 Analizirajmo trag (trejs) adresa stranica koji je generisan od strane dvo nivovske eme ke-glavna memorija. [ema koristi strani~enje po zahtevu, a ima kapacitet kea od ~etiri stranice.
1 6 4 5 1 4 3 2 1 2 1 4 6 7 4 1 3 1 7
Usvojimo da postoji vrui (hot) start, tako da su keu inicijalno dodeljene strnice 1, 2, 3, i 4.
Koja od politika zamene stranica FIFO ili LRU je pogodnija za ovaj slu~aj?
Odgovor Simulacije koje se odnose na politike zamene FIFO i LRU prikazane su na Slici 5.66. Usvojeno je, inicijalno, da su sve stranice napunjenje u ke u sledeem redosledu: 1 (prva), 2, 3 i 4 (zadnja). LRU ima za treinu vei broj pogodaka od FIFO. Simulacija prikazuje da FIFO ponekad isprazni na kratko stranicu pre nego to joj se ponovo obrati, ali to je jednostavno zbog toga to je to stranica koja je najdu`e boravila (bila) u keu, dok, sa druge strane, LRU je zadr`ava jer je do pogodka bio skoro dolo.
vreme t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 broj pogodaka
strani-ca
1 6 4 5 1 4 3 2 1 2 3 4 7 4 1 3 1 7
1 2 2 3 4 4 6 5 5 5 5 1 3 3 2 7 7 7
2 3 3 4 6 6 5 1 1 1 1 3 2 2 4 4 4 4
3 4 4 6 5 5 1 3 3 3 3 2 4 4 7 1 1 1
4 6 6 5 1 1 3 2 2 2 2 4 7 7 1 3 3 3
FIFO
pogoci x x x x x x x x x 9
2 3 3 1 6 6 5 1 4 4 4 1 2 2 3 7 7 4
3 4 1 6 4 5 1 4 3 3 1 2 3 3 7 4 4 3
4 1 6 4 5 1 4 3 2 1 2 3 4 7 4 1 3 1
1 6 4 5 1 4 3 2 1 2 3 4 7 4 1 3 1 7
LRU
pogoci x x x x x x x x x x x x 12
Slika 5.66 Simulacija traga (trejs-a) koji se odnosi na adresu stranice koristei FIFO i LRU politike zamene
Zadatak 5.34 Izvriti projektovanje ~etvorostruko, skupno-asocijativnog kea, uzimajui kao model 8 kB dvostruko skupno-asocijativne ke memorije prikazane na Slici 5.67. Projektovana ke memorija treba da ima sledee karakteristike: kapacitet kea 64 kB; obim sistemske magistrale 32-bita.
Odgovor Struktura ~etvorostruke skupno-asocijativne ke memorije prikazana je na Slici 5.68. Analizirajui Sliku 5.67 i Sliku 5.68, mo`emo zaklju~iti sledee:
32-bitna memorijska adresa S se interpretira na sledei na~in:
• 5 LS bitova odnose se na deo razmetaja adrese A kojim se identifikuje bajt u okviru 32-bajtnog bloka
Zbirka zadataka iz Mikroprocesorskih sistema
5-76
512 x 20tag RAM T0
512 x 64 RAMpodataka D0
512 x 64 RAMpodataka D1
512 x 20tag RAM T1
20-bitnitag komparator C1
20-bitnitag komparator C0
Upravlja~kalogika
memorije zaupis/~itanje
Adresa skupa
Adresa memorije 20 9 3
Adresna magistrala 32
9
20
Ke tag memorijaKe memorija za
podatke
Adresa skupa
Tag
Magistrala podataka64
CPU
GlavnamemorijaD D
CS
A CS
DA
D
uparenost uparenost
Razmetaj
Slika 5.67 Model 8 kB dvostruko skupno-asocijativne ke memorije nekog mikroprocesora
T3
T2
T1
DDD
DT0
512x18-bittag RAMA
Upravlja~kalogika
memorijeza
upis/~itanje
Tagcomparator C0
Tagcomparator C1
Tagcomparator C2
Tagcomparator C3
D3D2D1
DD
D
DD0
A4Kx32-bit
RAM podataka
32
Glavnamemorija
CPU
uparenostuparenostuparenostuparenost
Tag
18
9 Adresa skupa 12
Adresna magistrala 32
TAG ke memorija Ke podataka
Magistrala podataka
Slika 5.68 ^etvorostruka skupno-asocijativna ke memorija
5. Memorije
5-77
• postoje ukupno 64 k/32 = 211 = 2048 blokova koji se ~uvaju (memoriu) u ke
• keevi su podeljeni na 512 skupova, pri ~emu svaki skup memorie po ~etiri bloka koristei skupno asocijativno adresiranje u okviru skupa.
• devet bitova iz A formira adresu skupa, dok ostalih 18 bitova tag adresu
• uporedjivanje se vri tag komparatorima C0,..., C3.
• tag memorija se implementira pomou ~etiri RAM-a, T0,...,T3, svaki kapaciteta 512 * 18 bitova
• postoje ukupno ~etiri RAM-a podataka, D0,...,D3, svaki kapaciteta 4 k * 32 bita
Test pitanje 5.54 Ra~unarski sistem ~ija je realna memorija veli~ine 232 bajtova koristi osmostruku skupno-asocijativnu memoriju. Obim linije je 16-bajtova, a skup ~ine 210 linija. Odrediti obim kea i du`inu tag-a.
Odgovor obim kea = broj skupova * broj blokova po skupu * broj bajtova po bloku U konkretnom slu~aju:
obim kea = 8 * 2 **10 * 16 = 128 kB
Ako usvojimo da se koristi 32-bitna memorijska adresa, ona e sadr`ati: (a) adresni tag; (b) 10-bitnu adresu skupa; i (c) 4-bitnu bajt adresu.
Prema tome, adresni tag bie obima 32-(10 + 4) = 18 bitova.
Zadatak 5.35 Na Slici 5.69 prikazana je struktura 256 kB direktno preslikane ke memorije. Projektant, koristei model sa Slike 5.69, treba da projektuje novi ke (koristei isti model kao onaj na Slici 5.69) koji ima sledee karakteristike:
a) kapacitet kea treba da je 64 kB,
b) obim ke bloka 32 B,
c) obim sistemske magistrale 32-bita. Odgovor Zahtevani 16 k * 32-bitni ke mo`e se realizovati pomou ~etiri SRAM ~ipova kapaciteta 16k * 8 bitova (Na Slici 5.69 prikazan je SRAM 71286 ~iji je kapacitet 32 k * 8).
U odnosu na Sliku 5.69, kod novog reenja, adresu skupa treba smanjiti sa 13 na 12-bita. Isti zaklju~ak va`i i za adresu razmetaja koja adresira bajt u okviru bloka, tj. treba je redukovati sa 5 na 2 bita.
Za obim adresnog taga preostaje 18 bitova, a to zna~i da ako se koristi ceo adresni prostor od 232 memorijskih bajtova, potrebno je ugraditi tri ke-tag RAM integrisana kola tipa 71B74.
Magistrala podataka treba da je 32-bitna.
Osim navedenih izmena, ostali detalji su identi~ni kao oni na Slici 5.69.
Zbirka zadataka iz Mikroprocesorskih sistema
5-78
14 13 5Memorijskaadresa
14 13 5
32
8K x 14ke tagRAM
(2x71B74)
32K x 64ke dataRAM
(8x71256)
D MATCH D
Adresa re~i podataka umemoriji
Adresa skupa
Adresa skupa Razmetaj
Adresa magistrale
Glavnamemorija
CPU
Upravlja~ka logikamemorije za upis/~itanje
Magistrala podataka64
64
Slika 5.69 Struktura 256 kB direktno-preslikani ke
Test pitanje 5.55 Kod sistema prikazanog na Slici 5.69 izvrena je modifikacija. Naime, adresne linije su ozna~ene kao A0 : A31, pri ~emu je A0 MS - a ne LS adresni bit. Idenitifikovati koje se adresne linije kod modifikovanog reenja koriste za adresiranje ke RAM-a podataka.
(a) Neka se podatak obima re~ prenosi po sistemskoj magistrali za 15 ns. Proceniti koliko vremena je potrebno da se sistem u potpunosti odazove na memorijski pristup kada dodje do ke promaaja.
Odgovor (a)
• Na osnovu oznaka sa Slike 5.69, zaklju~ujemo da adresni bitovi A14 : A26 formiraju 13-bitnu adresu skupa,
• narednih pet bitova - A27 i A31, koriste se za adresiranje re~i u okviru bloka,
• bitovi A0 : A13 se koriste kao tag adresa
(b)
Jedinstveni osmo bajtovski prenos podataka po sistemskoj magistrali podataka se ostvaruje za 15 ns. Da bi se sistem odazvao na ke promaaj, generie se ~etvorostruki prenos podataka tipa burst mode (prenose se 8 * 4 = 32 B) pa se na taj na~in popunjava ke blok. Vreme potrebno da se ostvari ovaj prenos iznosi 4 * 15 = 60 ns.
Test pitanje 5.56 Memorijski sistemi se karakteriu vie-nivovskom, hijerarhijskom organizacijom. Cilj ovakve organizacije je da ostvari (postigne) dobar kompromis izmedju cene, kapaciteta memorije i performanse ukupnog memorijskog sistema.
5. Memorije
5-79
Optu strukturu n-nivovskog sistema ~ine n razli~itih tipova memorije. Nacrtati blok dijagrame standardnih hijerarhijskih organizacija memorije za n = 2, 3 i 4, i ukazati od kojih se tipova memorije realizuju odgovarajui nivoi.
Odgovor
CPUGlavna
memorijaSekundarnamemorija
I
D
I
D
M3M4
CPUGlavna
memorijaSekundarnamemorija
I
D
I
D
M1M2
I - Tok instrukcijeD – Tok podataka
CPUGlavna
memorijaSekundarnamemorija
I I
D
M2M3
I
D
D
I-ke
D-ke
M1
Kenivoa 1
Kenivoa 2
I
D
I
D M2M1
Slika 5.70 Hijerarhijska organizacija memorije
a) dvo-nivovska; b) tro-nivovska; c) ~etvoro-nivovska
Za realizaciju odgovarajueg nivoa Mi koristi se tip:
• SRAM za ke memorije
• DRAM za glavnu memoriju
• magnetna-disk jedinica za sekundarnu memoriju Test pitanje 5.57 Kakve relacije postoje izmedju susednih memorijskih nivoa Mi i Mi+1 kod hijerarhijske organizacije memorije prikazane na slici 5.70 Odgovor • cena po bitu ci > ci+1
• vreme pristupa tAi < tAi+1
• kapacitet memorisanja Si < Si+1
Zbirka zadataka iz Mikroprocesorskih sistema
5-80
Test pitanje 5.58 Da li kod hijerarhijske organizacije memorije, prikazane na Slici 30, CPU mo`e direktno da komunicira sa memorijom nivoa Mi?
Odgovor CPU mo`e direktno da komunicira samo sa M1, M1 da komunicira sa M2 itd. Drugim re~ima, da bi CPU pro~itao informaciju koja se ~uva na nivou Mi potrebno je da se ostvari sekvenca od i prenosa podataka koja ima oblik:
Mi-1 := Mi; Mi-2 := Mi-1; Mi-3 := Mi-2 ;...; M1 := M2; CPU := M1
Izuzetak je dozvoljen kod manipulacije sa keom. Naime, CPU je projektovan da premosti ke nivo(e) i da se obrati direktno memoriji. U optem slu~aju, sva informacija koja se u datom trenutku nalazi na nivou Mi prisutna je i na nivou Mi+1, ali ne i suprotno.
Test pitanje 5.59 Cilj hijerarhijske organizacije memorije, to se vremena pristupa ti~e, je da se postignu performanse koje su veoma bliske najbli`oj memorijskog komponenti M1 i, a kada se posmatra cena po bitu i kapacitet memorisanja, ostvare mogunosti memorijske komponente Mn. U sutini, performanse memorijskog sistema zavise od velikog broja faktora, identifikovati najva`nije.
Odgovor • Statisti~ka evidencija o adresnim obraanjima, tj. redosled i u~estanost generisanja logi~kih
adresa od strane programa koji koriste memorijsku hijerarhiju.
• Vreme pristupa tAi, za svaki nivo Mi - relativno u odnosu na CPU.
• Kapacitet memorisanja Si svakog nivoa.
• Obim Spi bloka (stranica) koji se prenosi izmedju susednih nivoa.
• Algorirtam dodele (alokacije) koji se koristi da odredi memorijske oblasti u kojima se prenose blokovi od strane procesa (zadatka) koji obavlja medjusobnu razmenu (swapping) blokova.
Test pitanje 5.60 Za dvo-nivovski memorijsko hijerarhijski model koga emo ozna~iti sa (M1, M2), i koji se mo`e interpretirati kao ke - glavna memorija, ili glavna memorija - sekundarna memorija, ukazati na relacije na osnovu kojih se odredjuje:
a) prose~na cena po bitu memorije - c,
b) stopa ke pogodaka - H,
c) prose~no vreme pristupa - tA,
d) efikasnost pristupa - e,
e) iskorienost prostora - u.
Odgovor
5. Memorije
5-81
(a) 21
2211
SSScSc
c++
=
gde ci ozna~ava cena po bitu (cost-per-bit) za Mi, a Si predstavlja kapacitet memorisanja u bitovima za Mi.
(b) Performanse dvo-nivovske organizacije ~esto se izra`avaju zavisnosti od stope-pogodaka H (hit-ratio H). Stopa-pogodaka se definie kao verovatnoa da se virtuelnom adresom generisanom od strane CPU-a, obraamo informaciji koja je tekue memorisana u najbr`oj memoriji M1. Imajui u vidu da se obraanje memoriji M1 (pogodak) mo`e ostvariti za mnogo krai period od obraanja memoriji M2 (promaaj), cilj je da stopa pogodaka - H bude to je mogue bli`a jedinici. U optem slu~aju, stopa pogodaka se odredjuje eksperimentalno na sledei na~in. Izvrava se ili simulira rad skupa reprezentativnih programa. Broji se broj adresnih obraanja N1 i N2 koji se odnosi na obraanje memorijama M1 i M2, respektivno. Stopa pogodaka H se izra~unava na sledei na~in:
21
1
NNN
H+
=
Treba naglasiti da H jako zavisi od tipa programa. Veli~ina 1-H naziva se stopa-promaaja (miss-ratio).
(c) Neka tA1 i tA2 predstavljaju vreme za pristup memorijama M1 i M2, respektivno, relativno u odnosu na CPU. Kod dvo-nivovske memorijske organizacije, prose~no vreme pristupa tA (average time tA) CPU-a nekoj re~i u memoriji iznosi:
tA = H×tA1 + (1 - H) tA2
Kod najveeg broja dvo-nivovske hijerarhijske eme, zahtev za prenosom re~i koja se ne nalazi u M1 (javi se promaaj) uzrokuje da se, umesto jedne re~i, prenese ceo blok informacije iz M2 u M1. Kada se prenos bloka zavri, re~ za kojom je izdat zahtev za prenos nalazi se u M1. Ako sa tB ozna~imo vreme potrebno da se izvri prenos celog bloka podataka (block access ili block transfer time), tada va`i da je tA2 = tB + tA1. Kada se tA2 zameni u tA dobiemo:
tA = tA1 + (1 - H) tB
Kod najveeg broja slu~ajeva tA2 >> tA1, pa tA2 » tB.
(d) Ozna~imo sa r + tA2/tA1 odnos vremena pristupima memorijama M2 i M1.
Neka e = tA1/tA, predstavlja faktor koji ukazuje na to za koliko se tA razlikuje od najkraeg (minimalnog) vremena pristupa tA1. Vrednost e nazvaemo efikasnost pristupa (access efficiency) dvo-nivovske memorije. Iz relacije:
tA = H×tA1 + (1 - H)tA2
deobom leve i desne strane sa tA1 i sredjivanjem, dobijamo:
( )Hr1r1
e−+
=
Na Slici 5.71 prikazana je zavisnost e u funkciji H za razli~ite vrednosti r kao perametar. Tako na primer, za r = 100, da bi e > 0,9 potrebno je da H > 0,998.
Zbirka zadataka iz Mikroprocesorskih sistema
5-82
1,0
0,8
0,6
0,4
0,2
0,2 0,4 0,6 0,8 1,0
stopa pogodaka H
efikasnostpristupa
e
r=1
r=2
r=10
r=100
Slika 5.71 Efikasnost pristupa e + tA1/tA kod dvo-nivovske memorije u funkciji stope pogodaka H za
razli~ite vrednosti r = tA2/tA1
(e) Organi~enje kod instaliranja veeg iznosa memorije u ra~unarskom sistemu uglavnom se ogleda u ceni. Zbog ovoga, po`eljno je da imamo to je mogue manje neiskoriene memorije. Efikasnost, kao mera koja ukazuje na to kako se u datom trenutku koristi memorijski prostor, definie se kao odnos memorijskog prostora Su zauzetog od strane k "aktivnih" ili "korisnih" programa i podataka, u odnosu na ukupni iznos dostupne memorije.
Ovaj odnos se naziva iskorienost prostora - u (space utilization) i definisana je kao:
SS
u u=
S obzirom da se prostoru memorije M1 ~ee obraamo nego prostoru M2, opravdanije je meru u definisati u odnosu na M1.
Do gubitka prostora memorije M1 dolazi uglavnom iz sledeih razloga:
• Fragmentacija memorije ~esto uzrokuje da se javi neiskorieni prostor (empty regions).
• Neiskoriene oblasti - ~esto se podaci kao deo stranice prenose iz M2 u M1, a zatim ponovo u M2, a da se pri tome nismo obratili njima. U sutini, suvini prenosi su neizbe`ni jer skoro je nemogue u celosti predvideti kojim e se adresama vriti obraanje.
• Sistemske oblasti - ove oblasti su rezervisane za sistemski softver koji upravlja radom memorije.
Test pitanje 5.61
Koje zadatke sistem za upravljanje memorijom obavlja automatski?
Odgovor (1) Translaciju memorijskih adresa iz virtuelnog adresnog prostora u kojem se program izvrava, u
realne memorijske adrese kojima se identifikuju fizi~ke memorijske lokacije
(2) Dinami~ku (re)alokaciju ili premetanje (swapping) informacije izmedju razli~itih memorijskih nivoa, tako da se memorisani delovi (stavke) nalaze u najbr`oj memoriji pre nego to su oni potrebni (koriste se)
5. Memorije
5-83
Test pitanje 5.62
Kako se dele magnetni hard diskovi u odnosu na pristup medijumu za ~itanje i upis, sa aspekta kako glava pristupa pistama?
Odgovor Serijske memorije, kakvi su magnetni hard diskovi, dele se na:
• diskove koji imaju vei broj fiksno postavljenih upisno-~itajuih glava obi~no po jedna za pistu
• diskove koji imaju jednu pokretnu glavu koja je zajedni~ka za vei broj pisti
Test pitanje 5.63
Kada se govori o magnetnim diskovima, ukazati na zna~enje sledeih pojmova:
• seek time - ts,
• latencija - tL,
• rotaciona latencija
• blok podataka
• brzina prenosa bloka podataka
• prose~no vreme pristupa bloku podataka
Odgovor • Prose~no vreme potrebno da se pomeri glava sa jedne piste na drugu naziva se seek time - ts, ili
vreme pozicioniranja
• Nakon 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 tL se naziva rotaciona latentnost.
• Kod sekvencijalnog zapisa, re~i se grupiu u vee jedinice koje zovemo grupe. Sve re~i iz grupe se smetaju u uzastopne lokacije tako da vreme potrebno da se pristupi celom bloku ~ini: vreme pozicioniranja i vreme latencije.
• Brzina sa kojom se vri prenos informacija ka- ili sa piste, naziva se brzina prenosa podataka (data transfer rate).
Prose~no vreme pristupa bloku podataka - tB, jednako je:
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;
Zbirka zadataka iz Mikroprocesorskih sistema
5-84
Proizvod r×N odgovara brzini prenosa podataka iz memorije i izra`ava se u re~/s. Nakon to je upisno-~itajua 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.64
Na Slici 5.72 prikazana je, na konceptualnom nivou, vienivovska hijerarhijska organizacija memorije kod jednog ra~unara. Ukazati na osnovne razlike koje postoje izmedju nivoa (M1, M2) i (M2, M3).
CPU ke
M1
glavnamemorija
M2
sekundarnamemorija
M3RF
polje
Slika 5.72 Vienivovska hijerarhijska organizacija jednog ra~unara
Odgovor
dvo-nivovska hijerarhija (Mi-
1, Mi) ke-glavna memorija (M1,M2) glavna-sekundarna memorija
(M2, M3)
odnos tipi~nih vremena pristupa tA1/tAi-1
5/1 1000/1
sistem za upravljanje memorijom
uglavnom implementiran hardverski
uglavnom implementiran softverski
tipi~an obim stranice 8 B 4 kB pristup procesora drugom nivou Mi
procesor mo`e direktno da pristupi M2
svi pristupi ka M3 se realizuju preko M2
Test pitanje 5.65
Koji su osnovni gradivni blokovi kea?
Odgovor Osnovni gradini blokovi ke memorije su ke tag memorija i memorija podataka. Na~in njihovog sprezanja sa CPU-om prikazan je na sledeoj emi:
5. Memorije
5-85
ke tag memorija(direktorijum)
memorija keapodataka
pogodak
adresa podaciupravlja~ki signali
Test pitanje 5.66
Koje dve osnovne sistemske organizacije kea postoje kod ra~unara?
Odgovor Postoje dva na~ina organizacije kea ra~unara i ona su prikazana na slici 5.73.
Kod look-aside reenja (Slika 5.73 a)), na sistemsku magistralu se direktno povezuju ke i glavna memorija. Kod ovog reenja CPU na po~etku ciklusa upisa/~itanje postavlja na adresnoj magistrali realnu adresu Ai. i na taj na~in inicira ciklus pristup-memoriji. Ke M1 odmah uporedjuje Ai sa tag adresama koje se tekue nalaze u njegovoj tag memoriji. Ako dodje do uparivanja u M1, to zna~i da se javio ke pogodak, pristup se zavrava od strane operacije upis/~itanje, tako da glavna memorija M2 ne u~estvuje u prenosu. Ako ne dodje do uparivanja sa Ai, javlja se ke promaaj, pa se tada `eljeni pristup zavrava od strane operacije ~itanje/upis koja je usmerena ka M2. Kao odziv na ke promaaj, blok (linija, ulaz) podataka Bj koji sadr`i i ciljnu adresu Ai se prenosi iz M2 u M1. Ovaj prenos je brz, jer su blokovi kratki, SRAM je brz, a ceo prenos se ostvaruje u burst mode-u. Ke implementira neku politiku zamene kao to je LRU sa ciljem da odredi gde da smesti dolazei blok. Kada je neophodno, ke blok koji se zamenjuje od strane Bj u M1 smeta se u M2. Uo~imo da ke promaaji, i pored toga to su retki, rezultuju prenosom bloka izmedju M1 i M2, pa je za to vreme magistrala zauzeta, to je ~ini nedostupnom za obavljanje drugih U/I operacija.
Neto br`a, ali znatno skuplja organizacija kea prikazana je na Slici 5.73 b), a naziva se look-through. CPU komunicira sa keom preko magistrale (lokalne) koja je izdvojena od glavne sistemske magistrale. Sistemska magistrala je dostupna za korienje ostalim jedinicama (kao to su U/I kontroleri) radi komuniciranja sa glavnom memorijom. Zbog toga, pristupi keu i pristupi glavnoj memoriji u kojima ne u~estvuje CPU mogu da se izvravaju konkurentno. Nasuprot look-aside pristupu, kod look-through kea CPU automatski ne alje sve zahteve za pristup memoriji ka glavnoj memoriji, nego se takvi zahtevi javljaju samo kada dodje do ke promaaja. Look-through ke omoguava da lokalna magistrala koja povezuje M1 i M2 bude po obimu vea od sistemske magistrale, ~ime se ubrzava prenos podataka izmedju kea i glavne memorije. Na primer, ako je sistemska magistrala 32-bitna, a ke blok je obima 128 bitova = 16 bajtova (tipi~na vrednost), za povezivanje M1 i M2 se koristi 128-bitna magistrala podataka, koja obezbedjuje da se ceo ke blok prenese za jedan taktni interval. Glavni nedostatak look-through reenja, pored izrazite slo`enosti, predstavlja du`i vremenski period koji je potreban memoriji M2 da se odazove CPU-u kada se javi promaaj.
Zbirka zadataka iz Mikroprocesorskih sistema
5-86
CPU
KeM1
Glavnamemorija
M2Pristupkeu
Zamenabloka
Pristup glavnojmemoriji
Sistemskamagistrala
KeM1
CPU
Pristup
keuZamena bloka
Kekontroler
Kontrolerglavne
memorije
Glavnamemorija M2
Pristup glavnojmemoriji
b
Sistemskamagistrala
a
Slika 5.73 Dve sistemske organizacije kea:
(a) look-aside, i (b) look-through Test pitanje 5.67
[ta su "interleaving" memorije? Odgovor Predaja razli~itih adresa veem 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. Kod interleaving-a memorije memorijsko adresno polje se deli na dva dela. Jedno polje se koristi za selekciju lokacija u okviru memorijskih modula, a drugo za selekciju modula. Memorijski modul se mo`e selektovati pomou LS i MS adresnih bitova. Na slici 5.74 prikazana su oba adresna formata.
5. Memorije
5-87
MS bit LS bit
adresa u okviru modula adresa modula a) interleaving odredjen ni`im adresama
adresa modula adresa u okviru modula b) interleaving odredjen viim adresama
Slika 5.74 : Adresni formati kod interleaving-a
Jedno tipi~no reenje memorijskog interleaving-a koje se kod jedno-procesorskih sistema koristi za smanjenje efektivnog vremena pristupa memoriji prikazano je na sl. 5.75.
CPU
kontroler memorije
001 m-1000
m+1 2m-1m
modul 2 modul mmodul 1
.
.
.
.
.
.
.
.
.
...
Slika 5.75 : Interleaved memorija
Test pitanje 5.68
Kako se vri distribucija adresa kod interleaved memorije? Odgovor 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-viim-adresama koristi se termin grubi-interleaving (coarse interleaving) a umesto termina interleaving-odredjen-ni`im-adresama koristi se termin fini-interleaving (fine interleaving). 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.
grubi interleaving fini interleaving
Zbirka zadataka iz Mikroprocesorskih sistema
5-88
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
memorijskimodul
0
memorijskimodul
1
memorijskimodul
n
Adrese
.
.
.
.
.
.
.
.
.
.
.
.
memorijskimodul
0
memorijskimodul
1
memorijskimodul
2
memorijskimodul
n
Adrese
adresa modula
adresa u okviru
adresa u okviru modula
adresa modula
Slika 5.76 : Distribucija kod grubog i finog interleving-a
Test pitanje 5.69
Kako se koriste interleaving memorije kod sistema ~ija je magistrala poveanog obima? Odgovor Reenje kada je interleaving-odredjen-ni`im-adresama (low order interleaving) je pogodnije kod jednoprocesorskih sistema sa interleaved memorijom, kod kojih se uzastopnim memorijskim lokacijama, koje se nalaze u razli~itim memorijskim modulima, mo`e pristupiti simultano. Tako na primer, sa ~etiri modula i interleaving odredjen ni`im adresama, adrese prvog modula bie 0, 4, 8, 12, 16, .... , adrese drugog modula bie 1, 5, 9, 13, 17, .... , one koje pripadaju treem su 2, 6, 10, 14, 18,...., a ~etvrtog modula 3, 7, 11, 15, 19, .... . U optem slu~aju sa n-to-strukim interleaving-om-odredjen-ni`im-adresama, adrese prvog modula bie 0, n, 2n, 3n, ... , a isti korak va`i i za ostale module. Uobi~ajeno memorijski sistemi kod kojih je memorija podeljena na module koristi se format interleavinga-odredjen-viim-adresama. Pri ovom u datom trenutku se adresira samo jedan modul i ne postoji preklapanje izmedju memorijskih operacija. Na slici 5.77 prikazana je interleaved memorijska organizacija kod jednoprocesorskog sistema koja koristi posebnu magistralu za podatke radi povezivanja procesora i modula. Na osnovu adresa memorijskih modula selektuju se moduli, a generisane memorijske adrese sukcesivno se upisuju u adresne baferske registre. Nakon punjenja adrese, modul vri detekciju lokacije i obezbedjuje pristup tipa ~itanja ili upisa. Kod ciklusa ~itanje, nakon isteka ciklusa za pristup memoriji podaci se sukcesivno pojavljuju na magistralama za podatke. Kod ciklusa upis, podaci na magistralama za podatke generie procesor. Ovi podaci prihvataju se sukcesivno od strane memorijskih modula. Ovakva organizacija mo`e biti pogodna za ke sistem koji se takodje deli na module.
5. Memorije
5-89
CPU
Dekoderadresemodula
podaci
adresa
magistralaveeg obima
AR AR ARAR
memorijski moduli
AR - adresniregistar podaci podaci podaci
Slika 5.77 : Interleaving memorije kod sistema ~ija je magistrala poveanog obima
Test pitanje 5.70
Kako se koriste interleaving memorije kod sistema sa jedinstvenom magistralom? Odgovor Jedinstvena magistrala se mo`e koristiti i na na~in kako je to prikazano na slici 5.78. U konkretnoj realizaciji svakom memorijskom modulu pridru`en je baferski registar za podatke u kome se privremeno ~uvaju podaci koji se upisuju u modul ili se ti podaci prihvataju kada se ~itaju iz modula. Tajming ovog sistema prikazan je na slici 5.79a. Mogue je takodje istovremeno dovesti svim modulima istu adresu kako bi se ostvario pristup uzastopnim re~ima (ova varijanta izvodjenja va`i kada je adresni format interleaving-a odredjen ni`im adresama). Tajming ove varijante je prikazan na slici 5.79b.
CPU
Dekoderadresemodula
podaci
podaciadresa
AR BR BR BR BRAR ARAR
memorijski moduli
podaci podaci podaci
Slika 5.78 : Interleaving memorije kod sistema organizovan oko jedinstvene magistrale
Napomena : AR - adresni registar ; BR - baferski registar za podatke
Zbirka zadataka iz Mikroprocesorskih sistema
5-90
punjenjeadresnihregistara
pristuppodacima
vreme
memorijskimoduli
vreme pristupa
a) razli~ite adrese svakom memorijskom modulu
generisanjeadrese generisanje
naredneadrese
pristuppodacima
vreme
ciklus 1 ciklus 2memorijskimoduli
b) ista adresa svakom memorijskom modulu
Slika 5.79: Tajming kod interleaved memorije
6. Programabilne jedinice, tehnike U/I prenosa
6-1
6. Programabilne jedinice,
tehnike U/I prenosa
ö õ
Test pitanje 6.1
Mikrora~unar je povezan na tampa~ koji mo`e da otkuca 10 znakova u sekundi. [ta e se desiti ako se status tampa~a analizira svakih 200ms? Neka se znaci prihvataju preko tastature u sistem, u proseku brzinom od 10 znakova u sekundi. Me|utim vremenski interval izme|u dva pritiskanja dirki na tastaturi mo`e da bude krai, i da iznosi 60ms. Sa kojom frekvencijom je potrebno analizirati tastaturu od strane U/I programa?
Odgovor Ako se tampa~ analizira svakih 200ms, tada se tampanje usporava na samo 5 znakova u sekundi. Situacija je razli~ita sa ulaznim ure|ajem kao to je tastatura. I pored toga to se znaci prihvataju (unose u proseku) od strane sistema svakih 100ms, ulazni ure|aj (u konkretnom slu~aju to je tastatura) treba da se analizira najmanje svakih 60ms. Ina~e, postoji rizik da se u ulaznom baferu tastature jedan podatak upie preko drugog, za slu~aj da se prethodni ne pro~ita.
Test pitanje 6.2
Nacrtaj dijagram toka koji va`i za opslu`ivanje jednog ure|aja a odnosi se na tehniku prenosa podataka nazvanu “polled” U/I.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-2
Odgovor
uslu`i ure|aj
da
~itaj status
ure|ajspreman?
postavi markereuslova na osnovuvrednosti statusa
obavi drugizadatak
ne
testira se stanje markera uslova, instrukcijomuslovnog grananja
obi~no se izvodi logi~kim operacijama ilioperacijama tipa CMP
standardno se izvodi In instrukcijom
Slika 6.1 Polled U/I tehnika za opslu`ivanje jednog uredjaja
Test pitanje 6.3
Mikroprocesor analizira status U/I ure|aja svakih 20ms. Ispitivanje inicira tajmer koji prekida rad procesora svakih 20ms. Interfejs ure|aja ~ine dva porta - jedan statusni a drugi port podataka. Koliko dugo traje samo onaj deo programa koji se odnosi na analizu i opslu`ivanje ure|aja, ako je taktna frekvencija 8 MHz? Pojednostavljenja radi, usvojimo da se svi zna~ajni instrukcioni ciklusi, koji se odnose na analizu i opslu`ivanje ure|aja, izvravaju za 12 taktnih intervala.
Odgovor Da bi pro~itali status ure|aja potrebno je izvriti “ulaznu” instrukciju. Ceo ciklus instrukcije (uklju~ujui pribavljanje opkôda i ~itanje statusa) traje 12*0,125=1,5 µs. Za ispitivanje stanja statusa ure|aja potrebno je pribaviti i izvriti najmanje jo jednu instrukciju, a to zna~i dodatnih 1,5 µs, tako da je za kompletnu analizu statusa potrebno 3 µs. Ako je ure|aj spreman da prihvati novi podatak, tada CPU treba da izvri i “izlaznu” instrukciju. To zna~i jo 1,5 µs (va`i pod uslovom da je podatak koji se prenosi na izlaznom portu ve spreman za korienje u nekom od CPU-ovih registara). Imajui sve ovo u vidu, grubo posmatrano, za analizu i opslu`ivanje ure|aja potrebno je najmanje 4,5 µs, to je daleko manje od 20ms.
Test pitanje 6.4
Neka CPU mo`e da izvrava U/I instrukciju iterativnog tipa. Nakon prvog izvrenja, uklju~ujui pribavljanje opkôda, dekodiranje i pribavljanje operanda, takvoj instrukciji je potrebno samo pet taktnih intervala da bi se ponovo izvrila. Sa druge strane, ako za izvrenje iste U/I instrukcije koristimo neiterativnu U/I instrukciju, tada je potrebno 20 taktnih intervala da bi se pribavio opkôd instrukcije, a nakon toga se ona izvrava. Izra~unati efekat poveanja brzine prenosa podataka za slu~aj da se koriste iterativne instrukcije, a prenosi se blok podataka obima 128 re~i. Odgovor Kod neiterativnih instrukcija za prenos bloka podataka od 128 re~i potrebno je 20*128=2560 taktnih intervala. Kada se koristi iterativna U/I instrukcija potrebno je 5*128=640 taktnih intervala za prenos istog bloka. Poveanje brzine iznosi :
6. Programabilne jedinice, tehnike U/I prenosa
6-3
(2560-640)/2560=0,75
ili 75%, ignoriui pri tome vreme pribavljanja opkôda jedne iterativne instrukcije i odgovarajui operand, tj. broja~ petlje. Test pitanje 6.5
Neka mikroprocesorski sistem zasnovan na CPU-u 8088, u toku ciklusa INTA, prihvata preko magistrale podataka (D0-D7) vektor-broj koji se odnosi na rutinu za pru`anje usluge tampa~u. Nakon internog procesiranja, CPU odredi da se rutina za pru`anje usluga tampa~u nalazi na adresi 0132h. Kako treba organizovati oktalni bafer sa Slike 6.2, da bi se u toku INTA ciklusa prihvatio korektan kôd adrese. Odgovor Odgovarajui vektor-broj je 132/4=33 (odnosi se na CPU 8088 i njegov na~in obrade). Shodno tome, adresni kôd koji se prihvata od strane CPU-a treba da je 0010 0001. Ovo zna~i da ulazi baferskih kola koji su povezani na linijama za podatke D0 i D5, moraju biti na “visoko”, a ostali ulazi (D1, D2, D3, D4, D6 i D7) treba da se spoje na “masu” (povezivanje prikazano na Slici 6.2 ne sla`e se sa korektnim reenjem jer Slika 6.2 je samo ilustracija).
.
.
.
INTREQ
INTACK
D7-D0
+5V
+5V
INTR
CPU
Slika 6.2 : Povezivanje oktalnog bafera na sistem prekida
Test pitanje 6.6
Pojedini mikroprocesori, kakav je Motorola MC68000, prihvataju zahteve za prekid preko tri IPL (interrupt priority level) linije. Predpostavimo da se `eli implementirati ema za prihvatanje vektorskih prekida preko 11 INTR linija od kojih 5 treba da budu nemaskirajui. Kako se to mo`e izvesti ako se ugradi kolo tipa koder prioriteta 74148? Odgovor Nemaskirajuim prekidima, ukupno ih ima pet, mora biti dodeljen prioritet najvieg nivoa. Shodno tome, potrebno je sva pet zahteva za prekid najvieg prioriteta dovesti na ulaz jednog OR kola a
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-4
njegov izlaz povezati na nivo I7 kodera prioriteta 74148. Ostalih 6 (maskirajuih) linija treba povezati na ulaze I1-I6 kola 74148, shodno planiranom redosledu prioriteta (Slika 6.3).
I7
I6
I5
I1
.
.
.
INTR7
INTR11
INTR6
INTR5
INTR1
6 zahtevaza prekidkoji se mogumaskirati
5 zahtevaza prekidnajviegprioriteta
INTA
IPL0
IPL1
IPL2
O0
O1
O2
74148
MC68000 OR
OE
Slika 6.3 : Prihvatanje zahteva za prekid kod MC 68000 preko linija IPL0-IPL2
Test pitanje 6.7
Jedan ciklus magistrale CPU-a (Read ili Write) traje 6 taktna intervala. Zbog sporog vremena pristupa memoriji CPU treba da ubacuje jo dva stanja ~ekanja po magistralnom ciklusu. Kada DMA kontroler aktivira BR liniju (sl. 6.4) potrebna su dva taktna intervala da bi isti dobio pravo upravljanja nad magistralom (ovo va`i pod uslovom da ne postoji druga aktivnost na magistrali). Koliko dugo DMA kontroler treba da ~eka za dodelu magistrale, ako CPU radi sa taktnom frekvencijom od 8MHz? Da li je opravdano koristiti DMA u paketnom re`imu rada (burst mode) ako U/I ure|aj mo`e da prenosi podatke brzinom od 0,75MB/s?
BR
BG
Bus request
Bus grant
CPU
DMAsignali
(od/ka DMA kontroleru)
Slika 6.4 : DMA signali kod tipi~nog mikroprocesora
6. Programabilne jedinice, tehnike U/I prenosa
6-5
Odgovor Prvo, smatraemo da ne postoji neki drugi ciklus magistrale koji je tekue aktivan. Vreme trajanja jednog taktnog intervala (ciklusa) iznosi 125ns (1/8MHz). Da bi stekao pravo upravljanja nad magistralom U/I ure|aj mora da ~eka 2*125=250ns. Ali ako je neki ciklus magistrale u toku, U/I ure|aj mora jo dodatno da ~eka (6+2)*125=1000ns=1µs. To zna~i da U/I ure|aj mora da ~eka u vremenskom intervalu koji mo`e biti minimalno 250ns, a maksimalno 1,25µs.
Zaklju~ak: U/I ure|aj koga karakterie brzina prenosa od 0,75MB/s mo`e u konkretnom slu~aju da koristi paketni DMA re`im rada.
Test pitanje 6.8
Neka je dat sistem kod koga ciklusi magistrale (generisani od strane CPU-a ili U/I ure|aja) traju 500ns (250ns po smeru). Prenos prava upravljanja magistralom u oba smera, od CPU-a ka U/I ure|ajima i obratno, traje 500ns. Jedan od U/I ure|aja u sistemu karakterie brzina prenosa od 50kB/s i koristi DMA U/I. Podaci se prenose bajt po bajt. Usvojimo da se koristi paketni DMA re`im rada. Koliko dugo e ure|aj dr`ati magistralu kada prenosi blok du`ine 128 bajtova? Ponovi zadatak kada se koristi re`im rada kra|a ciklusa magistrale.
Odgovor Brzina prenosa od 50kB/s odgovara vremenu od 20µs po bajtu. Za blok du`ine 128 bajtova ure|aju je potrebno vreme od 20*128=2560µs=2,56ms. Ovom intervalu treba dodati vreme potrebno da se izvri prenos prava upravljanja nad magistralom (na po~etku i na kraju prenosa bloka). Ovo vreme je 500ns i malo je u odnosu na 2,56ms, pa zbog toga za prenos bloka u paketnom re`imu rada ka`emo da traje 2,56ms. Kod re`ima rada “kra|a ciklusa magistrale” DMA interfejs : (a) zahteva magistralu samo kada je potrebno vriti prenos; (b) obavlja se prenos podataka; i (c) osloba|a se magistrala.
Na osnovu prethodne diskusije, za prenos jednog bajta potrebno je sada vreme od 250+500+250=1µs. Imajui u vidu da se izme|u dva bajt prenosa magistrala osloba|a, magistrala e ukupno za prenos celog bloka, biti zauzeta samo 1*128=128µs. Ovo zna~i da e re`im rada kra|a ciklusa magistrale redukovati zauzetost magistrale za faktor 2560/128=20.
Test pitanje 6.9
Neka je dat mikrora~unarski sistem kod koga se U/I prenos podataka vri prekidnom rutinom. Prose~na brzina prenosa podataka je 8kB/s. Za obradu prekida potrebno je vreme od 100µs (uklju~uje vreme potrebno da se izvri grananje na rutinu za obradu prekida, izvrenje prekidne rutine, i povratak u glavni program). Odredi koji se deo CPU-ovog vremena troi na opslu`ivanje U/I ure|aja.
Odgovor U proseku, ure|aj prenosi samo jedan bajt u periodu 1/0.008=125µs. Da bi opslu`io ure|aj, CPU mora da potroi 100µs na obradu prekida, a to zna~i da je to 100/125=0,8 ili 80% od procesorskog vremena. Ovaj rezultat ukazuje da procesor suvie mnogo vremena troi na obradu prekida.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-6
Test pitanje 6.10
Neka U/I ure|aj iz prethodnog test pitanja ima ugra|ena dva 16-bajtna bafera i da se zahtev za prekid ka CPU-u generie onog trenutka kada se jedan od bafera napuni. Sada se rad CPU-a prekida jedanput svakih 16*0,125=2ms. Normalno, obrada prekida sada traje du`e, jer se u toku izvrenja rutine za obradu prekida vri prenos od 16 bajtova. Da bi u toku izvrenja rutine za obradu prekida CPU preneo jedan bajt, potrebno mu je vreme od 8µs. Izra~unaj deo CPU-og vremena koje se troi na opslu`ivanje U/I ure|aja.
Odgovor U toku vremenskog perioda od 2ms javlja se jedan zahtev za prekid. Vreme obrade koje prati jedan prekid iznosi sada 100+(8*15)=220µs. Ovo predstavlja 0,22/2=0,11, tj. 11% od CPU-og vremena.
Test pitanje 6.11
U centralnoj procesorskoj jedinici iz prethodna dva test pitanja implementirane su dve repetitivne U/I instrukcije (REPIN i REPOUT). Ova mogunost obezbedjuje da se odgovarajuom rutinom za obradu prekida vri prenos svakog bajta bloka podataka za samo 2µs. Koji je deo CPU-og vremena sada potreban da se opslu`i U/I ure|aj?
Odgovor U rutini za obradu prekida iz prethodna dva test pitanja za prenos svakog bajta bloka podataka koristi se softverska petlja koju ~ine nekoliko instrukcija. Ovim instrukcijama koriste se sledei putevi za prenos podataka CPU ↔ memorija i CPU ↔ U/I ure|aj. Svaku instrukciju koja pripada petlji potrebno je pribaviti i izvriti.
Sa druge strane, kod repetitivnih U/I instrukcija nema potrebe za softverskom petljom. Naime, repetitivna U/I instrukcija pribavlja se samo jedanput i ponavlja sve dok se ne izvri prenos svih 16 bajtova. Na ovaj na~in vreme obrade prekida redukuje se na 16*6=96µs. Deo vremena koje CPU potroi u odnosu na period od 2ms iznosi sada (0,22-0,096)/2=0,062 tj. 6,2%, to predstavlja faktor poboljanja od skoro dva puta u odnosu na rezultat dobijen u prethodnom test pitanju.
Test pitanje 6.12
CPU analizira U/I ure|aj svakih 10ms. Iniciranje analize se vri generisanjem zahteva za prekid od strane programibilnog tajmera. Na koju inicijalnu vrednost treba napuniti tajmer ako se on taktuje frekvencijom 2MHz?
Odgovor Perioda pobudnog takta tajmera je 0,5µs. Prema tome, 10ms odgovarae 10000/0,5=20000 taktnih impulsa. To zna~i da odgovarajui broja~ programibilnog tajmera treba napuniti na binarnu vrednost koja je ekvivalentna decimalnoj vrednosti 20000.
Zadatak 6.1
Na Slici 6.5 prikazano je serijsko interfejs kolo standarda RS-232C.
6. Programabilne jedinice, tehnike U/I prenosa
6-7
TTLnivoi
+12V
-12V
MC1488 MC1489
C1
+5V
TTLnivoi
C2
RS-232cnivoi
Slika 6.5 : Serijsko interfejs kolo standarda RS-232C
Sa ciljem da se smanje indukovane smetnje prema susednim kolima, standardom RS-232C specificira se slew-rate manji od 30V/µs. Signal na izlazu drajvera MC1488 menja se izme|u naponskih nivoa -11,75 V i +11,75V. Prelazi (u oba smera) su skoro linearni i traju 0,5µs. Da li prelazi signala (sa visoko na nisko i nisko na visoko) ispunjavaju ograni~enja koja se odnose na standard RS-232C u pogledu specificiranog slew-rate-a? Sa ciljem da se ispune zahtevi u pogledu slew-rate-a kod RS-232C, na izlazu drajvera MC1488 dodaje se kondenzator C1. Koliko treba da bude njegova aproksimativna vrednost, ako drajver generie konstantnu struju od 10mA? Odgovor U toku prelaznog stanja promena izlaznog napona iznosi 2*11,75=23,5V. Za ovu promenu imaemo slew-rate od 23,5/0,5=47V/µs, to zna~i da brzina promene ulaznog signala ne zadovoljava zahteve standarda RS-232C, tj. standardom specificirani slew-rate je 30V/µs a realni 47V/µs, tako da e indukovane smetnje prema susednim kolima biti suvie velike. Vrednost kondenzatora C odre|ujemo na osnovu relacije q=C*V, gde su q i V tovar i napon na kondenzatoru C, respektivno. Diferenciranjem po vremenu obe strane ove jedna~ine dobijamo dq/dt=C(dV/dt) tj. I=C(dV/dt) gde je I struja. Izjedna~avanjem dV/dt=30V/µs i zamenom, dobijamo C=(10/30)*10-9F ≅ 330pF. Ako ispunimo ovaj uslov, drajver MC1488 treba opteretiti ekvivalentnom kapacitivnou od 330pF. Stvarna kapacitivnost koja se vidi od strane drajvera izra~unava se istom relacijom, tj. zamenom 47V/µs za dV/dt. Rezultat koji se dobija je 210pF. Ova kapacitivnost, u sutini, predstavlja distribuiranu kapacitivnost kabla. Sa ciljem da ispunimo zahteve standarda RS-232C u pogledu slew-rate-a, neophodno je dodati spoljni kondenzator ~ija je vrednost C1=330-210=120pF. Zadatak 6.2
Princip rada predajnika i prijemnika kod asinhronog prenosa podataka, koji se zasniva na start-stop operaciji, prikazan je na Slici 6.6.
stanje mark
Dolazeisignal stanje
space
stop stanje mark
Taktprijemnika t
1 1 0 1 0 1 0
Slika 6.6: Start-stop operacije
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-8
Neka vreme prenosa jednog bita iznosi 20ms. Ako se ignoriu bilo kakva ograni~enja koja se odnose na broj bitova podataka koji se mogu preneti izme|u start i stop bitova, proceni maksimalan broj bitova koji se mo`e pouzdano primiti kada prijemnik radi sa taktnom frekvencijom od 48Hz? Odgovor Usvojimo da je po~etak start-bita takav da takt prijemnika po~inje ta~no na polovini intervala prvog bita na prijemu.
trajanje bitskog intervala na prijemu = 20 ms trajanje taktnog perioda prijemnika = 1/48 Hz ≅ 20,83 ms
Jasno se vidi sa Slika 6.7 a) da e nakon prijema prvog bita, takt prijemnika da se pomera za 0,83 ms kod svakog sukcesivnog bita. Problem se prema tome sastoji u odre|ivanju broja pomeraja koji dovode do toga da greka bude vea od 10 ms, tj.
10/0,83=12
Ovo zna~i da e nakon 12 taktnih impulsa nakon prvog doi do nepouzdanog prijema (Slika 6.7b))
start
Podaci naprijemnoj strani
t(ms)0 20 30 40
a) 10 30,83
9,17ms
t(ms)
taktprijemnika
signal naprijemnojstrani
takt prijemnika
b)
start 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300
10 30,8 51,7 72,5 93,3 114,2 135 155,8 176,7 197,5 218,3 239,2 260 280,8
t(ms)
t(ms)
Slika 6.7 : Ekstrakcija informacije na prijemnoj strani
Kao to se vidi sa Slike 8, svi bitovi do 12-og i uklju~ujui 12-i se korektno primaju. Test pitanje 6.13
Asinhroni podaci se prenose kao znaci (karakteri) na sledei na~in : pet informacionih bitova svaki trajanja po 20ms, start bit trajanja 20ms i stop bit trajanja 30ms.
6. Programabilne jedinice, tehnike U/I prenosa
6-9
Odrediti:
(a) brzinu prenosa u bps.
(b) brzinu prenosa informacije (signalna brzina) u baud-ima.
Odgovor Vreme potrebno da se prenese jedan znak=20+(5*20)+30=150ms. U toku ovog vremena prenosi se 7 bitova, pa je
brzina prenosa=7/(150⋅10-3)=46,7bps
Signalni elemenat se prenosi najkrae za 20ms, pa je stoga
signalna brzina=1/(20⋅10-3)=50bauda-a
Test pitanje 6.14
Modem prenosi informaciju koristei osmo-nivovski QAM. Ako je trajanje svakog signalnog elementa 0,8333ms, odredi :
(a) baud-ovu brzinu
(b) bitsku brzinu
Odgovor (a) Baud-ova brzina se definie kao funkcija tipa ϕ=f(1/T) gde je T vreme trajanja najkraeg signalnog elementa
Baud-ova brzina=1
0 8333 1012003, ⋅
=− bauda
(b) ako postoje osam moguih nivoa za svaki signal, tada se svaki signalni elemenat predstavlja pomou tri bita (od 000 do 111 - binarno). Prema tome tri bita se predaju svakih 0,8333ms, pa je
Bitska brzina= 03600,8333
3osavreme_prenabroj_bitov
== bps
Test pitanje 6.15
Data je mre`a od 10 ra~unara topologije tipa potpuno povezana reetka. Koliki je broj veza?
Odgovor Ako je broj ~vorova n=10, tada je ukupni broj veza:
ukupni broj veza = 452
9102
1)n(n=
⋅=
−
U sutini, sa 10 ~vorova, maksimalni broj veza koji se mo`e simultano koristiti je samo 5 (jednu vezu ~ini par predajnik - prijemnik). Prema tome, sa 45 veza faktor predimenzionisanja iznosi 9.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-10
Test pitanje 6.16
Podaci se prenose asinhrono sa 50bps-a. Ako se ignoriu ograni~enja koja se odnose na broj bitova koji se prenose izme|u start i stop bitova, proceniti maksimalan broj bitova koji se mo`e pouzdano primiti kada je takt prijemnika 52 Hz?
Odgovor treba da da ~italac
Test pitanje 6.17
Podaci se predaju asinhrono u obliku kratkih blokova. Jedan blok ~ini : start bit, sedam informacionih bitova, bit parnosti i stop bit. Trajanje svakog bita je 9,09ms sa izuzetkom stop bita koji traje dvaput du`e. Odrediti:
(a) Bitsku brzinu.
(b) Baud-ovu brzinu.
Odgovor treba da dâ ~italac.
Test pitanje 6.18
Signalna brzina modema pri 16-nivovskoj QAM je 1200baud-a. Izra~unaj brzinu prenosa podataka u bps.
Odgovor treba da dâ ~italac
Zadatak 6.3
8-bitni mikroprocesor mo`e da adresira 64kB memorijsko adresni prostor i 256-bajtni U/I prostor. Projektant se odlu~io da koristi izdvojeni U/I adresni prostor za pristup U/I ure|ajima.
(a) Rad sa koliko ulaznih i koliko izlaznih portova mo`e da podr`ava CPU?
(b) Pretpostavimo da se svaki U/I port mo`e koristiti kao ulazni i kao izlazni. Koliko U/I portova je mogue implementirati?
(c) Neka je potrebno samo 8 U/I portova. Pokazati kako je najjednostavnije realizovati U/I adresni dekoder.
(d) Pretpostavimo da je ukupno potrebno 16 U/I portova. Pokazati kako treba izabrati adrese portova tako da je dekodiranje U/I adresa mogue samo sa dva oktalna dekodera 74LS138 a da se pri tome ne koriste logi~ka kola tipa AND i OR, invertori i dr.
Odgovor a) ukupni broj ulaznih i izlaznih portova mo`e biti 256.
b) maksimalno je mogue implementirati 256 portova.
c) adresa porta je 8-bitna. Najjednostavnije dekodiranje je sledee:
A7 A6 A5 A4 A3 A2 A1 A0 selekcija U/I ure|aja
6. Programabilne jedinice, tehnike U/I prenosa
6-11
0 0 0 0 0 0 0 1 adresira sa prvi ure|aj
0 0 0 0 0 0 1 0 adresira sa drugi ure|aj
0 0 0 0 0 1 0 0 adresira sa trei ure|aj
0 0 0 0 1 0 0 0 adresira sa ~etvrti ure|aj
0 0 0 1 0 0 0 0 adresira sa peti ure|aj
0 0 1 0 0 0 0 0 adresira sa esti ure|aj
0 1 0 0 0 0 0 0 adresira sa sedmi ure|aj
1 0 0 0 0 0 0 0 adresira sa osmi ure|aj
d) jedno od reenja
A Y0B Y1C Y2
E1E2 Y7E3
A0A1A2
A5A6A7
.
.
.
A Y0B Y1C Y2
E1E2 Y7E3
A0A1A2
A5A7A6
.
.
.
74LS138 74LS138
Test pitanje 6.19
CPU-u je dodeljen 4MB adresni prostor za pristup memoriji i U/I ure|ajima. Sistem se koristi kod aplikacija gde kapacitet memorije ne premauje 2MB. (a) kako podeliti adresni prostor izme|u memorije i U/I tako da razdvajanje memorijskog od U/I
prostora, sa aspekta instalirane logike dekodera adrese, bude jednostavno. (b) Pretpostavimo da su potrebni posebni ~ip selekt signali za svaku memoriju kapaciteta 256kB.
Poka`i kako e se generisati ~ip selekt signali memorije. Odgovor a)
.
.
.
0
2MB
4MB
memorijskiprostor
U/I prostor
A Y0B Y1C Y2dekoder3÷8E1E2 Y7E3
A19A20A21
A22
+5V
0-255kB256-511kB512-767kB
1.791MB-2.047MB
Osam ~ip selekt signala
Test pitanje 6.20
Projektanti Intelovih procesora doga|aj nazivaju prekid. Saglasno toj notaciji izvore prekida dele na sledee tri kategorije :
(1) softverski prekidi (software interrupts)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-12
(2) hardverski prekidi (hardware interrupts) (3) izuzeci (exceptions).
Uka`i na osnovne osobine svih kategorija prekida u realnom na~inu rada za mikroprocesore i386 i navie. Odgovor (1) Softverski prekidi - iniciraju se instrukcijom INT. Na primer, instrukcija INT 10h inicira izvrenje prekida ~iji je heksadecimalni broj 10. Na~in izvo|enja prekida u realnom na~inu rada za mikroprocesor i386 prikazan je na slici 6.8 (ilustracije radi prikazan je prekid 1). Generisanje softverskih prekida sinhrono je u odnosu na tekue programsko izvrenje. Kod i386 u adresnom prostoru u realnom na~inu rada, prvih 1024 bajtova je rezervisano za vektorsku tabelu prekida. Tabela sadr`i vektore prekida za svaki od 256 moguih prekida. Kod procesora 8086 pozicija ove tabele je unapred odre|ena od strane hardvera (smetena je na po~etku adresnog prostora od adrese 0 do 1kB). Kod i386 njen po~etak (bazna adresa) odre|ena je sadr`ajem registra IDTR (Interrupt Descriptor Table Register). Kao to se vidi sa slike 6.9 IDTR ~uva baznu adresu i granicu deskriptor tabele. Nakon reseta sistema IDTR se puni na vrednost 0000h za bazu i 03FFh za granicu. Uz pomo instrukcija LIDT (Load IDTR) i SIDT (Store IDTR) mogue je promeniti vrednost baze i granice u registru IDTR (slika 6.9) i na taj na~in pomerati poziciju tabele, u realnom adresnom prostoru, na razli~ita mesta. Kao to je prikazano na slici 6.8 svaki vektor prekida u realnom na~inu rada ~ine ~etiri bajta kojim se definie adresa skoka na rutinu za obradu prekida, tj. definie format segment : ofset. Kada se javi prekid i386 po automatizmu izvodi sledeu proceduru: (a) smeta EFLAGS, CS i EIP u magacin ( kod 16-bitnog na~ina rada smeta se samo CS i IP)
prekid 255...prekid 2
prekid 1
prekid 0
obraanje po~etnojlokacije prekidne(uslu`ne) rutine
EIP 255 CS 255
...
.........
EIP 2 CS 2
EIP 1 CS 1
EIP 0 CS 0
EFLAGS
EIP
CS
i 386program za obradu prekida
magacin
tabela vektorskih prekida
memorija
pribavljanje iz vektorsketabele smetanje u registre
punjenje umagacin
ulazna ta~ka (EIP)
CS
Slika 6.8 : Prekidi u realnom na~inu rada kod i386
(b) resetuje markere uslova registra EFLAGS koji se odnose na prekid i trap,
(c) adresira vektor prekida u vektorskoj tabeli prekida koji odgovara broju prekida, i puni EIP (ili IP u 16-bitnom na~inu rada) i CS iz tabele.
(d) par CS:EIP vektora prekida odre|uje ulaznu ta~ku rutine za obradu prekida,
6. Programabilne jedinice, tehnike U/I prenosa
6-13
(e) vri se obrada specificirana rutinom za obradu prekida,
(f) povratak tekuem programu obavlja se instrukcijom IRET.
(2) Hardverski prekidi - ovi prekidi se iniciraju od strane hardverskih komponenti kao to su kruti-disk, tastatura i dr. Postoje sledea dva osnovna tipa hardverskih prekida :
(a) nemaskirajui prekidi (NMI - non maskable interrupts)
(b) maskirajui prekidi (maskable interrupt) brane se ili dozvoljavaju postavljanjem markera IE. U realnom na~inu rada to se izvodi izvrenjem instrukcija CLI i STI.
Hardverski prekidi (NMI i IRQ) nasuprot softverskim prekidima su asinhroni u odnosu na izvrenje programa. Ovo ~ini detekciju programskih greaka veoma tekom jer se ove greke javljaju u sprezi sa hardverski iniciranim prekidima.
(3) Izuzeci - iniciraju se unutar procesora. Generisanje izuzetka odgovara onom koje je sli~no softverskom prekidu. To zna~i da je broj prekidnog vektora odre|en od strane samog procesora. Izuzeci se mogu svrstati u sledee grupe : greke (faults); trapovi; i aborti.
Osnovne osobine ovih tipova izuzetaka su sledee:
(a) Greke - inicira izvrenje izuzetka pre zavretka instrukcije. Vrednost koja se puni u EIP pokazuje na prvu instrukciju tog izuzetka. Tipi~an primer je segment nije prisutan. Mikroprocesor i386 ima mogunost da napuni deo segmenta i pokua novi pristup.
(b) Trap - inicira izuzetak nakon zavretka instrukcije. Trapovi su korisni kada je instrukcija izvrena korektno, ali je potrebno prekinuti izvrenje programa. Tipi~ni primeri su prekidne ta~ke kod debagovanja programa.
TSS selektor bazna adresa TSS-a granica TSS-a
LDT selektor bazna adresa LDT-a granica LDT-a
bazna adresa IDT-a granica IDT-a
bazna adresa GDT-a granica GDT-a
TR
IDTR
GDTR
15 0 31 0 19 0
Slika 6.9 : Registri za upravljanje memorijom kod i 386
(c) aborti - nasuprot grekama i trapovima, aborti ne ukazuju uvek na adresu greke. Zbog toga obnavljanje redosleda izvrenja programa nakon aborta nije uvek mogue. U sutini aborti se samo koriste da uka`u na seriozne greke kao to su hardverske ili nekorektne sistemske tabele.
Najvei broj izuzetaka koji se javlja kod i386 va`i za zatieni na~in rada. U realnom na~inu rada koriste se sledei izuzeci:
deljenje sa nulom - izuzetak 0 korak-po-korak - izuzetak 1 prekidna ta~ka - izuzetak 3 preba~aj sa INT0 - izuzetak 4 granica - izuzetak 5 neva`ei opkod - izuzetak 6 koprocesor nije prisutan - izuzetak 7 IDT suvie mala - izuzetak 8 izuzetak magacina - izuzetak 12 greka zatite opteg tipa - izuzetak 13 greka u radu koprocesora - izuzetak 16
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-14
Test pitanje 6.21
Da li se za flopi disketu mo`e kazati da je prenosivi volume? Odgovor Flopi disketa jeste prenosivi volume. Test pitanje 6.22
Koliko je prose~ni kapacitet krutog (hard) diska vei od kapaciteta flopi diskete ? Odgovor - Ako je prose~ni kapacitet krutog diska reda 8GB-a, flopi 1,44MB tada je njihov odnos:
8 101 44
5 103
3⋅≅ ⋅
,
Test pitanje 6.23
Kakav je odnos kontroler↔drajv kod inteligentnih drajvova kakvi su IDE, SCSI ili ESDI?
Odgovor - Kontroler je deo drajva tako da drajv i kontroler formirju jednu jedinstvenu celinu. Zbog toga umesto da se kontroler ubacuje u slot-magistrale, u slot-magistrale se ubacuje host adapter. Zadatak 6.4
Za mikrora~unarski sistem zasnovan na procesoru 80x86 sa slike 6.10 napisati program za konverziju ulazne temperature zadate u stepenima Celzijusovim i odgovarajuu izlaznu temperaturu u stepenima Fahrenheitovim. Konverzija temperature vri se na osnovu sledee formule: 0F=1.8* 0C +32
Neka se ulazna temperatura meri u opsegu od -500C do +500C. Podaci o temperaturi u Celsiusovim stepenima kodirani kao ASCII znaci prihvataju se sa 8-bitnih ulaznih portova ~ije su adrese 60h, 61h, i 62h, u sledeem formatu: znak + ili - sa porta 60h, temperatura o deseti~noj vrednosti sa porta 61h, a temperatura o jedini~nim vrednostima sa porta 62h.
Prikaz rezultata se vri na trocifarskom 7-segmentnom displeju u sledeem formatu: znak + ≡ blanko ili - na izlaznom portu ~ija je adresa 80h, deseti~na vrednost temperature na portu ~ija je adresa 81h, a jedini~na vrednost na portu ~ija je adresa 82h.
Rezultat u 0F koji se izra~unava na osnovu relacije (1) zaokru`iti prema najbli`oj celobrojnoj vrednosti. Podatke o temperaturi prihvatati sa ulaznih portova i nakon obrade upisivati u izlazne portove svake sekunde. Na ulaznom pinu INTR procesor prihvata zahteve za prekid svakih 10ms. Izgled 7-segmentnog displeja i odgovarajui komandni bajt prikazani su na slici 6.11.
Program za konverziju temperature koji uklju~uje aktivnosti: brojanje vremenskog intervala do 1s, prihvatanje ulaznih podataka o temperaturi, obrada podataka, i pobuda displeja napisati kao prekidni.
6. Programabilne jedinice, tehnike U/I prenosa
6-15
ROM RAM
ulazni portovi
60h, 61h, 62hizlazni portovi80h, 81h, 82h
satnimehanizam
80x86
INTR
10ms
sistemska magistrala
Slika 6.10 : Mikrora~unarski sistem
f
a
b
g
c
e
d
t
t g f e d c b a
b) komandni bajt
* t - se odnosi na prikaz decimalne ta~ke
a) segmentidispleja
Slika 6.11: Raspored segmenata kod 7-segmentnog displeja i odgovarajui komandni bajt
Test pitanje 6.24
TV monitor ima vertikalnu rezoluciju od 400 linija. Monitor se koristi za prikaz znakova u formatu 5*7. Koliko redova (vrsta) znakova je mogue prikazati na ekranu CRT-a? Usvojimo da je razmak izme|u redova tri analizatorske linije.
Odgovor Za prikaz svakog reda potrebno je 7+3=10 analizatorskih linija (uklju~ujui i razmak izme|u redova). Prema tome ukupno je mogue prikazati 400/10=40 redova znakova.
Test pitanje 6.25
Kod klasi~nog TV monitora odredi horizontalnu rezoluciju koja odgovara rezoluciji od 80 znakova po redu. Usvojimo da razmak izme|u znakova u redu iznosi jedna ta~ka (pixel).
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-16
Odgovor U horizontalnom pravcu, svakom znaku je potrebno pet ta~aka za njegovo formiranje i jedna ta~ka za razmak, ~to ukupno ~ini 6 ta~aka. Za prikaz 80 znakova potreban broj ta~kica po analizatorskoj liniji iznosi 6*80=480. Prema tome rezolucija TV monitora ( iz ovog i prethodnog zadatka) iznosi 480*400 pixela. Ukupni broj znakova koji se mogu prikazati ( u formatu 7*5) iznosi 40*80=3200.
Test pitanje 6.26
Identifukuj osnovne gradivne blokove jedinice za napajanje.
Odgovor
u
tu
tu
tu
t
u
tu
t
zatita od prenapona
transformator
ispravlja~
filtar
regulator
220V AC, 50 Hz
Test pitanje 6.27
Nacrtaj talasne dijagrame interfejs kola sa slike 6.12 u karakteristi~nim ta~kama markiranim simbolom '*'. Kolo sa slike 6.12 se koristi za generisanje pobudnih taktnih impulsa kod nekog mikrora~unara.
6. Programabilne jedinice, tehnike U/I prenosa
6-17
16 MHz
4 Mhz
*
****
***
*oscilator broja~ modula 16
dekoder2:4
8 MHz
2 MHz 1 MHz
F 1 F 2 F 3 F 4
Slika 6.12 : Blok dijagram interfejs kola za generisanje taktnih impulsa
Odgovor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1616 MHz
8 MHz
4 MHz
2 MHz
1 MHz
F 1
F 2
F 3
F 4
Slika 6.13 : Talasni dijagrami
Test pitanje 6.28
U kom na~inu rada (Mode) je definisan da radi i kako su konfigurisani U/I portovi A, B i C ~ipa PIA 8255A nakon to je u njegov upravlja~ki registar upisana vrednost 82h?
Odgovor Funkcija bitova upravlja~ke re~i ~ipa 8255A je prikazana na slici 6.14.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-18
D7 D6 D5 D4 D3 D2 D1 D0
port C (ni`i)1 - ulaz0 - izlaz
port B1 - ulaz0 - izlaz
selekcija Mode0 - Mode 01 - Mode 1
grupa B
port C (vii)1 - ulaz0 - izlaz
port A1 - ulaz0 - izlaz
selekcija Mode00 - Mode 001 - Mode 11x - Mode 2
grupa A
Mode set flag1 - aktivan
Slika 6.14: Funkcija bitova upravlja~ke re~i kod 8255A
Binarni sadr`aj upravlja~kog registra je :
Na~in rada portova ~ipa 8255 je sledei:
D7=1 bira se Mode tj. na~in rada za portove: D0=0 - ni`a ~etiri bita PORT C su izlazi D1=1 - PORT B je ulazni D2=0 - Za grupu B izabran je Mode 0 D3=0 - via ~etiri bita PORT C su izlazi D4=0 - PORT A je izlazni D6D5=00 - za grupu A izabran je Mode 0
8
4
4
8
PA7-PA0
PC7-PC4
PC3-PC0
PB7-PB08255A
D7-D0
grupa AMode 0
grupa BMode 0
Slika 6.15 Na~in konfigurisanja 8255A nakon upisa upravlja~ke re~i 82h.
1 0 0 0 0 0 1 0
D7 D6 D5 D4 D3 D2 D1 D0
6. Programabilne jedinice, tehnike U/I prenosa
6-19
Test pitanje 6.29
Na Slici 6.16 prikazan je na~in povezivanja grupe od osam programibilnih perifernih interfejs kola tipa PIA 8255. Kako se pristupa PORT-u C kola PIA 14?
CS 0
D0-D7
A0 8255A
A1
RD
WR
2
4
6
8
10
1214
A0 00
A1
A2
E1 8205
E2
E3
07
Ka ostalimperiferijama na
parnimadresama
D0-D7
A3
A4
A5
A0
WR
RD
A2
A1
Mag. podat. D0-D7
Adr mag. A0-A15
Upr. mag.
Port B
Port A
Port C
IO/M
Slika 6.16 Na~in povezivanja osam PIA 8255A
Odgovor Da bi se dozvolio rad PIA 14 potrebno je da dekoder 8205 postavi izlaz 07 na logi~ku 0. Shodno na~inu povezivanja potrebno je da A0=0 (dozvoljava se rad dekoderu 8205) a adrese A4A5A3=111. Port C PIA 14 se selektuje pri A2A1=10 (pristup PORT-u C). Ostale adrese nisu od va`nosti.
Test pitanje 6.30
Neka je na slici 6.16 (prethodno test pitanje) PIA 14 konfigurisana tako da je PORT A izlazni a PORT-ovi B i C kao ulazni. Svi portovi su postavljeni za MODE 0. Napisati programsku sekvencu koja prihvata stanje sa ulaznih portova B i C, odre|uje razliku C-B, i upisuje razliku na izlazni PORT A.
Odgovor Shodno Slici 6.16, adrese triju U/I portova PIA 14 su:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-20
PORT A = 00111000 = 38h
PORT B = 00111010 = 3Ah
PORT C = 00111100 = 3Ch
Portovi B i C se mogu ~itati sledeom sekvencom
In AL,3Ah ; ~itanje PORT-a B
Mov BL,AL ; privremeno ~uvanje u BL In AL,3Ch ; ~itanje PORT-a C Sub AL,BL ; formiranje razlike Out 38h,Al ; upis u PORT A
Test pitanje 6.31
Koji U/I port sa slike 6.17 se bira kada je memorijska adresa 00402h.
CS 0
D0-D7
A0 8255A
A1
RD
WR
2
4
6
8
10
1214
A0 00
A1
A2
E1 8205
E2
E3
07
Ka ostalimperiferijama na
parnimadresama
D0-D7
A10
A14
A3
A4
A5
A0
WR
RD
A2
A1
Mag. podat. D0-D7
Adr mag. A0-A15
Upr. mag.
Port B
Port A
Port C
Slika 6.17 Na~in povezivanja osam PIA 8255A koristei memorijsko preslikane U/I portove
Odgovor Memorijska adresa 00402h ima sledei binarni oblik:
A19...A1A0 = 0000 0000 0100 0000 0011
Kod ove adrese bitovi A14=0, A10=1, A0=0 to zna~i da je rad dekodera 8205 dozvoljen. S obzirom da je selektorski kd A5A4A3 = 000, bie aktivan izlaz O0 tj. bira se PIA 0.
6. Programabilne jedinice, tehnike U/I prenosa
6-21
Adresni ulazi koji se dovode na ulaze za selekciju portova PIA su A2A1 = 01, a to zna~i da se pristupa PORT-u B. Prema tome adresom 00402h selelktuje se PORT B koji pripada ~ipu PIA 0.
Test pitanje 6.32
Napisati sekvencu instrukcija potrebnu za inicijalizaciju upravlja~kog registra PIA 0 strukture sa slike 6.17, tako da PORT A bude izlazni, a PORT-ovi B i C ulazni. Svi portovi su inicijalizirani u Mode 0.
Odgovor Na osnovu sadr`aja slike 6.17 odredjujemo da je memorijska adresa upravlja~kog registra PIA 0 Adr_Con_Reg_PIA_0 = 00406h, a sadr`aj upravlja~ke re~i 8Bh. S obzirom da je PIA 0 memorijsko-preslikana za inicijalizaciju ove periferije koristi se instrukcija Mov na sledei na~in:
Mov AX,0h ; kreira se segment podataka Mov DS,AX ; na 00000h Mov AL,8Bh ; upravlja~ki bajt u AL Mov [406h],AL ; upis upravlja~kog bajta u PIA 0 Test pitanje 6.33 Neka je PIA 0 sa slike 6.17 konfigurisana kao u prethodnom primeru. Napisati programsku sekvencu kojom se ~ita sadr`aj PORT-ova B i C, nakon toga se nad njihovim sadr`ajem sa vri AND operacija a rezultat dobijene operacije upisuje u PORT A. Odgovor Sa sl. 2 vidimo da su adrese triju U/I portova kod PIA 0 sledee :
PORT A = 00400h PORT B = 00402h PORT C = 00404h Sada je potrebno postaviti segment podataka na vrednost 00000h i pro~itati podatke sa PORT-ova B i C.
Mov AX,0h ; kreiraj segment podataka Mov DS,AX ; na 00000h Mov BL,[402h] ; ~itanje PORT-a B Mov AL,[404h] ; ~itanje PORT-a C And AL,BL ; AND operacija nad podacima PORT-ova B i C Mov [400h],AL ; upis u PORT A
Zadatak 6.5
Tri ure|aja A, B i C povezana su preko sistemske magistrale na procesor. U/I prenos za sva tri ure|aja ostvaruje se prekidnom tehnikom. Gnje`|enje za ure|aje A i B nije dozvoljeno, ali se zahtevi za prekid generisani od strane C-a mogu prihvatati bilo da se opslu`uje A ili B. Uka`i na na~ine kako se mo`e ovo ostvariti za svaki od sledea dva slu~aja:
a) procesor ima jednu INTR liniju i nema mogunost vektorskog prekida.
b) procesor ima dve dostupne linije preko kojih prihvata zahteve za prekid, INTR1 i INTR2, pri ~emu INTR1 ima vii prioritet.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-22
Specificiraj za svaki od slu~aja (a) i (b) kada se i kako prekidi brane i dozvoljavaju.
Zadatak 6.6
Industrijsko postrojenje koristi vei broj senzora kojim se nadgleda temperatura, pritisak, vla`nost i dr. Izlazi senzora su tipa ON/OFF to zna~i da se aktiviraju kada parametar koji se meri pre|e odre|enu granicu. Formirati grupu od osam senzora i povezati ih preko odgovarajue interfejs logike na magistralu ra~unara.
(a) Izvri projektovanje odgovarajue interfejs logike tako da se stanje svih osam senzora mo`e simultano ~itati kao jedinstveni bajt na adresi 1770208. Usvojiti da je magistrala sinhrona i da va`i vremenski dijagram sa slike 6.18.
(b) Za slu~aj da je magistrala asinhrona a prenos podataka je regulisan handshake signalima (sl. 6.19) ponovi problem pod (a).
T
T3T2T1takt
CPU-a
adrese
takt magi-strale
READ
magistrala podatakava`ei podaci
slika 6.18 : Magistralni ciklus ~itanje kod sinhrone magistrale
ciklus magistrale
t0 t1 t2 t3 t4
adrese +upravlja~ki signali
Ready
Accept
podaci
Slika 6.19 : Magistralni ciklus ~itanje kod asinhrone magistrale kada je prenos regulisan handshake signalima.
Napomena : Signal Ready postavlja CPU u trenutku t1 ~ime obavetava U/I ure|aj da su adrese va`ee. U/I ure|aj, prihvata signal Ready u trenutku t2, prethodno je dekodirao adrese i tip ciklusa (tj. ~itanje), i postavlja Accept na logi~ku 1. U trenutku t2 U/I ure|aj aktivira svoje izlazne bafere i definie stanje na magistrali podataka. U trenutku t3
6. Programabilne jedinice, tehnike U/I prenosa
6-23
CPU prihvata signal Accept koji mu ukazuje da su signali na magistrali za podatke va`ei. Nakon toga CPU prihvata podatke i upisuje ih u svoj izlazni bafer (tipa DBR). U trenutku t4 CPU deaktivira signale na adresnoj i upravlja~koj magistrali. Nakon to je detektovao prerlaz sa 1 na 0 koji se odnosi na stanje signala Ready, trenutak t5, U/I interfejs deaktivira signal Accept kao i svoj izlazni bafer (magistrala podataka prelazi u tree stanje).
Zadatak 6.7
Izvri projektovanje odgovarajueg interfejsa preko koga se povezuje sedmo-segmentni displej kao izlazni ure|aj na:
(a) sinhronoj magistrali
(b) asinhronoj magistrali koja koristi handshake signale.
Talasni dijagrami koj va`e za operaciju upis kod sinhrone i asinhrone magistrale prikazani su na slici 6.20 i slici 6.21, respektivno.
T
T3T2T1takt
CPU-a
adrese
takt magi-strale
Write
podaci
Slika 6.20 : Magistralni ciklus Upis kod sinhrone magistrale
ciklus magistrale
t0
adrese +upravlja~ki signali
Accept
Ready
podaci
t1 t2 t3 t4 t5
Slika 6.21: Magistralni ciklus Upis kod asinhrone magistrale kada je prenos regulisan handshake signalima (Ready i Accept).
Test pitanje 6.34
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-24
Neka je data LED kod koje je Vf=2V pri If=10mA. LED se pobu|uje preko TTL invertora kako je to prikazano na sl. 6.22. Odredi vrednost serijskog otpornika R ako je napon zasienja Vce na izlazu invertora 0,3V.
Vcc=+5V
R
ulaz
TTLinvertor
LED
Slika 6.22 : LED koji se pobu|uje preko TTL invertora
Odgovor Vrednost otpornika se odre|uje na osnovu relacije:
R=(Vcc-Vf-Vce)/ If
zamenom vrednosti dobiemo:
R=(5-2-0,3)/ 0,01=270Ω
LED se aktivira samo kada je ulaz TTL invertora na visoko. Pod tim uslovom izlaz invertora deluje kao strujni ponor. Kada je ulaz invertora na nisko, njegov izlaz se nalazi na aproksimativno 3,5V pa je LED u neprovodnom stanju.
Zadatak 6.8
Vreme trajanja odgovarajuih aktivnosti koje prate prihvatanje i obradu zahteva za prekid prikazani su na slici 6.23. Trajanje taktnog intervala iznosi 10ns.
aktivnost trajanje u taktnim intervalima • zavretak 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)
• smetanje 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.
6. Programabilne jedinice, tehnike U/I prenosa
6-25
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 najvii 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.
vektorbroj
INTR
INTA
koder
prioriteta .
.
.
CPU
IRQ1
IRQ2
IRQ8
Slika 6.25 : Predaja vektor broja preko bloka koder prioriteta
c) U kom se opsegu nalazi vreme odziva opslu`ivanja zahteva za prekid ure|aja sa najviim i najni`im prioritetom kod tehnike vektorskog prekida ako verovatnoa instrukcija koja se tekue mo`e izvriti za 20, 10 ili 6 taktnih intervala, iznosi 20, 30 i 50 procenata respektivno.
Odgovor a) Scenario doga|aja prihvatanja i opslu`ivanja zahteva za prekid kod tehnike polling mo`e se objasniti shodno sl. 6.26.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-26
50 taktnihintervala
(t2)
mikroop.
instrukcijakoja setekue
opslu`uje
INTR 123
40 taktnih
intervala(t6)
smetanje CPU-ovihregistara u magacin
status U/I
ure|aja sa najviimprioritetom
status U/I
ure|aja sa predzadnjimprioritetom
opslu`i ure|aj sanajviim prioritetom
opslu`i ure|aj sapredzadnjim prioritetom
opslu`i ure|aj sanajni`im prioritetom
izbavljanje CPU-ovihregistara iz magacina
ne postoji
zahtev
postoji zahtev
postoji zahtev
najni`i prioritet
prihvatanje zahteva zaprekid
40 taktnih
intervala(t6)
60 taktnihintervala (t4)
U/I ure|ajIRQ
program koji seprekida
2 taktnaintervala
(t1)
Slika 6.26 : Scenario doga|aja kod "polled" tehnike
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 zavretka t1 po~inje izvrenje najdu`e instrukcije koja traja t2
b) Scenario doga|aja do po~etka opslu`ivanja U/I ure|aja sa najviim prioritetom koji je generisao zahtev za prekid u obliku vremenskog dijagrama prikazan je na slici 6.27.
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 istai 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 najviim prioritetom identi~no, tj. Tuv=180ns.
6. Programabilne jedinice, tehnike U/I prenosa
6-27
c) Ve smo konstatovali da je trenutak opslu`ivanja U/I ure|aja sa najviim ili najni`im prioritetom, kada na postoje drugi zahtevi za prekid kod vektorske tehnike identi~an. Analizirajui sliku 4 zaklju~ujemo da se jedino mo`e menjati interval t2. Prose~no vreme odziva bie:
Tuvp=t1+t3+t4+T5+0.2*20+0.3*10+0.5*6=130+4+3+3=141ns
Najkrae vreme odziva bie:
Tuvmin=130+6=136ns
Najdu`e vreme odziva
Tuvmax=130+20=150ns
Shodno prethodnom, vreme odziva se nalazi 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 izvrenja prve instrukcije prekidne rutine pro|e vreme od 30µs. Prose~no, prekidna rutina se izvrava za 150µs. U sutini, ~isti programski kd za opslu`ivanje U/I ure|aja se izvrava za 135µs a ostalih 15µs je re`ijsko vreme koje uklju~uje smetanje 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 troi 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 troi na opslu`ivanje ure|aja.
Odgovor
a) Scenario doga|aja kod vektorskog prekida je sledei:
gde su:
• t1 - period od trenutka kada se aktivira IRQ do trenutka kada INTR postane tako|e aktivan.
• t2 - period potreban da zavri izvrenje tekue instrukcije
• t3 - period od aktiviranja INTA do prihvatanja vektor broja.
• t4 - re`ijsko vreme Push i Pop operacija
• tob - vreme obrade prekida - ~isti programski kd
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
30µs 7.5µs 135µs 7.5µs
t1 t2 t3 t4/2 tob t4/2
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-28
Zadatak 6.10
Ako se vri prenos bloka podataka koji se ne mo`e prekidati tada se u zna~ajnoj meri produ`ava vreme odziva sistema na prekid. Prvi razlog mo`e biti instrukcija tipa Movs (move string) kojom se vri prenos bloka podataka iz skupa uzastopnih memorijskih (ili U/I) lokacija u drugu memorijsku (ili U/I) oblast. Drugi razlog mo`e biti ako se zahtev za prekid ne prihvata sve dok DMA kontroler ne prepusti pravo upravljanja nad magistralom CPU-u. Zbog navedena dva razloga kada je odziv sistema na prekid sa aspekta aplikacije kriti~an neophodno je ograni~iti maksimalnu du`inu bloka podataka koji e se bez prekidanja prenositi.
Neka je u sistem ugra|en DMA kontroler koji mo`e prenositi podatke brzinom od 20MB/s, pri ~emu se DMA prenos ne mo`e prekidati. Neka tako|e u svom repertoaru CPU ima ugra|enu instrukciju Movs koju koristi da bi popunio 128-bajtni U/I bafer ure|aja. CPU se taktuje frekvencijom 50MHz.
a) Za koliki vremenski period prenos bloka podataka koji vri instrukcija Movs povea vreme odziva sistema na prekid?
b) DMA kontroler prenosi blok podataka veli~ine 256 bajtova. Za koliki vremenski period prenos bloka podataka poveava vreme odziva sistema na prekid?
c) Neka se zahtev za prekid mora prihvatiti najdu`e u okviru 10µs. Na koju se maksimalnu du`inu mora ograni~iti blok podataka ako se koristi: (i) DMA prenos; i (ii) Movs instrukcija. Ignorisati vreme potrebno da se zavri tekua instrukcija, prihvati vektor broj, pribavi po~etna adresa prekidne rutine i smeta/izbavi sadr`aj CPU-ovih ragistra u/iz magacina.
Napomena: Usvojiti da je perioda sistemskog takta 20ns. Instrukcijom Movs se prenosi 16-bitni podatak. Movs se izvrava za period od 15 taktnih intervala.
Odgovor a) Vreme odziva sistema na zahtev za prekid u najgorem slu~aju jednako je vremenu koje je potrebno da se prenese ceo blok podataka pomou instrukcije Movs
T1=(128/2)*15*20ns=19.2µs
b) kada je prenos tipa DMA, vreme odziva sistema T2
T2256
1sBajtova1020 6
=⋅
T2= 8.121020
2566 =
⋅µs
c) imajui u vidu da su vremena T1 i T2 vea od 10µs prihvatljiva bi bila ona reenja koja bi zbog jednostavnije realizacije koristila prenose blokova dva puta manjeg obima, tj. 64B i 128B. U tom slu~aju imali bi T1'=9.6µs a T2'=6.4µs.
Zadatak 6.11
Jedna od klju~nih karakteristika DMA kontrolera je brzina sa kojom kontroler mo`e da prenosi podatke ka/iz memorije. U sutini stvarna DMA brzina zavisi ipak i od brzine memorije. Naime ~esto je potrebno usporiti rad DMA kontrolera tako da se njegova brzina rada uskladi sa brzinom rada memorije. U principu, rad DMA kontrolera mo`e se usporiti na jedan od sledea dva na~ina: (i) kada se smanji njegova taktna u~estanost; i (ii) kada se ubace stanja ~ekanja. Jedan tipi~an DMA kontroler je integrisano kolo 8237A nazvan DMAC. Na sli~an na~in kao i CPU iz serije 80x86 ciklusi ~itanja i upisa DMAC-a sastoje se iz ~etiri stanja, a trajanje svakog stanja ekvivalentno je
6. Programabilne jedinice, tehnike U/I prenosa
6-29
periodu od jednog taktnog intervala. DMAC 8237A uzorkuje svoj ulaz READY u toku stanja T3 i ubacuje stanje ~ekanja ako je ulaz READY na nisko. Sve dok se READY ne postavi na visoko vri se ubacivanje stanja ~ekanja.
a) Usvojimo da je memorija br`a od DMAC-a 8237A. Koja je maksimalna mogua brzina DMA prenosa podataka ako se DMAC taktuje frekvencijom 4MHz?
b) Kada se DMAC 8237A taktuje frekvencijom od 4MHz, tada kontroler obezbedjuje generisanje Read Strobe impulsa irine 250ns. Za slu~aj kada memorija zahteva da ovaj impuls minimalno traje 350ns, koliko stanja ~ekanja je potrebno ubaciti u toku svakog DMA ciklusa ~itanja?
Odgovor a) Vreme trajanja jednog DMA ciklusa(traje ~etiri taktna intervala) pri taktnoj pobudi DMAC-a od 4MHz iznosi
TDMA=4*250=1µs
To zna~i da je brzina prenosa 1MB/s
b) Kada je vreme pristupa memoriji 350ns a trajanje jednog taktnog intervala 250ns tada je potrebno ubaciti jedno stanje ~ekanja, tako da DMA ciklus sada traje;
T'DMA=5*250=1,25µs
Brzina prenosa podataka sada iznosi (1/1.25)MB/s ≈ 0.8MB/s
Zadatak 6.12
Usvojimo da su DMAC-u potrebna tri taktna intervala po DMA ciklusu. U toku DMA ciklusa DMAC prenosi informaciju od jednog bajta izme|u memorije i U/I ure|aja. Neka taktna frekvencija DMAC-a bude 5MHz. Koliko dugo traje prenos jednog bajta? Koja se maksimalna brzina prenosa mo`e ostvariti? Usvojimo da memorija nije dovoljno brza i da je potrebno ubacivati dva stanja ~ekanja po DMA ciklusu. Koja je stvarna brzina prenosa u tom slu~aju?
Odgovor Trajanje taktnog intervala DMAC-a iznosi 200ns. Prenos jednog bajta se obavlja za 3*200=600ns.
Maksimalna brzina prenosa koja se mo`e postii iznosi (1/0.6)MB/s=1.6MB/s
Ako je memorijski ciklus ~itanja ili upisa du`i od 600ns potrebno je ubacivati stanja ~ekanja, to se ostvaruje manipulisanjem stanja na liniji READY. Drugim re~ima potrebno je usporiti DMA cikluse. Na primer, ubacivanje dva stanja ~ekanja dovee da se DMA ciklus produ`i na (3+2)*200=1000ns=1µs. Kao rezultat brzina prenosa podataka redukovae se na 1MB/s.
Zadatak 6.13
Neka ukupno vreme trajanja memorijskog ciklusa ~itanja ili upis bude 750ns, a DMAC-u su potrebna tri taktna intervala po DMA ciklusu. Do koje vrednosti treba sniziti taktnu u~estanost DMA kontrolera tako da se ne uti~e na brzinu prenosa koja odgovara vremenu trajanja memorijskog ciklusa od 750ns.
Odgovor
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-30
Sve dok je DMA ciklus du`i od 750ns nema potrebe za ubacivanjem stanja ~ekanja. Period od 750ns odgovara taktnom periodu od 750/3=250ns, tj. taktnoj frekvenciji od 4MHz.
Zadatak 6.14
DMA kontroler opslu`uje ~etiri telekomunikaciona ulazna kanala (jedan po DMA kanalu). Brzina prenosa po telekomunikacionom kanalu je 64kb/s. U kom re`imu rada treba da radi DMAC: burst mode ili kra|a ciklusa (cycle stealing mode)? Koju emu prioriteta opslu`ivanja treba koristiti za opslu`ivanje DMA kanala?
Odgovor U konkretnom slu~aju U/I ure|aji su sami komunikacioni kanali. Brzina prenosa od 64kb/s odgovara brzini od 8kB/s. To zna~i da se po svakom kanalu prima jedan bajt na svakih 125µs. Burst mode je neprihvatljivo reenje jer podaci pristi`u neprekidno pa kada DMAC zauzme magistralu CPU nee imati anse da je koristi. Zbog toga reenje koje se zasniva na kra|i ciklusa je prihvatljivo. U toku vremenskog perioda od 125µs DMAC treba da izvri prenos od ~etiri bajta. ^ak i ako usvojimo da je za prenos jednog bajta potrebno vreme od 2µs, CPU-u ostaje puno vremena da obavi druge aktivnosti, tj. 125-2*4=117µs
Imajui u vidu da se po svim kanalima prenose podaci istom brzinom, potrebno je koristiti emu koja koristi da svim kanalima pru`a istu ansu u toku opslu`ivanja. Ovo zna~i da je najbolje koristiti selekciju koja se zasniva na emi sa rotirajuim prioritetom.
Test pitanje 6.35
Koje ulazno-izlazne instrukcije se koriste kod mikroprocesora 80x86 sa aspekta formata i obima podataka koji se prenosi.
Odgovor Instrukcije In i Ins
Format In dest, source funkcija
(1) In AL,#p8 8-bitni podatak se unosi u AL preko porta p8 ~ija je adresa 8-bitna
(2) In AX,#p8 16-bitni podatak se unosi u AX preko porta p8 ~ija je adresa 8-bitna
(3) In EAX,#p8 32-bitni podatak se unosi u EAX preko porta p8 ~ija je adresa 8-bitna
(4) In AL,DX 8-bitni podatak se unosi u AL preko porta ~iju adresu definie sadr`aj registra DX
(5) In AX,DX 16-bitni podatak se unosi u AX preko porta ~iju adresu definie sadr`aj registra DX
(6) In EAX,DX 32-bitni podatak se unosi u EAX preko porta ~iju adresu definie sadr`aj registra DX
(7) Insb ES:[DI]= [DX] ;DI = DI + 1 prenos bajta
(8) Insw ES:[DI] = [DX] ; DI = DI + 2 prenos re~i
(9) Insd ES:[DI] = [DX] ; DI = DI + 4 prenos duple re~i
(10) Ins POD1 ES:[DI] = [DX] ; DI = DI + 1 ako je POD1 bajt
6. Programabilne jedinice, tehnike U/I prenosa
6-31
(11) Ins POD2 ES:[DI] = [DX] ; DI = DI + 2 ako je POD2 re~
(12) Ins POD3 ES:[DI] = [DX] ; DI = DI + 4 ako je POD3 dupla re~
Napomena: Sve instrukcije tipa Ins (formati (7) do (12)) dostupne su samo kod mikroprocesora 80386/80486/Pentium/Pentium Pro,..
Po analogiji postoje sledee izlazne instrukcije:
format Out dest, source funkcije
(1) Out #p8,AL (AL) → port ~ija je 8-bitna adresa definisana portom p8
(2) Out #p8,AX (AX) →port ~ija je 8-bitna adresa definisana portom p8
(3) Out #p8,EAX (EAX) → port ~ija je 8-bitna adresa definisana portom p8
(4) Out DX,AL (AL) → port ~iju 16-bitnu adresu definie sadr`aj registra DX
(5) Out DX,AX (AX) → port ~iju 16-bitnu adresu definie sadr`aj registra DX
(6) Out DX,EAL (EAL) → port ~iju 16-bitnu adresu definie sadr`aj registra DX
(7) Outsb [DX] = DS:[SI]; SI = SI + 1 prenos bajta
(8) Outsw [DX] = DS:[SI]; SI = SI + 2 prenos re~i
(9) Outsd [DX] = DS:[SI]; SI = SI + 4 prenos duple re~i
(10) Outs POD1 [DX] = DS:[SI]; SI = SI + 1 ako je POD1 bajt
(11) Outs POD2 [DX] = DS:[SI]; SI = SI + 2 ako je POD2 re~
(12) Outs POD3 [DX] = DS:[SI]; SI = SI + 4 ako je POD3 dupla re~
Napomena: [DX] ukazuje da se u DX ~uva adresa ulazno-izlaznog uredjaja. Sve instrukcije Outs (od formata (7) do (12)) dostupne su samo kod mikroprocesora 80386/80486/Pentium/Pentium Pro,...
Test pitanje 6.36
Kod mikrora~unarskog sistema zasnovan na procesoru 8088 port adresa 22h koristi se kao ulazni port za prihvatanje podataka o izmerenoj temperaturi. Napisati sekvencu na asemblerskom jeziku koja kontinualno prihvata podatke sa port adrese 22h i kada temperatura dostigne 120oC upisati u registar BH ASCII kd znaka Y i pozvati potprogram ALARM.
Odgovor :
PONOVI: In AL,22h ; pro~itaj podatak o temperaturi sa porta # 22 h
Cmp AL,120 ; da li je tempratura 120oC? JNZ PONOVI ; ako nije, ~itaj ponovo
Mov BH,'Y' ; temperatura = 120oC, napuni Y u BH
Call ALARM ; pozovi potprogram ALARM
:
Test pitanje
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-32
Nacrtati logiku instrukcije IN AL,81h koristei NAND kola i invertore kao i 74LS244.
Test pitanje
Nacrtati logiku instrukcije OUT 16h,AL koristei NAND kola i invertore, kao i 74LS373.
Test pitanje
Projektovati logiku instrukcije MOV [0100],AL kod memorijsko-preslikanog U/I prostora, koristei AND kola, invertore kao i le~ 74LS373. Usvojiti da je DS=B800h.
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 kontrolie 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 sledeih 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
6. Programabilne jedinice, tehnike U/I prenosa
6-33
a) In AL,5Fh
74LS244
DO
D4
D3
D7A0A1
A2
A3
A4
A5
A6
A7
IOR
sistemska adresna iupravlja~ka magistrala
stanje prekida~a
ka linijama D0-D7sistemske magistrale
b) In AL,9Fh
A0
A1
A2
A3
A4
A5
A6
A7
IOR
74LS244
D0
D7
D0
D7
G1 G2
sistemska adresnai upravlja~ka
magistrala
stanjeprekida~a
ka linijama D0-D7sistemske magistrala
Test pitanje 6.38
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-34
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
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
A0A1
A2
A3
A4
A5
A6
A7
D0
D7
G
Q7
Q0
74LS373
D Q
Cp
p
Cp
p
D Q
IOW
sistemska, adresna iupravlja~kamagistrala
sistemskamagistrala
podataka
ka izlaznom ure|aju(npr. LED)
OE
Slika 6.30: Logika izlaznog sistema za instrukciju Out 99h,AL Test pitanje 6.39
6. Programabilne jedinice, tehnike U/I prenosa
6-35
Integrisano kolo PIA 8255A konfigurisano je kako je to prikazano na sl. 6.31.
Odrediti:
a) koje su adrese dodeljene portovima A, B i C
b) sadr`aj upravlja~kog bajta za konfiguraciju sa sl. 6.31
c) programirati PIA da prihvata podatke sa porta A i predaje podatke portovima B i C.
D0-D7
WR
RD
A0
A1
CS
A2
A3
A4
A5
A6
A7
D0-D7
IOW
IOR
A0
A1
A
B
CL
CH
PA0-PA7
PB0-PB7
PC0-PC3
PC4-PC7
8255A
Slika 6.31 : Konfiguracija PIA 8255 A
Odgovor a)
CS A1 A0 adresa port
0101 00 0 0 50 h port A
0101 00 0 1 51 h port B
0101 00 1 0 52 h port C
0101 00 0 1 53 h komandni port
b) sadr`aj upravlja~ke re~i
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 1 0 0 0 0 = 90h
c) jedna od verzija programa za rad sa 8255A bila bi
Mov AL,90h ; upravlja~ka re~ u AL
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-36
Out 53h,AL ; upis upravlja~ke re~i
In AL,50h ; ~itanje porta A
Out 51h,AL ; slanje podatka na port B
Out 52h,AL ; slanje podatka na port C Korienjem direktive EQU mogue je program napisati na sledei na~in
PORTA EQU 50h PORTB EQU 51h PORTC EQU 52h KOM_REG EQU 53h : Mov AL, 90h Out KOM_REG,AL In AL, PORTA Out PORTB, AL Out PORTC, AL
Test pitanje 6.40
Na Slici 6.32 prikazana je konfiguracija PIA 8255A.
Odrediti:
a) adrese portova
b) sadr`aj komandne re~i
c) programsku sekvencu kojom se ~ita sadr`aj sa porta B i predaje portu A a nakon toga ~ita sadr`aj sa porta CL a predaje portu CH.
Odgovor a)
CS A1 A0 adresa port
0111 11 0 0 7Ch port A
0111 11 0 1 7Dh port B
0111 11 1 0 7Eh port C
0111 11 1 1 7Fh komandni port
b) sadr`aj upravlja~ke re~i
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 1 1 = 83h
c) programska sekvenca bie oblika
Mov AL,83h ; PA = PCH = izlazni, PB = PCL ulazni
6. Programabilne jedinice, tehnike U/I prenosa
6-37
Out 7Fh,AL ; upis upravlja~ke re~i
In AL,7Dh ; ~itanje porta B Out 7Ch,AL ; upis u port A In AL,7Eh ; ~itanje porta C
And AL,0Fh ; maskiraj MS bitove
Rol AL,1 ; rotiraj ~etiri bit pozicije
Rol AL,1 Rol AL,1 Rol AL,1 Out 7Eh,AL ; upis u PCL
Sekvenca od ~etiri instrukcija Rol AL, 1 se mo`e zameniti sa
Mov CL,4 ; CL je broja~ = 4
Rol AL,CL ; rotiraj ~etiri puta
D0-D7
WR
RD
A0
A1
CS
A2
A3
A4
A5
A6
A7
D0-D7
IOW
IOR
A0
A1
A
B
CL
CH
PA0-PA7
PB0-PB7
PC0-PC3
PC4-PC7
8255A
Slika 6.32 : Konfigurisanje 8255
Test pitanje
Koje su prednosti kod korienja 8255A u odnosu na 74LS373 i 74LS244?
Test pitanje 6.41
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-38
Port C integrisanog kola 8255 A ima osobinu da se stanje njegovih izlaznih bitova PC0 - PC7 mo`e nezavisno definisati upisom upravlja~ke re~i ~iji je sadr`aj definisan na sl. 6.33a)
D0-D7
WR
RD
A0
A1
CS
A2A3A4A5A6
A7
D0-D7
IOW
IOR
A0
A1
8255A
PC2
PC4
PC6
0 x x x bit selekcija S/R
D7 D6 D5 D4 D3 D2 D1 D0
ne koriste se,obi~no su
postavljeni na 0
000-bit 0
001-bit 1
010-bit 2
011-bit 3
100-bit 4
101-bit 5
Set=1
Reset=0BSR
na~in rada
a) Sadr`aj upravlja~ke re~i uBSR (Bit Set-Reset) na~inu
rada
b) Konfigurisanje PIA
Slika 6.33: PIA 8255 u BSR na~inu rada
Napisati nezavisne programske sekvence kojima se: a) na izlazu PC4 generie povorka pravougaonih impulsa trajanja 50ms sa faktorom popune 50%. b) postavlja PC2 na visoko c) na izlazu PC6 generie kontinualna povorka pravougaonih impulsa, trajanja 75ms, ~iji je faktor popune 66%. Odgovor a)
PON: Mov AL,00001001b ; upravlja~ki bajt (PC4 = 1)
Out 93h,AL ; postavi PC4 = 1
Call KASNJENJE ; pozovi potprogram koji unosi kanjenje od 25 ms
Mov AL,00001000b ; upravlja~ki bajt (PC4 = 0)
Out 93h,AL ; postavi PC4 = 0 Call KASNJENJE ; pozovi potprogram koji unosi kanjenje od 25ms
JMP PON ; bezuslovni skok na PON
Napomena: Na na~in kako se kreira potprogram KASNJENJE ukazaemo kasnije .
b) Mov AL,00000101 ; upravlja~ki bajt (PC2 = 1)
Out 93h,AL ; postavi PC2 = 1
6. Programabilne jedinice, tehnike U/I prenosa
6-39
c)
PON: Mov AL,00001101 ; upravlja~ki bajt (PC6 = 1) Out 93h,AL ; postavi PC6 = 1 Call KASNJENJE ; pozovi dvaput potprogram , (25+25)ms=50ms visoko
Call KASNJENJE ; KASNJENJE za faktor popune 66%
Mov AL,00001100b ; upravlja~ka re~ (PC6 = 0) Out 93h,AL ; postavi PC6 = 0
Call KASNJENJE ; unesi kanjenje (33% nisko) JMP PON ; vrti se u petlji
Zadatak 6.15
Na sl. 6.34 prikazan je na~in povezivanja PIA 8255A i tampa~a. Napisati program za tampanje sledeih poruka: "Zdravo. Kako ste?", "Ja sam dobro. Kako ste Vi", "$". ASCII znak '$' ukazuje na kraj poruke.
Napomena: Integrisano kolo 8255A radi u Mode1, ima globalnu adresu 30xh, gde je x = 0,...3.
[TAMPA^8255A
PA0-PA7
PC7
PC6
OBF
D0-D7
STROBE
ACK
Slika 6.34 : Na~in povezivanja tampa~a preko PIA 8255A
Odgovor ; segment podataka (deo koji se odnosi na ovaj zadatak)
PODACI DB "Zdravo. Kako ste?",CR,LF DB "Ja sam dobro. Kako ste VI?",CR,LF,"$" PA EQU 300h ; adresa porta A, B, C i komandnog
PB EQU 301h ; rergistra PC EQU 302h KOM_R EQU 303h LF EQU 0Ah ; ASCII kod za Line Feed
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-40
CR EQU 0Dh ; ASCII kod za Carriage Return ; kôdni segment (deo koji se odnosi na ovaj zadatak)
Mov AL,10100000b ; PA izlazni port u Mode1 Mov DX,KOM_R ; DX=303 adresa upravlja~ke re~i
Out DX,AL ; upis upravlja~ke re~i
Mov AL,00001101b ; PC6=1 za INTEA Out DX,AL ; koristi BSR Mode Mov SI,OFFSET PODACI ; SI pokazuje na PODACI
PONOVI: Mov AH,[SI] ; dobavi podatak Cmp AH,'$' ; da li je kraj?
JZ KRAJ ; idi na kraj
Mov DX,PC ; DX = 302 adresa porta C VRATI: In AL,DX ; pribavi statusni bajt za port C
And AL,08 ; da li je INTR na visoko?
JZ VRATI ; ako nije testiraj ponovo
Mov DX,PA ; ako jeste DX=300 adresa porta A
Mov AL,AH ; adresiraj i
Out DX,AL ; predaj tampa~u znak
Inc SI ; inkrementiraj pokaziva~ podataka
JMP PONOVI ; granaj se na PONOVI KRAJ: ---- ; vrati se na DOS
Test pitanje 6.42
Sa aspekta prenosa podataka koja osnovna razlika postoji izmedju instrukcija In i Out sa jedne strane i Ins i Outs sa druge?
Odgovor Direktne ili indirektne In i Out instrukcije zahtevaju da se svi podaci prenose preko akumulatora. Kod ulazno-izlaznih instrukcija koje manipuliu sa nizovima podataka Ins i Outs, podaci se prenose direktno ka ili iz memorije.
Test pitanje 6.43
Koristei Outsb instrukciju napisati programsku sekvencu kojom se vri prenos bloka podataka veli~ine 4kB lociran u segmentu podataka S_POD po~ev od lokacije VRH ka port adresi disk jedinice 47h.
Odgovor Mov AX,S_POD ; dobavi adresu segmenta i smesti
6. Programabilne jedinice, tehnike U/I prenosa
6-41
Mov DS,AX ; je u DS Lea SI,VRH ; ofset adresa podataka u SI
Cld ; obrii smer, postavi auto-inkrement
Mov DX,47h ; DX pokazuje na U/I port Mov CX,1000h ; CX broja~ bajtova (4k) Rep Outsb U paru sa prefiksom Rep, ulazno-izlazne instrukcije su veoma mone. U konkretnom slu~aju instrukcijom Rep Outsb prenosi se bajt iz izvorne memorijske lokacije na koju pokazuje par DS : SI u odredinu U/I lokaciju na koju pokazuje registar DX, zatim se inkrementira SI kako bi pokazao na narednu memorijsku lokaciju, a dekrementira broja~ bajtova CX. Instrujkcija se ponavlja sve dok se ne dobije da je CX = 0.
Test pitanje 6.44
Mikroprocesori 386 i 486 imaju 32-bitnu magistralu, to zna~i da u jednom magistralnom ciklusu mogu da pristupaju do ~etiri bajta odjednom. Da li postoje adresne linije A0 i A1 i kako procesor identifikuje bajtove u okviru granice od ~etiri bajta.
Odgovor Umesto signala A0 i A1 mikroprocesori 386 i 486 generiu signale /BE3, /BE2, /BE1 i /BE0. Sledea tabela pokazuje koji skup linija magistrale podataka je aktivan za svaki od BEx (Byte Enable) signal.
/BE3 /BE2 /BE1 /BE0 Magistrala podataka
1 1 1 0 D0 - D7
1 1 0 1 D8 - D15
1 0 1 1 D16 - D23
0 1 1 1 D24 - D31
Napomena: /BEi predstavljaju komplement signala BEi, i=0,...,3
Test pitanje
Zato je U/I dekodiranje kod memorijsko-preslikane eme skuplje u odnosu na izdvojene?
Test pitanje 6.45
Kojim portovima pristupaju mikroprocesori 386 i 486 u toku izvrenja sledeih instrukcija: In AL,0 ; In AL, 1 ; In AL,2 ; In AL, 3 ; In AX,0 ; In AX,2 i In EAX,0.
Odgovor /BE3 /BE2 /BE1 /BE0 Instrukcija Pristup portovima
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-42
1 1 1 0 In AL, 0 0
1 1 0 1 In AL, 1 1
1 0 1 1 In AL, 2 2
0 1 1 1 In AL, 3 3
1 1 0 0 In AX, 0 0 i 1
0 0 1 1 In AX, 2 2 i 3
0 0 0 0 In EAX, 0 0, 1, 2 i 3
Napomena: /BEi predstavljaju komplement signala BE i, i=0,...,3 Test pitanje 6.46
Na sl. 6.35 prikazana je logika koja se kod mikroprocesora 386/486 koristi za prihvatanje podataka sa 16-bitnog ulaznog porta. Tro-stati~ki baferi IC3 i IC4 se koriste da postave ulazne podatke na linijama magistrale podataka D0 - D15. Objasniti princip rada eme sa sl. 6.35 Napomena: Signali dati u zagradama odnose se na mikroprocesor 8086. Test pitanje 6.47
Opii promene koje je potrebno sprovesti kod U/I port interfejsa sa sl. 6.35 da bi se kolo koristilo kod mikroprocesora Pentium.
Odgovor Potrebna je samo jedna izmena: Adresna linija A2 koja ne postoji kod Pentiuma treba da se odstrani sa ulaza u kolo IC1. Naglasimo da ova promena uizrokuje da IC1 dekodira osam uzastopnih portova od 0-7 (umesto ~etiri kao u prethodnom slu~aju). Svaki od ovih portova se mo`e selektovati preko osam bajt selekt signala /BE0 - /BE7.
Zadatak ~itaoca je da nacrta kona~no reenje interfejsa.
Test pitanje 6.48
Izvrenjem bilo koje od sledeih instrukcija: In AL,0h; In AL,1h; In AX,0h; In AL,DX; In AX,DX; Dati odgovor na pitanje: preko kojih se portova sa sl. 6.35 prihvataju podaci izvrenjem odgovarajuih instrukcija.
Odgovor In AL,0h ; S0 - S7 → AL preko D0 - D7 In AL,1h ; S8 - S15 → AL preko D8 - D15 In AX,0h ; S0 - S15 → AX preko D0 - D15 In AL,DX ; if DX = 0000h then S0 - S7 → AL ; if DX = 0001h then S8 - S15 → AL In AL,DX ; if DX = 0000h then S0 - S15 → AX
6. Programabilne jedinice, tehnike U/I prenosa
6-43
+5V
1KΩ
X= IC3
D15
D14
D13
D12
D11
D10
D9
D8
S15
S14
S13
S12
S11
S10
S9
S8
BE1IN1(BHE)
IC2a
IC2bSEL0-3IN0-3
IC2d
IN0
IC4BE0
IOR
IC2(A0)
W/R(RD)
M/I0
A15
A14
A13A12
A11
A10A9A8A7A6A5
A4
A3
A2
(A1)
S7
S6
S5
S4
S3
S2
S1
S0 D0
D1
D2
D3
D4
D5
D6
D7
Napomena: Svaki ulaz kolaIC3 markiran sa x povezanje preko otpornika od 1kΩ
na +5V
Slika 6.35 : Povezivanje 16-bitnog porta kod 80x86
Test pitanje 6.49
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-44
Napisati programsku sekvencu (potprogram) za ~itanje ulaznog porta sa sl. 6.35 i proveru da lli su prekida~i S13, S11, S3 ili S2 postavljeni u stanje otvoreno. Ako je uslov ispunjen, tj. bilo koji prekida~ postavljen u stanje otvoreno, postavi marker uslova CF na 1, a ako nije postavi CF na 0.
Odgovor Kada je prekida~ Si postavljen u stanje otvoreno naponski nivo na odgovarajuem ulazu zbog prika~enog otpornika navie od 1kΩ odgovarae nivou logi~ke 1. Proveru izvriemo instrukcijom Test AX,280Ch ~ije izvrenje generisae rezultat razli~it od nule ako je najmanje jedan od testiranih bitova postavljen na stanje logi~ke 1. Potprogram kreiraemo kao PUBLIC da bi kasnije mogli ovu rutinu da linkujemo sa drugim pozivnim programom.
; ovaj potprogram testira da li su bitovi 13, 11, 3 i 2 16-bitnog ulaznog porta postavljeni na visoko
; ulazi: statusna informacija sa U_PORT
; izlazi: CF = 1 if condition true, else CF = 0
; izvrenjem ovog potprograma menja se stanje AX i CF
PUBLIC PROG_1 U_PORT EQU 0h ; ulazni port podataka
S_PROG SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:S_PROG PROG_1 PROC NEAR Clc ; postavi CF = 0
In AX,U_PORT ; pribavi podatke sa porta
Test AX,0010100000001100b ; testiraj ulazne podatke
JZ NEMA ; nema bitova na logi~koj 1
Stc ; najmanje jedan bit na visoko
NEMA: Ret PROG_1 Endp S_PROG Ends End
Test pitanje 6.50
Napisati program koji testira da li je bilo koji od prekida~a S13, S11, S3 illi S2 ulaznog porta sa sl. 6.35 postavljen u stanje otvoreno. Ako je uslov ispunjen upii 0FFh u Port 0 sa sl. 6.36, a ako uslov nije ispunjen upii 00 u ovaj port. Program testiranja treba da se izvrava beskona~no dugo.
Napomena: Za memorisanje podatka koristi se le~.
6. Programabilne jedinice, tehnike U/I prenosa
6-45
D0
D1D2D3D4
D5
D6D7
IC 3
1D
2D
3D
4D5D
6D
7D8D
1Q2Q3Q
4Q5Q
6Q
7Q
8Q
DATA0DATA1
DATA2DATA3
DATA4
DATA5
DATA6
DATA7
IC2c
OUT0BE0
OUT0-3
IC2b
SEL0-3
M/IO
W/R
IC2a
IOW
IC1
Clock OE
(Sa sl. 6)
Izlaz Port-a 0
Slika 6.36 : Na~in sprezanja 8-bitnog izlaznog porta kod 80x86
Odgovor ; ovaj program poziva rutinu PROG_1
; ako su prekida~i 13, 11, 3 ili 2 otvoreni, na izlazni port I_PORT
; se upisuje FFh, ako uslov nije ispunjen upisuje se 00
EXTRN PROG_1 : NEAR I_PORT EQU 0 ; izlazni port
S_PROG SEGMENT 'CODE' ASSUME CS:S_PROG POC: Mov BL,0FFh ; za otvorene prekida~e kd je FF
Call PROG_1 ; testiraj stanje prekida~a JC POSTAVI ; uslov ispunjen Mov BL,0 ; uslov nije ispunjen kd je 00 POSTAVI: Mov AL,BL ; kd u AL
Out I_PORT,AL ; upis u port JMP POC ; ponovo testiraj S_PROG Ends
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-46
End POC Test pitanje 6.51
Kada se izvrava instrukcija In AL,01h, preko kojih od linija mikroprocesor 80486 prihvata podatke sa magistrale podataka?
a) D0 - D7
b) D8 - D15
c) D16 - D24
d) D24 - D32
Odgovor Preko linija D0 - D7
Test pitanje 6.52
Uka`i na na~ine kako se kod PC maina pristupa U/I portovima od strane asemblera i C-a.
Odgovor Kod PC maina zasnovanih na mikroprocesoru 80x86 svi va`niji C kompajleri koriste usluge funkcija radi pristupa U/I portovima. Pristup 8-bitnim portovima se vri shodno sledeoj tabeli
asembler za 80x86 Microsoft-ov C Borlandov C
Out port #, AL outp (port #, byte) outportb (port #, byte)
Out DX, AL outp (port #, byte) outportb (port #, byte)
In AL, port # inp (port #) import b (port #)
In AL, DX inp (port #) inport b (port #)
Napomena: Kod oba kompilatora Borland i Microsoft, port # je neozna~ena celobrojna vrednost za port adrese od 0000h do 0FFFFh, a byte je neozna~eni znak (karakter) ~ija se vrednost nalazi u granicama od 00h do 0FFh. Za inp podatak koji se prihvata je neozna~eni karakter ~ija se vrednost nalazi u opsegu od 00h do 0FFh.
Zadatak 6.16
Kreirati program na C-u koji se koristi za:
(a) konfigurisanje svih portova ~ipa 8255A kao izlazne
(b) upisivanje prvo 55h a zatim 0AAh u portove A i B.
Napomena: Upis vrednosti 0AAh izvriti nakon to korisnik pritisne bilo koju dirku na tastaturi. Usvojiti da je bazna U/I adresa kola 8255A 300h.
Odgovor // konfigurisati PA & PB kola 8255A kao izlazne; upisuje se u oba porta
// prvo 55h a zatim 0AAh; adresa porta A je 300h
6. Programabilne jedinice, tehnike U/I prenosa
6-47
# include < conio.h> // outp( ) i inp ( ) su deo ove biblioteke
# include <stdio.h>
main ( )
outp (0x 303, 0x 80); // upravlja~ka re~ za 8255
outp (0x 300, 0x 55); // upis 55h u port A
outp (0x 301, 0x 55); // upis 55h u port B
printf ("\n pritisni bilo koju dirku za predaju AAh na portovima A i B\n");
getch ( ); // testiraj da li je dirka pritisnuta i prihvati je
outp (0x 300, 0x aa); // predaj podatke portovima A i B
outp (0x 301, 0x aa);
return (0);
Napomena: Kod br`ih PC maina zasnovanih na procesorima Pentium i Pentium Pro potrebno je koristiti funkciju delay izmedju dve outp ( ) funkcije, kao na primer
outp (0x 303, 0x 80);
delay (1);
output (0x 300, 0x 55); Ovim se obezbedjuje dad ~ip 8255A uspostavi svoje stanje pre nego to mu se ponovo pristupa. Ista pravila va`e i za funkcije inp ( ) iza koje sledi outp ( ) i obratno.
Zadatak 6.17
Napisati program na programskom jeziku C koji e za ~ip 8255A:
a) Konfigurisati PA kao ulazni a PB i PC kao izlazne portove
b) prihvatiti podatak sa porta A i upisati ga u portove B i C sa kanjenjem.
Odgovor // konfigurii 8255A sa PA = ulazni a PB & PC = izlazni
// pribavi podatak sa PA i predaj ga portovima PB i PC
// adresa porta A je 300h
# include < conio.h>
# include <stdio.h>
main
insigned char ul_p;
outp (0x 303, 0x 90); // upis upravlja~ke re~i
ul_p = inp (0x 300) ; // ~itaj port A
outp (0x 301, ul_p); // predaj podatak portu B
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-48
delay (1) // kanjenje
outp (0x 302, ul_p); // predaj podatak portu C
return (0);
Test pitanje 6.53
[ta programer treba da zna kada manipulie prekidima pri programiranju u C-u? Odgovor I pored toga to je C vii programski jezik, kada manipulie sa prekidima programer veoma dobro treba da poznaje sve detalje asemblera. Sa druge strane programeri koji koriste C/C ++ a ne znaju dobro sve tajne asemblerskog jezika procesora 80x86 ali `ele da piu programe koristei DOS-ove funkcijske pozive Int 21h i BIOS-ove prekide mogu koristiti pomo koju pru`a kompilator. Pomo se sastoji u tome da se vri poziv funkcija int86 i intdos. Funkcija int86 se koristi za poziv bilo kog PC prekida, a funkcija intdos za poziv Int 21h. Test pitanje 6.54
Objasniti ulogu funkcije int86 i strukture union Odgovor Da bi koristili int86 potrebno je prvo postaviti u interne registre procesora odredjene vrednosti a zatim pozvati int86. Nakon povratka iz int86 ponovo se pristupa registrima. Sa aspekta korienja int86 je sli~an asemblerskoj instrukciji "Int # n". Da bi se pristupilo registrima procesora, 80x86 treba da koristi union strukturu REGS koja je definisana od strane C kompajlera u sledeem formatu
union REGS regin, regout;
Na sl. 6.37 prikazani su detalji koji se odnose na na~in korienja union REGS struktura.
16-bitni 8-bitni C jezik asemblerski jezik C jezik asemblerski jezik regin.x.ax AX regin.h.al AL regin.h.ah AH regin.x.bx BX regin.h.bl BL regin.h.bh BH regin.x.cx CX regin.h.cl CL regin.h.ch CH regin.x.dx DX regin.h.dl DL regin.h.dh DH regin.x.si SI regin.x.di DI regin.x.cflag CY
Slika 6.37 : REGS union elementi i asemblerski ekvivalenti
Test pitanje 6.55
Na uporedni na~in prikazati kako se vri punjenje registra i poziv prekida kod C-a i asemblerskog jezika.
Odgovor
6. Programabilne jedinice, tehnike U/I prenosa
6-49
Sledei programski kd na jedan uporedan na~in prikazuje punjenje registara i poziv prekida kod C-a i asemblerskog jezika
/* C jezik Asemblerski jezik
union REGS regin, regout;
regin.h.ah = 0x 43; /* Mov AH,43h ; H = 43h */ regin.x.dx = 0x 1384 ; /* Mov DX,1384h ; DX = 1384h */ regin.x.si = 0x 4130; /* Mov SI,4130h ; SI = 4130h */ int86 (interrupt #, ®in, ®out); /* Int # */
U konkretnom slu~aju interrupt # je vrednost od 00 - 255, a ®in i ®out su adrese promenljivih REGS. Nakon povratka iz funkcije int86 pristup sadr`aju registara se vri na sledei na~in.
rezultat11 = regout.h.ah; /* Mov rezultat1,AH; rezultat1→ AH */ rezultat12 = regout.x.bx; /* Mov rezultat2,BX; rezultat2→ BX */
Test pitanje 6.56
Ukazati na na~in korienja C-ove funkcije int86
Odgovor Na~in korienja int86 funkcije sagledaemo kroz nekoliko ilustrativnih primera.
Primer 1
Odnosi se na korienje funkcije int86 radi brisanja sadr`aja na ekranu monitora. Ekvivalentna akcija mo`e se ostvariti pozivom funkcije Int 10h.
/* kako se koriste 16-bitni registri
# include <dos.h> /* int86 je deo ove biblioteke */
main ( )
union REGS regin, regout;
regin.x.ax = 0x600 ; /* Mov AX, 0600 h */
regin.h.bh = 0x07 ; /* Mov BH, 07h */
regin.x.cx = 0 ; /* Mov CX, 0 */
regin.x.dx = 0x184Fh ; /* Mov DX, 184Fh */
int 86(0x10, ®in, ®out) /* Int 10h */
Mogue je koristiti 8-bitne i 16-bitne registre na sledei na~in
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-50
/* kako se koriste 8-bitni registri */
# include <dos.h> /* int86 je deo ove biblioteke */
main ( )
union REGS regin, regout;
regin.h.ah = 6 ; /* Mov AH, 6 */
regin.h.al = 0 ; /* Mov AL, 0 */
regin.h.bh = 07 ; /* Mov BH, 7 */
regin.x.cx = 0 ; /* Mov CX, 0 */
regin.h.dl = 0x4F ; /* Mov DL, 4Fh */
regin.h.dh = 0x18; /* Mov DH, 18h */
int 86 (0x10, ®in, ®out) /* Int 10h */
Primer 2
Ovaj primer pokazuje kako se koristi int86 sa Int 12h da bi se odredio obim konvencionalne memorije koja je instalirana kod PC maine
Nakon izvrenja obim konvencionalne memorije se ~uva u AX.
# include < stdio.h>
# include < dos.h>
main ( )
unsigned int konv_mem;
union REGS regin, regout;
int 86 (0x12, ®in, ®out);
konv_mem = regout.x.ax;
printf ("Ova PC maina ima % d kB konvencionalne memorije \n", konv_mem);
Primer 3
Uka`imo sada kako se koristi funkcija int86 da bi se obavile sledee funkcije:
(a) zapamti tekuu poziciju kursora,
(b) postavi kursor na poziciji vrsta = 12 i kolona = 8,
(c) prika`e poruku "Moj delijo" koristei funkciju printf
# include <stdio.h>
6. Programabilne jedinice, tehnike U/I prenosa
6-51
# indluce <dos.h>
main ( )
unsigned char pret_vrsta;
usigned char pret_kol;
union REGS regin, regout;
regin.h.ah = 3; /* Mov AH, 3 ; opcija 3 od Int 10h */
regin.h.bh = 0; /* Mov BH, 0 ; stranica 0 */
int 86 (0x10, ®in, & regout); /* Int 10h */
pret_vrsta = regout.h.dh /* Mov pret_vrsta, DH ; sa~uvaj vrstu */
pret_kol = regout.h.dl /* Mov pret_kol, DL ; sa~uvaj kolonu */
printf ("Kursor je bio na vrsti =%d, koloni = % \n", pret_vrsta, pret_kol);
regin.h.ah = 2; /* Mov AH, 2 ; opcija 2 od Int 10 h */
regin.h.bh = 0 ; /* Mov BH, 0 ; stranica 0 */
regin h.dl = 8; /* Mov DL, 8 ; lokacija kolone */
regin.h.dh = 12; /* Mov DH, 12 ; lokacija vrste */
int 86 (0x10, ®in, ®out); /* Int 10h */
printf ("Moj delijo \n");
Test pitanje 6.57
Kako se iz C-a pozivaju DOS-ove funkcije?
Odgovor Uobi~ajeno za poziv DOS-ovih funkcija koristi se funkcija intdos. (Alternativno za poziv Int 21h mo`e da se koristi i int86). Format intdos je sledei
intdos(®in, ®out); /* koristi se samo za Int 21h */
Sledei primer pokazuje kako se koristi intdos
Pomou Int 21h opcije 2Ah prika`i na ekranu video displeja sledeu informaciju dd = mm - yy (dan, mesec, godina)
(a) koristei funkciju intdos
(b) koristei funkciju int86
Nakon povratka iz Int 21h, u DL se ~uva dan, u DH mesec, a u CX godina
(a) program koji koristi intdos
# include <stdio.h>
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-52
# indluce <dos.h>
main ( )
unsigned int godina;
usigned char mesec;
usigned char dan;
union REGS regin, regout;
regin.h.ah = 0x2A;
intdos (®in, ®out);
dan = regout.h.dl;
mesec = regout.h.dh;
godina = regout.x.cx;
printf ("Dananji datum je % d - % d - % d \n", dan, mesec, godina);
b) u ovom programu mogue je zameniti intdos iskaz sa int86 (0x21, ®in, ®out)
Test pitanje 6.58
Kako se pomou C-ovih funkcija int86 i intdos pristupa segmnetnim registrima mikroprocesora 80x86?
Odgovor Pomou obe funkcije int86 i intdos mogue je pristupati registrima AX, BX, CX, DX, SI i DI, ali ne i segmentnim registrima CS, DS, SS i ES. U odredjenim situacijama postoji potreba da se pristupi i segmentnim registrima. U takvim situacijama treba koristiti int86x umesto int86 i intdosx umesto intdos. Kod korienja int86x i intdosx potrebno je preneti argumente SREG. Formati funkcija int86x i intdosx su sledei
int86x (interrupt #, ®in, ®out, ®seg);
ingdosx (®in, ®out, ®seg);
struct SREGS regseg;
Funkcije int86x i intdosx omoguavaju pristup samo registrima ES i DS a ne i registrima CS i SS. Sadr`aji registra SS i CS se ne mogu menjati jer to mo`e dovesti do naruavanja integriteta sistema.
Primer 1
Ovaj primer pokazuje kako se koristi Int 21h opcija 35h, da bi se dobavio par CS:IP iz prekidne vektor tabele za Int 10h.
6. Programabilne jedinice, tehnike U/I prenosa
6-53
Kod Int 21h opcija 35 u registrima AH i AL treba smestiti sledee vrednosti AH = 35 i AL = broj prekida. Nakon povratka u ES se ~uva vrednost kdnog segmenta (CS), a u BX pokaziva~ instrukcije (IP), tj. obe vrednosti se uzimaju iz vektor tabele.
# include <stdio.h>
# indluce <dos.h>
main ( )
unsigned int ip_vred;
unsigned int cs_vred;
union REGS regin, regout;
struct SREGS regseg;
regin.h.ah = 0x35; */ Mov AH, 35 h */
regin.h.al = Ox 10; */ Mov AL, 10 h */
int 86x (0x21, & regin, & regout, & regseg); / * alternativno intdos x (& regin, l& regout, & regseg) */
ipvred = regout.x.bx; /* Mov ipvred, BX */
csvred = regseg.es; /* Mov csvred, ES */
printf("CS : IP od Int 10 h je % X : % X \n", csvred, ipvred);
Test pitanje 6.59
Kako se pristupa CF markeru kod int86 i intdos funkcije?
Odgovor Nakon povratka iz velikog broja fujnkcija prekida neophodno je ispitati vrednost markera CF. Funkcije int86, intdos, int86x i intdosx omoguavaju da se ispita samo stanje markera CF a ne i ostalih. Da bi pristupili CF bitu potrebno je napisati
if (regout.x.cflag)
Struktura 8-bitnih, 16-bitnih i segmentnih registara je oblika
union REGS
struct WORDREGS
unsigned int ax;
unsigned int bx;
unsigned int cx;
unsigned int dx;
unsigned int si;
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-54
unsigned int di;
unsigned int cflag;
x;
struct BYTEREGS
unsigned char al, ah;
unsigned char bl, bh;
unsigned char cl, ch;
unsigned char fl, fh;
h;
*inregs;
union REGS *outregs;
struct SREGS
unsigned int es;
unsigned int cs;
unsigned int ss;
unsigned int ds;
*sregs;
Test pitanje 6.60
Kako se vri kombinovanje C-a i asemblera i provera markera CF?
Odgovor Najvei broj primena prekida kod PC maine koristi marker CF da uka`e na specijalne uslove kao to su greke. Na primer, funkcije AH = 3Ch i AH = 3Dh kod Int 21h manipuliu sa fajlovima i koriste marker CF da bi ukazali na odredjeni uslov. Ako `elimo sa druge strane da proverimo stanje i ostalih markera kao to je recimo ZF kako bi ustanovili da li su ispunjeni odredjeni uslovi tada je to jedino mogue uraditi kombinovanjem iskaza na C-u i asembleru. Ovakav na~in rada je poznat kao in-line asembliranje i prikazan je na sledeem programskom segmentu. To zna~i da se bilo koja instrukcija procesora x86 mo`e koristiti od strane programa na C-u ako ispred nje stoji prefiks "asm".
Primer 6 // korienje in-line asembliranja radi provere ZF markera
# include <stdio.h>
# indluce <conio.h>
main ( )
unsigned char vrsta = 10;
unsigned char kolona = 10; // obim podatka tipa bajt
6. Programabilne jedinice, tehnike U/I prenosa
6-55
unsigned int brojac = 5;
cirsc();
asm Mov CX, brojac // CX = brojac
Ponovi : asm Mov AH, 2 // AH = 02 od Int 10h
asm Mov BH, 0 // stranica 0
asm Mov DH, vrsta // napuni vrsta i kolona
asm Mov DL, kolona
asm Int 10h // postavi kursor
asm Push CX
printf ("Ovo je test");
vrsta ++;
kolona ++;
asm Pop CX // obnovi broja~
asm Dec CX //dekrementiraj broja~
asm JNZ Ponovi //idi na Ponovi ako ZF nije high getch ( )
Funkcija kbhit je C ekvivalenat za Int 16h. Sledea programska sekvenca prikazuje na~in njenog korienja.
/* generisanje tona sve dok se ne pritisne dirka */
# include <stdio.h>
# include <conio.h>
main ( )
clrscr ( );
printf ("Da bi zaustavio ton pritisni bilo koje dugme \n";
while (!kbhit( )) // produ`i sve dok se ne pritisne dirka //
printf ("%C", 0x07); // predaj ASCII znak za generisanja tona monitoru//
Test pitanje 6.61
Na~in povezivanja 8-bitnog DA konvertora sa portom A integrisanog kola 8255A prikazan je na sl. 6.38. Globalna adresa kola 8255 je 300h.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-56
Iref=2mA
Iout
R
+Vout=0-10V
A8-A1
DA konvertor
8255
PA0-PA7CPU-u
Slika 6.38 : Povezivanje DA konvertora i ~ipa 8255
Digitalni ulazi DA konvertora se konvertuju u struju Iout koja je definisana sledeom relacijom
D7 D6 D5 D1 D0
Iout = Iref
+++++
256D0
128D1...
8D5
4D6
2D7
gde je D0 LSB a D7 MSB. Iref se obi~no postavi na 2mA.
a) Ako usvojimo da je R = 5k, a Iref = 2mA odrediti Vout za sledee binarne ulaze:
(1) 10011001
(2) 11001000
Odgovor a) Iout = 2mA (153/256) = 1.195mA i
Vout = 1.195mA * 5k = 5.975V
b) Iout = 2mA (200/256) = 1.562mA
Vout = 1.562mA * 5k = 7.8125V
Test pitanje
Pokazati kako izgleda dekodersko kolo za 8255A ako `elimo da adresa Porta A bude 68h. Za implementaciju dekodera koristiti NAND kola i invertore.
Test pitanje
Ako je upravlja~ka re~ 91h, nazna~iti koji port kod 8255A je ulazni a koji izlazni
Test pitanje
Koja se od sledeih port adresa ne mo`e dodeliti Portu A kod 8255A, i zato?
(a) 32h ; (b) 45h ; (c) 89h ; i (d) BAh.
Zadatak 6.18
6. Programabilne jedinice, tehnike U/I prenosa
6-57
Kolo prikazano na sl. 6.38 koristi se za generisanje sinusnog talasnog oblika ~iji se izlaz skokovito menja u koracima od po 30o. Napon na izlazu DA konvertora definisan je sledeom relacijom
Vout = 5 V + (5 * sin θ)
a) Odrediti koje decimalne vrednosti treba dovesti na ulaz DA konvertora za svaku generisanu izlaznu vrednot u koracima od 30o,
b) proveriti vrednosti za uglove od 30o i 60o
c) napisati programsku sekvencu za generisanje sinusnog napona.
Odgovor a)
Vout ugao
stepeni sin θ 5 V + (5 V * sin θ)
decimalna vrednost koja se predaje DAC-u
0 0 5 128
30 0,5 7,5 192
60 0,866 9,33 238
90 1,00 10 255
120 0,866 9,33 238
150 0,5 7,5 192
180 0 5 128
210 -0,5 2,5 64
240 -0,866 0,669 17
270 -1,0 0 0
300 -0,866 0,669 17
330 -0,5 2,5 64
360 0 5 128
Slika 6.39 : Decimalne vrednosti koje treba dovesti na ulaz DAC-a
b)
(1) Vout = 5V + (5 * sin θ)
= 5V + 5 * sin 30
= 5V + 5 * 0,5V = 7,5V
Maksimalnom izlaznom naponu od 10V odgovaraju 256 koraka, a to zna~i da naponu od 1V odgovaraju 25,6 koraka.
Numeri~ka vrednost na ulazu DA konvertora = 7,5 * 25,6 = 192 decimalno
(2) Vout = 5V + (5 * sin 60)
= 5V + 5 * 0,866V
= 9,33V
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-58
Numeri~ka vrednost na ulazu DA konvertora = 9,33 * 25,6 = 238 decimalno
c) Programska sekvenca bila bi oblika
; segment podataka
TABELA DB 128,192,238,255,238,192,128,64,17,0,17,64,128 ; kodni segment
Mov AL,80h ; svi portovi izlazni
Mov DX,303h Mov DX,AL Ponovi: Mov CX,12 ; CX = broja~ Mov BX,OFFSET TABELA Mov DX,300h ; adresa porta A Novi: Mov AL,[BX] Out DX,AL Inc BX Call Kasnjenje ; stabilizacija izlaza DA konvertora
Loop Novi JMP Ponovi
Zadatak 6.19
Kolo prikazano na sl. 6.38 koristi se za generisanje sinusnog talasnog oblika. Koristei vrednosti sa slike 6.39 iz prethodnog zadatka izra~unati vrednoti amplitude sinusnog signala u opsegu od 0o - 360o u inkrementima od po 1o.
Program napisati na jeziku C.
Odgovor # include <conio.h>
# include <stdio.h>
# include <math.h>
main ( )
out (0x303, 0x80); // konfigurii 8255 izlazni//
unsigned char V1 // V1 podatak obima bajt //
float Vout, amplituda;
int a;
printf ("\n Pritisni bilo koju dirku da bi napustio program \n").
do
6. Programabilne jedinice, tehnike U/I prenosa
6-59
for (a = 0; a< 360; a++) // za puni opseg od 360 stepeni//
Vout = 5.0 + (5.0 < sin((3.14 * a)/180)); // amplituda napona //
amplituda = Vout * 25.6 // vrednost koja se predaje DAC-u
V1 = (char) amplituda; // u~ini je obima bajt //
delay (1);
outp(0x301, V1); //izlaz na port A //
while (!kbhit ( )); // pritisni bilo koju dirku za stop //
return (0);
Test pitanje 6.62
Pin CS integrisanog kola 8253/54 (Programibilni tajmer/interval broja~) se aktivira binarnom adresom A7-A2 = 100101.
a) odredi adrese portova koje su dodeljene ovom kolu
b) odredi kako je konfigurisano kolo 8253/54 ako je upravlja~ki registar programiran na sledei na~in
Mov AL,00110110 Out 97h,AL
Odgovor a) Adresiranje portova 8253/54 se vri shodno sledej tabeli
/CS A1 A0 Port
0 0 0 Broja~ 0
0 0 1 Broja~ 1
0 1 0 Broja~ 2
0 1 1 upravlja~ki registar
1 X X ~ip nije selektovan
Na osnovu tabele imaemo sledeu situaciju
CS A1 A0 Port Adresa porta (hex)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-60
1001 01 0 0 Broja~ 0 94
1001 01 0 1 Broja~ 1 95
1001 01 1 0 Broja~ 2 96
1001 01 1 1 upravlja~ki registar 97
b) Format upravlja~ke re~i kola 8253/54 je oblika:
SC1 SC0 RL1 RL0 M2 M1 M0 BCD0 - binarni broja~ (16-bitova)1 - BCD (4 dekade)
000 -mode 0001 - mode 1X10 - mode 2
X11 - mode 3100 - mode 4101 - mode 5
00 - operacija le~ovanja01 - ~itaj/puni LS deo broja~a samo10 - ~itaj/puni MS deo broja~a samo11 - ~itaj/puni LS deo broja~a prvo, zatim MS deo broja~a
00 - selekcija Broja~a 001 - selekcija Broja~a 110 - selekcija Broja~a 211 - ilegalna
D7 D6 D5 D4 D3 D2 D1 D0
Uporedjivanjem sadr`aja upravlja~ke re~i 0011 0110 sa specificiranim formatom zaklju~ujemo:
• pristupa se Broja~u 0 jer su SC bitovi 00
• bitovi RL koji su postavljeni na 11 ukazuju da se prvo vri pristup LS delu a zatim MS delu broja~a.
• bitovi M ukazuju da je selektovan mode 3 (generator pravougaonih impulsa)
• izabrano je binarno brojanje
Test pitanje 6.63
Koristei port adrese iz prethodnog test pitanja programirati kolo programiraj ~ip 8253/54 tako da:
(a) Broja~ 0 radi kao binarni u mode 3 (generator pravougaonih impulsa) a deli CLK0 sa 4282 (BCD)
(b) Broja~ 2 radi kao binarni broja~ u mode 3, a deli CLK2 sa C26Ah
6. Programabilne jedinice, tehnike U/I prenosa
6-61
(c) odredi frekvencije OUT0 i OUT2 za slul~aj (a) i (b) ako je CLK0=1.2MHz, a CLK2=1.8MHz.
(d) programirati Broja~ 1 da deli CLK1 sa 10000 u mode3 koristei BCD brojanje.
Odgovor (a) da bi programirali Broja~ 0 u mode3 upravlja~ka re~ treba da je 00110111, a sekvenca
Mov AL,37h ; Broja~ 0, mode 3, BCD
Out 97h,AL ; upis upravlja~ke re~i Mov AX,4282 ; punjenje modula brojanja Out 94h,AL ; predaja LS bajta Mov AL,AH Out 94h,AL ; punjenje MS bajta
b) za Broja~ 2 imaemo
Mov AL,B6h ; Broja~ 2, mode3, binarni
Out 97h,AL ; upravlja~ka re~ - upis Mov AX,C26Ah ; moduo brojanja
Out 96h,AL ; upis LS bajta Mov AL,AH Out 96h,AL ; upis MS bajta
(c) frekvencija na ulazu CLK0 je 1.2MHz kada se ova frekvencija podeli sa 4282, na izlazu OUT0 se dobija signal frekvencije 280Hz.
CLK2 je 1.8MHz, kada se ova frekvencija podeli sa 49770 (C26Ah = 49770) dobija se da je frekvencija na izlazu OUT2 jednaka 36Hz.
(d) odgovarajua sekvenca kojom se programira Broja~ 1 je oblika
Mov AL,77h ; Broja~ 1, mode3, BCD
Out 97h,AL ; upis upravlja~ke re~i
Mov AL,99 ; moduo brojanja 9999 Out 95h,AL ; umesto 10000 Out 95h,AL
Test pitanje 6.64
IBM PC maina koristi integrisano kolo 74LS138 kao dekoder adresa za pin CS kola 8253 (programibilni broja~/interval tajmer) kako je prikazano na sl. 8. Odrediti adrese portova programibilnog broja~a/interval tajmera.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-62
74LS138 8253/54
A
B
C Y2
G1
G2 B
G2 A
CS
A0
A1
A0
A1
A5
A6
A7
A8
A9
AEN
Slika 6.40 : Generisanje CS signala za 8253/54
Odgovor binarna adresa
AEN A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
heksadecimalna
adresa
funkcija
1 0 0 0 1 0 X X X 0 0 40 Broja~ 0
1 0 0 0 1 0 X X X 0 1 41 Broja~ 1
1 0 0 0 1 0 X X X 1 0 42 Broja~ 2
1 0 0 0 1 0 X X X 1 1 43 upravlja~ki registar
Test pitanje 6.65
Neka je kod kola 8253/54 GATE1=1, CLK1=1MHz a moduo brojanja N=1000. Kakav je talasni oblik impulsa na izlazu OUT1 ako je Broja~ 1 programiran u mode 0.
Odgovor
1000*1µs=1ms
WR
GATE=1OUT1
Test pitanje 6.66
U prethodnom test pitanju usvojito da GATE 1 postane 0 za period od 400µs. Odrediti vreme trajanja impulsa na izlazu OUT1.
6. Programabilne jedinice, tehnike U/I prenosa
6-63
Odgovor
OUT1
1400µs
WR
400µsGATE1
Test pitanje 6.67
a) Ako je kod kola 8253/54 CLK1=1MHz, a N=500 kako izgleda impuls na izlazu OUT1 ako je Broja~ 1 programiran u mode1.
b) Usvojiti da se nakon 150 taktnih intervala GATE1 retrigeruje. Kakav e biti talasni oblik na izlazu OUT1?
Odgovor a) Izlaz OUT1 se postavi na nisko samo kada GATE1 prelazi sa 0 na 1.
500µs
WR
GATE1
b)
GATE1
OUT1
650µs
150µs 500µs
WR
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-64
Test pitanje 6.68
Ako je kod kola 8253/54 CLK2=1MHz, GATE2=1, i N=750, kakav je talasni oblik na izlazu OUT2 kada je Broja~ 2 programiran u mode2?
Odgovor
GATE2=1
OUT2750µs N N
1µs
WR
Test pitanje 6.69
Ako je kod kola 8253/54 CLK2=1MHz, GATE2=1, N=1000, kakav se talasni oblik napona dobija na izlazu OUT2 kada je Broja~ 2 programiran u mode 3.
Odgovor
1000µs 1000µs
500µs500µsGATE2=1
OUT2
WR
Test pitanje 6.70
Ako je kod kola 8253/54 CLK0=1MHz, GATE0=1, N=600, kakav e biti talasni oblik napona na izlazu OUT0 kada je Broja~ 0 programiran u mode 4.
Odgovor
GATE0=1
OUT0600µs
1µs
WR
6. Programabilne jedinice, tehnike U/I prenosa
6-65
Test pitanje 6.71
Ako je kod kola CLK1=1MHz, N=400, kakav se talasni oblik napona dobija na izlazu OUT1 kada je Broja~ 1 programiran u mode5.
Odgovor Brojanje po~inje kada GATE1 prelazi sa 0 na 1.
GATE1=1
OUT1
400µsWR
Test pitanje 6.72
Neka se u prethodnom test pitanju GATE1 retrigeruje nakon 150 impulsa. Kakav e biti talasni oblik signala na izlazu OUT1.
Odgovor
550µs
150µs
WR
GATE1=1
OUT1
Test pitanje 6.73
Bit parnosti je redundatni bit provere koji se dodaje podatku ili nizu bitova tako da ukupan broj logi~kih jedinica u nizu podataka uklju~ujui i bit parnosti bude paran ili neparan. Predajna i prijemna stanica moraju prethodno da se dogovore koji e tip parnosti da koriste, parnu ili neparnu parnost. Kao to je prikazano na sl. 6.41, parnost se mo`e realizovati kao vertikalna (VRC - Vertical Redundancy Check) ili longitudinalna (LRC - Longitudinal Redundancy Check).
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-66
b0 b0 b0 b0 b0 b0 b0 p0
b1 b1 b1 b1 b1 b1 b1 p1
b2 b2 b2 b2 b2 b2 b2 p2
b3 b3 b3 b3 b3 b3 b3 p3
b4 b4 b4 b4 b4 b4 b4 p4
b5 b5 b5 b5 b5 b5 b5 p5
b6 b6 b6 b6 b6 b6 b6 p6
b7 b7 b7 b7 b7 b7 b7 p7
P P P P P P P
Slika 6.41 VRC i LRC
U kojim situacijama je bolje koristiti VRC, a u kojim LRC?
Odgovor VRC je standardna tehnika koja se naj~ee koristi za proveru greaka kod asinhronog serijskog prenosa podataka. Osnovna karakteristika pridru`ivanja poruci dodatnog bita za proveru parnosti je jednostavnost dodatnog hardvera. Kada se koristi sa ASCII kodiranim podacima, bit parnosti postaje osmi bit podatka, tako da u zavisnosti od tipa odabrane parnosti broj jedinica mo`e biti paran ili neparan.
Ilustracije radi usvojimo da su ASCII znaci D1h, 36h i E5h kodirani sa bitom parne parnosti na MSB poziciji. Ako je u toku prenosa dolo do greke tada se greka u konkretnom slu~aju detektuje samo kod bajta E5h (broj jedica je neparan). Ali treba uo~iti da je nemogue otkriti koji je bit pogrean.
Pomou VRC tehnike mogue je detektovati neparan broj bitova greaka. Na primer ako se bajt podatka D1h primi kao D2h njegova parnost ostae nepromenjena, i pored toga to su dva bita pogrena. Shodno prethodnom sagledavanju VRC tehnika je dobra za primenu u onim okru`enjima gde pojava veeg broja greaka je malo verovatna. Tipi~no su to primene gde se veza izmedju dva ra~unara realizuje pomou upredenih provodnika ili irmovanog kabla.
Analize greaka koje se javljaju kod prenosa na velika rastojanja, posebno preko modema i komutiranih telefonskih mre`a ukazuju da se greke javljaju u paketima (burst). Na primer uklju~enje i isklju~enje svetla mo`e da uzrokuje indukovanje smetnji na prenosnom putu u trajanju od nekoliko ms. Na primer pri brzini prenosa od 30 kbps, za period od 2ms prenose se od 50 do 60 bitova. To zna~i da e izvor smetnji burst tipa imati za efekat da se 5 do 6 znakova prenese nekorektno. Iz tog razloga za detekciju veeg broja bit greaka koristi se redundantni znak za proveru - bloka ili checksum. Znak za proveru bloka (BCC - block - check character) mo`e da se izra~una kao LRC znak parnosti, ili da se izra~una kao dvoji~ni komplement svih prethodnih bajtova u bloku podataka. Sledea programska sekvenca napisana na asemblerskom jeziku mikroprocesora 80x86 se koristi za izra~unavanje a zatim pridru`ivanje BCC-a bloku od 255 podataka. Nakon toga blok podataka koga ~ine 256 bajtova se mo`e prenositi serijski ili paralelno.
bitovi parnosti
provera
parnosti
1blok podataka
bit parnosti
6. Programabilne jedinice, tehnike U/I prenosa
6-67
; funkcija: pridru`ivanje BCC bajta bloku podataka
; ulazi: adresa bloka se predaju registarskom paru DS : SI
; izlazi : BCC se dodaje (sabira) bloku podataka kao zadnji bajt
; menjaju se: markeri, CX, SI, AL, BL
Vel_bloka EQU 255 CODE SEGMENT BAJT ASSUME CS : CODE BCC PROC NEAR Cld ; autoinkrement Mov CX, Vel_bloka ; CX je broja~ Mov BL, 0 ; suma u BL
SUMA : Lodsb ; dobavi jedan bajt
Add BL, AL ; akumuliraj sumu
Loop SUMA ; do until CX = 0 Neg BL ; formiraj dvoji~ni komplement
Mov [SI], BL ; pridru`i BCC Ret BCC Endp CODE Ends End
Pored mogunosti da detektuje greke na veem broju bit pozicija, postoji i druga prednost korienja BCC-a.
Na primer, ako je blok podataka obima 255 bajtova, tada je potreban samo jedan dodatni bajt redundantnosti ili 0,4%. Kod korienja VRC tehnike svakom bajtu je bio potreban po jedan dodatni bit, to rezultira prekora~enju od 12,5%. Zbog toga BCC na jedan efikasniji na~in detektuje vei broj bit greaka a da pri tome ne degradira u zna~ajnijoj meri brzinu prenosa po kanalu. Ipak BCC nije savrena tehnika. Kada se detektuje greka, ceo blok podataka je neophodno ponovo preneti. Naglasimo da se kod VRC-a u slu~aju detekcije greke prenosi samo jedan bajt.
U principu, paran broj bit promena u horizontalnom i vertikalnom smeru na istoj bit poziciji ostaje nedetektovan.
Test pitanje 6.74
Objasni princip rada cikli~no redundantne tehnike (CRC - Cycle Redundancy Checks).
Odgovor Jedna od naj~ee korienih metoda za proveru greaka kod serijsko sinhronog prenosa podataka u komunikacijama predstavlja CRC. Ovaj metod se takodje podjednako uspeno koristi i za proveru greaka memorisanih podataka na diskovima.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-68
Nasuprot checksum metode koja je bajtovski orijentisana CRC se koristi za otkrivanje greaka u nizu bitova. ^esto kombinacija obe metode uspeno se koristi za proveru greaka kod prenosa blokova podataka. Kod CRC metoda dva bajta koja nazivamo CRC bajta pridru`uju se nizu podataka i predaju zajedno sa podacima. Na prijemnoj strani, hardverskim ili softverskim sredstvima, testiraju se u cilju provere integriteta podataka kako podaci tako i CRC bajtovi.
CRC bajtovi se odredjuju (izra~unavaju) koristei se sledeom formulom
G(x)
x*M(x) n
Polinom M(x) odgovara (predstavlja) niz podataka. M(x) se mno`i sa xn gde n odgovara broju bitova u nizu. Proizvod ova dva ~lana deli se polinomom koga nazivamo polinom generator. Kao rezultat deljenja se dobija koli~nik Q(x), i ostatak, R(x). Ostatak formira CRC bajtove.
Da bi ukazali na ovaj problem neto detaljnije odredimo CRC bajt za niz podataka 4D92h koristei delitelj x16+x15+x2+1.
Niz podataka 4D92h = 0100 1101 1001 0010. Kao prvo vri se rotiranje svih bitova tako da se dobija povorka bitova 0100 1001 1011 0010. M(x) se izra~unava koristei ove bitove kao koeficijente polinoma.
M(0100 1001 1011 0010) =
0x15+1x14+0x13+0x12+1x11+0x10+0x9+1x8+1x7+0x6+1x5+1x4+0x3+0x2+1x1+0x0
Ako se zanemare ~lanovi ~iji su koeficijenti nula dobiemo:
M(x)=x14+x11+x8+x7+x5+x4+x1
Sada ako se pomno`i M(x) sa x16 imajui u vidu da je podatak niz od 16 bitova, dobiemo
M(x)*xn = (x14+x11+x8+x7+x5+x4+x1)*x16
= x30+x27+x24+x23+x21+x20+x17
Prema tome deljenik za na slu~aj bie polinom x30+x27+x24+x23+x21+x20+x17. Ovaj polinom se deli generator polinomom G(x). Za G(x) koristiemo G(x)=x16+x15+x2+1 koji se naziva bisink protokol generator. Ilustracije radi kod SDLC protokola koristi se generator polinom G(x)=x16+x12+x5+1. Uo~imo da oba generator polinoma po~inju sa x16. Ova ~injenica obezbedjuje da e ostatak biti manji od x16 i kao takav se mo`e predstaviti sa 16 bitova, ili dva bajta.
Postupak deljenja polinomom je sledei:
x xxxxxxxxxxxx1xxx
58121314
1720212324273021516+++++
+++++++++
141617202123242729
14162930
xxxxxxxxx xxxx
+++++++++++
1314151617202123242728
13152829
xxxxxxxxxxx xxxx
+++++++++++++
121315161720212324
12142728
xxxxxxxxx xxxx
+++++++++++
81012131516172021
8102324
xxxxxxxxx xxxx
+++++++++++
6. Programabilne jedinice, tehnike U/I prenosa
6-69
578101213151617
572021
xxxxxxxxx xxxx
+++++++++++
xxxxxxxxx x xxx
357810121315
31617
+++++++++++
Prema toma kao ostatak deljenja se dobija polinom R(x)=x15+x13+x12+x10+x8+x7+x5+x3+x. Ako ovaj polinom predstavimo kao niz koeficijenatga dobiemo
R(x)=1x15+0x14+1x13+1x12+0x11+1x10+0x9+1x8+1x7+0x6+1x5+0x4+1x3+0x2+1x1+0x0
tj. napisano u obliku niza nula i jedinica bie
1011 0101 1010 1010
Rotiranjem ovih bitova (prvi na zadnje, drugi na predzadnje,..., zadnji na prvo mesto) dobiemo niz bitova 0101 0101 1010 1101 a to je 55ADh, i to odgovara CRC bajtovima.
Kada prihvati serijski niz podataka plus CRC bajtove i obavi deljenje sa G(x), ostatak e biti nula za slu~aj da nije dolo do greke u prenosu podataka.
Test pitanje 6.75
Kod CRC metoda blok podataka se zamilja kao serijski niz podataka. Bitovi n-to bitnog bloka smatraju se koeficijenti karakteristi~nog polinoma, poznatog kao M(x). M(x) se formira kao
M(x)=bn+bn-1x+bn-2x2+...+b1x
n-1+b0xn
gde je b0 bit ~ija je tezina najmanje zna~ajna (LSB), a bn bit ~ija je tezina najzna~ajnija (MSB).
Odredi polinom M(x) za sledei 16-bitni niz podataka 26F0h.
Odgovor Podatak 26F0h ima odgovarajuu binarnu formu
0010 0110 1111 0000
Ako ovaj niz napiemo kao M(x) imaemo
M(x)=0+0x1+1x2+0x3+0x4+1x5+1x6+0x7+1x8+1x9+1x10+1x11+0x12+0x13+0x14+0x15
Eliminisanjem ~lanova ~ija je vrednost 0 dobiemo:
M(x)=x2+x5+x6+x8+x9+x10+x11
Ovaj polinom je jedinstven jer predstavlja podatak kao 16-bitni blok. Ako se jedna ili vei broj bit pozicija promeni promenie se i vrednost polinoma. CRC se odredjuje sledeom jedna~inom:
R(x)Q(x)G(x)
x*M(x)CRCn
+==
gde je G(x) polinom generator, a za bisink protokol G(x) je dat u obliku:
G(x)=x16+x15+x2+1
Dok se kod SDLC-a koristi sledei polinom generator:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-70
G(x)=x16+x13+x5+1
Nakon to se obavi deljenje kao rezultat se dobija koli~nik Q(x) i ostatak R(x). Sutina CRC tehnike se sastoji u sledeem: Za dati niz podataka izra~unava se R(x) i tada se ostatak pridru`i bloku podataka. Kada se na prijemnoj strani R(x) ponovo izra~unava, ostatak treba da bude R(x) = 0. Treba naglasiti da kako je G(x) stepena 16, ostatak R(x) ne sme biti vieg reda od 15, pa se zbog toga predstavlja pomou dva bajta, nezavisno od toga kolika je du`ina bloka podataka koji se prenosi.
Test pitanje 6.76
Odredi CRC bajtove za blok podataka 26F0h koristei polinom generator G(x)=x16+x15+x2+1
Odgovor
1xxx
xxxxxxxG(x)
x*M(x)21516
1821222425262716
+++++++++
=
Napomena: Vidi prethodno test pitanje koje se odnosi na odredjivanje M(x).
Ostatak R(x) iznosi :
R(x)=x15+x13+x9+x8+x6+x4+x3+x+1
Kada se izrazi u binarnoj formi (napomenimo da koeficijent uz najvii stepen postoje LSB) dobiemo :
1101 1010 1100 0101 = DAC5h
Aritmeti~ki potupak za odredjivanje ostatka je sledei :
xxx
xxxxxxxxxxx
6911
1821222425262721516++
+++++++++
11131821222425
11132627
xxxxxxx xxxx++++++
+++
913182122
9112425
xxxxx xxxx
+++++++
6891318
682122
xxxxx xxxx++++
+++
246891317
241718
xxxxxxx xxxx
+++++++++
xxxxxxxxx
x xxx2346891316
31617
+++++++++++
1xxxxxxx xR(x)
1xxx346891315
21516
++++++++=+++
6. Programabilne jedinice, tehnike U/I prenosa
6-71
Test pitanje 6.77
Koja je klju~na razlika izme|u: instrukcija grananja, instrukcija za poziv procedura i programskih prekida?
Test pitanje 6.78
Nabrojati pet primera koji se odnose na spoljni prekid i pet primera koji se odnose na interne prekide. Koja je razlika izme|u softverskih prekida i poziva procedura?
Test pitanje 6.79
Ra~unar se odaziva na zahtev za prekid smetanjem u magacin sadr`aja PC-a i tekueg sadr`aja PSW-a. Nakon toga ra~unar iz memorije sa lokacije koja je definisana prekidnom vektorskom adresom IVAD ~ita novi sadr`aj registra PS. Prva adresa uslu`ne progamske rutine se pribavlja iz memorije sa lokacije IVAD+1.
(a) Ukazati na sekvencu mikrooperacija koje implementiraju povratak iz prekidne rutine (return from interrupt).
Zadatak 6.20
Kada je ulaz bafera B1 sa sl. 6.42 na visoko, da bi logika korektno radila potrebno je da bude ispunjen uslov I1=15 µA. Kolika u tom slu~aju treba da je vrednost otpornika R1? Dati komentar u vezi izbora otpornika R1.
74LSxxx
I1
R1
S0
B1
Vcc=+5V
Slika 6.42 : Na~in povezivanja ulaza bafera 74LSxxx
Odgovor Ako je R1 suvie veliki, a prekida~ S0 otvoren, vrednost ulaznog napona nee biti dovoljna da se stanje na ulazu kola 74LSxxx interpretira kao logi~ka 1. Na primer, za R1=220kΩ, imaemo ulazni napon od ( )5 15 10 220 10 1 76 3− ⋅ ⋅ =− * , V . Za drajvere iz familije 74LS ova vrednost je
neprihvatljiva kao nivo visoko. Sa druge strane, ako je R1 suvie mali a prekida~ S0 zatvoren, poveava se disipacija. Za slu~aj R1=100Ω imaemo struju koja te~e kroz otpornik od 5/0.1=50mA, to e rezultirati disipaciji od 0,052*100=0,25W. Da bi dobili dovoljno visok ulazni napon, recimo 3,5V, R1 ne sme da premai (5-3,5)/15=0,1MΩ ili 100kΩ. Ako izaberemo R1=10kΩ ovaj uslov bie sigurno zadovoljen. Pri R1=10kΩ kada je S0 zatvoren imaemo struju od 0,5mA.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-72
Test pitanje 6.80
Na slici 6.43a) prikazan je jedan klasi~an na~in povezivanja dvo-polo`ajnog prekida~a S sa jednim izlaznim priklju~kom preko TTL invertora, IT, na ulaz mikroprocesora. Signal Z na izlazu invertora IT je binarni. Do treperenja mehani~kih kontakata prekida~a S dolazi uvek kada se prekida~ prebacuje iz stanja ON u OFF i obrnuto. Kada se na izlazu invertora Z prika~i osciloskop tada se vidi talasni oblik prikazan na slici 6.43b). Objasniti zato se treperenje dirke na ekranu osciloskopa ne vidi kada se prekida~ S prebacuje u stanje OFF.
Odgovor Kada ulaz TTL-kola 'visi' (nije povezan na masu ili napajanje) tada se on interpretira od strane TTL kola kao visoko. Pri prebacivanju prekida~a iz stanja OFF u ON prekida~ treperi izme|u mase i otvoreno, a to se interpretira od strane TTL invertora kao 1 i 0. Zbog toga se na izlazu Z javlja viestruki prelaz iz 0 u 1 i obrnuto.
Pri prebacivanju prekida~a iz ON u OFF prekida~ treperi izme|u +Vcc i otvoreno, ali se oba stanja od strane TTL kola interpretiraju kao logi~ka jedinice. Zbog toga je izlaz Z stalno na nisko.
+Vcc
S
OFF
ON
TTLinvertor
Z
(ka mikro-procesoru)
prebacivanjeprekida~a ustanje ON
prebacivanjeprekida~a ustanje OFF
0
1
t
IT
Izlaz Z
a) kolo prekida~a b) ponaanje izlaza Z
slika 6.43 : Povezivanje prekida~a preko TTL invertora na ulaz mikroprocesora
Test pitanje 6.81
Odrediti fizi~ke i logi~ke adrese koje se u vektorskoj tabeli pridru`uju prekidnim vektorima: (a) INT 12h; i (b) INT 8h
Odgovor (a) Fizi~ke adrese za INT 12h su 00048h-00048h jer 4*12h=48h. Ovo zna~i da se u lokacijama fizi~ke memorije 48h, 49h, 4Ah i 4Bh ~uvaju vrednosti za CS i IP koje pripadaju prekidno uslu`noj rutini (Interrupt Service Routine - ISR) 12h. Logi~ka adresa je 0000:0048-0000:004Bh.
(b) Za INT 8h tra`i 8*4=32=20h. Zbog toga u memorijskim lokacijama ~ije su adrese 00020h, 00021h, 00022h i 00023h a pripadaju prekidnoj vektor tabeli ~uvaju vrednost CS:IP za INT 8h ISR.
Logi~ka adresa je 0000:0020h-0000:0023h.
Test pitanje 6.82
6. Programabilne jedinice, tehnike U/I prenosa
6-73
Objasniti funkciju INT 00
Odgovor Ovaj prekid pripada kategoriji prekida poznatih kao uslovne ili izuzetne prekide (conditional or exseption interrupts), a poziva se od strane mikroprocesora uvek kada postoje uslovi (izuzeci) koje CPU ne mo`e da rei, tj. da manipulie njima. Jedna od takvih situacija je pokuaj deljenja sa brojem nula. Imajui u vidu da se kao rezultat deljenja brojem nula dobija nedefinisana vrednost a CPU nije u stanju da interpretira ovakav rezultat, on automatski poziva ISR za obradu greke kod deljenja. Prekidna tabela kod mikroprocesora 80x86 sadr`i 256 prekida. Intel je rezervisao INT 0 za obradu ovog tipa greke. INT 0 se poziva od strane mikroprocesora uvek kada se pokua deljenje sa brojem nula. Kod PC maina kada se pozove ova rutina na ekranu se ispisuje poruka “DIVIDE ERROR”. Tipi~no se to javlja ako se pokua sa izvrenjem sledee programske sekvence.
MOV AL,46 ; AL=46
SUB CL,CL ; CL=0
DIV CL ; 46/0=nedefinisan rezultat
INT 0 se takodje javlja ako je koli~nik suvie veliki ali bi mogao da se smesti u registar u slu~aju kada se izvrava instrukcija DIV. Klasi~an takav primer je slede~i
MOV AX,0FFFFh ; AX=FFFFh
MOV BL,2 ; BL=2
DIV BL ; 65535/2=32767, ova vrednost je vea od 255 to je
; maksimalna vrednost koja mo`e da se ~uva u AL.
Test pitanje 6.83
Za datu ISR, logi~ka adresa je F000: FF53, da li je fizi~ka adresa FFF53h?
Odgovor Kada je logi~ka adresa F000: FF53 to zna~i da je CS=F000h a IP=FF53h. Pomeranje ulevo segmentnog registra za jednu heksadecimalnu cifru i sabiranjem sa ofsetom dobija se fizi~ka adresa FFF53h.
Test pitanje 6.84
Kada se javi prekid supspenduje se normalna obrada sve dok se ne izvri ISR. Normalnoj obradi se vraamo kada procesiranje ISR-a zavri. Prikazati grafi~ki koje sve aktivnosti prate prelazak sa normalne obrade na obradu ISR-a ponovni povratak na normalnu obradu.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-74
1 2 3
5
4
6
7
8
normalnaobrada
javio sezahtevza prekid
zavravasetekuainstrukcija
Pushu magacinPSW,CS,IP(EIP)
Branch to ISR
izvrenje ISR
Pop iz magacinaIP(EIP),CS,PSW
nastavaknormalneobrade
Test pitanje 6.85
Odrediti brzinu prenosa podataka u bps i brzinu prenosa znakova (karaktera) za asinhroni serijski prenos sa sl. 6.44.
3,33ms
1 1 011 0 11
0
1
2 stop
bita1 bajt
1 znak
startbit
Slika 6.44: Standarni asinhroni prenos podataka
Napomena: Bajt koji se prenosi ima vrednost 7Bh.
Odgovor Jedan bit se prenosi za period od, 3,33ms, pa je shodno tome bitska brzina prenosa 1/3,33ms=300 bita/s
S obzirom da postoje 11 bitova po znaku, za prenos jednog bajta je potrebno vreme od 11*3,33ms=36,63ms.
Brzina prenosa znakova iznosi
1/36,63ms=27,3 znakova/s
6. Programabilne jedinice, tehnike U/I prenosa
6-75
Test pitanje 6.86
Modemi standarno prenose podatke preko telefonske mre`e brzinom od 9600,14400 i 28800 bps-a. Ako se fajl veli~ine 2MB prenosi sa jednog ra~unara na drugi preko modema, odrediti vreme prenosa fajla kada se jedan znak prenosi u sledeem formatu: jedan start bit, jedan stop bit i osam bitova podataka pri sledeim bitskim brzinama: (a) 9600 bps; (b) 28800 bps
Odgovor Svaki bajt se prenosi sa 10 bitova. Shodno tome brzine prenosa znakova bie 960 znakova/s i 2880 znakova/s, respektivno.
Vreme prenosa celog fajla bie:
(a) 1048576 znakova * 1s / 960 znakova=1092s=18min i 12s.
(b) 1048576 znakova * 1s / 2880 znakova=364s=6 min i 4s.
Test pitanje 6.87
[ta predstavlja makro i kako se koristi?
Odgovor Postoje aplikacije kod programiranja na asemblerskom jeziku kod kojih grupa instrukcija obavlja neki zadatak koji se ~esto koristi. Na primer, INT 21h funkcija 09h namenjena za prikaz niza podataka, a funkcija 0Ah ~esto se koristi za prihvatanje podataka sa tastature, u okviru istog programa. Sa ciljem da se smanji vreme koje je potrebno da se kreiraju ove programske sekvence kao i da se smanji broj greaka u programu, uvodi se koncept rada sa makroima. Makro omoguava programeru da zadatak (skup programskih linija koje obavljaju specifi~an zadatak) napie samo jedanput i da se taj zadatak pozove kod god se javi potreba za njegovim izvrenjem.
Makro se definie na sledei na~in:
ime MACRO fik_par 1, fik_par 2,..., fik_par N ...... telo makroa
.............. ENDM Direktiva MACRO ukazuje na po~etak definicije makroa, a direktiva ENDM signalizira kraj. Izmedju ovih direktiva nalazi se telo makroa. Ime makroa je jedinstveno i mora da potuje konvencije asemblerskog jezika. Fiktivni parametri (fik_par i, i=1,...,N) su imena, ili parametri, ili ~ak registri, koji se pozivaju od strane tela makroa. Nakon to je makro kreiran, on se poziva po imenu a odgovarajue vrednosti se zamenjuju umesto fiktivnih parametara.
Ilustraciije radi, prikaz niza podataka koristei funkciju 09h od INT 21h, ~esto se koristi kod razli~itih aplikacija. Makro koji obavlja ovaj tip usluge se definie na sledei na~in:
NIZ MACRO POD1 MOV AH,09h MOV DX,OFFSET POD1 INT 21h ENDM Uo~imo da se fiktivni argumenat POD1 poziva u telu makroa. Ako usvojima da je PORUKA definisana u segmentu podataka, tada poziv makroa u kôdnom segmentu imae sledei oblik:
; ****** segment podataka *******
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-76
. . PORUKA DB ’Kako se vi zovete’,’$’ . . ; ****** kraj segmenta podataka *****
; ****** kodni segment ******
. . . NIZ PORUKA . . . ; ****** kraj kodnog segmenta ******
Instrukcija ’NIZ PORUKA’ poziva makro. Asembler, na mestu poziva makroa, ubacuje sledei kôd (vidi se iz .LST fajla):
1 MOV AH,09h 1 MOV DX,OFFSET PORUKA 1 INT 21h Labela 1 ukazuje da kôd pripada makrou. Kod ranijih verzija MASM-a ubacivanje znaka (+) ozna~avalo je liniju makroa.
Postoje sledea dva tipa komentara kod makroa:
(1) ako komentaru prethodi ’;’ kao kod programa na asemblerskom jeziku, ovaj komentar e se pojaviti u fajlu sa ekstenzijom .LST.
(2) ako komentaru prethodi ’;;’ ovaj komentar se nee pojaviti u .LST fajlu kod asembliranja programa.
Zadatak 6.21
Kreirati makro definicije radi: (a) postavljanja kursora na proizvoljnu poziciju na ekranu; (b)prikazivanje niza; i (c) brisanje ekrana.
Odgovor ;***********
KURSOR MACRO VRSTA,KOLONA ; ovaj makro postavlja kursor na lokaciji vrste, kolone
;; koristi se BIOS INT 10h funkcija 02
MOV AH,02 ; postavi funkciju KURSOR
MOV BH,00 ; stranica 00
MOV DH,VRSTA ; pozicija vrste (linije)
MOV DL,KOLONA ; pozicija kolone
INT 10h ENDM ;*****************
PRIKAZ MACRO NIZ
6. Programabilne jedinice, tehnike U/I prenosa
6-77
; ovaj makro prikazuje niz podataka
;; DX=adresa niza, koristi se funkcija 09 od INT 21h
MOV AH,09 ; funkcija za prikaz niza
MOV DX,OFFSET NIZ ; DX=ofset adresa podataka
INT 21h ; poziv prekida
ENDM ;*****************
BRISEKR MACRO ; ovaj makro brie ekran
;; koristi opciju O6 od INT 10h
MOV AX,0600h ; funkcija brisanja ekrana
MOV BH,07 ; normalni atribut
MOV CX,0 ; od vrste = 00, kolone = 00 MOV DX,184Fh ; do kolone=18h, kolone=4 h
INT 10h ; pozovi prekid
ENDM Zadatak 6.22
Koristei makro definicije iz prethodnog zadatka kreirati program koji e obrisati ekran a zatim na svaku od sledeih lokacija ekrana prikazati sledee poruke:
vrsta 2 kolona 4 ’zovem se’
vrsta 7 kolona 24 ’Sima Rus’
vrsta 12 kolona 44 ’kako se’
vrsta 19 kolona 64 ’vi zovete?’
Odgovor TITLE PROG1 PAGE 60,132 ; ***********************
BRISEKR MACRO MOV AX,0600h MOV BH,07h MOV CX,0 MOV DX,184Fh INT 10h ENDM ; ***********************
KURSOR MACRO VRSTA, KOLONA MOV AH,02 MOV BH,00
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-78
MOV DH,VRSTA MOV DL,KOLONA INT 10h ENDM ;*************************
PRIKAZ MACRO NIZ MOV AH,09 MOV DX,OFFSET NIZ INT 21h ENDM ; ****************************
SMAG SEGMENT DB 64 DUP(?) SMAG ENDS ; ***************************
SPOD SEGMENT PORUKA1 DB ’zovem se’, ’$’ PORUKA2 DB ’Sima Rus’, ’$’ PORUKA3 DB ’kao se’, ’$’ PORUKA4 DB ’Vi zovete’, ’$’ SPOD ENDS ; *****************************
PROGS SEGMENT GLAVNI PROC FAR ASSUME CS:PROGS, DS:SPOD, SS:SMAG MOV AX,SPOD MOV DS,A .LALL ; direktiva za listanje svih instrukcija i komentara
BRISEKR ; poziv makroa za brisanje ekrana
KURSOR 2,4 ; postavi kursor na vrsti 2, kolona 4
PRIKAZ PORUKA1 ; poziv makroa za prikaz
.XALL ; direktiva za llistanje delove makroa koji generiu opkôdove
KURSOR 7,24 ; postavi kursor na vrsti 7, kolona 24
PRIKAZ PORUKA2 ; poziv makroa za prikaz
.SALL ; direktiva koja brani generisanje komentara
KURSOR 12,44 ; postavi kursor na vrsti 12, kolona 44
PORIKAZ PORUKA3 ; poziv markoa za prikaz
6. Programabilne jedinice, tehnike U/I prenosa
6-79
KURSOR 19,64 ; postavi kursor na vrsti 19, kolona 64
PRIKAZ PORUKA4 ; poziv makroa za prikaz
MOV AH,4Ch INT 21h : povratak u DOS GLAVNI ENDP PROGS ENDS END GLAVNI Test pitanje 6.88
[ta su to LOCAL direktive i kako se one koriste kod makroa?
Odgovor Ovaj problem egzistira kada je u telu makroa definisana labela ili ime. Ilustracije radi, ako se makro umetne vie od jednom, u programu dolazi do opasnosti da labela bude vie puta zamenjena, tj da se grananje na instrukciju ispred koje stoji labela, vri nezavisno od toga na kom je mestu u programu umetnut makro. Da do ovoga ne dodje labele moraju da se deklariu kao LOCAL. To zna~i da, kod pisanja makroa, moraju da se potuju sledea pravila:
(1) Sve labele i labele polja moraju se deklarisati kao LOCAL
(2) LOCAL direktiva mora da bude u liniji koja neposredno sledi direktivu MACRO. [ta vie da bude i ispred polja komentara.
(3) Deklaracija svih labela ili imena kod LOCAL direktive mo`e biti izvedeno kao:
LOCAL ime1,ime2,ime3 ili kao:
LOCAL ime1 LOCAL ime2 LOCAL ime3 Da bi ukazali na ovaj program neto detaljnije analizirasemo sledei programski zadatak: (a) Kreirati makro MNOZI koji se koristi za mno`enje dve re~i koristei tehniku uzastopnih sabiranja, i smetanje rezultata na lokaciji REZULTAT; (b) Kreirati program koji mno`i (1) 4130*142, (2) 2160*386, (3) 612*482 a poziva makro definisan u stavci (a).
(a) Jedno od moguih reenja imalo bi oblik:
MNOZI MACRO VRED1,VRED2,REZULTAT LOCAL PONOVI ; ovaj makro izra~unava REZULTAT = VRED1 * VRED2
;; mno`enje se vri uzastopnim sabiranjem
;; vrednosti VRED1 i VRED2 su podaci tipa re~, a REZULTAT je dupla re~
MOV BX,VRED1 ; BX = mno`enik
MOV CX,VRED2 ; CX = mno`itelj
SUB AX,AX ; AX = 0
MOV DX,AX ; DX = 0
PONOVI: ADD AX,BX ;AX = AX+BX
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-80
ADC DX,00 ; DX = DX+00+CY
LOOP PONOVI ; go to PONOVI if CX≠0 MOV REZULTAT,AX ; smesti LS deo rezultata
MOV REZULTAT+2,DX ; smesti MS deo rezultata
ENDM (b) Struktura programa imae sledei oblik:
TITLE PROG2 PAGE 60,132 ; ***************************
MNOZI MACRO VRED1,VRED2,REZULTAT LOCAL PONOVI ; ovaj makro izra~unava REZULTAT =VRED1*VRED2
;; mno`enje se vri uzastopnim sabiranjem
;; VRED1, VRED2 su podaci tipa re~, a REZULTAT je dupla re~
MOV BX,VRED1 ; BX = mno`enik
MOV CX,VRED2 ; CX = mno`itelj
SUB AX,AX ;AX = 0
MOV DX,AX ; DX = 0
PONOVI: ADD AX,BX ;AX = AX+BX
ADC DX,00 ; DX = DX+00+CY
LOOP PONOVI ; go to PONOVI if CX≠O
MOV REZULTAT,AX ; smesti LS deo rezultata
MOV REZULTA+2,DX ; smesti MS deo rezultata ENDM
; ***************************
SPOD SEGMENT DB 64 DUP(?) SPOD ENDS ; *****************************
SPOD SEGMENT REZULTAT1 DW 2DUP(?) REZULTAT2 DW 2DUP(?) REZULTAT3 DW 2DUP(?) SPOD ENDS ; ***************************** SPROG SEGMENT GLAVNI PROC FAR
6. Programabilne jedinice, tehnike U/I prenosa
6-81
ASSUME CS: SPROG,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX MNOZI 4130,142,REZULTAT1 MNOZI 2160,386,REZULTAT2 MNOZI 612,482,REZULTAT3 MOV AH,4Ch INT 21h ; povratak na DOS
GLAVNI ENDP SPROG ENDS END GLAVNI Test pitanje 6.89
Pretpostavimo da postoji nekoliko makroa koji se koriste od strane veeg broja programa. Da li se takvi makroi moraju prepisivati svaki put?
Odgovor Odgovor bi glasio ne, pod uslovom da se koristi direktiva INCLUDE. Direktiva INCLUDE omoguava programeru da napie makro, da ga sa~uva kao fajl, i zatim da pozajmi taj makro bilo kom drugom fajlu. Pretpostavimo da su sledei veoma ~esto korieni makroi kreirani (napisani) i nakon toga zapameni pod fajl-imenom’MOJ MAKRO1.MAC’.
;******************
BRISEKR MACRO ; makro za brisanje ekrana
MOV AX,0600h MOV BH,07 MOV CX,0000 MOV DX,184Fh INT 10h ENDM ;******************
PRIKAZ MACRO NIZ ; makro za prikaz niza
MOV AH,09 MOV DX,OFFSET NIZ INT 21h ENDM ;******************
REGMAG MACRO ; makro za smetaj registara umagacin
PUSH AX PUSH BX PUSH CX
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-82
PUSH DX PUSH DI PUSH SI PUSH BP PUSHF ENDM ;******************
IZBMAG MACRO ; marko za izbavljanje sadr`aja registra iz magacina
POP F POP BP POP SI POP DI POP DX POP CX POP BX POP AX ENDM Usvojimo da su svi poomenuti makroi smeteni na disku pod fajl-imenom ’MOJ MAKRO1.MAC’, tada uz pomo direktive INCLUDE mogue ih je preneti ka bilo kom fajlu koji ima ekstenziju .asm a program mo`e zatim da ih poziva koliko god puta se za to javi potreba. Kada fajl sadr`i sve makroe, makroi se listaju na po~etku fajla sa ekstenzijom .lst i oni se umetaju (~ine) kao deo programa. Da bi ukazali na ovaj problem neto detaljnije, analizirajmo sledeu programsku sekvencu. Programska sekvenca koja sledi poziva makroe za brisanje ekrana, postavljanje kursora i prikazivanje niza. Ovi makroi su zapameni pod fajl imenom ’MOJ MAKRO2.MAC’.
;******************
TITLE PROG3 PAGE 60,132 INCLUDE MOJMAKRO2.MAC ; ***************************
SMAG SEGMENT DB 64 DUP(?) SMAG ENDS ; ***************************
SPOD SEGMENT PORUKA1 DB ’Stvarno se mogu pozivati’,’$’ SPOD ENDS ; *****************************
SKOD SEGMENT GLAVNI PROC FAR
6. Programabilne jedinice, tehnike U/I prenosa
6-83
ASSUME CS:SKOD,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX BRISEKR ; poziv makroa za brisanje ekrana
PRIKAZ PORUKA1 ; poziv makroa za prikaz
INT 21h ; povratak na DOS
GLAVNI ENDP SKOD ENDS END GLAVNI Test pitanje 6.90
Pored tastature mi je sigurno jedan od ulaznih uredjaja koji se naj~ee koristi. Funkcija mia pridru`ene su INT 33 h. Ukazati na osnovne karakteristike rada sa miom.
Odgovor Kao prvo, originalna IBM PC DOS verzija ne podr`ava rad sa miom. Zbog toga, prekid INT 33h, koji prati mi, nije deo BIOS-a ili DOS-a. To je u suprotnosti sa INT 21h i INT 10h koji su DOS- i BIOS-prekidi, respektivno. INT 33h je deo pokreta~kog programa (softverskog drajvera) koji se instalira kada se vri proces boot-ovanja PC maine.
A. Detekcija prisustva mia
Kod novijih verzija PC maina drajver za mi instaliran je od strane proizvodja~a, ali starije generacije maina nemaju mi. Zbog ovoga, prvi zadatak bilo kog INT 33h programa odnosi se na detekciju prisustva mia i broja tastera koji mi podr`ava. Ovaj zadatak ze izvrava od strane INT 33h funkcija AH=0. Nakon povratka iz INT 33h, ako je AX=0, tada rad sa miom nije podr`an. Ako je AX=FFFFh, rad sa miom se podr`ava, dok e broj tastera, sa kojima mi mo`e da radi, biti smeten u BX. I pored toga to kod najveeg broja mieva imamo samo dva tastera, desni i levi, postoje i mievi koji imaju srednji taster. Sagledajmo, sada, sledei programski kôd:
MOV AX,0 ; opcija inicijalizacije mia
INT 33h CMP AX,0 ; provera da li je AX=0 nakon povratka iy INT 33h
JE IZLAZ ; go to IZLAZ if AX=0 a to zna~i da mi nije instaliran
MOV BROJTAS,BX ; mi postoji, broj tastera = BX
... IZLAZ: Uka`imo na neke od osobenosti INT 33h:
(1) Kod INT 21h i INT 10h, za selekciju funkcije se koristi registar AH. Kod INT 33h za selekciju funkcija koristi se registar AL, a AH se postavlja na 0.
(2) Kod kodiranja, INT 33h obavezno koristiti “h” (ili “H”) koje ukazuje na heksadecimalno kodiranje. Ako nema “h”, kompilator e dodeliti decimalnu vrednost, a da nesrea bude vea 3310 = 2116, tako da umesto INT 33h pozvae se INT 21h.
B. Terminologija mia
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-84
Pokaziva~ mia (mouse pointer ili cursor) je simbol (naj~ee strelica) koji, na ekranu, pokazuje poziciju mia. U grafi~kom na~inu rada, pokaziva~ mia se prikazuje kao strelica, a u tekstualnom na~inu kao blok koji blinka. I pored toga to se objektivno pomeranje mia vri u santimetrima, pomeranje se ipak izra`ava (meri) u jedinicama koje se nazivaju mickeys. Jedinica mickey ukazuje na osetljivost mia. Na primer, mi koji mo`e pomerati kursor 40 jedinica na svaki santimetar ima osetljivost od 40 mickeys (ili 200 mickeys/in~; 1 in~=2,5 cm) Postoje mievi i sa dvostruko veom osetljivou.
C. Prikaz i skrivanje pozicije kursora
Funkcijsa AX=01 od INT 33h se koristi za prikazivanje pozicije kursora mia. Nakon izvrenja sledee sekvence, prikazuje se pokaziva~ mia.
MOV AX,01 INT 33h Kao to smo ve naglasili, u grafi~kom re`imu video prikaza, pozicija mia se prikazuje strelicom, a u tekstualnom re`imu rada na poziciji kursora mia vidi se pravougaonik. U tekstualnom na~inu rada blok koji pokazuje na poziciju kursora ima komplementarnu boju u odnosu na boju pozadine. Najbolji na~in da se sakrije (u~ini nevidljivom) pozicija kursora mia, kada je on vidljiv, je da se pozove funkcija AX=02 od INT 33h.
Sledea programska sekvenca prikazuje jedan koristan na~in za manipulisanje sadr`ajem prikaza. Aktivnosti koje se obavljaju su sledee:
(a) koristei INT 10h opciju 0F, pribaviti tekui video na~in rada i sa~uvati ga u BL.
(b) postaviti video na~in rada kod VGA grafike koristei opciju AH=10 h od INT 10h
(c) inicijalizovati mi sa AX=0, INT 33h
(d) u~initi mi vidljivim
(e) koristiti INT 21h opciju AH = 01 da bi se detektovao pritisak dirke sa tastature
(f) ako je pritisnuta bilo koja dirka tastature, vratiti po~etni re`im video prikaza.
MOV AH,0Fh ; dobavi tekui video na~in rada
INT 10h MOV BL,AL ; sa~uvaj ga
MOV AH,0 ; postavi video na~in (re`im) rada
MOV AL,10h ; na VGA grafiku
INT 10h MOV AX,0 ; inicijalizacija mia
INT 33h MOV AX,01 ; u~ini poziciju kursora mia vidljivom
INT 33h MOV AH,01 ; sa~ekaj na pritisak dirke tastature
INT 21h MOV AX,2 ; kada je dirka pritisnuta
INT 33h ; u~ini mi nevidljiv
MOV AX,0
6. Programabilne jedinice, tehnike U/I prenosa
6-85
MOV AL,BL ; vrati po~etni re`im video prikaza INT 10h D. Video rezolucija u odnosu na rezoluciju mia u tekstualnom re`imu prikaza
U tekstualnom re`imu rada video ekran je podeljen na 640*200 piksela. Ovo zna~i da, u (tekstualnom mode-u) mogue je prikazivati 80*25 znakova, pri ~emu se za svaki znak koriste 8*8 piksela (pa se tako dobija da je 8*80=640 i 25*8=200). Kada je video prikaz postavljen na tekstualni re`im rada (AH=03 i INT 10h), veli~ina mia se automatski podeava na rezoluciju od 640*200. Zbog toga, u tekstualnom re`imu rada, kada program dobavlja poziciju kursora mia, vrednost koja se dobija u pikselima mora da se podeli sa 8 da bi se dobila pozicija kursora u funkciji broja znakova po horizontali, koja se nalazi u opsegu od 0 do 79, a po vertikali u opsegu od 0 do 24.
E. Video rezolucija u odnosu na rezolulciju mia u grafi~kom re`imu rada
U grafi~kom re`imu rada rezolucija mo`e biti 640*200, 640*350, 640*480 i dr. Sa promenom rezolucije, menja se i rezolucija mia shodno sledeoj tabeli:
video mode video rezolucija tip mia rezolucija broj znakova
AL=03 640*200 tekstualni 640*200 80*25 AL=0Eh 640*200 grafi~ki 640*200 80*25
AL=0Fh 640*350 grafi~ki 640*350 80*44
AL=10h 640*350 grafi~ki 640*350 80*44
AL=11 h 640*480 grafi~ki 640*480 80*60
AL=12 h 640*480 grafi~ki 640*480 80*60
F. Pribavljanje tekue pozicije kursora mia
Opcijom AX=03 od INT 33h pribavlja se tekua pozicija kursora mia. Nakon povratka, tekua koordinata X se smeta u CX, a Y u DX. U BX se ~uva status tastera mia na sledei na~in : bit D0 ukazuje na status levog tastera mia, D1 na status desnog, a D2 na srednji taster. Kada je taster pritisnut, status je jednak 1, a kada je otputen status ima vrednost nula. Vrednosti koje uzima X se nalaze u opsegu od 0 do 639, a Y - od 0 do 199 (odnosi se na rezoluciju 640*200 za grafi~ki re`im rada). Da bi se dobila pozicija u tekstualnom re`imu rada, vrednosti u CX i DX se dele sa 8.
Sa ciljem da uka`emo sa neto vie detalja na ovaj problem analiziraemo programsku sekvencu koja obavlja sledee zadatke:
(a) dobavlja tekui re`im rada video prikaza i pamti ga;
(b) postavlja novi re`im rada video prikaza;
(c) dobavlja poziciju pokaziva~a kursora, konvertuje je u poziciji znaka i neprekidno je prikazuje sve dok se ne pritisne dirka;
(d) nakon pritiska dirke, ponovo se postavlja po~etni video re`im rada i vri se povratak u DOS
TITLE PROGRAM5 Prikaz pozicije misa PAGE 60,132 KURSOR MACRO VRSTA,KOLONA MOV AH,02h MOV BH,00
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-86
MOV DH,VRSTA MOV DL,KOLONA INT 10h ENDM PRIKAZ MACRO NIZ MOV AH,09h MOV DX,OFFSET NIZ ; puni adresu niza
INT 21h ENDM .MODEL SMALL .STACK .DATA PORUKA1 DB ’Pritisni bilo koju dirku da za izlaz’,’$’ PORUKA2 DB ’Mis je lociran na’,’$’ POZ_HOR DB ?, ?,’i’,’$’ POZ_VER DB ?, ?,’$’ POCVID DB ? ; tekuci video re`im
NOVVID DB ? ; novi video re`im
.CODE GLAVNI PROC MOV AX,@DATA MOV DS,AX MOV AH,0Fh ; dobavi tekui re`im rada videa
int 10h MOV POCVID,AL ; sa~uvaj ga
MOV AX,0600h ; obrii ekran
MOV BH,07 MOV CX,0 MOV DX,184Fh INT 10h MOV AH,00h ; postavi novi video re`im
MOV AL,NOVIVID INT 10h MOV AX,0 ; inicijaliziraj mi
INT 33h MOV AX,01 INT 33h
6. Programabilne jedinice, tehnike U/I prenosa
6-87
KURSOR 20,20 PRIKAZ PORUKA1 PONOVI MOV AX,03h ; dobavi poziciju mia
INT 33h MOV AX,CX ; dobavi horizontalnu piksel poziciju
CALL KONVERZ ; konvertuj na prikaz znaka
MOV POZ_HOR,AL ; smesti LS cifru
MOV POZ_HOR+1,AH ; smesti MS cifru
MOV AX,DX ; dobavi vertikalnu piksel poziciju kursora
CALL KONVERZ ; konvertuj
MOV POZ_VER, AL ; sa~uvaj
MOV POZ_VER+1,AH KURSOR 5,20 PRIKAZ PORUKA2 PRIKAZ POZ_HOR PRIKAZ POZ_VER MOV AH,01 ; proveri da li je pritsnuta dirka
INT 16h JZ PONOVI ; ako nije pritisnuta go to PONOVI
MOV AH,02 ; u~initi mi nevidljivim
INT 33h MOV AH,0 ; obnovi po~etni re`im video prikaza
MOV AL,POCVID ; napuni po~etni re`im video prikaza
INT 10h MOV AH,4Ch ; povrtak na DOS
INT 21h GLAVNI ENDP ;******************************
; procedura za konverziju pozicije kursora u poziciju ASCII
; znakova, AX=pozicija piksera (u heksa formatu)
; pri povratkuiz procedure AX=dve ASCII cifre
KONVERZ PROC SHR AX,1 ; deli sa 8 da bi se dobila pozicija kursora misa
SHR AX,1 ; izra`ena upoziciji znaka
SHR AX,1 MOV BL,10 SUB AH,AH
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-88
DIV BL ; deli sa 10 da bi konvertovao heksa u decimalno
OR AX,3030h ; formiraj ASCI kôd
RET ; povratak sa AX=dva ASCII znaka
KONVERZ ENDP END GLAVNI G. Postavljanje pozicije pokaziva~a mia (AX=04)
Ova funkcija omoguava pozicioniranje kursora mia na bilo koju poziciju na ekranu. Pre nego to se ova funkcija pozove, novu koordinatu X treba smestiti u CX a Y u DX. Vrednosti moraju biti izra`ene u broj piksela i da se nalaze u opsegu od 0 do 639 za X i od 0 do 199 za Y, pri rezoluciji video prikaza od 640*200. Koordinata (0,0) odgovara krajnjem levom polo`aju gore. Ilustracije radi, da bi se postavio kursor na lokaciji karaktera 9. kolona, 5. vrsta (u tekstualnom re`imu rada va`i format 80*25), potrebno je da pomno`iti obe koordinate sa 8, kako bi se dobila pozicija piksela, tj. koordinate karaktera (9. kolona, 5. vrsta), postaju, sada, piksel koordinate (72. kolona, 42. linija).
H. Pribavljanje informacije o pritisnutoj dirci mia (AX=05)
Ova funkcija se koristi za pribavljanje informacije o tome koji je taster pritisnut, nakon zadnjeg poziva ove funkcije. Registri se, pri pozivu funkcije, postavljaju na sledei na~in:
AX=05
BX=0 za levi taster, = 1 za desni, = 2 za srednji
Nakon povratka, imaemo:
AX=status tastera, pri~emu bitovi imaju sledea zna~enja:
levi taster: D0= pritisnutnije 0tisnuttaster pri 1
==
desni taster D1= pritisnutnije 0tisnuttaster pri 1
==
srednji taster D2= pritisnutnije 0tisnuttaster pri 1
==
BX=broj pritiskanja tastera
CX=X horizontalna koordinata u pikselima zadnjeg pritiskanja dirke
DX=Y vertikalna koordinata u pikselima zadnjeg pritiskanja dirke
Sledea programska sekvenca prikazuje jedan od na~ina kako se koristi ova funkcija.
;****************
TITLE PROG6 Prikazuje broj pritiskanja misa ; ovaj program ~eka da se mi pritisne odredjeni broj puta i
; prikazuje taj broj kada se bilo koja dirka sa tastature pritisne
; pritisni bilo koju dirku da bi se vratio u lDOS
PAGE 60,132 KURSOR MACRO VRSTA,KOLONA MOV AH,02 h MOV BH,00 MOV DH,VRSTA
6. Programabilne jedinice, tehnike U/I prenosa
6-89
MOV DL,KOLONA INT 10h ENDM PRIKAZ MACRO NIZ MOV AH,09h MOV DX,OFFSET NIZ ; napuni adresu niza
INT 21h ENDM .MODEL SMALL .STACK .DATA PORUKA1 DB ’Pritisni levo dugme manje od 99 puta’,’$’ PORUKA2 DB ’Da se odredi koliko puta je pritisnuta bilo koja dirka’,’$’ PORUKA3 DB ’Pritisnuli ste je’,’$’ BROJ_PR DB ?. ?. ’Broj puta’,’$’ POKUKA4 DB ’Sada pritisni bilo koju dirku za izlazak u DOS’,’$’ PREVID DB ? ; tekuci video re`im rada
NOVVID DB 12h ; novi video re`im rada
.CODE MOV AX,@DATA MOV DS,AX MOV AH,0Fh ; dobavi tekui video re`im
INT 10h MOV PREVID,AL ; zapamti ga MOV AX,0600h ; obrii ekran
MOV BH,07 MOV CX,0 MOV DX,184Fh INT 10h MOV AH,00h ; postavi novi re`im videa
INT 10h MOV AX,0 ; inicijaliziraj mi
INT 33h MOV AX,01 ; prika`i poziciju mia
INT 33h KURSOR 2,1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-90
PRIKAZ PORUKA1 KURSOR 4,1 PRIKAZ PORUKA2 MOV AH,07 ; ~ekaj na pritisak dirke
INT 21h MOV AX,05 ; dobavi broj pritiskanja mia
MOV BX,0 ; proveri da li je pritsnuta leva dirka
INT 33h MOV AX,BX ; BX= broj pritiskanja dirke
MOV BL,10 DIV BL OR AX,3030 ; konverzija u ASCII
MOV BROJ_PR,AL, ; sa~uvaj vrednost
MOV BROJ_PR+1,AH, KURSOR 10,2 PRIKAZ PORUKA3 PRIKAZ BROJ_PR KURSOR 20,2 PRIKAZ PORUKA4 MOV AH, 07 ; ~ekaj na pritiska dirke sa tastature
INT 21h MOV AH,02 ; u~ini mi nevidljivim
INT 33h MOV AH,0 ; obnovi po~etni re`im l video prikaza
MOV AL,PREVID ; postavi po~etni re`im video prikaza
INT 10h MOV AH,4Ch ; povratak na DOS
INT 21h GLAVNI ENDP END GLAVNI I. Dobavljanje informacije o otputanje dirke mia (AX=06)
Ova funkcija je ista kao i AX=05 sa izuzetkom to predaje informaciju o pritisnutom tasteru mia.
Poziv funkcije se vri pri:
AX=06
BX=0 za levi taster, 1 za desni, 2 za srednji.
Nakon povratka, imaemo sledee:
AX=status dirke, gde
6. Programabilne jedinice, tehnike U/I prenosa
6-91
levi taster: D0= pritisnutnije 0tisnuttaster pri 1
==
desni taster D1= pritisnutnije 0tisnuttaster pri 1
==
srednji taster D2= pritisnutnije 0tisnuttaster pri 1
==
BX= broj pritiskanja pri otputanju;
CX=X piksel koordinata pri zadnjem otputanju (oslobadjanju);
DX=Y piksel koordinata pri zadnjem otputanju.
J. Postavljanje horizontalne granice za pokaziva~ mia (AX=07)
Kada se mi inicijalizira koristei funkciju AX=0, kursor se mo`e pomerati po celom ekranu. Dve naredne funkcije postavljaju X i Y granice u okviru kojih se mi mo`e pomerati. Poziv funkcije se vri na sledei na~in:
AX = 07
CX = minimalna koordinata po X, u pikselima (0 - 639)
DX = maksimalna koordinata po X, u pikselima (0-639)
Treba napomenuti da CX mora da ima manju vrednost od DX, ina~e se javlja efekat swappe.
K. Postavljanje vertikalnih granica za pokaziva~ mia (AX=08)
Vertikalne granice u okviru kojih se kursor mia mo`e poomerati postavljaju se pozivom funkcije AX=08 na sledei na~in:
AX = 08
CX = minimalna koordinata po Y u pikselima (0-199)
DX = maksimalna koordinata po Y u pikselima (0-199)
Treba naglasiti da vrednost u CX mora biti manja od vrednosti u DX, ina~e se javlja efekat swappe.
L. Postavljanje oblasti prikaza gde se pokaziva~ mia ne vidi (AX = 10 h)
Ovom funkcijom se definie oblast prikaza gde se pozicija kursora mia ne vidi. Naime, ako se kursor mia pomeri na tu povrinu, on se ne vidi. Poziv ove funkcije se vri na sledei na~in:
AX = 10h
CX = gornja koordinata X, SI = donja koordinata X
DX = gornja koordinata Y DI = donja koordinata Y
M. Pribavljanje informacije o verziji drajvera mia (AX = 24 h)
Ova funkcija omoguava programeru da odredi koja je verzija pokreta~kog programa (drajvera mia) instalirana. Takodje, ona ukazuje na tip instaliranog mia. Funkcija se poziva na sledei na~in:
AX = 24h
Nakon povratka imaemo:BH = glavna verzija, BL = pod-verzija (ilustracije radi, verzije 7.20, glavna verzija je 7 a pod-verzija 20).
CH = tip mia
= 1 mi koji koristi magistralu
= 2 serijski mi
= 3 InPort mi
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-92
= 4 PS/2 mi
= 5 HP mi
CL = 0, ako je mi tipa PS/2. Za slu~aj da je serijski mi, tada brojevi izmedju 2 i 7 ukazuju na to koji se IRQ broj koristi (kao to je IRQ2, IRQ3,...).
Test pitanje 6.91
Zadnjih desetak godina LCD prikazi sve ~ee zamenjuju LED prikaze. Navesti klju~ne razloge ovakvog trenda.
Odgovor 1. Cena LCD prikaza (displeja) postaju sve ni`e.
2. Postoji mogunost da LCD prikazuju cifre, znakove (karaktere), i grafiku (semigrafi~ki simboli), nasuprot LED prikazima, koji su uglavnom ograni~eni na prikaz cifara, manjeg broja znakova i semigrafi~kih simbola.
3. Ugradnjom kontrolera za osve`avanje u sam LCD prikaz, CPU je oslobodjen od zadatka koji se odnosi na LCD osve`avanje. Kod LED prikaza ulogu osve`avanja uglavnom obavlja CPU.
4. Programiranje je jednostavno, kako za prikaz tekstualne, tako i grafi~ke informacije.
Test pitanje 6.92
Kataloki podaci koji se odnose na: (a) opis pinova LCD displeja prikazani su na Slici 6.45; (b) odgovarajue komandne kôdove - na Slici 6.46; (c) pozicije pinova razli~itih tipova LCD displeja firme Optrex - na Slici 6.47; (d) na~in povezivanja sa portom 8255A - na Slici 6.48.
Ukazati na to:
(1) kako se vri predaja komandi LCD displeju;
(2) kako se vri predaja podataka LCD displeju.
Pin Simbol
U/I Opis
1 VSS - Masa
2 VCC - +5V napajanje
3 VEE - Izvor napajanja za upravljanje kontrastom
4 RS U Selekcija registra:
- RS = 0 za selekciju registra komande instrukcije,
- RS=1 za selekciju registra podataka
5 R/W U Dozvola
6 E U 8-bitna magistrala podataka
7 DB0 I - || -
8 DB1 I - || -
9 DB2 I - || -
10 DB3 I - || -
11 DB4 I - || -
12 DB5 I - || -
6. Programabilne jedinice, tehnike U/I prenosa
6-93
13 DB6 I - || -
14 DB7 I - || -
Slika 6.45 Opis funkcija pina jednog tipa LCD displeja
Kod (heksa)
Komanda za instrukcioni registar LCD-a
1 Obrii prikaz ekrana
2 Povratak na poziciju home
4 Dekrementiraj kursor (pomeranje kursora ulevo)
6 Inkrementiraj kursor (pomeranje kursora udesno)
5 Pomeri prikaz desno
7 Pomeri prikaz levo
8 Isklju~i prikaz, isklju~i kursor
A Isklju~i prikaz, uklju~i kursor
C Uklju~i prikaz, isklju~i kursor
E Uklju~i prikaz, uklju~i kursor
F Uklju~i prikaz, blinkaj kursor
10 Pomeri poziciju kursora ulevo
14 Pomeri poziciju kursora udesno
18 Pomeri ceo prikaz ulevo
1C Pomeri ceo prikaz udesno
C0 Dovedi kursor na po~etak druge linije
38 2 linije i matrica 5x7
Slika 6.46 Opis komandnih kodova LCD displeja
1 2 13 14
14 13 2 1
14 13
2 1
DMC16106ADMC1606CDMC16117DMC16128DMC16129DMC16433DMC20434
DMC16106BDMC16207DMC16230DMC16215DMC16216
DMC20261DMC24227DMC24138DMC32132DMC32239DMC40131DMC40218
Slika 6.47 Pozicija pinova kod razli~itih LCD prikaza firme Optrex
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-94
Kolo zadekodiranje
D0 PA0
D7 PA7
WR
RD
A0 PB0A1 PB1
PB2CS RESET
D0 VCC VEE
D7 VSS
RS R/W E
D0
D7IOW
IOR
A0A1
A2A9
AEN
8255
LCD
Slika 6.48 Na~in sprezanja interfejsa 8255 sa LCD displejom
Odgovor Pre nego to uka`emo na to kako se vri predaja komandi i podataka LCD displeju, zadr`aemo se najpre na kraem opisu pinova LCD displeja.
• VCC - je pin za +5 V
• VSS - je pin za masu
• VEE - koriste se za kontrolu kontrasta LCD displeja
• RS - izbor registra.Unutar LCD displeja ima dva registra, izbor pristupa se vri na sledei na~in:
RS = 0 : pristupa se komandnom registru (komande su tipa brisanje prikaza, kursor u poziciji home i dr).
RS = 1 pristupa se registru podataka.
• R/W -(Read/Write): ovaj ulaz omoguava korisniku da upie informaciju u LCD pri R/W = 0, ili da pro~ita informaciju iz LCD-a pri R/W = 1.
• E -(Enable): koristi se od strane LCD-a za le~ovanje informacije prisutna na pnovima za podatke. Le~ovanje se vri impulsom koji se dovodi na ovaj pin. Prelaz impulsa kod le~ovanja mora biti tipa high-to-low a minimalna irina impulsa treba da je 450 ns.
• D0-D7 - 8 bitova za podatke. Koriste se za predaju informacije LCD-u ili ~itanje sadr`aja internih registara LCD-a. Pri RS = 1, u displej se mogu upisivati slova A-Z i a - z, kao i cifre 0 - -9.
Spisak komandi koji se mo`e predati LCD displeju prikazan je na Slici 6.46. Kod upisa komande RS = 0. Pre upisa komandi potrebno je da se proveri stanje markera busy koji ukazuje da li je LCD spreman da prihvati informaciju. Marker bysy predstavlja bit D7, a njegovo stanje se mo`e ~itati kada je R/W = 1 i RS = 0. Kada je D7 = 1 tada je i busy marker = 1, to zna~i da LCD obavlja neku internu operaciju i nee prihvatiti novu informaciju. Kada je D7=0, LCD je spreman da primi novu informaciju. Zbog ovoga, pre nego to se upisuje bilo kakav podatak u LCD, preporu~ljivo je da se testira stanje busy markera (busy flag - BF).
Da bi predali komandu LCD prikazu, shodno sadr`aju sa Slike 6.46, neophodno je postaviti pin RS na logi~ku nulu, a zatim generisati high-to-low impuls na E pinu i time dozvoliti interno le~ovanje podataka u LCD-u.
U sledeoj programskoj sekvenci prikazana je ta aktivnost; pri ~emu je usvojeno sledee:
(a1) Oba porta, A i B, ~ipa 8255 su konfigurisani kao izlazni
(a2) LCD pinovi podataka D0 do D7 povezani su na Port A ~ipa 8255
6. Programabilne jedinice, tehnike U/I prenosa
6-95
(a3) LCD-ov pin R/W povezan je na PB1 Porta B ~ipa 8255.
(a4) LCD-ov pin E povezan je na PB2 Porta B ~ipa 8255
MOV AL,38h ; inicijaliziraj LCD za dve linije & matri~ni prikaz znakova formata 5*7
CALL KOMAND ;upis komande u LCD
CALL ZAKASNI ; sa~ekaj pre naredne komande
MOV AL,0Eh ; predaj komandu LCD-u, o generisanju kursora CALL KOMAND ;upis komande u LCD
CALL ZAKASNI ; sa~ekaj pre naredne komande
MOV AL,01 ; obrii LCD
CALL ZAKASNI MOV AL,06 ; komanda za pomeranje kursora udesno ......
; ** mo`e da sledi bilo koja druga komanda
; procedura KOMAND je sledeeg oblika
KOMAND PROC ; procedura upisuje komandu u LCD
PUSH DX ; sa~uvaj u magacin DX
MOV DX,PORTA OUT DX,AL ; poalji kod na Port A
MOV DX,PORTB ; adresa Porta B
MOV AL,00000100B ; RS=0, R/W=0, E=1 za impuls tipa high-to-low OUT DX,AL ; generii izlaz na Portu B
NOP ; ~ekaj da impuls high-to-low
NOP ; bude Pirine najmanje 450 ns
NOP ; ovo mo`e da se izvede i kao petlja
NOP MOV AL,00000000B ; RS=0, R/W = 0, E = 0
OUT DX,AL POP DX ; obnovi sadr`aj DX-a
RET KOMAND ENDP Kada se predaje podatak LCD-u neophodno je postaviti RS= 1 i predati high-to-low impuls pinu E, ~ime se omoguava interno le~ovanje podataka u LCD-u. Sledea programska sekvenca koristi se za predaju (upis) podataka LCD-u. Izmedju dve predaje umee se kanjenje kako bi LCD bio spreman da prihvati novi podatak, pri ~emu je usvojeno sledee:
(b1) Oba porta A i B ~ipa 8255 sa Slike 4 sukonfigurisana kao izlazna
(b2) LCD pinovi podataka D0 - D7 povezani su Port A ~ipa 8255
(b3) LCD-ov pin RS povezan je na PB0 Porta B ~ipa 8255.
(b4) LCD-ov pin R/W povezan je na PB1 Porta B ~ipa 8255
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-96
(b5) LCD-ov pin E povezan je na PB2 Porta B ~ipa 8255
; ** u segmentu podataka ***
PODACI DB “ZDRAVO”
; ** deo progamske sekvence iz kodnog segmenta ***
MOV CX,6 ; predaju se 6 ASCII znakova za prikaz
MOV SI,OFFSET PODACI ; puni se ofset adresa
NAREDNI MOV AL[SI] ; dobavi znak u AL
CALL UPPOD ; poziv potprograma za upis podatka
INC SI ; uka`i na naredni
CALL ZAKASNI ; ~ekaj za naredni znak
LOOP NAREDNI ; svi podaci upisani na LCD
....
; podaci se upisuju u LCD bez da se vri provera
; markera busy, AL = znak koji se predaje LCD-u
UPPOD PROC
PUSH DX ; sa~uvaj DX u magacin
MOV DX,PORTA ; DX = adresa Porta A
OUT DX,AL ; predaja znaka ka LCD-u
MOV AL,00000101B ; RS = 1, R/W = 0, E= 1 za generisanje impulsa high-to-low
MOV DX,PORTB ; adresa Porta B
OUT DX,AL ; impuls Enable = “high” zbog impulsa high-to-low, dok je RS = 1
NOP
NOP
MOV AL,0000000lB ; RS = 1, R/W = 0, E = 0 za impuls high-to-low
OUT DX,AL
POP DX
RET
UPPOD ENDP
U prethodnoj proceduri ne testira se stanje markera busy. Treba naglasiti da proizvodja~ LCD displeja u svojim katalokim podacima preporu~uje da se busy marker testira pre nego to se preda novi podatak. Programski kod kod koga je obezbedjeno testiranje markera busy ima sledei oblik:
UPISP PROC ; upis ASCII podatka u LCD
PUSH DX ; sa~uvaj DX
MOV AH,AL ; sa~uvaj podatak koji se alje ka LCD-u
MOV AL,90h ; definii Port A=ulazni, Port B=izlazni
MOV DX,KPORT ; DX=adresa komandnog porta 8255
OUT DX,AL ; upis u komandni Port 8255
6. Programabilne jedinice, tehnike U/I prenosa
6-97
MOV AL,00000110B ; RS=0 je ~itanje busy markera komanda, R/W = 1 i E = 1
MOV DX,PORTB ; adresa Porta B
OUT DX,AL ; upis u Port B
MOV DX,PORTA ; adresa Porta A
PONOVI IN AL,DX ; ~itaj busy marker (D7)
ROL AL,1 ; smesti busy marker u CF
JC PONOVI ; if CF = 1 LCD nije spreman, go to PONOVI
MOV AL,80h ; Port A = izlazni definicija komandne re~i
MOV DX,KPORT ; DX = aredsa upravlja~kog porta 8255
OUT DX,AL ;upis upravlja~ke re~i u 8255
MOV AL,AH ;dobavi znak koga treba poslati na LCD
MOV AL,00000101B ; RS = 1 jer je upis podatka, R/lW = 0,
; E = 1 za impuls high-to-low
MOV DX,PORTB ; adresa porta B
OUT DX,AL ; E = 1 za high-to-low impuls
NOP ; dok je RS = 1
NOP
MOV AL,00000001B ; RS = 1, R/W = 0, E = 0 za impuls high-to-low
OUT DX,AL ; za Port B
POP DX ; obnosi DX
RET
UPISP ENDP
Kod LCD-a podatak je mogue upisati na bilo koju lokaciju. Adresa lokacije i na~in pristupa definisan je na sledei na~in:
RS R/W
D7
D6 D5 D4 D3 D2 D1 D0
0 0 1 A A A A A A A
gde se za liniju 1 adresa: AAA AAAA nalazi u opsegu od 000 0000 do 010 0111, za liniju 2: AAA AAAA = 100 0000 do 110 0111. (Za vie detalja videti Sliku 6.49)
D7
D6 D5 D4
D3
D2
D1
D0
linija 1 (min) 1 0 0 0 0 0 0 0
linija 1 (max) 1 0 1 0 0 1 1 1
linija 2 (min) 1 1 0 0 0 0 0 0
linija 2 (max) 1 1 1 0 0 1 1 1
Slika 6.49 Adresiranje LCD-a
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-98
Vie adrese mogu dostii vrednost do 010 0111 za LCD sa 40 znakova, ili do vrednosti 010 011 za LCD-ove sa 20 znakova. Na osnovu prethodne diskusije mogue je odrediti adrese pozicije kursora za LCD razli~itih formata kako je to prikazano na Slici 6.50
16*2 LCD
80 81 82 83 84 85 86 do 8F C0 C1 C2 C3 C4 C5 C6 do CF
20*1 LCD
80 81 82 83 do 93
20*2 LCD
80 81 82 83 do 93 C0 C1 C2 C3 do D3
20*4 LCD
80 81 82 83 do 93 C0 C1 C2 C3 do D3 94 95 96 97 do A7 D4 D5 D6 D7 do E7
40*2 LCD
80 81 82 83 do A7 C0 C1 C2 C3 do E7
Napomena sve adrese su date kao heksadecimalne
Slika 6.50 Adrese kursora za razli~ite LCD prikaze
Ilustracije radi, na Slici 6.51 dati su vremenski dijagrami signala koji se odnose na pobudu LCD-a, a na Slici 6.52 lista svih instrukcija koje podr`avaju LCD-ovi firme Optrex Corporation.
Data
tDSWtH
tAS tPWH tAH
E
R/W
RS
tPWH = Enable pulse width = 450 ns (minimum)tDSW = Data set up time = 195 ns (minimum)tH = Data hold time = 10 ns (minimum)tAS = Set up time prior to E (going high) for both RS and R/W = 140 ns (minimum)tAH = Hold time after E has come down for both RS and R/W = 10 ns (minimum
Slika 6.51 Vremenski dijagrami karakteristi~nih signala LCD-ova firme Optrex Corporation
6. Programabilne jedinice, tehnike U/I prenosa
6-99
Code Intruction
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Description Execution Time (max)
Clear Display 0 0 0 0 0 0 0 0 0 1 Clears entire display and sets DD RAM address 0 in adress counter
1.64 ms
Return Home 0 0 0 0 0 0 0 0 1 -- Sets DD RAM address counter. Also returns display being shifted to original position. DD RAM contents remain unchanged.
1.64 ms
Entry Mode Set 0 0 0 0 0 0 0 1 1/D
S Sets cursor move direction and specifies shift of display. These operations are performed during data write and read.
40 µs
Display ON/OFF Control
0 0 0 0 0 0 1 D C B Sets ON/OFF od entire display (D), cursor ON/OFF (C). and blink of cursor position character (b).
40 µs
Cursor or Display Shift
0 0 0 0 0 1 S/C
R/L
-- -- Moves cursor and shifts display without changing DD RAM contents.
40 µs
Function Set 0 0 0 0 1 DL N F -- -- Sets interface data length (DL), number of display lines (L) and character font (F).
40 µs
Set CG RAM Adress
0 0 0 1 AGC Sets CGRAM address. CG RAM data is sent and received after this setting.
40 µs
Set DD RAM Address
0 0 1 ADD Sets DD RAM address. DD RAM data is sent ind received after this setting.
40 µs
Read Busy Flag & Address
0 1 BF AC Reads Busy flag (BF) indicating internal operation is being performed and reads address counter contents.
40 µs
Write Data to CG or DD RAM
1 0 Write Data Writes data into DD RAM or CG RAM
40 µs
Read Data from CG or DD RAM
1 1 Read Data Reads data into DD RAM or CG RAM
40 µs
Notes: 1. Execution times are maximum times when fcp or fosc is 250 kHz. 2. Execution time changes when frequency changes. Ex: when fcp or fosc is 270KHz; 40µs*250/270 = 37µs 3. Abbrevations: DD RAM Display data RAM CG RAM Character generator RAM ACC CG RAM address ADD DD RAM Address, coresponds to cursor address AC Address counter used for both DD and CG RAM address 1/D=1 Increment 1/D=0 Decrement S=1 Accompanies display shift S/C=1 Display shift
Zbirka zadataka iz Mikroprocesora i mikrora~unara
6-100
S/C=0 Cursor move R/L=1 Shift to the right R/L=0 Shift to the left DL=1 8 bits, DL=0:4 bits N=1 1 lines, N=0:1 line F=1 5*10 dots, F=0: 5*7 dots BF=1 Internally operating BF=0 Can accept instruction
Slika 6.52 Lista instrukcija LCD-ova firme Optrex Corporation
Dodatak A
A-1
A. APPENDIX: ASSEMBLER DIRECTIVES AND NAMING RULES
ö õ
SECTION A.1: 80x86 ASSEMBLER DIRECTIVES This section consists of two parts. The first part describes some of the most widely used directives in 80x86 Assembly language programming. In the second part Assembly language rules and restrictions for names and labels are discussed and a list of reserved words is provided.
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. where name1, name2, and so on, are the names of the segments. The same result can be achieved by having one ASSUME for each register:
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-2
ASSUME CS:name1 ASSUME DS:name2 ASSUME SS:name3 ASSUME ES:nothing
ASSUME nothing The key word "nothing" can be used to cancel a previous ASSUME directive.
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' In DATA1 a single byte is defined with initial value 23, DATA2 consists of several values in decimal (45), hex (97H), and binary (10000011B), Finally, in DATA3, the DB directive is used to define ASCII characters. The DB directive is normally used to define ASCII data. In all the examples above, the address location for each value is assigned by the assembler. We can assigned a specific offset address by the use of the ORG directive.
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. VALUE1 DD 4563F57H RESULT DD ? ; RESERVE 4-BYTE LOCATION DAT4 DD 25000000 It must be noted that the valules defined using the DD directive are placed in memory by the assembler in low byte to low address and high byte to high address order. This convention is referred to as little endian. For example, asssuming that offset address 0020 is assigned to VALUE1 in the example above, each byte will reside in memory as follows:
DS:20=(57)
DS:21=(3F)
DS:22=(56)
DS:23=(04)
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
DT (Define Tenbytes) To allocate packed BCD data, 10 bytes at a time, the DT directive is used. This is widely used for memory allocation associated with BCD numbers.
Dodatak A
A-3
DATA DT 39997765419974 Notice there is no H for the hexadecimal identifier following the number. This is a characteristic particular to the DT directive. In the case of other directives (DB, DW, DD, DQ), if there is no H at the end of the number, it is assumed to be in decimal and will be converted to hex by the assembler. Remember that the little endian convention is used to place the bytes in memory, with the least significant byte going to the low address and the most significant byte to the high address. DT can also be used to allocated decimal data if "d" is placed after the number. DATA DT 6553d ; stores hex FFFF in a 10-byte location
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 ZERO 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 Again in terms of placing the bytes in memory the little endian convention is used with the least significant byte giong to the low address and the most significant byte going to the high address.
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 PROGRAM . . . END HERE ; EXIT POINT OF THE PROGRAM
If there are several modules, only one of them can have the entry point, and the name of that entry point must be the same as the name put for the END directive as shown below: ; from the main program:
EXTRN PROG1:NEAR ....
MAIN_PRO: MOV AX,DATASG ; THE ENTRY POINT MOV DS,AX .... CALL PROG1 .... END MAIN_PRO ;THE EXIT POINT ; from the module PROG1: PUBLIC PROG1 PROG1 PROC ... RET ; RETURN TO THE MAIN MODULE PROG1 ENDP END ; NO LABELIS GIVEN
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-4
- Notice the following points about the above code:
1. The entry point must be identified by a name. In the example above the entry point is identified by the name MAIN_PRO.
2. The exit point must be identified by the same name given to the entry p oint, MAIN_PRO.
3. Since a given program can have only one entry point and exit point, all modules called (either from main or from the submodules) must have directive END with nothing after it.
ENDP (see the PROC directive)
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 Unlike data directives such as DB, DW, and so on, EQU does not assign any memory storage: therefore, it can be defined at any time at any place, and can even be used within the code segment.
EVEN The EVEN directive forces memory allocation to start at an even addr ess. This is useful due to the fact that in 8086, 286,, and 386SX microprocessors, accessing a 2-byte operand located at an odd address takes extra time. The use of the EVEN directive directs the assembler to assign an even address to the variable. ORG 0020H DATA_1 DB 34H EVEN DATA_2 DW 7F5BH The following shows the contents of memory locations: DS:0020 = (34) DS:0021 = (?) DS:0022 = (5B) DS:0023 = (7F)
EXTRN (External) The EXTRN directive is used to indicate that certain variables and names used in m odule are defined by another module. In the absence of the EXTRN directive, the assembler would search for the definition and give an error when it couldn’t find it. The format of this directive is:
EXTRN name1:typea [,name2:typeb]
where type will be NEAR or FAR if name refers to a procedure, or will be BYTE, WORD, DWORD, QWORD, TBYTE if name refers to a data variable.
;from the main program:
EXTRN PROG1:NEAR
PUBLIC DATA1
. . .
Dodatak A
A-5
MAIN_PRO MOV AX,DATASG ; THE ENTRY POINT
MOV DS,AX
. . .
CALL PROG1
. . .
END MAIN_PRO ; THE EXIT POINT
; PROG1 is located in a different file:
EXTRN DATA1:WORD
PUBLIC PROG1
PROG1 PROC
. . .
MOV BX,DATA1
. . .
RET
PROG1 ENDP
END
Notice that EXTRN directive is used in the main procedure to identify PROG1 as a NEAR procedure. This is needed because PROG1 is not defined in that module. Correspondingly, PROG1 is defined as PUBLIC in the module where it is defined. EXTRN is used in the PROG1 module to declare that operand DATA1, of size WORD, has been defined in another module. Correspondingly, DATA1 is declared as PUBLIC in the calling module.
GROUP The GROUP directive causes the named segments to be linked into the same 64k bytes. This can be used to combine segments of the same type, or different classes of segments. An example follows:
SMALL_SYS GROUP DTSEG,STSEG,CDSEG
The ASSUME directive must be changed to make the segment registers point to the group:
ASSUME CS:SMALL_SYS,DS:SMALL_SYS,SS:SMALL_SYS
The group will be listed in the list file, as shown below:
Name Lenght Align Combine Class
SMALL_SYS GROUP
STSEG 0040 PARA NONE
DTSEG 0024 PARA NONE
CDSEG 005A PARA NONE
INCLUDE When there is a group of macros written and saved in a separate file, the INCLUDE directive can be used to bring them into another file.In the program listing (.Ist file), these macros will be identified by the symbol “C” (or “+” in some versions of MASM) before each instruction to indicate that they are copied to the present file by the INCLUDE directive.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-6
LABEL The LABEL directive allows a given variable or name to be referred to by multiple names.This is often used for multiple definition of the same variable or name. The format of the LABEL directive is name LABEL type where type may be BYTE, WORD, DWORD, QWORD. For example, a variable name DATA1 is defined as a word and also needs to be accessed as 2 bytes, as shown in the following: DATA_B LABEL BYTE DATA1 DW 25F6H MOV AX,DATA1 ;AX=25F6H MOV BL,DATA_B ;BL-F6H MOV BH,DATA_B+1 ;BH=25H
The following shows the LABEL directive being used to allow accessing a 32-bit data item in 16-bit portions. DATA_16 LABEL WORD DATDD_4 DD 4387983FH .... MOV AX,DATA_16 ;AX=983FH MOV DX,DATA_16+2 ;DX=4387H
The following shows its use in a JMP instruction to go to a different code segment ... JMP PROG_A PROG_A LABEL FAR INITI: MOV AL,12H OUT PORT,AL In the program above the address assigned to the names “PROG_A” and “INITI” are exactly the same. The same function can be achieved by the following.
JMP FAR PTR INITI
LENGHT The LENGTH operator returns the number of items defined by a DUP operand. See the SIZE directive for an example.
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
Dodatak A
A-7
The PAGE directive is used to make the “.Ist” file print in a specific format. The formaat of the PAGE directive is PAGE [lines],[columns] The default listing (meaning that no PAGE directive is coded) will have 66 lines per page with a maximum of 80 characters per line.This can be changed to 60 and 132 with the directive “PAGE 60, 132”. The range for number of lines is 10 to 255 and for columns is 60 to 132. A PAGE directive with no number will generate a page break.
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
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-8
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.
PUBLIC To inform the assembler that a name or symbol will be referenced by other modules, it is marked by the PUBLIC directive. If a module is referencing a variable outside itself, that variable must be declared as EXTRN. Correspondingly, in the module where the variable is defined, that variable must be declar ed as PUBLIC in order to allow it to be referenced by other modules. See the EXTRN directive for examples of the use of toth EXTRN and PUBLIC.
SEG (Segment Address) The SEG operator is used to access the address of the segment where the name has been defin ed. DATA1 DW 2341H ... MOV AX,SEG DATA1 ;AX =SEGMENT ADDRESS OF DATA1
This is in contrast to the OFFSET directive, which accesses the offset address instead of the segment.
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 DATA1 DB 2FH 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 ALIGNMENT: When several assembled modules are linked togother, this indicates where the segment is to begin. There are many options, including PARA (paragraph = 16 bytes), WORD, and BYTE. If PARA is chosen, the segment starts at a hex address divisible by 10h, PARA is the default alignment. In this alignment, if a segment for a module finished at 00024H, the next segment will start at address 00030H, leaving from 00025 to 0002F unused. If WORD is chosen, the segment is forced to start at a word boundary. In BYTE alignment, the segment starts at the next byte and no memory is wasted.There is also the PAGE option, which aligns segments along the 100H (256) byte boundary. While all these options are supportes by many assemblers, such as MASM and TASM, there is another option supported only by assemblers that allow system development. This option is AT. The AT option allows the program to assign a physical address. For example, to burn a program int ROM startilng at physical address F0000, code ROM_CODE SEGMENT AT F000H
Due to the fact that option AT allows the programmer to specify a physical address that conflicts with DOS’s memory management responsibility, many assemblers such as MASM will not allow option AT.
COMBINE TYPE: This option is used to merge together all the similar segment to create one large segment. Among the options widely used are PUBLIC and STACK. PUBLIC is widely used in code segment
Dodatak A
A-9
definitions when linking more than one module. This will consolidate all the code segments of the various modules into one large code segment. If there is only one data segment and that belongs to the main module, there is no need to define it as PUBLIC since no other module has any data segment to combie with. However, if other modules have their own data segments it is recommended that they be made PUBLIC to create a single data segment when they are linked. In the absence of that, the llinker would assume that each segment is private and they would not be combined with other similar segment (codes with codes and data with data). Since there is only one stack segment, which belongs to the main module, there is no need to define it as PUBLIC. The STACK option is used only with the stack segment definition and indicates to the linker that it should combine the user’s defined stack with the system stack to create a single stack for the entire program. This is the stack that is used at run time (when the CPU is actually ex ecuting the program).
CLASS NAME: Indicates to the linker that all segments of the same class should be placed next to each other by the LINKER. Four class names commonly used are “CODE”, “DATA”, “STACK”, and “EXTRA”. When this attribute is used in the segment definition, it must be enclosed in single apostrophes in order to be recognized by the linker.
SHORT In a direct jump such as “JMP POINT_A”, the ssembler has to choose either the 2 -byte or 3-byte format. In the 2-bylte format, one byte is the opcode and the second byte is the signed number displacement value added to the IP of the instruction immediately following the JMP. This displacement can be anywhere between -128 and + 127. A negative number indicates a backward JMP and a positive number a forward JMP. In the 3-bylte format the first byte is the opcode and the next two bytes are for the signed number displacement value, which can range from -32,768 to 32,767. When assembling a program, the assembler makes two passes through the program. Certain tasks are done in the first pass and orhers are left to the second pass to complete. In the first pass the assembler choses the 3 -bylte code for the JMP. After the first pass is complete, it will know the target address and fill it in during the second pass. If the target address indicates a short jump (less than 128) bytes away, it fills the last byte with NOP. To inform the assembler that the target address is no more than 128 bytes away, the SHORT directive can be used. Using the SHORT directive makes sure that the JMP is a 2-byte instructin and not 3-byte with 1 byte as NOP code. The 2-byte JMP requires 1 byte less memory and is executed faster.
SIZE The size opeator returns the total number of bytes occupied by a name. The three directives LENGTH, SIZE, and TYPE are somewhat related.Below is a description of each one using the following set of data defined in a data segment.: DATA1 DQ ? DATA2 DW ? DATA3 DB 20 DUP (?) DATA4 DW 100 DUP (?) DATA5 DD 10 DUP (?) TYPE allows one to know the storage allocation directive for a given variable by providing the number of bytes according to the following table: bytes
1 DB
2 DW
4 DD
8 DQ
10 DT
For example, MOV BX,TYPE DATA2 ; BX=2
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-10
MOV DX,TYPE DATA1 ; DX=8 MOV AX,TYPE DATA3 ; AX=1 MOV CX,TYPE DATA5 ; CX=4
When a DUP is used to define the number of entries for a given variable, the LENGTH directive can be used to get that number. MOV CX,LENGTH DATA4 ; CX = 64H (100 DECIMAL) MOV AX,LENGTH DATA3 ; AX = 14H (20 DECIMAL) MOV DX,LENGTH DATA5 ; DX = 0A (10 DECIMAL)
If the defined variable does not have any DUP in it, the LENGTH is assumed to be 1. MOV BX,LENGTH DATA1 ; BX = 1
SIZE is used to determine the total number of bytes allocated for a variable that has been defined with the DUP directive. In reallity the SIZE directive basically provides the product of the TYPE times LENGTH. MOV DX,SIZE DATA4 ; DX = C8H = 200 (100 * 2 = 200) MOV CX,SIZE DATA5 ; CX = 28H = 40 (4 * 10 = 40)
STRUC (Structure) The STRUC directive indicates the beginning of a structure definition. It ends with an ENDS directive, whose label matches the STRUC label. Althuogh the same mnemonic END is used for end of segment and end of structurre, the assembler knows which is meant by the context. A structure is a collection of dat sa types that can be accessed either collectively by the structure name or individually by the labels of the data types within the structure. A structure type must first be defined and then variables in the data segment may be allocated as that structure type. Looking at the following example, the data directives between STRUC and ENDS declare what structure ASC_AREA looks like. No memory is allocated for such a structure definition. Immediately below the structure definition is the label ASC_INPUT, which is declared to be of type ASC_AREA. Memory is allocated for the variable ASC_INPUT. Notice in the code segment that ASC_INPUT can be accessed either in its entirety or by its component parts. It is accessed as a whole unit in “MOV DX,OFFSET ASC_INPUT”. Its component parts are accessed by the variable name followed by a period, then the component’s name. For example, “MOV BL,ASC_INPUT.ACT_LEN” accesses the actual length field of ASC_INPUT. ;from the data segment: ASC_AREA STRUC ; defines struc for string input MAX_LEN DB 6 ; maximum length of input string ACT_LEN DB ? ; actual length of input string ASC_NUM DB 6 DUP(?) ; input string ASC_AREA ENDS ; end struc definition ASC_INPUT ASC_AREA <> ; allocates memory for struc ; from the code segment: GET_ASC: MOV AH,0AH MOV DX,OFFSET ASC_INPUT INT 2H ... MOV SI,OFFSET ASC_INPUT.ASC_NUM ; SI points to ASCII num MOV BL,ASC_INPUT.ACT_LEN ; BL holds string length ...
TITLE The TITLE directive instructs the assembler to print the title of the program on top of each page of the “.lst” file. What comes after the TITLE pseudo-instruction is up to the programmer, but it is common practice to put the name of the program as stored on the disk right after the TITLE pseudo -instruction and then a brief description of the function of the program. Whatever is placed after the TITLE pseudo -instruction cannot be more than 60 ASCII characters (letters, numbers, spaces, punctuation).
Dodatak A
A-11
TYPE The TYPE operator returns the number of bytes reserved for the named data object. See the SIZE directive for examples of its use.
SECTIN A.2: 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 oth er 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
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 l abel 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.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-12
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: 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
Dodatak A
A-13
STI STOS SUB TEST WAIT XCHG
XLAT XOR
Assembler operators and directives
$ * + - . / = ? [ ]
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
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-14
A.3 The instruction set
The instruction set summary contains a complete alphabetical listing of the entire 8086 --Pentium Pro instruction set.
Each instruction entry lists the mnemonic opcode plus a brief description of the purpose of the instruction. Also listed is the binary machine language coding of each instruction, plus any other data required to form the instruction, such as the displacement or immediate data. Listed to the right of each binary machine language version of the instruction are the flag bits and any change that might occur for the instruction. The flags are described in the following manner: a blank indicates no effect or change, a ? indicates a change with an unpredictable outcome, a * indicates a change with a predictable outcome, a 1 indicates that the flag is set, and a 0 indicates that the flag is cleared. If the flag bits ODITSZAPC are not illustrated with an instruction does not modify any of these flags. Before the instruction listing begins, some information about the bit settings in binary machine language versions of the instructions is presented. Table A-1 lists the modifier bits, coded as oo in the instruction listings. Table A-2 lists the memory-addressing modes available using a register field coding of mmm. This table applies to all versions of the microprocessor as long as the operating mode is 16 -bits.
Table A-3 lists the register selections provided by the rrr field in an instruction. This table includes the register selections for 8-, 16-, and 32-bit registers.
'TABLE A-1 The modifier bits, coded as oo in the instruction listing
oo Function
00 If mmm = 110, then a displacement follows the opcode; otherwise, no displacement is used
01 An 8-bit signed displacement follows the opcode
10 A 16-bit signed displacement follows the opcode (unless it is a 32 -bit displacement)
11 mmm specifies a register instead of an addressing mode
TABLE A-2 The 16-bit register/memory (mmm) field description
mmm Function
000 DS:[BX+SI]
001 DS:[BX+DI]
010 SS:[BP+SI]
011 SS:[BP+DI]
100 DS:[SI]
101 DS:[DI]
110 SS:[BP]
111 DS:[BX]
TABLE A-3 The register field (rrr) assignment
Dodatak A
A-15
Rrr W=0 W=1 (16-bit) W=1 (32-bit)
000 AL AX EAX
001 CL CX ECX
010 DL DX EDX
011 BL BX EBX
100 AH SP ESP
101 CH BP EBP
110 DH SI ESI
111 BH DI EDI
Table A-4 lists the segment register bit assignment (rrr) found with the MOV, PUSH, and POP instructions. When the 80386-Pentium Pro are used, some of the definitions provided in Tables A-1 through A-3 change. Refer to Tables A-5 and A-6 for these changes as they apply to the 80386-Pentium Pro microprocessors.
TABLE A-4 Register field assignments (rrr) for the segment registers
rrr Segment Register
000 ES
001 CS
010 SS
011 DS
100 FS
101 GS
TABLE A-5 Index register specified with rrr for the advanced addressing mode found in the 80386-Pentium Pro microprocessors
rrr Index Register
000 DS:[EAX]
001 DS:[ECX]
010 DS:[EDX]
011 DS:[EBX]
100 No index (see Table A-6)
101 SS:[EBP]
110 DS:[ESI]
111 DS:[EDI]
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-16
TABLE A-6 Possible combinations of oo, mmm, and rrr for the 80386-Pentium Pro microprocessors using 32-bit addressing
oo mmm rrr (base in scaled index byte) Addressing Mode
00 000 - DS:[EAX]
00 001 - DS:[ECX]
00 010 - DS:[EDX]
00 011 - DS:[EBX]
00 100 000 DS:[EAX+scaled index]
00 100 001 DS:[ECX+scaled index]
00 100 010 DS:[EDX+scaled index)
00 100 011 DS:[EBX+scaled index]
00 100 100 SS:[ESP+scaled index]
00 100 101 DS:[disp32+scaled index]
00 100 110 DS:[ESI+scaled index]
00 100 111 DS:[EDI+scaled index]
00 101 - DS:disp32
00 110 - DS:[ESI]
00 111 - DS:[EDI]
01 000 - DS:[EAX+disp8]
01 001 - DS:[ECX+disp8]
01 010 - DS:[EDX+disp8]
01 011 - DS:[EBX+disp8]
01 100 000 DS:[EAX+scaled index+disp8]
01 100 001 DS:[ECX+scaled index+disp8]
01 100 010 DS:[EDX+scaled index+disp8]
01 100 011 DS:[EBX+scaled index+disp8]
01 100 100 SS:[ESP+scaled index+disp8]
01 100 101 SS:[EBP+scaled index+disp8]
01 100 110 DS:[ESI+scaled index+disp8]
01 100 111 DS:[EDI+scaled index+disp8]
01 101 - SS:[EBP+disp8]
01 110 - DS:[ESI+disp8]
01 111 - DS:[EDI+disp8]
10 000 - DS:[EAX+disp32]
10 001 - DS:[ECX+disp32]
10 010 - DS:[EDX+disp32]
10 011 - DS:[EBX+disp32]
10 100 000 DS:[EAX+scaled lndex+d19p32]
10 100 001 DS:[ECX+scaled index+disp32]
10 100 010 DS:[EDX+scaled index+disp32]
10 100 011 DS:[EBX+scaled index+disp32]
Dodatak A
A-17
10 100 100 SS:[ESP+scaled index+disp32]
10 100 101 SS:[EBP+scaled index+disp32]
10 100 110 DS:[ESI+scaled index+disp32]
10 100 111 DS:[EDI+scaled index+disp32)
10 101 SS:[EBP+disp32]
10 110 DS:[ESI+disp32]
10 111 DS:[EDI+disp32]
Notes: disp8=8-bit displacement and disp32=32-bit displacement.
In order to use the scaled index addressing modes listed in Table A-6, code oo and mmm in the second byte of the opcode. The scaled index byte is usually the third byte and contains three fields. The leftmost 2 -bits determine the scaling factor (00 = *1, 01 = *2, 10 = *4, or 11 – *8) The next three bits toward the right contain the scaled index register number (this is obtained from Table A-5). The rightmost 3-bits are from the rrr field listed in Table A-6 .For example, the MOV AL,[EBX+2*ECX] instruction has a scaled index byte of 01 001 011 where 01 = *2, 001= ECX, and 011 = EBX.
Some instructions are prefixed to change the default segment or to override the mode. Table A -7 lists the segment and instruction mode override prefixes with append at the beginning of an instruction if they are used to form the instruction. For example, the MOV AL,ES:[BX] instruction uses the extra segment because of the override prefix ES:. In the 8086 and 8088 microprocessors the effective address calculation requires additional clocks that are added to the times in the instruction set summary. These additional times are listed in Table A-8. No such times are added to the 80286-Pentium Pro. Note that Intel has not released clock times for the Pentium Pro.
TABLE A7 Override prefixes
Prefix Eye Purpose
26H ES: segment override prefix
2EH CS: segment override prefix
36H SS: segment override prefix
3EH DS: segment override prefix
64H FS: segment override prefix
65H GS: segment override prefix
66H Operand size instruction mode override
67H Register size instruction mode override
TABLE A8 Effective address calculations for the 8086 and 8088 microprocessors
Type Clocks Example Instruction
Base or index 5 MOV CL,[DI]
Displacement 3 MOV AL,DATA1
Base plus index 7 MOV AL,[BP+SI]
Displacement plus base or index 9 MOV DH.[DI+20H]
Base plus index plus displacement 11 MOV CL,[BX+DI+2]
Segment override ea + 2 MOV AL,ED:[DI]
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-18
AAA ASCII adjust AL after addition
00110111 0 D I T S Z A P C
? ? ? * ? *
Example Microprocessor Clocks
8086 8
8088 8
80286 3
80386 4
80486 3
Pentium 3
AAA
Pentium Pro
AAD ASCII adjust AX before division
11010101 00001010 0 D I T S Z A P C
? * * ? * ?
Example Microprocessor Clocks
8086 60
8088 60
80286 14
80386 19
80486 14
Pentium 10
AAD
Pentium Pro
AAM ASCII adjust AX after multiplication
11010100 00001010 0 D I T S Z A P C
? * * ? * ?
Example Microprocessor Clocks
8086 83
8088 83
80286 16
80386 17
80486 15
Pentium 18
AAM
Pentium Pro
Dodatak A
A-19
AAS ASCII adjust AL after subtraction
00111111 O D I T S Z A P C
? ? ? * ? *
Example Microprocessor Clocks
8086 8
8088 8
80286 3
80386 4
80486 3
Pentium 3
AAS
Pentium Pro
ADC Addition with carry
00111111 O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 3
80386 3
80486 1
Pentium 1 or 3
ADC reg,reg
ADC AX,BX
ADC AL,BL
ADC EAX,EBX
ADC CX,SI
ADC ESI,EDI
Pentiurn Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
ADC mem,reg
ADC DATAY,AL
ADC LIST,SI
ADC DATA2[D1],CL
ADC [EAX],BL
ADC [EBX+2*ECX],EDX
Pentium Pro
8086 9+ea
8088 13+ea
80286 7
80386 6
80486 2
Pentium 1 or2
ADC reg,mem
ADC BL,DATA1
ADC SI,LIST1
ADC CL,DATA2[SI]
ADC CX,[ESI]
ADC ESI,[2*ECX]
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-20
100000sw oo010mmm disp data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or 3
ADC reg,imm
ADC CX,3
ADC DI,1AH
ADC DL,34H
ADC EAX,12345
ADC CX,1234H
Pentium Pro
Microprocessor Clocks
8086 17+ea
8088 23+ea
80286 7
80386 7
80486 3
Pentium 1 or 3
ADC mem,imm
ADC DATA4,33
ADC LIST,'A'
ADC DATA3[DI],2
ADC BYTE PTR[EBX],3
ADC WORD PTR[DI],669H
Pentium Pro
Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
ADC acc,imm
ADC AX,3
ADC AL,1AH
ADC AH,34H
ADC EAX,2
ADC AL,'Z'
Pentium Pro
ADD Addition
000000dw oorrrmmm disp O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 3
80386 3
80486 1
Pentium 1 or 3
ADD reg,reg
ADD AX,BX
ADD AL,BL
ADD EAX,EBX
ADD CX,SI
ADD ESI,EDI
Pentiurn Pro
Dodatak A
A-21
8086 16 + ea
8088 24 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
ADD mem,reg
ADD DATAY,AL
ADC LIST,SI
ADD DATA2[DI],CL
ADD [EAX],BL
ADD [EBX+2*ECX],EDX
Pentium Pro
8086 9+ea
8088 13+ea
80286 7
80386 6
80486 2
Pentium 1 or2
ADD reg,mem
ADD BL,DATA2
ADD SI,LIST3
ADD CL,DATA2[DI]
ADD CX,[EDI]
ADD ESI,[ECX+200H]
Pentium Pro
100000sw oo000mmm disp data
Format Examples Microprocessor
Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or 3
ADD reg,imm
ADD CX,3
ADD DI,1AH
ADD DL,34H
ADD EAX,1345H
ADD CX,1834H
Pentium Pro
8086 17+ea
8088 23+ea
80286 7
80386 7
80486 3
Pentium 1 or 3
ADD mem,imm
ADD DATA4,33
ADD LIST,'A'
ADD DATA3[DI],2
ADD BYTE PTR[EBX],3
ADD WORD PTR[DI],669H
Pentium Pro
8086 4
8088 4
80286 3
80386 2
80486 1
ADC acc,imm ADD AX,3
ADD AL,1AH
ADD AH,34H
ADD EAX,2
ADD AL,'Z'
Pentium 1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-22
AND Logical AND
001000dw oorrrmmm disp O D I T S Z A P C
0 * * ? * 0
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 3
80486 1
Pentium 1 or 3
AND reg,reg
AND CX,BX
AND DL,BL
AND ECX,EBX
AND BP,SI
AND EDX,EDI
Pentiurn Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
AND mem,reg
AND BIT,AL
ANC LIST,DI
AND DATAZ[BX],CL
AND [EAX],BL
AND [ESI+2*ECX],EDX
Pentium Pro
8086 9+ea
8088 13+ea
80286 7
80386 6
80486 2
Pentium 1 or2
AND reg,mem
AND BL,DATAW
AND SI,LIST
AND CL,DATAQ[SI]
AND CX,[EAX]
AND ESI,[ECX+43H]
Pentium Pro
100000sw oo100mmm disp data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or 3
AND reg,imm
AND BP,1
AND DI,10H
AND DL,34H
AND EBP,1345H
AND SP,1834H
Pentium Pro
Dodatak A
A-23
AND mem,imm
AND DATA4,33 8086 17+ea
AND LIST,'A' 8088 23+ea
AND DATA3[DI],2 80286 7
AND BYTE PTR[EBX],3 80386 7
AND DWORD PTR[DI],66H 80486 3
Pentium 1 or 3
Pentium Pro
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
AND acc,imm
AND AX,3
AND AL,1AH
AND AH,34H
AND EAX,2
AND AL,'r'
Pentium Pro
ARPL Adjust requested privilege level
01100011 oorrrmmm disp O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 10
80386 20
80486 9
Pentium 7
ARPL reg,reg
ARPL AX,BX
ARPL BX.SI
ARPL AX,DX
ARPL BX,AX
ARPL SI,DI
Pentiurn Pro
8086 -
8088 -
80286 11
80386 21
80486 19
Pentium 7
ARPL mem,reg
ARPL DATAY,AX
ARPL LIST,DI
ARPL DATA3[DI],CX
ARPL [EBX],AX
ARPL [EDX+4*ECX],BP
Pentium Pro
BOUND Check array against boundary
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-24
01100010 oorrrmmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 13
80386 10
80486 7
Pentium 8
BOUND reg,mem
BOUND AX,BETS
BOUND BP,LISTG BOUND CX,DATAX
BOUND BX,[DI]
BOUND SI,[BX+2]
Pentium Pro
BSF Bit scan forward
00001111 10111100 oorrrmmm disp O D I T S Z A P C
? ? * ? ? ?
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 10+3n
80486 6--42
Pentium 6--42
BSF reg,reg
BSF AX,BX
BSF BX.SI
BSF EAX,EDX
BSF EBX,EAX
BSF SI,DI
Pentium Pro
8086 -
8088
80286
80386 10+3n
80486 7--43
Pentium 6--43
BSF reg,mem
BSF AX,DATAY
BSF SI,LIST
BSF CX,DATA3[DI]
BSF EAX,[EBX] BSF EBP,[EDX+4*ECX]
Pentium Pro
BSR Bit scan reverse
00001111 10111101 oorrrmmm disp O D I T S Z A P C
? ? * ? ? ?
Format Examples Microprocessor Clocks
Dodatak A
A-25
8086 -
8088 -
80286 -
80386 10+3n
80486 6--103
Pentium 7--71
BSR reg,reg
BSR AX,BX
BSR BX,SI
BSR EAX,EDX
BSR EBX,EAX
BSR SI,DI
Pentium Pro
8086 -
8088 -
80286 -
80386 10+3n
80486 7--104
Pentium 7--72
BSR reg,mem
BSR AX,DATAY
BSR SI,LIST
BSR CX,DATA3[DI]
BSR EAX,[EBXI BSR EBP,[EDX+4*ECX]
Pentium Pro
BSWAP Byte swap
00001111 11001rrr
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 1
Pentium 1
BSWAP reg32
BSWAP EAX
BSWAP EBX
BSWAP EDX
BSWAP ECX
BSWAP ESI
Pentium Pro
BT Bit test
00001111 10111010ool00mmm disp data
O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 3
Pentium 4
BT reg,imm8
BT AX,2
BT CX,4
BT BP,10H
BT CX,8
BT BX,2
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-26
8086 -
8088 -
80286 -
80386 6
80486 3
Pentium 4
BT mem,imm8
BT DATA1,2
BT LIST,2
BT DATA2[DII,3
BT [EAX],1
BT FROG,6
Pentium Pro
8086 -
8088 -
80286 -
80386 3
80486 3
Pentium 4 or 9
BT reg,reg
BT AX,CX
BT CX,DX
BT BP,AX
BT SI,CX
BT EAX,EBX
Pentium Pro
8086 -
8088
80286 -
80386 12
80486 8
Pentium 4 or 9
Pentium Pro
BT mem,reg
BT DATA4,AX
BT LIST,BX
BT DATA3[DI],CX
BT [EBX],DX
BT [DI],DI
BTC Bit test and complement
00001111 10111010oo11mmm disp data
O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 8
BTC reg,imm8
BTC AX,2
BTC CX,4
BTC BP,10H
BTC CX,8
BTC BX,2
Pentium Pro
Dodatak A
A-27
8086 -
8088 -
80286 -
80386 7 or 8
80486 8
Pentium 8
BTC mem,imm8
BTC DATA1,2 BTC LIST,2
BTC DATA2[DII,3
BTC [EAX],1
BTC FROG,6
Pentium Pro
00001111 10111011 disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 13
BTC reg,reg
BTC AX,CX
BTC CX,DX
BTC BP,AX
BTC SI,CX
BTC EAX,EBX
Pentium Pro
8086 -
8088 -
80286 -
80386 13
80486 13
Pentium 7 or 13
Pentium Pro
BTC mem,reg
BTC DATA4,AX
BTC LIST,BX
BTC DATA3[DI],CX
BTC [EBX],DX
BTC [DI],DI
BTR Bit test and reset
00001111 10111010oo110mmm disp data
O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 8
BTR reg,imm8
BTR AX,2
BTR CX,4
BTR BP,10H
BTR CX,8
BTR BX,2
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-28
8086 -
8088 -
80286 -
80386 8
80486 8
Pentium 7 or 8
BTR mem,imm8
BTR DATA1,2
BTR LIST,2
BTR DATA2[DI],3
BTR [EAX],1
BTR FROG,6
Pentium Pro
00001111 10110011 disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 13
BTR reg,reg
BTR AX,CX
BTR CX,DX
BTR BP,AX
BTR SI,CX
BTR EAX,EBX
Pentium Pro
8086 -
8088 -
80286 -
80386 13
80486 13
Pentium 7 or 13
Pentium Pro
BTR mem,reg
BTR DATA4,AX
BTR LIST,BX
BTR DATA3[DI],CX
BTR [EBX],DX
BTR [DI],DI
BTS Bit test and set
00001111 10111010oo101mmm disp data
O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 8
BTS reg,imm8
BTS AX,2
BTS CX,4
BTS BP,10H
BTS CX,8
BTS BX,2
Pentium Pro
Dodatak A
A-29
8086 -
8088 -
80286 -
80386 8
80486 8
Pentium 7 or 8
BTS mem,imm8
BTS DATA1,2
BTS LIST,2
BTS DATA2[DI],3
BTS [EAX],1
BTS FROG,6
Pentium Pro
00001111 10101011 disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 6
Pentium 7 or 13
BTS reg,reg
BTS AX,CX
BTS CX,DX
BTS BP,AX
BTS SI,CX
BTS EAX,EBX
Pentium Pro
8086 -
8088 -
80286 -
80386 13
80486 13
Pentium 7 or 13
Pentium Pro
BTS mem,reg
BTS DATA4,AX
BTS LIST,BX
BTS DATA3[DI],CX
BTS [EBX],DX
BTS [DI],DI
CALL Call procedure (subroutine)
11101000 disp
Format Examples Microprocessor Clocks
8086 19
8088 23
80286 7
80386 3
80486 3
Pentium 1
CALL label
(near)
CALL FOR_FUN
CALL HOME
CALL ET
CALL WAITING
CALL SOMEONE
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-30
10011010 disp
Format Examples Microprocessor Clocks
8086 28
8088 36
80286 13
80386 17
80486 18
Pentium 4
CALL label
(far)
CALL FAR PTR DATES
CALL WHAT
CALL WHERE
CALLFARCE
CALL WHOM
Pentium Pro
11111111 oo010mmm
Format Examples Microprocessor Clocks
8086 16
8088 20
80286 7
80386 7
80486 5
Pentium 2
CALL reg
(near)
CALL AX
CALLBX
CALL CX
CALL DI
CALL SI
Pentium Pro
8086 21 + ea
8088 29 + ea
80286 11
80386 10
80486 5
Pentium 2
CALL mem
(near)
CALL ADDRESS CALL NEAR PTR [DI]
CALL DATA1
CALL FROG
CALL ME_NOW
Pentium Pro
11111111 oo011mmm
Format Examples Microprocessor Clocks
8086 16
8088 20
80286 7
80386 7
80486 5
Pentium 2
Pentium Pro
CALL MEM
(far)
CALL FAR_LIST[SI]
CALL FROM_HERE
CALL TO_THERE
CALL SIXX
CALL OCT
Dodatak A
A-31
CBW Convert byte to word (AL -> AX)
10011000
Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 3
80486 3
Pentium 3
CBW
Pentium Pro
CDQ Convert doubleword to quadword
(EAX ==>EDX:EAX)
1101010000001010
Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 2
80486 2
Pentium 2
CDQ
Pentium Pro
CLC Clear carry flag
11111000 O D I T S Z A P C
0
Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 2
80486 2
Pentium 2
CLC
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-32
CLD Clear direction flag
11111100 O D I T S Z A P C
0
Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 2
80486 2
Pentium 2
CLC
Pentium Pro
CLI Clear interupt flag
11111010 O D I T S Z A P C
0
Example Microprocessor Clocks
8086 2
8088 2
80286 3
80386 3
80486 5
Pentium 7
CLI
Pentium Pro
CLTS Clear task switched flag (CR0)
00001111 00000110
Example Microprocessor Clocks
8086 -
8088 -
80286 2
80386 5
80486 7
Pentium 10
CLTS
Pentium Pro
Dodatak A
A-33
CMC Complement carry flag
10011000 O D I T S Z A P C
*
Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 2
80486 2
Pentium 2
CMC
Pentium Pro
CMOVcondition Conditional move
000011110100cccc oorrrmmrn
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 -
Pentium -
CMOVcc reg,mem
CMOVNZ AX,FROG
CMOVC EAX,[EDI]
CMOVNC BX,DATA1
CMOVP EBX,WAITING
CMOVNE DI,[SI] Pentium Pro
Condition
Codes Mnemonic Flag Description
0000 CMOVO O=1 Move if overflow
0001 CMOVNO O=0 Move If no overflow
0010 CMOVB C = 1 Move if below
0011 CMOVAE C=0 Move if above or equal
0100 CMOVE Z=1 Move if equal/zero
0101 CMOVNE Z=0 Move if not equal/zero
0110 CMOVBE C=1 + Z=1
Move if below or equal
0111 CMOVA C=O•Z=0 Move if above
1000 CMOVS S=1 Move if sign
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-34
1001 CMOVNS S=0 Move if no sign
1010 CMOVP P=1 Move if parity
1011 CMOVNP P=0 Move if no parity
1100 CMOVL S*0 Move if less than
1101 CMOVGE S=0 Move if greater then or equal
1110 CMOVLE Z=1 + S=0
Move if less than or equal
1111 CMOVG Z=0+S=0 Move If greater than
CMP Compare
0011l0dw oorrrmmm disp O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or 2
CMP reg,reg
CMP AX,BX
CMP AL,BL
CMP EAX,EBX
CMP CX,SI
CMP ESI,EDI
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 7
80386 6
80486 2
Pentium 1 or 2
CMP mem,reg
CMP DATAY,AL
CMP LIST,SI CMP DATA6[DI],CL
CMP [EAXI,CL CMP [EDX+4*ECX],EBX
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 6
80386 6
80486 2
Pentium 1 or2
Pentium Pro
CMP reg,mem
CMP BL,DATA2
CMP SI,LIST3 CMP CL,DATA2[DI]
CMP CX,[EDI] CMP ESI,[ECX+200H]
100000sw oo111 mmm disp data
Dodatak A
A-35
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or2
CMP reg,imm
CMP CX,3
CMP DI, 1 AH
CMP DL,34H
CMP EDX,1345H
CMP CX,1834H
Pentium Pro
8086 10 + ea
8088 14 + ea
80286 6
80386
80486 2
Pentium 1 or2
CMP mem,imm
CMP DATAS,3
CMP BYTE PTR[EDI],1AH
CMP DADDY,34H
CMP LIST,'A'
CMP TOAD,1834H
Pentium Pro
0001111w data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
Pentium Pro
CMP acc,imm
CMP AX,3
CMP AL,1AH
CMP AH,34H
CMP EAX,1345H
CMP AL,'Y'
CMPS Compare strings
1010011w O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 32
8088 30
80286 8
80386 10
80486 8
CMPSB
CMPSW
CMPSD
CMPSB CMPSW CMPSD CMPSB DATAl,DATA2 REPE CMPSB REPNE CMPSW
Pentium 5
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-36
Pentium Pro
CMPXCHG Compare and exchange
00001111 1100011 oo rrr mmm O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 6
Pentium 6
CMPXCHG reg,reg
CMPXCHG EAX,EBX
CMPXCHG ECX,EDX
Pentium Pro
00001111 1011000w 11rrrrrr
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 7
Pentium 6
Pentium Pro
CMPXCHG mem,reg
CMPXCHG DATAD,EAX
CMPXCHG DATA2,ECX
CMPXCHG Compare and exchange
00001111 1011000w 11rrrrrr O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 -
CMPXCHG8B mem64
CMPXCHG8B DATA3
Pentium 10
Dodatak A
A-37
Pentium Pro
CPUID CPU identification code
00001111 10100010
Example Microprocessor Clocks
8086
8088
80286
80386
80486 -
Pentium 14
CPUID
Pentium Pro
CWD Convert word to doubleword (AX-->DX:AX)
10011000
Example Microprocessor Clocks
8086 5
8088 5
80286 2
80386 2
80486 3
Pentium 2
CWD
Pentium Pro
CWDE Convert word to extended doubleword (AX-->EAX)
10011000
Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 3
CWDE
Pentium 3
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-38
Pentium Pro
DAA Decimal adjust AL after addition
00100111 O D I T S Z A P C
? * * * * *
Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 4
80486 2
Pentium 3
DAA
Pentium Pro
DAS Decimal adjust AL after subtraction
00101111 O D I T S Z A P C
? * * * * *
Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 4
80486 2
Pentium 3
DAS
Pentium Pro
DEC Decrement
1111111w oo001mmm disp O D I T S Z A P C
? * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
DEC reg8
DEC BL
DEC BH
DEC CL
DEC DH
DEC AH
Pentium 1 or3
Dodatak A
A-39
Pentium Pro
8086 15 + ea
8088 23 + ea
80286 7
80386 6
80486 3
Pentium 1 or 3
DEC mem
DEC DATAY
DEC LIST
DEC DATA6[DI] DEC BYTE PTR [BX]
DEC WORD PTR[EBX]
Pentium Pro
01001rrr
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1
DEC regl6
DEC reg32
DEC CX
DEC DI
DEC EDX
DEC ECX
DEC BP
Pentium Pro
DIV Divide
1111011w oo110mmm disp O D I T S Z A P C
? ? ? ? ? ?
Format Examples Microprocessor Clocks
8086 162
8088 162
80286 22
80386 38
80486 40
Pentium 17-41
DIV reg
DIV BL
DIV BH
DIV ECX
DIV DH
DIV CX
Pentium Pro
8086 168
8088 176
80286 25
80386 41
80486 40
DIV mem
DIV DATAY
DIV LIST
DIV DATA6[DI] DIV BYTE PTR [BX]
DIV WORD PTR[EBXI
Pentium 17--41
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-40
Pentium Pro
ENTER Create a stack frame
11001000 data
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 11
80386 10
80486 14
Pentium 11
ENTER imm,0
ENTER 4,0
ENTER 8,0
ENTER 100,0
ENTER 200,0
ENTER 1024,0
Pentium Pro
8086 -
8088 -
80286 12
80386 15
80486 17
Pentium 15
ENTER imm,l
ENTER 4,1
ENTER 10,1
Pentium Pro
8086 -
8088 -
80286 12
80386 15
80486 17
Pentium 15 + 2n
Pentium Pro
ENTER imm,imm
ENTER 3,6
ENTER 100,3
ESC Escape (obsolete see coprocessor)
HLT Halt
11110100
Example Microprocessor Clocks
Dodatak A
A-41
8086 2
8088 2
80286 2
80386 5
80486 4
Pentium varies
HLT
Pentium Pro
IDIV Integer (signed) division
111011w oo111mmm disp O D I T S Z A P C
? ? ? ? ? ?
Format Examples Microprocessor Clocks
8086 184
8088 184
80286 25
80386 43
80486 43
Pentium 22-46
IDIV reg
IDIV BL
IDIV BH
IDIV ECX
IDIV DH
I DIV CX
Pentium Pro
8086 190
8088 194
80286 28
80386 46
80486 44
Pentium 22-46
IDIV mem
IDIV DATAY
IDIV LIST
IDIV DATA6[DI]
IDIV BYTE PTR [BX]
IDIV WORD PTR [EBX]
Pentium Pro
IMUL Integer (signed) multiplication
1111011w oo101mmm disp O D I T S Z A P C
* ? ? ? ? *
Format Examples Microprocessor Clocks
8086 154
8088 154
80286 21
80386 38
IMUL reg
IMUL BL
IMUL CX
IMULECX
IMUL DH
IMUL AL 80486 42
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-42
Pentium 10-11
Pentium Pro
8086 160
8088 164
80286 24
80486 42
Pentium 10-11
IMUL mem
IMUL DATAY
IMUL LIST
IMUL DATA6[DI]
IMUL WORD PTR [EBX]
Pentium Pro
011010s1 oorrmmm disp data
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 21
80386 38
80486 42
Pentium 10
IMUL reg,imm
IMUL CX,16
IMUL DI, 100
IMUL EDX,20
Pentium Pro
8086 -
8088 -
80286 21
80386 38
80486 42
Pentium 10
IMUL reg,reg,imm
IMUL DX,AX,2
IMUL CX,DX,3
IMUL BX,AX,33
Pentium Pro
8086 -
8088
80286 24
80386 38
80486 42
Pentium 10
IMUL reg,mem,imm
IMUL CX,DATAY,99
Pentium Pro
00001111 10101111 oorrmmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
IMUL reg,reg
IMUL CX,DX
IMUL DI,BX
IMUL EDX,EBX 80286 -
Dodatak A
A-43
80386 38
80486 42
Pentium 10
Pentium Pro
8086 -
8088
80286 -
80386 41
80486 42
Pentium 10
IMUL reg,mem
IMUL DX,DATAY
IMUL CX,LIST
IMUL ECX,DATA6[DI]
Pentium Pro
IN Input data from port
1110010w port#
Format Examples Microprocessor Clocks
8086 10
8088 14
80286 5
80386 12
80486 14
Pentium 7
IN acc,pt
IN AL,12H
IN AX,12H
IN AL,0FFH
IN AX,0A0H
IN EAX,10H
Pentium Pro
1110110w
Format Examples Microprocessor Clocks
8086 8
8088 12
80286 5
80386 13
80486 14
Pentium 7
IN acc,DX
IN AL,DX
IN AX,DX
IN EAX,DX
Pentium Pro
INC Increment
1111111w oo000mmm disp O D I T S Z A P C
* * * * *
Format Examples Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-44
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or3
INC reg8
INC BL
INC BH
INC AL
INC AH
INC DH
Pentium Pro
8086 15 + ea
8088 23 + ea
80286 7
80386 6
80486 3
Pentium 1 or 3
INC mem
INC DATA3
INC LIST
INC COUNT
INC BYTE PTR [DI]
INC WORD PTR [ECX]
Pentium Pro
INC regl6 INC CX 8086 3
8088 3
80286
80386 2
80486 1
Pentium 1
INC reg32
INC DX
INC BP
INC ECX
INC ESP
Pentium Pro
INS Input string from port
0110110w
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 5
80386 15
80486 17
Pentium 9
INSB
INSW
INSD
INSB
INSW
INSD
INS DATA2
REP INSB
Pentium Pro
INT Interrupt
11001101 type
Dodatak A
A-45
Format Examples Microprocessor Clocks
8086 51
8088 71
80286 23
80386 37
80486 30
Pentium 16-82
INT type
INT 12H
INT 15H
INT 21 H
INT 2FH
INT 10H
Pentium Pro
INT 3 Interrupt 3
11001100
Example Microprocessor Clocks
8086 52
8088 72
80286 23
80386 33
80486 26
Pentium 1
INT 3
Pentium Pro
INTO Interrupt on overflow
11001110
Example Microprocessor Clocks
8086 53
8088 73
80286 24
80386 35
80486 28
Pentium 13~56
INTO
Pentium Pro
INVD invalidate data cache
00001111 00001000
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-46
Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 4
Pentium 15
INVD
Pentium Pro
IRET/IRETD Return from interrupt
11001101 data O D I T S Z A P C
* * * * * * * * *
Format Examples Microprocessor Clocks
8086 32
8088 44
80286 17
80386 22
80486 15
Pentium 8-27
IRET
IRETD
IRET
IRETD
IRET 100
Pentium Pro
Jcondition Conditional jump
0111cccc disp
Format Examples Microprocessor Clocks
8086 16/4
8088 16/4
80286 7/3
80386 7/3
80486 3/1
Pentium 1
Jcnd label
(8-bit disp)
JA ABOVE
JB BELOW
JG GREATER
JE EQUAL
JZ ZERO
Pentium Pro
000011111000 cccc disp
Format Examples Microprocessor Clocks
Dodatak A
A-47
8086 -
8088 -
80286 -
80386 7/3
80486 3/1
Pentium 1
Jcnd label
(16-bit disp)
JNE NOT_MORE
JLE LESS_OR_SO
Pentium Pro
Codes Mnemonic Flag Description
0000 JO O=1 Jump if overflow
0001 JNO O=0 Jump if no overflow
0010 JB/NAE C=1 Jump if below
0011 JAE/JNB C=0 Jump if above or equal
0100 JE/JZ Z=1 Jump if equal/zero
0101 JNE/JNZ Z=1 Jump if not equal/zero
0110 JBE/JNA C=1+Z=1 Jump if below or equal
0111 JA/JNBE C=O*Z=0 Jump if above
1000 JS S = 1 Jump if sign
1001 JNS S=0 Jump if no sign
1010 JP/JPE P = 1 Jump If parity
1011 JNP/JPO P=0 Jump if no parity
1100 JL/JNGE S*0 Jump if less than
1101 JGE/JNL S=0 Jump if greater than or equal
1110 JLE/JNG Z = 1 + S - O Jump if less than or equal
1111 JG/JNLE Z=0+S=O Jump if greater than
JCXZ/JECXZ Jump if CX (ECX) equals zero
11100011
Format Examples Microprocessor Clocks
8086 18/6
8088 18/6
80286 8/4
80386 9/5
80486 8/5
Pentium 6/5
JCXZ label
JECXZ label
JCXZ ABOVE
JCXZ BELOW
JECXZ GREATER
JECXZ EQUAL
JCXZ NEXT
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-48
Jmp Jump
11101011 disp
Format Examples Microprocessor Clocks
8086 15
8088 15
80286 7
80386 7
80486 3
Pentium 1
JMP label
(short)
JMP SHORT UP
JMP SHORT DOWN
JMP SHORT OVER
JMP SHORT CIRCUIT
JMP SHORT JOKE
Pentium Pro
11101001 disp
Format Examples Microprocessor Clocks
8086 15
8088 15
80286 7
80386 7
80486 3
Pentium 1
JMP label
(near)
JMP VERS
JMP FROG
JMP UNDER
JMP NEAR PTR OVER
Pentium Pro
11101011 disp
Format Examples Microprocessor Clocks
8086 15
8088 15
80286 11
80386 12
80486 17
Pentium 3
JMP label
(far)
JMP NOT_MORE
JMP UNDER
JMP AGAIN
JMP FAR PTR THERE
Pentium Pro
11111111 oo100mmm
Format Examples Microprocessor Clocks
8086 11
8088 11
80286 7
JMP reg
(near)
JMP AX
JMP EAX
JMP CX
JMP DX 80386 7
Dodatak A
A-49
80486 3
Pentium 2
Pentium Pro
8086 18 + ea
8088 18 + ea
80286 11
80386 10
80486 5
Pentium 4
JMP mem
(near)
JMP VERS
JMP FROG
JMP CS:UNDER
JMP DATAI[DI+2]
Pentium Pro
11111111 oo101mmm
Format Examples Microprocessor Clocks
8086 24 + ea
8088 24 + ea
1280286 15
80386 12
80486 13
Pentium 4
JMP mem
(far)
JMP WAY_OFF
JMP TABLE
JMPUP
JMP OUT_OF_HERE
Pentium Pro
LAHF Load AH from flags
10011111
Example Microprocessor Clocks
8086 4
8088 4
80286 2
80386 2
80486 3
Pentium 2
LAHF
Pentium Pro
LAR Load access rights byte
00001111 00000010 oorrrmmm disp O D I T S Z A P C
*
Format Examples Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-50
8086 -
8088 -
80286 14
80386 15
80486 11
Pentium 8
LAR reg,reg
LAR AX,BX
LAR CX,DX
LAR ECX,EDX
Pentium Pro
8086 -
8088 -
80286 16
80386 16
80486 11
Pentium 8
LAR reg,mem
LAR CX,DATA1
LAR AX,LIST3
LAR ECX,TOAD
Pentium Pro
LEA Load effective address
10001101 oorrrmmm disp
Format Examples Microprocessor Clocks
8086 2 + ea
8088 2 + ea
80286 3
80386 2
80486 2
Pentium 1
LEA reg,mem
LEA DI,DATA3
LEA SI,LIST2
LEA BX,ARRAY_PTR
LEA CX,PNTR
Pentium Pro
LEAVE Leave high-level procedure
11001001
Example Microprocessor Clocks
-
-
5
4
LEAVE
8086
8088
80286
80386
80486 5
Dodatak A
A-51
3
Pentium
Pentium Pro
LES Load far pointer to ES and register
11000100 oorrrmmrn
Format Examples Microprocessor Clocks
8086 16 + ea
8088 24 + ea
80286 7
80386 7
80486 6
Pentium 4
LES reg,mem
LES DI,DATA3
LES SI,LIST2
LES BX,ARRAY_PTR
LES CX,PNTR
Pentium Pro
LFS Load far pointer to FS and register
00001111 10110100oorrrmmmdisp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 7
80486 6
Pentium 4
LFS reg,mem
LFS DI,DATA3
LFS SI,LIST2
LFS BX,ARRAY_PTR
LFS CX,PNTR
Pentium Pro
LGDT Load global descriptor table
0000111100000001 oo010mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 11
80386 11
80486 11
LGDT mem64
LGDT DESCRIP
LGDT TABLED
Pentium 6
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-52
Pentium Pro
LGS Load far pointer to GS and register
00001111 10110101 oorrrmmm disp
Format Examples Microprocessor Clocks
8086
8088
80286 -
80386 7
80486 6
Pentium 4
LGS reg,mem
LGS DI,DATA3
LGS SI,LIST2
LGS BX,ARRAY PTR
LGS CX,PNTR
Pentium Pro
LIDT Load interrupt descriptor table
00001111 00000001 oo011 mmm disp
Format Examples Microprocessor Clocks
8086
8088 -
80286 12
80386 11
80486 11
Pentium 6
LIDT mem64 LIDT DATA3
LIDT LIST2
Pentium Pro
LLDT Load local descriptor table
00001111 00000000 oo010mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 17
80386 20
80486 11
Pentium 9
LLDT reg LLDT BX
LLDT DX
LLDT CX
Pentium Pro
Dodatak A
A-53
8086 -
8088 -
80286 19
80386 24
80486 11
Pentium
LLDT mem LLDT DATA1
LLDT LIST3
LLDT TOAD
Pentiurn Pro
LMSW Load machine status word (80286 only)
00001111 00000001 oo110mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 3
80386 10
80486 2
Pentium 8
LMSW reg LMSW BX
LMSW DX
LMSW CX
Pentium Pro
8086 -
8088 -
80286 6
80386 13
80486 3
Pentium 8
LMSW mem LMSW DATA1
LMSW LIST3
LMSW TOAD
Pentium Pro
LOCK Lock the bus
11110000
Format Examples Microprocessor Clocks
8086 2
8088 3
80286 0
80386 0
LOCK:inst LOCK:XCHG AX,BX
LOCK:ADD AL,3
80486 1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-54
Pentium 1
Pentium Pro
LODS Load string operand
10101low
Format Examples Microprocessor Clocks
8086 12
8088 15
80286 5
80386 5
80486 5
Pentium 2
LODSB
LODSW
LODSD
LODSB
LODSW
LODSD
LODS DATA3
Pentium Pro
LOOP/LOOPD Loop until CX=0 or ECX=0
11100010 disp
Format Examples Microprocessor Clocks
8086 17/5
8088 17/5
80286 8/4
80386 11
80486 7/6
Pentium 5/6
LOOP label
LOOPD label
LOOP NEXT
LOOP BACK
LOOPD LOOPS
Pentium Pro
LOOPE/LOOPED Loop while equal
11100001 disp
Format Examples Microprocessor Clocks
8086 18/6
8088 18/6
80286 8/4
80386 11
LOOPE label
LOOPED label
LOOPZ label
LOOPZD label
LOOPE AGAIN
LOOPED UNTIL
LOOPZ ZORRO
LOOPZD WOW
80486 9/6
Dodatak A
A-55
Pentium 7/8
Pentium Pro
LOOPNE/LOOPNED Loop while not equal
11100000 disp
Format Examples Microprocessor Clocks
8086 19/5
8088 19/5
80286 8/4
80386 11
80486 9/6
Pentium 7/8
LOOPNE label
LOOPNED label
LOOPNZ label
LOOPNZD label
LOOPNE FORWARD
LOOPNED UPS
LOOPNZ TRY_AGAIN
LOOPNZO WOO
Pentium Pro
LSL Load segment limit
00001111 00000011 oorrrmmm disp O D I T S Z A P C
*
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 14
80386 25
80486 10
Pentium 8
LSL reg,reg
LSL AX,BX
LSL CX,BX
LSL EDX,EAX
Pentium Pro
8086
8088
80286 16
80386 26
80486 10
Pentium 8
LSL reg,mem LSL AX,LIMIT
LSL EAX,NUM
Pentium Pro
LSS Load far pointer to SS and register
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-56
00001111 10110010 oorrrmmm disp
Format Examples Microprocessor Clocks
8086
8088
80286
80386 7
80486 6
Pentium 4
LSS reg,mem LSS DI,DATA1
LSS SP,STACK_TOP
LSS CX,ARRAY
Pentium Pro
LTR Load task register
00001111 00000000 oo001mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 17
80386 23
80486 20
Pentium 10
LTR reg LTR AX
LTR CX
LTR DX
Pentium Pro
8086 -
8088 -
80286 19
80386 27
80486 0
Pentium 10
LTR mem16 LTR TASK
LTR NUM
Pentium Pro
MOVE Move data
100010dw oorrrmmm disp
Format Examples Microprocessor Clocks
8086 2 MOV reg.reg MOV CL,CH
MOV BH,CL 8088 2
Dodatak A
A-57
80286 2
80386 2
80486 1
Pentium 1
MOV CX,DX
MOV EAX,EBP
MOV ESP,ESI
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 3
80386 2
80486 1
Pentium 1
MOV mem,reg MOV DATA7,DL
MOV NUMB,CX
MOV TEMP,EBX
MOV FECXI,BL
MOV [DI],DH
Pentium Pro
8086 10 + ea
8088 12 + ea
80286 5
80386 4
80486 1
Pentium 1
MOV reg,mem MOV DL,DATA8
MOV DX,NUMB
MOV EBX,TEMP+3
MOV CH,TEMP[EDI]
MOV CL,DATA2 Penlium Pro
1100011woo000mmm disp data
Format Examples Microprocessor Clocks
8086 10 + ca
8088 14 + ea
80286 3
80386 2
80486 1
Pentium 1
MOV mem,imm
MOV DATAF,23H
MOV LIST,12H
MOV BYTE PTR [DI],2
MOV NUMB,234H
MOV DWORD PTR[ECX],1
Pentium Pro
1011wrrr data
Format Examples Microprocessor Clocks
8086 4
8088 4
80288 3
80386 2
80486 1
MOV reg,imm MOV BX,22H
MOV CX, 12H
MOV CL,2 MOV ECX,123456H
MOV DI,100
Pentium 1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-58
Pentium Pro
101000dw disp
Format Examples Microprocessor Clocks
8086 10
8088 14
80286 3
80386 2
80486 1
Pentium 1
MOV mem,acc MOV DATAF,AL
MOV LIST,AX
MOV NUMB,EAX
Pentiurn Pro
8086 10
8088 14
80286
80386 4
80486 1
Pentium 1
MOV acc,mem MOV AL,DATAE
MOV AX,LIST
MOV EAX,LUTE
Pentium Pro
10001ld0 oosssmmm disp
8086 2
8088 2
80286 2
80386 2
80486 1
Pentium 1
MOV seg,reg MOV SS,AX
MOV DS,DX
MOV ES,CX
MOV FS,BX
MOV GS,AX
Pentium Pro
8086 8 + ea
8088 12 + ea
80286 2
80386 2
80486 1
Pentium 2 or 3
MOV seg,mem MOV SS,STACK-TOP
MOV DS,DATAS
MOV ES,TEMP1
Pentium Pro
8086 2
8088 2
80286 2
MOV reg,seg MOV BX,DS
MOV CX,FS
MOV CX,ES
80386 2
Dodatak A
A-59
80486 1
Pentium 1
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 3
80386 2
80486 1
Pentium 1
MOV mem,seg MOV DATA2,CS
MOV TEMP,DS
MOV NUMB1,SS
MOV TEMP2,GS
Pentium Pro
00001111 001000d0 11rrrmmm
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 6
80486 4
Pentium 4
MOV reg,cr MOV EBX,CRO
MOV ECX,CR2
MOV EBX,CR3
Pentium Pro
8086 -
8088 -
80286 -
80366 10
80486 4
Pentium 12--46
MOV cr.reg MOV CRO,EAX
MOV CR1,EBX
MOV CR3,EDX
Pentium Pro
00001111 001000d1 11rrrmmm
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 22
80486 10
Pentium 11
MOV reg,dr MOV EBX,DR6
MOV ECX,DR7
MOV EBX,DR1
Pentium Pro
MOV dr,reg MOV DR0,EAX 8086 -
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-60
8088 -
80286 -
80386 22
80486 11
Pentium 11
MOV DR1,EBX
MOV DR3,EDX
Pentium Pro
00001111 001001do 11rrrmmm
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 12
80486 4
Pentium 11
MOV reg,tr MOV EBX,TR6
MOV ECX,TR7
Pentium Pro
8086 -
8088 -
80286 -
80386 12
80486 6
Pentium 11
MOV tr, reg MOV TR6,EAX
MOV TR7,EBX
Pentium Pro
MOVS Move string data
1010010w
Format Examples Microprocessor Clocks
8086 18
8088 26
80286 5
80386 7
80486 7
Pentium 4
MOVSB
MOVSW
MOVSD
MOVSB
MOVSW
MOVSD
MOVS DATAl,DATA2
Pentium Pro
MOVSX Move with sign extend
Dodatak A
A-61
00001111 1011111w oorrrmmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 3
Pentium 3
MOVSX reg,reg
MOVSX BX,AL
MOVSX EAX,DX
Pentium Pro
8086 -
8088 -
80286 -
80386 6
80486 3
Pentium 3
MOVSX reg,mem MOVSX AX,DATA34 MOVSX EAX,NUMB
Pentium Pro
MOVZX Move with zero extend
00001111 1011011w oorrrmmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 3
Pentium 3
MOVZX reg,reg
MOVZX BX,AL
MOVZX EAX,DX
Pentium Pro
8086 -
8088 -
80286 -
80386 6
80486 3
Pentium 3
MOVZX reg,mem MOVZX AX,DATA34
MOVZX EAX,NUMB
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-62
MUL Multiply
111101lw 00100MMM disp O D I T S Z A P C
* ? ? ? ? *
Format Examples Microprocessor Clocks
8086 118
8088 143
80286 21
80388 38
80486 42
Pentium 10 or 11
MUL reg MUL BL
MUL CX
MUL EDX
Pentium Pro
8086 139
8088 143
80286 24
80386 41
80486 42
Pentium 11
MUL mem MUL DATA9
MUL WORD PTR [ESI]
Pentium Pro
NEG Negate
111101lw oool1mmm disp O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or3
NEG reg NEG BL
NEG CX
NEG EDI
Pentium Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 6
NEG mem
NEG DATA9
NEG WORD PTR [ESI]
80486 3
Dodatak A
A-63
Pentium 1 or3
Pentium Pro
NOP No operation
10010000
Example Microprocessor Clocks
8086 3
8088 3
80286 3
80386 3
80486 3
Pentium 1
NOP
Pentium Pro
NOT One's complement
111101lw oo010mmm disp
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or3
NOT reg
NOT BL
NOT CX
NOT EDI
Pentium Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 6
80486 3
Pentium 1 or3
Pentium Pro
NOT mem
NOT DATA9 NOT WORD PTR [ESI]
OR Inclusive-OR
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-64
000010dw oorrrmmm disp O D I T S Z A P C
0 * * ? * 0
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or 2
OR reg,reg
OR AX,BX
OR AL,BL
OR EAX,EBX
OR CX,SI
OR ESI,EDI
Pentium Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
OR mem,reg
OR DATAY,AL
OR LIST,ST OR DATA2[D1],CL
OR [EAX],BL
OR [EBX+2*ECX],EDX
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 7
80386 6
80486 2
Pentium 1 or3
OR reg,mem
OR BL,DATA1
OR SI,LIST1 OR CL,DATA2[SI]
OR CX,[ESI]
OR ESI,[2*ECX]
Pentium Pro
100000sw o000lmmm disp data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1or 3
OR reg,imm
OR CX,3
OR D1,1AH
OR DL,34H
OR EDX,1345H
OR CX, 1834H
Pentium Pro
8086 17 + ea
8088 25 + ea
OR mem,imm OR DATAS,3 OR BYTE PTR[EDI],1AH OR DADDY,34H 80286 7
Dodatak A
A-65
80386 7
80486 3
Pentium 1 or3
OR LIST,'A' OR TOAD,1834H
Pentium Pro
0000110w data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
OR acc,imm OR AX,3
OR AL. 1AH
OR AH,34H
OR EAX, 1345H
OR AL,'Y'
Pentium Pro
OUT Output data to port
111001lw port#
Format Examples Microprocessor Clocks
8086 10
8088 14
80286 3
80386 10
80486 10
Pentium 12--26
OUT pt,acc OUT 12H,AL
OUT 12H,AX
OUT 0FFH,AL
OUT 0A0H,AX
OUT 10H,EAX
Pentium Pro
1110111w
Format Examples Microprocessor Clocks
8086 8
8088 12
80286 3
80386 1 1
80486 10
Pentium 12--26
OUT DX,acc OUT DX,AL
OUT DX,AX
OUT DX,EAX
Pentium Pro
OUTS Output string to port
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-66
0110111w
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 5
80386 14
80486 10
Pentium 13--27
OUTSB
OUTSW
OUTSD
OUTSB
OUTSW
OUTSD
OUTS DATA2
REP OUTSB
Pentium Pro
POP pop data from stack
01011rrr
Format Examples Microprocessor Clocks
8086 8
8088 12
80286 5
80386 4
80486 1
Pentium 1
POP reg POP CX
POP AX
POP EDI
Pentium Pro
10001111 oo000mmm disp
Format Examples Microprocessor Clocks
8086 17 + ea
8088 25 + ea
80286 5
80386 5
80486 4
Pentium 3
POP mem POP DATA1
POP LISTS
POP NUMBS
Pentium Pro
00sss111
Format Examples Microprocessor Clocks
8086 -
8088 -
POP seg POP FS
POP GS
80286 -
Dodatak A
A-67
80386 7
80486 3
Pentium 3
Pentium Pro
POPA/POPAD Pop all registers from stack
01100001
Example Microprocessor Clocks
8086 -
8088 -
80286 19
80386 24
80486 9
Pentium 5
POPA
POPAD
Pentium Pro
POPF/POPFD Pop flags from stack
10010000 O D I T S Z A P C
* * * * * * * * *
Example Microprocessor Clocks
8086 8
8088 12
80286 5
80386 5
80486 6
Pentium 4 or 6
POPF
POPFD
Pentium Pro
PUSH Push data onto stack
01010rrr
Format Examples Microprocessor Clocks
8086 11
8088 15
PUSH reg PUSH CX
PUSH AX
PUSH EDI 80286 3
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-68
80386 2
80486 1
Pentium 1
Pentium Pro
11111111 oo111mmm disp
Format Examples Microprocessor Clocks
8086 16 + ea
8088 24 + ea
80286 5
80386 5
80486 4
Pentium 1 or 2
PUSH mem PUSH DATA1
PUSH LISTS
PUSH NUMBS
Pentium Pro
00ss110
Format Examples Microprocessor Clocks
8086 10
8088 14
80286 3
80386 2
80486 3
Pentium 1
PUSH seg PUSH ES
PUSH CS
PUSH DS
Pentium Pro
00001111 l0sss000
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 2
80486 3
Pentium 1
PUSH seg PUSH fS
PUSH GS
Pentium Pro
011010s0 data
Format Examples Microprocessor Clocks
8086 -
8088 -
PUSH imm
PUSH 2000H PUSH 53220 PUSHW 1 OH PUSH’,’ 80286 3
Dodatak A
A-69
80386 2
80486 1
Pentium 1
PUSHD 100000H
Pentium Pro
PUSHA/PUSHAD Push all registers onto stack
01110000
Example Microprocessor Clocks
8086 -
8088 -
80286 17
80386 18
80486 11
Pentium 5
PUSHA
PUSHAD
Pentium Pro
PUSHF/PUSHFD Push flags onto stack
10011100
Example Microprocessor Clocks
8086 10
8088 14
80286 3
80386 4
80486 3
Pentium 3 or 4
PUSHF
PUSHFD
Pentiurn Pro
RLC/RCR/ROL/ROR Rotate
1101000w 00mmmm disp O D I T S Z A P C
* *
TTT=000=ROL, TTT=00l=ROR, TTT=010=RCL, and TTT=011=RCR
Format Examples Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-70
8086 2
8088 2
80286 2
80386 3
80486 3
Pentium 1 or 3
ROL reg, 1
ROR reg, 1
ROL CL, 1
ROL DX,1
ROR CH,1
ROR SI,1
Pentium Pro
8086 2
8088 2
80286 2
80386 9
80486 3
Pentium 1 or 3
RCL reg, 1
RCR reg,1
RCL CL,1
RCL SI,l
RCR AH,1
RCR EBX,1
Pentium Pro
8086 5 + ea
8088 23 + ea
80286 7
80386 7
80486 4
Pentium 1 or 3
ROL mem,1
ROR mem, 1
ROL DATAY,1
ROL LIST, 1 ROR DATA2[DI],1
ROR BYTE PTR [EAX],1
Pentium Pro
8086 15 + ea
8088 23 + ea
80286 7
80386 10
80486 4
Pentium 1 or 3
RCL mem,1
RCR mem,1
RCL DATA1,1
RCL LIST,1
RCR DATA2[SI],l RCR WORD PTR [ESI],1
Pentium Pro
110100lw ooTTTmmm disp
Format Examples Microprocessor Clocks
8086 8 + 4n
8088 8 + 4n
80286 5 + n
80386 3
80486 3
ROL reg,CL
ROR reg,CL
ROL CH,CL
ROL DX,CL
ROR AL,CL
ROR ESI,CL
Pentium 4
Dodatak A
A-71
Pentium Pro
8086 8 + 4n
8088 8 + 4n
80286 5+n
80386 9
80486 3
Pentium 7-27
RCL reg,CL
RCR reg,CL
RCL CH,CL
RCL SI,CL
RCR AH,CL
RCR EBX,CL
Pentium Pro
8086 20 + 4n
8088 28 + 4n
80286 8+n
80386 7
80486 4
Pentium 4
ROL mem,CL
ROR mem,CL
ROL DATAY,CL
ROL LIST,CL
ROR DATA2[D1],CL
ROR BYTE PTR [EAX],CL
Pentium Pro
8086 20 + 4n
8088 28 + 4n
80286 8+n
80386 10
80486 9
Pentium 9-26
RCL mem,CL
RCR mem,CL
RCL DATAL,CL
RCL LIST,CL
RCR DATA2[SI],CL
RCR WORD PTR [ESI],CL
Pentium Pro
1100000w ooTTTmmm disp data
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 5 + n
80386 3
80486 2
Pentium. 1 or 3
ROL reg,imm
ROR reg,imm
ROL CH,4
ROL DX,5
ROR AL,2
ROR ESI, 14
Pentium Pro
8086 -
8088 -
80286 5 + n
80386 9
RCL reg,imm
RCR reg,imm
RCL CL,2
RCL SI,l 2
RCR AH,5
RCR EBX,18
80486 8
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-72
Pentium 8-27
Pentium Pro
8086 -
8088 -
80286 8 + n
80386 7
80486 4
Pentium 1 or3
ROL mem,imm
ROR mem,imm
ROL DATAY,4
ROL LIST,3
ROR DATA2[DI],7
ROR BYTE PTR [EAX], 11
Pentium Pro
8086 -
8088 -
80286 8+n
80386 10
80486 9
Pentium 8-27
RCL mem,imm
RCR mem,imm
RCL DATA1,5
RCL LIST,3
RCR DATA2[SI],9
RCR WORD PTR [ESI],8
Pentium Pro
RDMSR Read model specific register
00001111 00110010
Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 -
Pentium 20-24
RDMSR
Pentium Pro
REP Repeat prefix
11110011 1010010w
Format Examples Microprocessor Clocks
8086 9 + 17n
8088 9 + 25n
REP MOVS REP MOVSB REP MOVSW REP MOVSD REP MOVS 80286 5 + 4n
Dodatak A
A-73
80386 8+ 4n
80486 12 + 3n
Pentium 13 + n
DATAl,DATA2
Pentium Pro
11110011 1010101w
Format Examples Microprocessor Clocks
8086 9 + l0n
8088 9 + 14n
80286 4 + 3n
80386 5+ 5n
80486 7+ 4n
Pentium 9 + n
REP STOS REP STOSB
REP STOSW
REP STOSD
REP STOS ARRAY
Pentium Pro
11110011 0110110w
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 5 + 4n
80386 12 + 5n
80486 17 + 5n
Pentium 25+3n
REP INS REP INSB
REP INSW
REP INSD
REP INS ARRAY
Pentum Pro
11110011 0110111w
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 5 + 4n
80386 12 + 5n
80486 17 + 5n
Pentium 25 + 4n
REP OUTS
REP OUTSB
REP OUTSW
REP OUTSD REP OUTS ARRAY
Pentium Pro
REPE/REPNE Repeat conditional
11110011 1010011w
Format Examples Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-74
8086 9 + 22n
8088 9 + 30n
80286 5 + 9n
80386 5 + 9n
80486 7 +7n
Pentium 9 + 4n
REPE CMPS
REPE CMPSB
REPE CMPSW
REPE CMPSD REPE CMPS DATAl,DATA2
Pentium Pro
11110011 1010111w
Format Examples Microprocessor Clocks
8086 9 + 15n
8088 9 + 19n
80286 5 + 8n
80386 5+ 8n
80486 7+ 5n
Pentium 9 + 4n
REPE SCAS
REPE SCASB
REPE SCASW
REPE SCASD
REPE SCAS ARRAY
Pentium Pro
11110010 1010011w
Format Examples Microprocessor Clocks
8086 9 + 22n
8088 9 + 30n
80286 5 + 9n
80386 5+ 9n
80486 7+ 7n
Pentium 8 + 4n
REPNE CMPS REPNE CMPSB
REPNE CMPSW
REPNE CMPSD
REPNE CMPS ARRAY,LIST
Pentium Pro
11110010 101011w
Format Examples Microprocessor Clocks
8086 9 + 15n
8088 9 + 19n
80286 5 + 8n
80386 5 +8n
80486 7+ 5n
Pentium 9 + 4n
REPNE SCAS REPNE SCASB
REPNE SCASW
REPNE SCASD
REPNE SCAS ARRAY
Pentium Pro
RET Return from procedure
Dodatak A
A-75
11000011
Example Microprocessor Clocks
8086 16
8088 20
80286 11
80386 10
80486 5
Pentium 2
RET (near)
Pentium Pro
11000010 data
Format Examples Microprocessor Clocks
8086 20
8088 24
80286 11
80386 10
80486 5
Pentium 3
RET imm
(near)
RET 4
RET 100H
Pentium Pro
11001011
Format Examples Microprocessor Clocks
8086 26
8088 34
80286 15
80386 18
80486 13
Pentium 4-23
RET
(far)
Pentium Pro
11001010 data
Format Examples Microprocessor Clocks
8086 25
8088 33
80286 11
80386 10
80486 5
RET imm
(far)
RET 4
RET 100H
Pentium 4-23
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-76
Pentium Pro
RSM Resume from system management mode
00001111 10101010 O D I T S Z A P C
* * * * * * * * *
Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 -
Pentium 83
RSM
Pentium Pro
SAHF Store AH into flags
10011110 O D I T S Z A P C
* * * * *
Example Microprocessor Clocks
8086 4
8088 4
80286 2
80386 3
80486
Pentium 2
SAHF
Pentium Pro
SAL/SAR/SHL/SHR Shift
1101000w ooTTTmmm disp O D I T S Z A P C
* * * ? * *
TTT = 100 SHL/SAL, TTT = 101=SHR, and TTT= 111= SAR
Format Examples Microprocessor Clocks
8086 2
8088 2
80286 2
80386 3
SAL reg,1
SHL reg,1
SHR reg,1
SAR reg, 1
SAL CL, 1
SHL DX,1
SAR CH, 1
SHR SI,l
80486 3
Dodatak A
A-77
Pentium 1or 3
Pentium Pro
8086 15 + ea
8088 23 + ca
80286 7
80386 7
80486 4
Pentium 1 or3
SAL mem, 1
SHL mem,1
SHR mem,1
BAR mem,1
SAL DATA1,1 SHL BYTE PTR[DI],l
SAR NUMB, 1
SHR WORD PTR[EDI],1
Pentium Pro
1101001w oommm disp
Format Examples Microprocessor Clocks
8086 8 + 4n
8088 8 + 4n
80286 5+n
80386 3
80486 3
Pentium 4
SAL reg,CL
SHL reg,CL
BAR reg,CL
SHR reg,CL
SAL CH,CL 8086
SHL DX,CL
BAR AL,CL
SHR ESI,CL
Pentium Pro
8086 20 + 4n
8088 28 + 4n
80286 8+n
80386 7
80486 4
Pentium 4
SAL mem,CL
SHL mem,CL
SAR mem,CL
SHR mem,CL
SAL DATAU,CL
SHL BYTE PTR[ESI],CL
SAR NUMB,CL
SHR TEMP,CL
Pentium Pro
1101001w oommm disp
Format Examples Microprocessor Clocks
8086 8 + 4n
8088 8 + 4n
80286 5+n
80386 3
80486 3
Pentium 4
SAL reg,CL
SHL reg,CL
BAR reg,CL
SHR reg,CL
SAL CH,CL SHL DX,CL
BAR AL,CL
SHR ESI,CL
Pentium Pro
1100000w oommmm disp data
Format Examples Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-78
8086 -
8088 -
80286 5+n
80386 3
80486 2
Pentium 1 or 3
SAL reg,imm
SHL reg,imm
SAR reg,imm
SHR reg,imm
SAL CH,4
SHL DX,10
SAR AL,2
SHR ESI,23
Pentium Pro
8086 -
8088 -
80286 8+n
80386 7
80486 4
Pentium 1 or 3
SAL mem,imm
SHL mem,imm
SAR mem.imm
SHR mem,imm
SAL DATAU,3 SHL BYTE PTR[ESI],15
SAR NUMB,3
SHR TEMP,5
Pentium Pro
SBB Subtract with borrow
000110dw oorrrmmm disp O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1 or2
SBB reg,reg SBB CL,DL
SBB AX,DX
SBB CH,CL
SBB EAX,EBX
SBB ESI,EDI
Pentium Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 6
80486 3
Pentium 1 or3
SBB mem,reg SBB DATAJ,CL
SBB BYTES,CX
SBB NUMBS,ECX
SBB [EAX],CX
Pentium Pro
8086 9 + ea
8088 13 + ea
SBB reg,mem SBB CL,DATAL SBB CX,BYTES SBB ECX,NUMBS SBB DX,[EBX+EDI]
80286 7
Dodatak A
A-79
80386 7
80486 2
Pentium 1 or2
Pentium Pro
100000sw oool1mmm disp data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1or 3
SBB reg,imm. SBB CX,3
SBB DI,1AH
SBB DL,34H
SBB EDX, 1345H
SBB CX,1834H
Pentium Pro
100000sw oool1mmm disp data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1or 3
SBB reg,imm. SBB CX,3
SBB DI,1AH
SBB DL,34H
SBB EDX, 1345H
SBB CX,1834H
Pentium Pro
8086 17 + ea
8088 25 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
SBB mem,imm SBB DATAS,3
SBB BYTE PTR[EDI],1AH
SBB OADDY,34H
SBB LIST,'A'
SBB TOAD, 1834H Pentium Pro
0001110w data
Format Examples Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
SBB acc,imm SBB AX,3
SBB AL. 1 AH
SBB AH,34H
SBB EAX, 1 345H
80486 1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-80
Pentium 1 SBB AL,'Y'
Pentium Pro
SCAS Scan string
1010111w O D I T S Z A P C
* * * * * *
Format Examples Microprocessor Clocks
8086 15
8088 19
80286 7
80386 7
80486 6
Pentium 4
SCASB
SCASW
SCASD
SCASB
SCASW
SCASD
SCAS DATAF
REP SCASB
Pentium Pro
SETcondition Conditional set
00001111 1001cccc oo000mrnm
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 4
80486 3
Pentium 1 or 2
SETcnd reg8
SETA BL
SETB CH
SETG DL
SETE BH
SETZ AL
Pentium Pro
8086 -
8088 -
80286 -
80386 5
80486 3
Pentium 1 or 2
SETcnd mem8
SETE DATAK SETAE LESS_OR_SO
Pentium Pro
Condition
Codes Mnemonic Flag Description
Dodatak A
A-81
0000 SETO O = 1 set if overflow
0001 SETNO O=0 Set if no overflow
0010 SETB/SETAE C=1 Set if below
0011 SETAE/SETNB C=0 Set if above or equal
0100 SETE/SETZ Z=1 Set if equal/zero
0101 SETNE/SETNZ Z=0 Set if not equal/zero
0110 SETBE/SETNA C =1 + Z= 1 Set if below or equal
0111 SETA/SETNBE C=0•Z=0 Set if above
1000 SETS S=1 Set if sign
1001 SETNS S=0 Set if no sign
1010 SETP/SETPE P=1 Set if parity
1011 SETNP/SETPO P=0 Set if no parity
1100 SETL/SETNGE S•O Set if less than
1101 SETGE/SETNL S=0 Set K greater than or equal
1110 SETLE/SETNG Z = 1 + S • O
Set it less than or equal
1111 SETG/SETNLE Z=0+S=O Set if greater than
SGDT/SIDT/SLDT Store descriptor table registers
00001111 00000001 oo000mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 11
80386 9
80486 10
Pentium 4
SGDT mem
SGDT MEMORY
SGDT GLOBAL
Pentium Pro
00001111 00000001 00001mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 12
80386 9
SIDT mem SIDT DATAS
SIDT INTERRUPT
80486 10
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-82
Pentium 4
Pentium Pro
00001111 00000000 oo0000mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 2
80386 2
80486 2
Pentium 2
SLDT reg SLDT CX
SLDT OX
Pentium Pro
8086 -
8088 -
80286 3
80386 2
80486 3
Pentium 2
SLDT mem SLDT NUMBS
SLDT LOCALS
Pentium Pro
SHLD/SHRD Double precision shift
00001111 10100100 oorrrmmm disp data
O D I T S Z A P C
? * * ? * *
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 2
Pentium 4
SHLD reg,reg,imm
SHLD AX,CX, 10
SHLO DX,BX,8
SHLD CX,DX,2
Pentium Pro
8086 -
8088 -
80286 -
80386 7
80486 3
SHLD mem,reg,imm
SHLD DATAQ,CX,8
Pentium 4
Dodatak A
A-83
Pentium Pro
00001111 10101100 oorrrmmrn disp data
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 2
Pentium 4
SHRD reg,reg,imm
SHRD CX,DX,2
Pentium Pro
8086 -
8088 -
80286 -
80386 7
80486 2
Pentium 4
SHRD mem,reg,imm
SHRD DATAZ,DX,4
Pentium Pro
000011111 0100101 oorrrrnrnm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 -
80386 3
80486 3
Pentium 4 or 5
SHLD reg,reg,CL
SHLD BX,DX,CL
Pentium Pro
8086 -
8088 -
80286 -
80386 7
80486 3
Pentium 4 or 5
SHLD mem.reg,CL
SHLD DATAZ,DX,CL
Pentium Pro
000011111 0101101 oorrrmmm disp
Format Examples Microprocessor Clocks
SHRD SHRD 8086 -
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-84
8088 -
80286 -
80386 3
80486 3
Pentium 4 or 5
reg,reg,CL AX,DX,CL
Pentium Pro
8086 -
8088 -
80286 -
80386 7
80486 3
Pentium 4 or 5
SHRD mem,reg,CL
SHRD DATAZ,DX,CL
Pentium Pro
SMSW Store machine status word (80286)
00001111 00000001 oo100mmm disp
Format Examples Microprocessor Clocks
8086 -
8088 -
80286 2
80386 10
80486 2
Pentium 4
SMSW reg SMSW AX
SMSW DX
SMSW BP
Pentium Pro
8086 -
8088 -
80286 3
80386 3
80486 3
Pentium 4
SMSW mem SMSW DATAQ
Pentium Pro
STC Set carry flag
11111001 O D I T S Z A P C
Dodatak A
A-85
*
Format Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 2
80486 2
Pentium 2
STC STC
Pentium Pro
STD Set direction flag
11111101 O D I T S Z A P C
1
Format Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 2
80486 2
Pentium 2
STD STD
Pentium Pro
STI Set interrupt flag
11111011 O D I T S Z A P C
1
Format Example Microprocessor Clocks
8086 2
8088 2
80286 2
80386 3
80486 5
Pentium 7
STI STI
Pentium Pro
STOS Store string data
1010101w
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-86
Format Example Microprocessor Clocks
8086 11
8088 15
80286 3
80386 40
80486 5
Pentium 3
STOSB
STOSW
STOSD
STOSB
STOSW
STOSD STOS DATA_LIST
REP STOSB
Pentium Pro
STR Store task register
00001111 00000000 oo001mmm disp
Format Example Microprocessor Clocks
8086 -
8088 -
80286 2
80386 2
80486 2
Pentium 2
STR reg STR AX
STR DX
STR BP
Pentium Pro
8086 -
8088 -
80286 2
80386 2
80486 2
Pentium 2
STR mem STR DATA3
Pendum Pro
SUB Subtract
00010ldw oorrrmmm disp O D I T S Z A P C
* * * * * *
Format Example Microprocessor Clocks
8086 3
8088 3
SUB reg,reg SUB CL,DL
SUB AX,DX
SUB CH,CL 80286 2
Dodatak A
A-87
80386 2
80486 1
Pentium 1 or 2
SUB EAX,EBX
SUB ESI,EDI
Pentium Pro
8086 16 + ea
8088 24 + ea
80286 7
80386 6
80486 3
Pentium 1 or3
SUB mem,reg SUB DATAJ,CL
SUB BYTES,CX
SUB NUMBS,ECX
SUB [EAX],CX
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 7
80386 7
80486 2
Pentium 1 or 2
SUB reg,mem SUB CL,DATAL
SUB CX,BYTES
SUB ECX,NUMBS
SUB DX,[EBX+EDI]
Pentium Pro
100000sw 00101mmm disp data
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or 3
SUB reg,imm SUB CX,3
SUB DI,1AH
SUB DL,34H
SUB EDX,1345H
SUB CX,1834H
Pentium Pro
8086 17 + ea
8088 25 + ea
80286 7
80386 7
80486 3
Pentium 1 or 3
SUB mem,imm SUB DATAS,3
SUB BYTE PTR[EDI],1AH
SUB OADDY,34H
SUB LIST,'A'
SUB TOAD,1834H Pentium Pro
0010110w data
Format Example Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-88
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
SUB acc,imm SUB AL,3
SUB AX,1AH
SUB EAX,34H
Pentium Pro
TEST Test operands (logical compare)
1000001w oorrrmmm disp O D I T S Z A P C
0 * * ? * 0
Format Example Microprocessor Clocks
8086 5
8088 5
80286 2
80386 2
80486 1
Pentium 1 or 2
TEST reg,reg TEST CL,DL
TEST BX,DX
TEST DH,CL
TEST EBP,EBX
TEST EAX,EDI
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 6
80386 5
80486 2
Pentium 1 or2
TEST mem,reg
reg,mem
TEST DATAJ,CL
TEST BYTES,CX TEST NUMBS,ECX
TEST[EAX],CX
TEST CL,POPS
Pentium Pro
1111011sw oo000mmm disp data
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1 or2
TEST reg,imm TEST BX,3
TEST DI, 1 AH
TEST DH,44H TEST EDX,1AB345H
TEST SI,1834H
Pentium Pro
TEST mem,imm TEST DATAS,3 8086 11 +ea
Dodatak A
A-89
8088 11 +ea
80286 6
80386 5
80486 2
Pentium 1 or2
TEST BYTE PTR[EDI],1AH TEST DADDY,34H TEST LIST,'A' TEST TOAD,1834H
Pentium Pro
1010100w data
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
TEST acc,imm TEST AL,3
TEST AX, 1AH
TEST EAX,34H
Pentium Pro
VERR/VERW Verify read/write
00001111 00000000 oo100mmm disp O D I T S Z A P C
*
Format Example Microprocessor Clocks
8086 -
8088 -
80286 14
80386 10
80486 11
Pentium 7
VERR reg VERR CX
VERR DX
VERR DI
Pentium Pro
8086 -
8088 -
80286 16
80386 11
80486 11
Pentium 7
VERR mem VERR DATAJ
VERR TESTB
Pentium Pro
00001111 00000000 ool01rnmm disp
Format Example Microprocessor Clocks
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-90
8086 -
8088 -
80286 14
80386 15
80486 11
Pentium 7
VERW reg VERW CX
VERW DX
VERW DI
Pentium Pro
8086 -
8088 -
80286 16
80386 16
80486 11
Pentium 7
VERW mem VERW DATAJ
VERW TESTB
Pentium Pro
WAIT Wait for coprocessor
10011011
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 6
80486 6
Pentium 1
WAIT
FWAIT
WAIT
FWAIT
Pentium Pro
WBINVD Write-back cache invalidate data cache
00001111 00001001
Format Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
WBINVD WBINVD
80486 5
Dodatak A
A-91
Pentium 2000+
Pentium Pro
WRMSR Write to model specific register
00001111 00110000
Format Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 -
Pentium 30-45
WRMSR WRMSR
Pentium Pro
XADD Exchange and add
00001111 1100000w 11rrrrrr O D I T S Z A P C
* * * * * *
Format Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
80486 3
Pentium 3or4
XADD reg,reg XADD EBX,ECX
XADD EDX,EAX
XADD EDI,EBP
Pentium Pro
00001111 1100000w oorrrmmm disp
Format Example Microprocessor Clocks
8086 -
8088 -
80286 -
80386 -
M80486 4
Pentium 3 or 4
XADD mem.reg XADD DATA5,ECX
XADD [EBX],EAX
XADD [ECX+4],EBP
Pentium Pro
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-92
XCHG Exchange
100001lw oorrrmmm
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 3
80486 3
Pentium 3
XCHG reg,reg XCHG CL,DL
XCHG BX,DX
XCHG DH,CL
XCHG EBP,EBX
XCHG EAX,EDI
Pentium Pro
8086 17 + ea
8088 25 + ea
80286 5
80386 5
80486 5
Pentium 3
XCHG mem,reg
reg,mern
XCHG DATAJ,CL XCHG BYTES,CX
XCHG NUMBS,ECX
XCHG [EAX],CX
XCHG CL,POPS
Pentium Pro
10010reg
Format Example Microprocessor Clocks
8086 3
8088 3
80286 3
80386 3
80486 3
Pentium 2
XCHG acc,reg
reg.acc
XCHG BX,AX
XCHG AX,DI
XCHG DH,AL
XCHG EDX,EAX
XCHG SI,AX
Pentium Pro
XLAT Translate
11010111
Format Example Microprocessor Clocks
8086 11
8088 11
80286 5
XLAT XLAT
80386 3
Dodatak A
A-93
80486 4
Pentium 4
Pentium Pro
XOR Exclusive-OR
000110dw oorrrmmm disp O D I T S Z A P C
0 * * ? * 0
Format Example Microprocessor Clocks
8086 3
8088 3
80286 2
80386 2
80486 1
Pentium 1or 2
XOR reg,reg XOR CL,DL
XOR AX,DX
XOR CH,CL
XOR EAX,EBX
XOR ESI,EDI
Pentium Pro
8086 16 + aa
8088 24 + ea
80286 7
80386 6
80486 3
Pentium 1 or 3
XOR mem,reg XOR DATAJ,CL
XOR BYTES,CX
XOR NUMBS,ECX
XOR [EAX],CX
Pentium Pro
8086 9 + ea
8088 13 + ea
80286 7
80386 7
80486 2
Pentium 1 or2
XOR reg,mem
XOR CL,DATAL
XOR CX,BYTES XOR ECX,NUMBS
XOR DX,[EBX+EDI]
Pentium Pro
100000sw oo110mmm disp data
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
XOR reg,imm XOR CX,3
XOR DI,1AH
XOR DL,34H
XOR EDX,1345H
80486 1
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-94
Pentium 1or 3 XOR CX,1834H
Pentium Pro
8086 17 + ea
8088 25 + ea
80286 7
80386 7
80486 3
Pentium 1 or3
XOR mem.imm
XOR DATAS,3 XOR BYTE PTR[EDI],1AH
XOR DADDY,34H
XOR LIST,'A'
XORTOAD,1834H Pentium Pro
0010101w data
Format Example Microprocessor Clocks
8086 4
8088 4
80286 3
80386 2
80486 1
Pentium 1
XOR acc,imm
XOR AL,3
XOR AX,1AH
XOR EAX,34H
Pentium Pro
A.4 The instruction set of the arithmetic coprocessor
F2XM1 2ST-1
11011001 11110000
Example Clocks
F2XM1 8087 310-630
80287 310-630
80387 211-476
80486/7 140-279
Pentium 13-57
FABS Absolute value of ST
11011001 11100001
Example Clocks
FABS 8087 10-17
80287 10-17
80387 22
Dodatak A
A-95
80486/7 3
Pentium 1
FADD/FADDP/FIADD Addition
11011000 oo000mmm disp 32-bit memory (FADD)
11011100 oo000mmm disp 64-bit memory (FADD)
11011d00 11000rrr FADD ST,ST(rrr)
11011110 11000rrr FADDP SR,ST (rrr)
11011110 oo000mmm disp 16-bit memory (FIADD)
11011010 oo000mmm disp 32-bit memory (FIADD)
Format Examples Clocks
FADD FADD DATA 8087 70-143
FADDP FADD ST,ST(1) 80287 70-143
FIADD FADDP 80387 23-72
FIADD NUMBER 80486/7 8-20
FADD ST,ST(3)
FADDP ST,ST(2)
FADD ST(2),ST
Pentium 1-7
FCLEX/FNCLEX Clear errors
11011011 11100010
Example Clocks
FCLEX 8087 2-8
FNCLEX 80287 2-8
80387 11
80486/7 7
Pentium 9
FCOM/FCOMP/FCOMPP/FICOM/FICOMP Compare
11011000 oo010mmm disp 32-bit memory (FCOM)
11011100 oo010mmm disp 64-bit memory (FCOM)
11011000 11010rrr FCOM ST(rrr)
11011000 oo011 mmm disp 32-bit memory (FCOMP)
11011100 oo011 mmm disp 64-bit memory (FCOMP)
11011000 11011 rrr FCOMP ST (rrr)
11011110 11011001 FCOMPP
11011110 oo010mmm disp 16-bit memory (FICOM)
11011010 oo010mmm disp 32-bit memory (FICOM)
11011110 oo011mmm disp 16-bit memory (FICOMP)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-96
11011010 oo011mmm disp 32-bit memory (FICOMP)
Format Examples Closks
FCOM FCOM ST(2) 8087 40-93
FCOMP FCOMP, DATA 80187 40-93
FCOMPP FCOMPP 80387 24-63
FICOM FICOM NUMBER 80486/7 15-20
FICOMP FICOMP DATA3 Pentium 1-8
FCOS Cosine of ST
11011001 111111111
Example Clocks
FCOS 8087 -
80287 -
80387 123-772
80486/7 193-279
Pentium 18-124
FDECSTP Decrement stack pointer
11011001 11110110
Example Clocks
FDECSTP 8087 6-12
80287 6-12
80387 22
80486/7 3
Pentium 1
FDISI/FNDISI Disable interrupts
11011011 11100001
(Ignored on the 80287, 80387, 80486/7, and Pentium)
Example Clocks
FDISI 8087 2-8
FNDISI 80287 -
80387 -
80486/7 -
Pentium -
FDIV/FDIMP/FIDIV Division
11011000 oo010mmm disp 32-bit memory (FDIV)
11011100 oo100mmm disp 64-bit memory (FDIV)
11011d00 11111rrr FDIV ST,ST(rrr)
Dodatak A
A-97
11011110 11111rrr FDIVP ST,ST(rrr)
11011110 oo110mmm disp 16-bit memory (FIDIV)
11011010 oo110mmm disp 32-bit memory (FIDIV)
Format Examples Clocks
FDIV FDIV DATA 8087 191-243
FDIVP FDIV ST,ST(3) 80287 191-243
FIDIV FDIVP 80387 88-140
FIDIV NUMBER 80486/7 9-89
FDIV ST,ST(5)
FDIIVP ST,ST(2)
FDIV ST(2), ST
Pentium 39-42
FDIVR/FDIVRP/FIDIVR Division reversed
11011000 oo111mmm disp 32-bit memory (FDIVR)
11011100 oo111mmm disp 64-bit memory (FDIVR)
11011d00 11110rrr FDIVR ST,ST(rrr)
11011110 11110rrr FDIVP ST,ST(rrr)
11011110 oo111mmm disp 16-bit memory (FIDIVR)
11011010 oo111mmm disp 32-bit memory (FIDIVR)
Format Examples Clocks
FDIVR FDIVR DATA 8087 191-243
FDIVRP FDIVR ST,ST(3) 80287 191-243
FIDIVR FDIVRP 80387 88-140
FIDIVR NUMBER 80486/7 9-89
FDIVR ST,ST(5)
FDIIVRP ST,ST(2)
FDIVR ST(2), ST
Pentium 39-42
FENI/FNENI Disable interrupts
11011011 11100000
(Ignored on the 80287, 80387, 80486/7, and Pentium)
Example Clocks
FENI 8087 2-8
FNENI 80287 -
80387 -
80486/7 -
Pentium -
FFREE Free register
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-98
11011101 11000rrr
Format Examples Clocks
FFREE FFREE 8087 9-16
FFREE ST(1) 80287 9-16
FFREE ST(2) 80387 18
80486/8 3
Pentium 1
FINCSTP Increment stack poionter
11011101 11110111
Example Clocks
FINCSTP 8087 6-12
80287 6-12
80387 21
80486/8 3
Pentium 1
FINIT/FNINIT Initialize coprocessor
11011101 11110110
Example Clocks
FINIT 8087 2-8
FNINIT 80287 2-8
80387 33
80486/8 17
Pentium 1
FLD/FILD/FBLD Load data to ST(0)
11011001 oo000mmm disp 32-bit memory (FLD)
11011101 oo000mmm disp 64-bit memory (FLD)
11011011 oo101mmm disp 80-bit memory (FLD)
11011111 oo000mmm disp 16-bit memory (FILD)
11011011 oo000mmm disp 32-bit memory (FILD)
11011111 oo101mmm disp 64-bit memory (FILD)
11011111 oo100mmm disp 80-bit memory (FBLD)
Format Examples Clocks
FLD FLD DATA 8087 17-310
FILD FILD DATA1 82087 17-310
FBLD FBLD DEC_DATA 83087 14-275
Dodatak A
A-99
80486/7 3-103
Pentium 1-3
FLD1 Load +1.0 to ST(0)
11011101 11101000
Example Clocks
FLD1 8087 15-21
80287 15-21
80387 24
80486/7 4
Pentium 2
FLDZ Load +0.0 to ST(0)
11011001 11101110
Examples Clocks
FLDZ 8087 11-17
80287 11-17
80387 20
80486/7 4
Pentium 2
FLDPI Load to ST(0)
11011001 11101011
Examples Clocks
FLDPI 8087 16-22
80287 16-22
80387 40
80486/7 8
Pentium 3-5
FLDL2E Load log2 e to ST(0)
11011001 11101010
Examples Clocks
FLDL2E 8087 15-21
80287 15-21
80387 40
80486/7 8
Pentium 3-5
FLDL2T Load log2 10 to ST(0)
11011001 11101001
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-100
Examples Clocks
FLDL2T 8087 16-22
80287 16-22
80387 40
80486/7 8
Pentium 3-5
FLDLG2 Load log10 2 to ST(0)
11011001 11101000
Examples Clocks
FLDG2 8087 18-24
80287 18-24
80387 41
80486/7 8
Pentium 3-5
FLDLN2 Load loge 2 to ST(0)
11011001 11101101
Example Clocks
FLDLN2 8087 17-23
80287 17-23
80387 41
80486/7 8
Pentium 3-5
FLDCW Load control register
11011001 oo101mmm disp
Format Examples Clocks
FLDCW FLDCW DATA 8087 7-14
FLDCW STATUS 80287 7-14
80387 19
80486/7 4
Pentium 7
FLDENV Load environment
11011001 oo100mmm disp
Format Examples Clocks
FLDENV FLENV ENVIRON 8087 35-45
FLDENV DATA 80287 25-45
80387 71
Dodatak A
A-101
80486/7 34-44
Pentium 32-37
FMUL/FMULP/FIMUL Multiplication
11011000 oo001 mmm disp 32-bit memory (FMUL)
11011100 oo001 mmm disp 64-bit memory (FMUL)
11011d00 11001rrr FMUL ST,ST(rrr)
11011110 11001rrr FMULP ST,ST (rrr)
11011110 oo001 mmm disp 16-bit memory (FIMUL)
11011010 oo001 mmm disp 32-bit memory (FIMUL)
Format Examples Clocks
FMUL FMUL DATA 8087 110-168
FMULP FMUL ST,ST(2) 80287 110-168
FIMUL FMUL ST(2), ST 80387 29-82
FMULP 80486/7 11-27
FIMUL DATA3 Pentium 1-7
FNOP No operation
11011001 11010000
Examples Clocks
FNOP 8087 10-16
80287 10-16
80387 12
80486/7 3
Pentium 1
FPATAN Partial arctangent of ST(0)
11011001 11110011
Examples Clocks
FPATAN 8087 250-800
80287 250-800
80387 314-487
80486/7 218-303
Pentium 17-173
FPREM Partial remainder
11011001 11111000
Examples Clocks
FPREM 8087 15-190
80287 15-190
80387 74-155
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-102
80486/7 70-138
Pentium 16-64
FPREM1 Partial remainder(IEEE)
11011001 11110101
Examples Clocks
FPREM1 8087 -
80287 -
80387 95-185
80486/7 72-167
Pentium 20-70
FPTAN Partial tangent of ST(0)
11011001 11110010
Examples Clocks
FPTAN 8087 30-450
80287 30-450
80387 191-497
80486/7 200-273
Pentium 17-173
FRNDINT Round ST(0) to an integer
11011001 11111100
Examples Clocks
FRNDINT 8087 16-50
80287 16-50
80387 66-80
80486/7 21-30
Pentium 9-20
FRSTOR Restore state
11011101 oo110 mmm disp
Format Examples Clocks
FRSTOR FRSTOR DATA 8087 197-207
FRSTOR STATE 80287 197-207
FRSTOR MACHINE 80387 308
80486/7 120-131
Pentium 70-95
FSAVE/FNSAVE Save machine state
11011101 oo110 mmm disp
Dodatak A
A-103
Format Examples Clocks
FSAVE FSAVE STATE 8087 197-207
FNSAVE FNSAVE STATUS 80287 197-207
FSAVE MACHINE 80387 375
80486/7 143-154
Pentium 124-151
FSCALE Scale ST(0) by ST(1)
11011001 11111101
Examples Clocks
FSCALE 8087 32-38
80287 32-38
80387 67-86
80486/7 30-32
Pentium 20-31
FSETPM Set protected mode
11011011 11100100
Examples Clocks
FSETPM 8087 -
80287 2-18
80387 12
80486/7 -
Pentium -
FSIN Sine of ST(0)
11011001 11111110
Examples Clocks
FSINN 8087 -
80287 -
80387 122-771
80486/7 193-279
Pentium 16-126
FSINCOS Find sine and cosine of ST(0)
11011001 11111011
Examples Clocks
FSINCOS 8087 -
80287 -
80387 194-809
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-104
80486/7 243-329
Pentium 17-137
FSQRT Square root of ST(0)
11011001 11111010
Examples Clocks
FSQRT 8087 180-186
80287 180-186
80387 122-129
80486/7 83-87
Pentium 70
FST/FSTP/FIST/FISTP/FBSTP Store
11011001 oo010 mmm disp 32-bit memory (FST)
11011101 oo010 mmm disp 32-bit memory (FST)
11011101 11010 rrr FST ST(rrr)
11011011 oo011 mmm disp 32-bit memory (FSTP)
11011011 oo011 mmm disp 64-bit memory (FSTP)
11011101 oo111 mmm disp 32-bit memory (FSTP)
11011111 11001 rrr FSTP ST(rrr)
11011001 oo010 mmm disp 16-bit memory (FIST)
11011011 oo010 mmm disp 32-bit memory (FIST)
11011111 oo011 mmm disp 16-bit memory (FISTP)
11011011 oo011 mmm disp 32-bit memory (FISTP)
11011111 oo111 mmm disp 64-bit memory (FISTP)
11011111 oo110 mmm disp 80-bit memory (FBSTP)
Format Examples Clocks
FST FST DATA 8087 15-540
FSTP FST ST(3) 80287 15-540
FIST FST 80387 11-534
FISIT FSTP 80486/7 3-176
FBSTP FIST DATA2 Pentium 1-3
FBSTP DATA6
FISTP DATA8
FSTCW/FNSTCW Store control register
11011001 oo111 mmm disp
Format Examples Clocks
FSTCW FSTCW CONTROL 8087 12-18
Dodatak A
A-105
FNSTCW FNSTCW STATUS 80287 12-18
FSTCW MACHINE 80387 15
80486/7 3
Pentium 2
FSTENV/FNSTENV Store environment
11011001 oo110 mmm disp
Format Examples Clocks
FSTENV FSTENV CONTROL 8087 40-50
FNSTENV FNSTENV STATUS 80287 40-50
FSTENV MACHINE 80387 103-104
80486/7 58-67
Pentium 48-50
FSTSW/FNSTSW Store status register
11011101 oo111 mmm disp
Format Examples Clocks
FSTSW FSTSW CONTROL 8087 12-18
FNSTSW FNSTSW STATUS 80287 12-18
FSTSW MACHINE 80387 15
FSTSW AX 80486/7 3
Pentium 2-5
FSUB/FSUBP/FISUB Subtraction
11011000 oo100 mmm disp 32-bit memory (FSUB)
11011100 oo100 mmm disp 64-bit memory (FSUB)
11011d00 11101 rrr FSUB ST,ST(rrr)
11011110 11101 rrr FSUBP ST,ST(rrr)
11011110 oo100 mmm disp 16-bit memory (FISUB)
11011010 oo100 mmm disp 32-bit memory (FISUB)
Format Examples Clocks
FSUB FSUB DATA 8087 70-143
FSUBP FSUB ST,ST(2) 80287 70-143
FISUB FSUB ST(2), ST 80387 29-82
FSUBP DATA3 80486/7 8-35
FSUBP Pentium 1-7
FSUBR/FSUBRP/FISUBR Reverse subtraction
11011000 oo101 mmm disp 32-bit memory (FSUBR)
11011100 oo101 mmm disp 64-bit memory (FSUBR)
11011d00 11100 rrr FSUBR ST,ST (rrr)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-106
11011110 11100 rrr FSUBRP ST,ST(rrr)
11011110 oo101 mmm disp 16-bit memory (FISUBR)
11011110 oo101 mmm disp 32-bit memory (FISUBR)
Format Examples Clocks
FSUBR FSUBR DATA 8087 70-143
FSUBRP FSUBR ST, ST(2) 80287 70-143
FISUBR FSUBR ST(2), ST 80387 29-82
FSUBRP 80486/7 8-35
FISUBR DATA3 Pentium 1-7
FTST Compare ST(0) with + 0.0
11011001 11100100
Examples Clocks
FTST 8087 38-48
80287 38-48
80387 28
80486/7 4
Pentium 1-4
FUCOM/FUCOMP/FUCOMPP Unordered compare
11011101 11100 rrr FUCOM ST,ST(rrr)
11011101 11101 rrr FUCOMP ST,ST(rrr)
11011101 11101001 FUCOMPP
Format Examples Clocks
FUCOM FUCOM ST,ST(2) 8087 -
FUCOMP FUCOM 80287 -
FUCOMPP FUCOMP ST, ST(3) 80387 24-26
FUCOMP 80486/7 4-5
FUCOMPP Pentium 1-4
FWAIT Wait
10011011
Examples Clocks
FWAIT 8087 4
80287 3
80387 6
80486/7 1-3
Pentium 1-3
FXAM Examine ST(0)
11011001 11100101
Dodatak A
A-107
Examples Clocks
FXAM 8087 12-23
80287 12-23
80387 30-38
80486/7 8
Pentium 21
FXCH Exchange ST(0) with another register
11011001 111001 rrr FXCH ST, ST(rrr)
Format Examples Clocks
FXCH FXCH ST,ST(1) 8087 10-15
FXCH 80287 10-15
FXCH ST,ST(4) 80387 18
80486/7 4
Pentium 1
FXTRACT Extract components of ST(0)
10011011 11110100
Examples Clocks
FXTRACT 8087 27-55
80287 27-55
80387 70-76
80486/7 16-20
Pentium 13
FYL2X ST(1) x log/2 ST(0)
11011001 11110001
Examples Clocks
8087 900-1100
80287 900-1100
80387 120-538
80486/7 196-329
FYL2X
Pentium 22-111
FXL2XP1 ST(1) * log2 [ST(0) + 1.0]
11011001 11111001
Examples Clocks
8087 700-1000
80287 700-1000
80387 257-547
FXL2XP1
80486/7 171-326
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-108
Pentium 22-103
Pregled instrukcija mikroprocesora iz familije 80x86
U tekstu koji sledi dat je evolutivni pregled instrukcija mikroprocesora 80x86 po~ev od 8086 do Pentium-a. Skup instrukcija ~ini est glavnih grupa instrukcija.
1. Instrukcije za prenos podataka
Instrukcije iz ove grupe se koriste za kopiranje podataka izmedju registara, memorije i spoljnjeg sveta. Takodje, neke od instrukcija manipuliu magacinom, dok se druge mogu koristiti za promenu vrednosti markera uslova.
Instrukcije za prenos podataka su:
IN Input byte or word from port
LAHF Load AH from flags
LDS Load pointer using data segment
LEA Load effective address
LES Load pointer using extra segment
MOV Move to/from register/memory
OUT Output byte or word to port
POP Pop word off stack
POPF Pop flags off stack
PUSH Push word onto stack
PUSHF Push flags onto stack
SAHF Store AH into flags
XCHG Exchange byte or word
CLAT Translate byte
Dodatne 80286 instrukcije:
INS Input string from port
OUTS Ouput string to port
POPA Pop all registers
PUSHA Push all registers
Dodatak A
A-109
Dodatne 80386 instrukcije:
LFS Load pointer using FS
LGS Load pointer using GS
LSS Load pointer using SS
MOVSX Move with sign extended
MOVZX Move with zero extended
POPAD Pop all double (32-bit) registers
POPD Pop double register
POPFD Pop double flag register
PUSHAD Push all double registers
PUSHD Push double register
PUSHFD Push double flag register
Nova 80486 instrukcija:
BSWAP Byte swap
Nova Pentium instrukcija:
MOV Move to/from control register
2. Aritmeti~ke instrukcije
Skoro sve instrukcije iz ove grupe manipuliu nad podacima tipa bajt ili re~. Pored operacija sabiranja i oduzimanja, postoje i instrukcije za mno`enje i deljenje. Operacije sabiranja i oduzimanja se mogu izvravati nad binarnim i BCD operandima.
Aritmeti~ke instrukcije su:
AAA ASCII adjust for addition
AAD ASCII adjust for division
AAM ASCII adjust for multiply
AAS ASCII adjust for subtraction
ADC Add byte or word plus carry
ADD Add byte or word
CBW Convert byte or word
CMP Compare byte or word
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-110
CWD Convert word to double-word
DAA Decimal adjust for addition
DAS Decimal adjust for subtraction
DEC Decrement byte or word by one
DIV Divide byte or word (unsigned)
IDIV Integer divide byte or word
IMUL Integer multiply byte or word
INC Increment byte or word by one
MUL Multiply byte or word (unsigned)
NEG Negate byte or word
SBB Subtract byte or word and carry
SUB Subtract byte or word
Dodatne 80386 instrukcije:
DCQ Convert double word to quad word
CWDE Convert word to dobule word
Dodatne 80486 instrukcije:
CMPXCHG Compare and exchange
XADD Exchange and add
Nova Pentium instrukcija:
CMPXCHG8B Compare and exchange 8 bytes
3. Instrukcije koje manipuliu sa bitovima
Instrukcije koje su u stanju da obavljaju logi~ke operacije, operacije pomeranja i rotiranja, pripadaju ovoj grupi. Veliki broj Bulovih operacija (AND, OR, NOT, ...) pripadaju logi~kim instrukcijama. Ove, kao i instrukcije pomeranja i rotiranja, operiu nad bajtovima ili re~ima. Kod mikroprocesora 80386 pa navie, postoje instrukcije koje manipuliu nad sadr`ajem jedinstvenog bita.
Instrukcije koje manipuliu sa bitovima su:
AND Logical AND of byte or word
OR Logical OR of byte or word
Dodatak A
A-111
RCL Rotate left through carry byte or word
ROL Rotate left byte or word
ROR Rotate right byte or word
SAL Arithmetic shift left byte or word
SAR Arithmetic shift right byte or word
SHR Logical shift right byte or word
SHL Logical shift left byte or word
TEST Test byte or word
XOR Logical exclusive-OR of byte or word
Dodatne 80386 instrukcije:
BSF Bit scan forward
BSR Bit scan reverse
BT Bit test
BTC Bit test and complement
BTR Bit test and reset
BTS Bit test and set
SHLD Shift left double precision
SHRD Shift right double precision
SETcc Set byte on condition
4. Instrukcije za manipulaciju sa nizovima
Komande koje izdaje korisnik kao i odgovarajui odzivi, naj~ee se kodiraju kao niz ASCII znakova koji se mogu procesirati korektnim izborom instrukcija koje manipuliu sa nizovima.
Instrukcije koje manipuliu sa nizovima su:
CMPS Compare byte or word string
LODS Load byte or word string
MOVS Move byte or word string
MOVSB(MOVSW) Move byte string(word string)
REP Repeat
REPE (REPZ) Repeat while equal (zero)
REPNE (REPNZ) Repeat while not equal (not zero)
SCAS Scan byte or word string
SSTOS Store byte or word string
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-112
5. Instrukcije za upravljanje tokom programa
U ovu grupu spadaju sve instrukcije tipa jump, loop, call, interrupt call. Najvei deo instrukcija tipa jump su uslovne instrukcije grananja koje testiraju postavljenost (stanje) markera uslova.
Programsko-upravlja~ke instrukcije su:
CALL Call procedure (subroutine)
INT Interrupt
INTO Interrupt if overflow
IRET Return from interrupt
JA (JNBE) Jump if above (not below nor equal)
JAE (JNB) Jump if above or equal (not below)
JB (JNAE) Jump if below (not above nor equal)
JBE (JNA) Jump if below or equal (not above)
JC Jump if carry set
JCXZ Jump if CX equals zero
JE (JZ) Jump if equal (zero)
JG (JNLE) Jump if greater (not less nor equal)
JGE (JNL) Jump if greater or equal (not less)
JL (JNGE) Jump if less (not greater nor equal)
JLE (JNG) Jump if less or equal (not greater)
JMP Unconditional jump
JNC Jump if no carry
JNE (JNZ) Jump if not equal (not zero)
JNO Jump if no overflow
JNP (JPO) Jump if no parity (parity odd)
JNS Jump if no sign
JO Jump if overlow
JP (JPE) Jump if no parity (parity even)
JS Jump if sign
LOOP Loop unconditional
LOOP (LOOPZ) Loop if equal (zero)
LOOPNE (LOOPNZ)
Loop if not equal (not zero)
RET Return from procedure (subroutine)
Dodatak A
A-113
Dodatne 80286 instrukcije:
BOUND Check index against array bounds
ENTER Enter a procedure
LEAVE Leave a proceure
Dodatne 80386 instrukcije:
IRETD Interrupt return
JECXZ Jump if ECX is zero
6. Instrukcije za upravljanje radom procesora
Instrukcije iz ove grupe imaju efekat na rad procesora. Vei broj instrukcija iz ove grupe manipulie sa markerima.
Instrukcije za upravljanje radom procesora su:
CLC Clear carry flag
CLD Clear direction flag
CLI Clear interrupt enable flag
CMC Complement carry flag
ESC Escape to external processor
HLT Halt processor
LOCK Lock bus during next instruction
NOP No operation
STC Set carry flag
STD Set direction flag
STI Set interrupt enable flag
WAIT Wait for TEST pin activity
Dodatne 80286 instrukcije (samo za zatieni na~in rada):
ARPL Adjust requested privilege level
CLTS Clear task switched flag
LAR Load access rights
LGDT Load global descriptor table
LIDT Load interrupt descriptor table
Zbirka zadataka iz Mikroprocesora i mikrora~unara
A-114
LLDT Load Local descriptor table
LMSW Load machine status word
LSL Load segment limit
LTR Load task register
SGDT Store global descriptor table
SIDT Store interrupt descriptor table
SLDT Store local descriptor table
SMSW Store machine status word
STR Store task register
VERR Verify segment for reading
VERW Verify segment for writing
Dodatne 80486 instrukcije:
INVD Invalidate cache
INVLPG Invalidate TLB entry
WBINVD Write back and invalidate cache
Nove Pentium instrukcije:
CPUID CPU identification
RDMSR Read from model-specific register
RDTSC Read from time stamp counter
RSM Resume from system management mode
WRMSR Write to model-specific register
Dodatak B
B-1
B. DODATAK: OSNOVA DOS -a
ö õ
Sekcija B.1 -- UVOD U DOS
Jedan od programa koje ra~unar izvrava je master, ili glavni program. ovaj program nam obezbe|uje uslove da se i drugi programi mogu bez velikih problema izvravati. Uobi~ajeno, master program nazivamo operativni sistem. Kada se govori o peresonalnim ra~unarima, poznatiji operativni sistemi su MS-DOS (ili PC-DOS), ), OS-2, Windows, Linux i dr. Operativni sistem uobi~ajeno se mo`e: (a) nalaziti na jednom od flopi disk jedinica, (b) nalaziti na hard (krutom) disku - ova verzija je rezidentna, (c) memorisati u ROM prostor ra~unara - rezidentna verzija, (d) napuniti preko lokalne ra~unarske mre`e (LAN). Svaki put kada se ra~unar uklju~i na napajanje, ili se resetuje, operativni sistem se ~ita sa diska (flopi ili krutog), ROM-a, ili LAN-a i smeta u memoriju. Ova operacija se naziva boot-ovanje sistema. U daljem tekstu ograni~iemo se na objanjenja koja se odnose na operativni sistem DOS. (Napomenimo da je DOS od poznatijih, iroko apliciranih, operativnih sistema jedan od najjednostavnijih pa je sa ta~ke gledita edukacije, to se po~etnika ti~e, najopravdanije prvo njega izu~avati). Nakon punjenja u memoriju, DOS koristi usluge fajla CONFIG.SYS. Ovaj fajl specificira razli~ite pokreta~ke programe (drajvere), koji se pune u memoriju i na taj na~in u~estvuju u konfigurisanju maine. Ilustracije radi na Slici B.1 prikazana je lista CONFIG.SYS fajla kod DOS-ove verzije 5.0 Prva ~etiri iskaza u CONFIG.SYS fajla sa Slike B.1 postavljaju broj fajlova, bafera, magacina i fajl upravlja~kih blokova potrebnih za izvrenje razli~itih programa. Vrednosti na koje se oni postavljaju treba da su u skladu sa potrebama programa i mogu se menjati u zavisnosti od potreba. Komanda SHELL specificira koji interpreter komandi (komandni procesor) koristi DOS. U konkretnom slu~aju kao interpreter komandi se koristi program COMMAND.COM. Prekida~ (switch) E:256 odredjuje da obim (bloka) okru`enja bude 256 bajtova, a prekida~/P ukazuje da se COMMAND.COM permanentno nalazi u memoriji. Za slu~aj da COMMAND.COM nije permanentan u memoriji, uvek kada se DOS vrati na komandni prompt, on se mora sa diska puniti u memoriju. Ovakav re`im rada i pored toga to oslobadja odredjeni iznos memorije ima sledee ozbiljne nedostatke: (a) dovodi do stalnog obraanja disku - disk je mehani~ka jedinica koja se ~esto kvari; i (b) produ`ava vreme potrebno za povratak na DOS prompt -usporava rad sistema. U primeru sa Slike B.1 prvi DEVICE (drajver) koji se puni u memoriju je HIMEM.SYS (high MEMory driver). Pokreta~ki program (driver) je program koji upravlja radom nekog uredjaja ili
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-2
program koji mora biti prisutan u memoriji ra~unara. Program HIMEM.SYS obezbedjuje da se memorija ra~unara obima 1 MB proiri za iznos 66520 bajtova, tj. na 1 MB + 65519 B. Iznos od 65520 bajtova koji se nalazi u opsegu od adrese 10 0000 h do 10 FFFF naziva se expanded memory ili alternativno HMA (High Memory Area). HMA ~uva najvei deo programa DOS-ovih verzija 5.0 ili 6.2.
REM DOS VERSION 5.0 CONFIG.SYS FILE REM FILES=30 BUFFERS=30 STACKS=64,128 FCBS=48 SHELL=C:\DOS\COMMAND.COM C:\DOS\ /E:256 /P
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH, UMB
DEVICE=C:\DOS\EMM386.EXE I=C800-EFFF NOEMS
DEVICEHIGH SIZE=1EB0 C:\LASERLIB\SONY_CDU.SYS
DEVICEHIGH SIZE=0190 C:\DOS\SETVER.EXE
DEVICEHIGH SIZE=3150 C:\MOUSE1\MOUSE.SYS
LASTDRIVE=F
Slika B.1 CONFIG.SYS fajl kod DOS verzije 5.0
Naredna komanda DOS = HIGH, UMB, ukazuje ra~unaru da napuni DOS u vii deo memorije (HIGH) i obezbedi korienje blokova koji su locirani u viem delu memorije (UMB - Upper Memory Blocks). Korienje blokova koji su locirani u viem delu memorije dostupno je samo kod procesora 80386/80486/Pentium/Pentium-Pro uz pomo programa EMM386.EXE (Extended Memory Manager). EMM386.EXE je pokreta~ki program koji emulira HMA memorijsku oblast u XMA memorijsku oblast (XMA-eXtended Memory Area), a takodje, obezbedjuje uslove za rad sa extended memorijskim sistemom. Prekida~ I=C800-EFFF ukazuje programu EMM386.EXE da koristi memoriju po~ev od lokacije C8000h-EFFFFh kao vii deo memorije ili kao blokove locirane u viem delu memorije (UMB). Punjenjem pokreta~kih programa u viem delu memorije oslobadja se vie prostora u TPA oblau za potrebe aplikacionih programa. Ali pre korienja prekikda~a I=C800-EFFF moramo biti sigurni da u ovoj memorijskoj oblasti ra~unar nema instaliranu neku ROM/RAM oblast koju ve koristi. NOEMS ukazuje programu EMM386.EXE da ne uklju~i HMA oblast. Danas najvei broj ra~unara ne koristi HMA oblast. Komanda DEVICEHIGH puni pokreta~ke programe i programe u blokove locirane u viem delu memorije koji su dodeljeni od strane EMM386.EXE. U konkretnom slu~aju sa Slike B.1, po~ev od lokacije C8000h instalirana su tri pokreta~ka programa (drajvera). Prvi se odnosi na pokretanje SONY CDROM drajva, drugi puni program nazvan SETVER, a trei puni pokreta~ki program MOUSE. Zadnji iskaz u CONFIG.SYS fajlu sa Slike B.1 je iskaz LASTDRIVE. Ovaj iskaz ukazuje DOS-u koji je zadnji disk uredjaj povezan na ra~unarski sistem. U konkretnom slu~aju (Slika B.1) to je disk F. Mogue je, takodje, koristei COFIGF.SYS fajl, napuniti i druge pokreta~ke programe u
Dodatak B
B-3
memoriju. Tipi~ni takvi drajveri su PRINT.SYS, ANSI.SYS. Uobi~ajeno je da pokreta~ki programi imaju pridru`enu DOS ekstenziju SYS. Uvek kada DOS startuje sa radom, interpreter komandi, COMMAND.COM, proverava da li postoji inicijalna instrukcija za njega. Naime, proverava da li postoji instaliran specijalni batch fajl koji se naziva AUTOEXEC.BAT. Ako DOS ne pronadje fajl sa tim imenom, on poziva svoje dve, po definiciji ugradjene, komande DATE i TIME. Kada se fajl AUTOEXEC.BAT pronadje tada se u okviru start-up procedure, izvravaju samo one komande koje su sastavni deo batch fajla. To zna~i da DOS po automatizmu, u okviru start-up rutine, ne izvrava DATE i TIME programe. Za slu~aj da `elimo postaviti datum i vreme, tada programi DATE i TIME moraju biti uklju~eni u AUTOEXEC.BAT fajl. Na Slici B.2 prikazan je jedan tipi~an AUTOEXEC.BAT fajl koji va`i za verzije DOS-a 5.0 ili 6.0. Naravno da su varijacije AUTOEXEC.BAT fajla mogue. Ono to je klju~no da se zna je sledee: AUTOEXEC.BAT fajl sadr`i komande koje se izvravaju nakon uklju~enja sistema na napajanje. Obi~no su to one komande koje nakon uklju~enja treba uvek ukucavati preko tastature sa ciljem da se sistem pokrene. Izvrenjem AUTOEXEC.BAT tedi se kako vreme, tako i napor projektanta da se obavi ta aktivnost.
PATH C:\DOS; C:\MASM\BIN; C:\MASM\BINB\; C:\UTILITY PATH C:\WS; C:\LASERLIB SET BLASTER=A220 I7 D1 T3 SET INCLUDE=C:\MASM\INCLUDE\
SET HELPFILES=C:\MASM\HELP\*.HLP SET INIT C:\MASM\INIT\ SET ASMEX=C:\MASM\SAMPLES\ SET TMP=C:\MASM\TMP SET SOUND=C:\SB LOADHIGH C:\LASERLIB\MSCDEX.EXE /D:SONY_001 /L:F /M:10 LOADHIGH C:\LASERLIB\LLTSR.EXE ALT-Q LOADHIGH C:\DOS\FASTOPEN C:=256 LOADHIGH C:\DOS\DOSKEY /BUFSIZE=1024 LOADHIGH C:\LASERLIB\PRINTF.COM DOSKEY GO=DOSSHELL DOSSHELL
Slika B.2 Struktura jednog tipi~nog AUTOEXEC.BAT fajla
Uvek kada se u komandnoj liniji otkuca ime programa tada iskaz PATH specificira putokaze (puteve pretra`ivanja). Na primer, ako se u komandnoj liniji otkuca MILE1 maina prvo pretra`uje C:\DOS, nakon toga root direktorijum C:\, zatim C:\MASM\BIN, i tako dalje sve dok se ne pronadje program pod imenom MILE1. Ako se program pod tim imenom ne pronadje, tada interpreter komandi COMMAND.COM obavetava korisnika da taj program nije pronadjen. Prvom konadom SET postavlja se okru`enje za karticu sound blaster. Druga postavlja INCLUDE za put C:\MASM\INCLUDE. Uka`imo da su kodovi SET iskaza smeteni (memorisani) u DOS-om prostoru okru`enja. Ovaj prostor se rezervie u CONFIG.SYS fajlu uz pomo iskaza SHELL.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-4
Kada obim okru`enja postane suvie veliki tada je potrebno promeniti iskaz SHELL kako bi se okru`enju dodelilo bie prostora. LOADHIGH ili LH smeta programe u blokovima lociranim u viem delu memorije definisanih od strane EMM386.EXE programa. (Va`i za ra~unare kod kojih je instalirana CPU 386, 486, Pentium ili Pentium Pro). Zadnja komanda u fajlu EUTOEXEC.BAT, sa Slike B.2, je DOSSHELL Program DOSSHELL je u sutini program tipa meni koji postoji kod MSDOS verzija 5.0 ili 6.x. ^esto se zadnje dve komande sa Slike B.2 zamenjuju sledeim
DOSKEY GO = C:\ WINDOWS\WIN /3 GO Program DOSKEY definie makro naredbu za re~ GO. U konkretnom slu~aju re~ GO se dodeljuje nizu znakova C:\WINDOWS\WIN /3. To zna~i da e program COMMAND.COM uvek interpretirati re~ GO na taj na~in to e izvriti taj program uvek kada se preko tastature nakon pojave DOS prompt-a otkuca re~ GO. Zadnja komanda nakon toga izvrava Windows. Drugim re~ima nakon izvrenja fajlova CONFIG.SYS i AUTOEXEC.BAT, ime programa koje je u AUTOEXEC.BAT kao zadnje prikazuje po~inje da se izvrava. U slu~aju sa Slike B.2 to je DOSSHELL program, a sa Slike B.3 izvrie se Windows.
Pogled na DOS
Na Slici B.3 prikazan je pogled na MS DOS sistem. Da bi ovaj model mogli efikasnije da koristimo neophodno je poznavati mnogo vie detalja o korienju: (a) BIOS-a i DOS-a kod izvrenja U/I-a; (b) kako DOS puni i izvrava programe u memoriju; i (c) ta se smeta u memoriju PC-a u toku izvrenja programa. Kada se MS-DOS PC maina uklju~i na napajanje, ona automatski po~inje da izvrava kod sa fiksne memorijske lokacije. Prvo se pune registri procesora CS i IP na vrednosti FFFFh i 0000h respektivno to dovodi da se prvo pristupa fizi~koj adresi FFFF0h. Lokacija FFFF:0000 se nalazi u ROM-u, a program smeten u memoriji po~ev od te lokacije ~ini skup rutina koje testiraju integritet razli~itih hardverskih celina sistema. Ova aktivnost je poznata kao power-on-self-test (POST), tj. korak 1 na Slici B.4.
Dodatak B
B-5
SYSINIT
ROM BIOS
Power On Self Test (POST)
ROM bootstrap
Video memorija i drugi ROM-ovi
Disk bootstrap
COMMAND.COM(rezidentni)
Drajveri uredjajakoji se instaliraju
File Control Blocks (FCB)
Disk baferi
MD-DOS kernel
SYSINIT(relocirajui)
DOS-BIOS interfejs
BIOS oblastpodataka
Vektori prekida Vektori prekida
BIOS oblastpodataka
DOS-BIOS interfejs
MD-DOS kernel
Disk baferi
FCBs
Drajveri uredjajakoji se instaliraju
COMMAND COM (rezidentni)
Video memorija i drugi ROM-ovi
COMMAND COM (rezidentni)
IO.SYS
boot sector
MSDOS.SYS
ROMBIOS
3
6
Preklapa se satranzijentnim delomCOMMAND.COM
2
6
Vrh memorijeVrh memorije
0
400H
600H
A0000H
0
400H
600H
A0000H
Memorija
boot drajv
1
5
4
Slika B.3 Ukupni pogled na MS-DOS sistem sa aspekta programa i U/I uredjaja
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-6
ROM BIOS(osnovni U/Isistem)
video memorija
prostor zakorisni~kiprogram
operativnisistem
(MS DOS)
CPU
serijski port
tampa~
disk
tastatura
prikaz
periferije0
640k
1024k
Slika B.4 MS DOS-ov boot proces i kona~ni izgled memorije Nakon uspenog zavretka POST-a po~inje izvrenje ROM bootstrap rutine. (Bootstrap rutina je mala programska celina kojom se puni program velikog obima u RAM. Ova rutina kopira sektor 1 na pisti 0 (track 0), koga nazivamo boot sektor, sa flopi disk drajva A (ili hard disk drajva C za slu~aj da je drajv A prazan) u RAM prostor i prelazi (jump) na izvrenje ovog programa (korak 2 na Slici B.4).). Boot sektor ~uva informaciju o MS-DOS-ovom fajl sistemu koji se nalazi na tom drajvu, a takodje sadr`i jo jedan bootstrap program. Ovim bootstrap programom pretra`uje se informacija o fajlovima poznatim kao IO.SYS i MSDOS.SYS. Ako se ovi fajlovi ne pronadju na disketi/disku tada se na ekranu displeja ispisuje poruka
Non-System disk or disk error Replace and strike any key when ready
Ako se fajlovi MSDOS.SYS i IO.SYS pronadju, tada se oni pune u memoriju, a nakon punjenja, upravljanje se prenosi modulu IO.SYS (korak 3 na Slici B.4). Kod IO.SYS-a ~ine dve celine: SYSINIT i DOS BIOS (Uo~imo sa Slike B.4 da postoji i deo BIOS-a koji je smeten u ROM prostoru). DOS BIOS ~ine pokreta~ki programi uredjaja (device drivers), tj. programi koji obezbedjuju standardni mehanizam za komuniciranje sa hardverskim uredjajima kao to su tastatura, ekran (CON), serijski portovi (COM1 i COM2) i disk drajvovi. Kod SYSINIT modula, kao to i samo ime ukazuje, obavlja inicijalizaciju MS-DOS kernela (jezgra). Naime, postavljaju se na po~etne vrednosti kako interne tabele, tako i radne oblasti. Ove tabele i oblasti koristi MS-DOS u toku izvrenja raznih zadataka. Kao prvo, kopira se (smeta) MS-DOS kernel (korak 4 na Slici B.4). Zatim se postavljaju interne tabele, koje se koriste od strane MS-DOS-a i obavlja ostala inicijalizacija sistema. Nakon sprovedene inicijalizacije MS DOS i U/I fajl servisi postaju dostupni modulu SYSINIT. Modul SYSINIT koristi DOS fajl usluge da bi otvorio i procesirao sadr`aj CONFIG.SYS fajla. Kao to su ve napomenuli, fajl CONFIG.SYS sadr`i specifikaciju svih instaliranih pokreta~kih programa (to su pokreta~ki programi onih uredjaja koji su instalirani u sistem pri kupovini ili dodatnoj instalaciji). Pomou komandi BUFFERS= i FILES=, modul SYSINIT dodeljuje memoriju za potrebe ke-bafera (koriste se kod prenosa podataka sa/ka disku) i potreba internih fajl upravlja~kih blokova. Nakon toga pune se pokreta~ki programi, specificirani iskazom DEVICE =, zatvara CONFIG.SYS fajl i dozvoljava rad uredjajima tipa konzola (CON:), tampa~ (PRN:) i pomoni (AUX:). U daljem toku, SYSINIT puni i izvrava MS-DOS-ov interpreter komandi COMMAND.COM (koraci 5 i 6 na Slici B.4). Treba naglasiti da je pomou iskaza SHELL = <name> u CONFIG.SYS fajlu mogue specificirati i neki drugi interpreter komandi. Izgled memorijske mape nakon ove
Dodatak B
B-7
aktivnosti bie kao onaj na Slici B.4. Kao to se vidi sa Slike B.program COMMAND.COM ~ine dve celine, tranzijentni i rezidentni deo. Sastavni deo programa COMMAND.COM je inicijalizaciona sekcija koja izvrava komande prisutne u AUTOEXEC.BAT - fajlu. Memorija koja se koristi od strane tranzijentnog dela COMMAND.COM programa oslobadja se kod punjenja i izvravanja korisni~kih programa. Rezidentni deo programa COMMAND.COM ponovo puni tranzientni deo nakon zavretka korisni~kog programa.
Mapa memorije kod MS-DOS-a
Godine1981, kada se prvi put pojavio, operativni sistem DOS je bio projektovan da se izvrava na IBM PC maini zasnovanoj na mikroprocesoru 8088 koji ima 20-bitnu adresnu magistralu, pa je zbog toga memorija bila ograni~ena na prostor obima 1MB. Kao to se vidi sa Slike B.5 projektanti IBM-a su podelili adresni prostor veli~ine 1MB na nekoliko specifi~nih blokova.
BIOS RAM
ne koristi se
ROM krutog diska
ne koristi se
bafer prikaza
memorijakorisnika
okru`enje
command.com
DOS
1 MB
384 kB specijalna memorija(sistemska oblast)
640 kB korisni~ka memorija(tranzijentna oblast)
Slika B.5 Memorijska mapa mikroprocesora 8086 koji izvrava MS-DOS
Ukupni prostor od 1MB, globalno posmatrano, je bio podeljen na dva dela, i to: (a) 640MB RAM-a korisni~ka memorija; i (b) 384kB rezervisana za ROM funkcije- upravlja~ki programi za video sistem, kontroler krutog (~vrstog) diska, i osnovni ulazno/izlazni sistem (BIOS). U trenutku kada se prva PC maina pojavila na tr`itu (1981 god) adresni prostor od 640kB RAM-a izgledao je kao suvie veliki. Naime svi dotadanji 8-bitni ra~unari imali su 16-bitnu adresnu magistralu, a shodno tome i memorijski prostor ograni~en na 64kB. Napredak tehnologije je uslovio da se dananje PC maine zasnivaju na procesorima tipa 386, 486, Pentium i Pentium Pro, kod kojih je adresna magistrala 32 bitna (a kod nekih i 36-bitna). U poredjenju sa 8088 ovi procesori mogu da adresiraju vei memorijski prostor za 65536 puta. No nezavisno od toga, da bi sa~uvali kompatibilnost sa prethodnim verzijama DOS-a, ovi veoma moni procesori su uslovljeni da rade u Realnom na~inu rada (Real Mode), kod kojih je memorija ograni~ena na prostor od 1MB. Naravno da je memorijska mapa dananjih PC maina (Slika B.6) zasnovana pre svega na procesorima 80386 - Pentium Pro pretrpela izmene u odnosu na prvobitnu sa Slike B.1. Kod personalnih ra~unara tipa IBM PC XT (zasnovani na 8088) oblast XMA ne postoji. Memorija do 1MB se obi~no naziva realna, iz razloga to su Intelovi mikroprocesori projektovani da rade u ovoj oblasti u realnom na~inu rada. Personalni ra~unari zasnovani na 80286 do Pentium Pro sadr`e sve tri oblasti (TPA, sistemska i XMA). Ove maine se ~esto nazivaju maine klase AT.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-8
XMA
HMA
sistemska oblast(386 kB)
TPA(640 kB)
1MB+66520B
1MB
640 kB
0
1MBrealna
UMA (Upper Memory Area)
konvencionalna
15MB kod 80286 ili 80386SX31MB kod 80386 SL/SLC63MB kod 80386 EX4095MB kod 80386DX, 80486 i Pentium64GB kod Pentium Pro
Slika B.6 Memorijska mapa kod dananjih PC maina Napomena: HMA - High Memory Area; XMA - Extended Memory Area; ^esto se memorija od 0-640kB naziva konvencionalna a od 640kB - 1MB UMA; termin TPA se odnosi na Transient Program Area
MS-DOS funkcije i BIOS servisi
Jedna od najva`nijih osobina bilo kog operativnog sistema predstavlja softverska podrka koju on nudi korisnicima koji razvijaju programe. Na primer, skoro kod svih programa koji se izvravaju na PC maini postoji potreba za unos podataka preko tastature. Jedan od na~ina da se prihvataju podaci sa ulaza je da se napie program koji e ~itati podatke sa U/I-og porta na kome je povezana tastatura. S obzirom da su programi ovakvog tipa, i sli~ni njima, potrebni skoro kod svakog ra~unarskog sistema logi~ki se namee pitanje: zato ih ne ugraditi u operativni sistem kakav je DOS. U sutini oni bi trebalo da su deo BIOS-ovih (Basic Input Output System) servisa. Danas veliki broj programa za PC maine je da se izvrava pod MS-DOS operativnim sistemom. Sastavni deo ovog operativnog sistema su DOS-ove funkcije i BIOS-ovi pozivi. To su potprogrami, koji se mogu pozivati od strane aplikacionog softvera, a koriste se za pristup hardveru PC maine. Namera je da se utedi programerima vreme i da se usmere njihovi napori na kreiranju efikasnijih aplikacionih programa, a ne da se oni zamaraju detaljima koji se odnose na upravljanje ulazom-izlazom. Sa druge strane obezbedjujui standardni skup ulazno/izlaznih rutina, ovim potprogramima se obezbedjuje softverska kompatibilnost izmedju ra~unara sa razli~itom hardverskom konfiguracijom. U tekstu koji sledi ukazaemo na to: 1. Kako je struktuiran MS-DOS i objasniti uloge BOIS-a i MS-DOS kernela. 2. Objasniti razliku izmedju hardverskih i softverskih prekida 3. Ukazati na listu standardnih vektorskih prekida kod ra~unarskog sistema zasnovanog na mikroprocesoru 80x86 koji radi pod MS-DOS-om.
Struktura MS-DOS-a
BIOS (Basic Input/Output System) - kako je to prikazano na Slici B.7, BIOS-ove rutine su najprimitivnije, jer direktno "komuniciraju" sa hardverom sistema.
Dodatak B
B-9
aplikacioni programi komandni procesorCOMMAND.COM
MS-DOS kernel (MSDOS.SYS)
BIOS (ROM plus IO.SYS)
hardver sistema
Slika B.7 Nivovska organizacija ra~unarskog sistema koji izvrava aplikacione programe pod MS-DOS okru`enjem.
Ovo zna~i da je BIOS hardversko specifi~an, tj. da bi se napisala BIOS-ova rutina, mora da se zna ta~na adresa porta kao i konfiguraciju upravlja~kih bitova za svaku ulazno/izlazni uredjaj instaliran u ra~unaru. Obi~no BIOS se isporu~uje zajedno sa ra~unarom i smeten je na jednom ili dva ROM ~ipa lociranih na glavnoj plo~i ra~unara. U najveem broju slu~ajeva kôd smesten u ROM-u je neizmenjiv (mo`e se samo ~itati). Ipak danas sve vei broj proizvodja~a ugradjuje fle memorije za BIOS. Ovaj tip ROM-a se mo`e selektivno reprogramirati a da se ~ip ne izvadi iz sistemske plo~e. Ova mogunost obezbedjuje korisniku da nadgradi BIOS, ali ~esto puta i da napravi neku ozbiljniju greku koja mo`e da narui integritet sistema. Kod ra~unara koji imaju instalirano MS-DOS, BIOS se u sutini sastoji iz dva dela. Prvi rezidentni deo, o kome smo govorili nalazi se u ROM-u, a drugi nerezidentni deo se puni u RAM kada se ra~unar boot-uje. Deo koji se boot-uje je u sutini fajl IO.SYS. Ovaj fajl predstavlja proirenje rezidentnog BIOS-a i dozvoljava (omoguava) prenos podataka izmedju viih nivoa DOS-a i hardvera sistema. Pored toga IO.SYS obezbedjuje (pru`a mogunost) nadgradnje (dodavanje) novih rutina BIOS-u. MS-DOS kernel - izmedju BIOS-a i aplikacionog softvera vieg nivoa (Slika B.7) nalazi se MS-DOS kernel. On se puni u RAM kada se sistem boot-uje pomou fajla MSDOS.SYS. Nasuprot BIOS-u, kernel obezbedjuje hardversko-nezavisne funkcije. Na primer, funkcija 39 se koristi za kreiranje subdirektorijuma na disku. Da bi koristio ovu funkciju korisnik koristi registar DX koji pokazuje na ime direktorijuma (smeteno kao niz znakova u memoriji), puni registar AH sa 39 (broj funkcije), a zatim izvrava softverski prekid Int 21h. MS-DOS-ova funkcija 39 vodi brigu o svim detaljima: Poziva razli~ite BIOS-ove rutine koje aktiviraju disk drajv, lociraju dostupnost sektora na disku, i upisuju podatke. To zna~i da je kernel projektovan da pru`i (obezbedi) funkcije vieg nivoa u poredjenju sa BIOS-om. Imajui u vidu da je MS-DOS kernel hardversko nezavisaan, korisnici mogu bezbedno (bez opasnosti) da kreiraju ove pozive u njihovom softveru a da ne vode brigu o ulazno/izlazno adresnoj kompatibilnosti. U sutini kernel je taj koji obezbedjuje da se isti program izvrava na ra~unarima koji imaju ugradjeno razli~ite disk drajvove, razli~ite video kartice, razli~ite tastature, i td.
Prekidi kod 80x86
Prekidi su dogadjaji koji uzrokuju da procesor suspenduje svoj tekui zadatak i preda upravljanje novom programu koji se naziva prekidno uslu`na rutina (ISR-interrupt service routine). Kod ra~unara zasnovanih na procesorima 80x86 postoje tri izvora prekida: (1) procesorski prekidi; (2) softverski prekidi; i (3) hardverski prekidi. Svaki prekid mora da preda odgovarajui broj ili vektor koji se koristi od strane procesora kao pokaziva~ da iz vektorske tabele prekida (IVT -interrupt vector table) odredi po~etnu adresu prekidno uslu`ne rutine. Kako je to prikazano na Slici B.8 (vektorska tabela prekida), IVT ukupno sadr`i 256 razli~itih vektora (00-FF). Svaki ulaz IVT-a pokazuje na lokaciju odgovrajue ISR. Naravno, kada procesor startuje sa radom ova tabela je
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-10
prazna. Zbog toga punjenje IVT-a sa odgovarajuim adresama potprograma je jedna od prvih operacija koju procesor mora da obavi. Pre nego to preda upravljanje ISR-u procesor mora da obavi jedan veoma va`an zadatak: Da sa~uva tekuu programsku adresu i markere uslova u magacin. Zatim predaje upravljanje ISR-u. Kada ISR zavri, ova rutina koristi instrukciju IRET (return from interrupt) koja omoguava da se obnovi stanje markera kao i da se iz magacina "vrati" stara adresa programa. Na ovaj na~in procesor mo`e da nastavi sa izvrenjem prekinutog programa sa onog mesta gde je i stao.
Pointer to ISR 254
Pointer to ISR 255
Pointer to ISR 4 Overflow
Pointer to ISR 3 Breakpoint
Pointer to ISR 2 NMI
Pointer to ISR 1 Single-Step
Pointer to ISR 0 Divide Error
Interrupt vector table (IVT)
1K (real mode)
2K (protected mode)
4 bytes (real mode) or8 bytes (protected mode)
5
4
2
0
1
3
6
FE
FF
Interrupt vector (type number)
Address 00000000-000003FF
Procesor
Real Mode
Protected Mode
Pointer Size
4 bytes
8 bytes
IVT Location
Anywhere in Physical Memory
Slika B.8 Vektorska tabela prekida ~uva pokaziva~e na ISR za svaki od 256 moguih prekida Veliki broj vektora kod IVT-a je rezervisan za potrebe samog procesora, drugi su rezervisani za MS-DOS kernel i BIOS, i td. Na Slici B.9 prikazana je lista vektor brojeva, njihov opis, i inicijator. Uo~imo ,da u zavisnosti od procesora, neki prekidi su dostupni a drugi nisu. Na primer, prekid 11, provera poravnjanja (allignment check), javlja se kod procesora 486 pa navie. Neki od prekida imaju dve funkcije, kao na primer broj 5. Procesorski prekidi (tipovi 0 - 12) -ove prekide generie sam procesor, obi~no kao odziv na neki uslov koji je uzro~nik greke. Na primer, prekid tipa 0 javlja se kada se pokua deljenje sa nulom. Prekid 0D - greka usled opte zatite - je drugi primer. Ovaj prekid e se generisati uvek kada
Dodatak B
B-11
program koji se izvrava u zatienom na~inu rada pokua da pristupi podacima ili kodu kojima je dodeljen vii nivo privilegije. Softverski prekidi - svi prekidi koje generie procesor nisu rezultat neke greke. Na primer prekidi tipa 3 i 4 su softverski prekidi. To su specijalne instrukcije procesora 80x86 koje iniciraju izvrenje ISR-a. Opti oblik instrukcije koja inicira softverski prekid je :
Int broj
Jedna od glavnih prednosti softverskih prekida je ta to oni omoguavaju aplikacionom softveru pristup potprogramima bez poznavanja apsolutnih adresa ovih potprograma.
Na primer, programer ne mora da zna apsolutnu adresu ISR-a koja se odnosi na prekidnu ta~ku (breakpoint). On jednostavno ubacuje u program instrukciju INT 3.
Na sli~an na~in, softverski prekidi obezbedjuju pristup BIOS-u i MS-DOS kernelu. Kao to se vidi sa Slici B.9 prekidi od 10 - 1A se koriste od strane BIOS-a (postoje neka preklapanja sa procesorom), dok prekidi 20 - 3F se koriste od strane MS-DOS kernela. Veliki broj ovih prekida ima svoje subservise ili subfunkcije.
Na Slici B.10 izlistana su 22 subservisa koja su karakteristi~na (prate) prekid 10 - BIOS-ovi video servisi obi~no ovim subservisima i funkcijama pristupa na sledei na~in: Pre izvrenja instrukcije Int broj u registar AH se puni broj servisa ili funkcije. Na primer, da bi ispisali jedan znak na video ekranu, koristei tekui video na~in prikaza, potrebno je napisati sledeu sekvencu (kôd)
Mov AH, 0Ah ; BIOS-ov servis 10 u registar AH
Mov AL, ZNAK ; ASCII kod za znak koji e se prikazivati u AL Int 10h ; poziv BIOS -ove prekidne rutine Hardverski prekidi - inicirani su od strane spoljnih uredjaja. Procesor 80x86 ima rezervisano dva pina za ovu namenu. Prvi se naziva NMI a drugi INTR. Uloga ovih pinova je sledea: NMI (nonmaskable interrupt) - usponskom ivicom signala na ovom pinu generie se prekid tipa 2 i prenosi upravljanje na odgovrajuu prekidnu rutinu (ISR). Ovaj prekid je nemaskirajui, a to zna~i da se ne mo`e blokirati. Kod PC-maina ovaj prekid se koristi da prekine rad sistema (shut the system down) kada se kod ~itanja memorije javi greka parnosti u prenosu podataka (~itanje ili upis u memoriju). Drugi pin za prekid je INTR. Ovaj pin omouguava spoljnom hardveru da aktivira bilo koji od 256 tipova vektora. Tehnika rada je sledea: Kada procesor potvrdi da je prihvatio zahtev za prekid preko magistrale podataka predaje mu se broj prekida. Sa ovim jedinstvenim ulaznim pinom, izgleda kao da je procesor ograni~en na prihvatanje samo jednog zahteva za prekid. Ipak, korienjem programibilnog kontrolera prekida kakav je ~ip 8259 mogue je sa jednim 8259 prihvatiti do 8 zahteva za prekid a do 64 ulaza sa osam ~ipova 8259. PC maina koristi ovu tehniku za prihvatanje 16 zahteva za prekid preko linija IRQ0 - IRQ15 (koriste se dva ~ipa 8259).
BIOS i DOS programiranje na asemblerskom jeziku
Postoje izuzetno korisni BIOS-ovi i DOS-ovi potprogrami koji su dostupni preko izvrenjem instrukcije Int. Format ove instrukcije je sledei
Int n ; broj prekida n se nalazi u opsegu od OO do FF
Ovo zna~i da ukupno postoje 256 prekida. Od svih prekida najpoznatiji su Int 10h i Int 21h. Svaki od ovih prekida mo`e da obavi vei broj funkcija. Lista raspolo`ivih funkcija data je na u prilogu na kraju ovog teksta Va`no je zapamtiti sledee: Pre nego to se zahteva usluga (servis) Int 10h ili Int 21h, u zavisnosti od funkcije koju `elimo da obavimo, potrebno je napuniti specifi~ne vrednosti u odredjene
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-12
registre. Izbor funkcija koju obavlja Int 21h ili Int 10h zavisi od vrednosti koja se upisuje u registar AH.
Interrupt Vector
Number Description CPU BIOS MS-DOS PC 0 Divide error all 1 Single-step all 2 Non-maskable interrupt(NMI) all 3 Breakpoint all 4 Interrupt on overflow all 5 Bound 286 Print screen
6 Invalid op-code 286 7 Coprocesor not available 286,386 7 Device not available 486 8 Double fault 286 Timer IRQ0
9 Coprocessor segment overrun 286,386 IRQ1 Reserved 486 Keyboard
A Invalid task state segment 386 Video IRQ2
B Segment not present 386 Serial port 2 IRQ3
C Stack fault 386 Serial port 1 IRQ4
D General protection fault 286 Second parallel port IRQ5
E Page fault 386 Floppy disk IRQ6
F Reserved X First parallel port IRQ7
10 Coprocessor error 286 Video services X
11 Alignment check 486 Equipment list service X
12 Machine check Pentium Memory size service X
13 Disk services X 14 Communications services X 15 System services X 16 Standard keyboard services X 17 Printer services X 18 Activate ROM BASIC X 19 Activate bootstrap start-up routine X 1A Time and data service X
1B-1F PC hardware specific X 20 Program terminate X 21 General MS-DOS services X 22 Terminate address X 23 Control-C handler X 24 Critical error handler address X 25 Absolute disk read X 26 Absolute disk write X 27 Terminate and stay resident X 28 MS-DOS idle interrupt X
29-2E MS-DOS internal use X 2F Multiplex interrupt X
30-3F MS-DOS internal use X
Dodatak B
B-13
40-FF PC hardware specific IRQ8-15
Slika B.9 Vektorska tabela kod 80x86
Interrupt Subservice Description 10H 0 Set video mode 1 Set cursor size 2 Set cursor position 3 Read cursor position 4 Read light-pen position 5 Set active display page 6 Scroll window up 7 Scroll window down 8 Read character and attribute 9 Write character and attribute 0A Write character 0B Set 4-color palette 0C Write pixel 0D Read pixel 0E Write character in teletype mode 0F Get current video mode 10 Color palette interface 11 Character generator interface 12 Alternate select 13 Write character string 14 (PC-convertible onli) 15 (PC-convertible onli) 1A Read/write display combination page 1B Return functionality state information 1C Save/restore video state
Slika B.10 BIOS-ovi video servisi
Programiranje koristei BIOS-ov Int 10 h
Kod svih PC maina potprogrami (tj. ISR) Int 10h se ~uvaju u ROM BIOS-u a koriste se za komuniciranje sa ekranom ra~unara. Najvei deo manipulacija sa tesktualnim ili grafi~kim prikazom slike na ekranu monitora se obavlja preko Int 10h. Postoji vei broj funkcija koje su pridru`ene Int 10h. Karakteristi~ne su one koje menjaju boju znaka (karaktera), boju pozadine, briu sadr`aj slike na ekranu, menjaju lokaciju kursora i dr. Ove opcije se biraju upisom specifi~ne vrednosti u registar AH. Prikaz teksta na ekranu monitora : prikaz tekstualne informacije na ekranu monitora PC maine organizovan je kako je to prikazano na Slici B.11 u 80 kolona*25 vrsta. Ovaj prikaz je identi~an nezavisno od toga da li su monitori crno beli ili kolor. Kada se PC maina uklju~i na napajanje monitor se inicijalno (by default) postavi u tekstualni re`im rada.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-14
00,00 00,79
centar ekrana12,39
24,00 24,79
00,00 00,4F
centar ekrana0C,27
18,00 18,4F
decimalni heksadecimalni
Slika B.11 Lokacija kursora (vrsta, kolona) Brisanje ekrana koristei Int 10h funkciju 06h - veoma ~esto pre nego to se vri prikaz potrebno je obrisati podatke na ekranu. Da bi obavili ovu aktivnost koristi se Int 10h i potrebno je postaviti registre na sledee vrednosti AH = 06, AL = 00, BH = 07, CX =0000, DH = 24 i DL = 79. Programska sekvenca brisanja imae oblik
Mov AH, 06 ; AH = 06 bira se funkcija kru`enja
Mov AL, 00 ; AL = 00 cele stranice
Mov BH, 07 ; BH = 07 za standardne atribute
Mov CH, 00 ; CH = 00 vrednost vrste po~etne ta~ke
Mov CL, 00 ; CL = 00 vrednost kolone po~etne ta~ke
Mov DH, 24 ; DH = 24 vrednost vrste krajnje ta~ke
Mov DL, 79 ; DL = 79 vrednost kolone krajnje ta~ke
Int 10h ; poziv prekida
U sutini opcija AH = 06 prekida Int 10h naziva se funkcija "scroll window up". Efikasnije kodiranje ima sledei oblik:
Mov AX, 0600h ; "scroll" ceo ekran
Mov BH, 07 ; standardni atribut
Mov CX, 0000 ; po~etak 00, 00
Mov DX, 184Fh ; kraj na 24, 79 (heksa = 18,4 F)
Int 10h Postavljanje kursora na specifi~nu lokaciju: Int 10h funkcija 02 - pomou Int 10h funkcije AH = 02 pozicionira se kursor na bilo koju lokaciju. @eljena pozicija kursora se identifikuje pomou vrednosti vrste = DH i vrednosti kolone = DL. Nakon izvrenja Int 10h (ili Int 21h) vrednosti registara ostaju nepromenjene. Sekvenca koja e postaviti kursor na poziciju vrste=15=0Fh i kolone=25=19h je oblika:
Mov AH, 02 ; postavi poziciju kursora
Mov BH, 00 ; stranica 0
Mov DL, 25 ; pozicija kolone
Mov DH, 15 ; pozicija vrste
Int 10h ; poziv prekida Int 10h
Dodatak B
B-15
Programska sekvenca koja e: (1) obrisati sadr`aj ekrana, i (2) postaviti kursor na sredini bie oblika
; brisanje ekrana
Mov AX, 06000h Mov BH, 07 Mov CX, 0000 Mov DX, 184Fh Int 10h
; postavljanje kursora na centar ekrana
Mov AH, 02 Mov BH, 00 Mov DL, 39 ; pozicija centralne kolone
Mov DH, 12 ; pozicija centralne vrste
Int 10h Odredjivanje tekue pozicije kursora pomou Int 10 h funkcije 03 - u tekstualnom na~inu rada ~esto se javlja potreba za odredjivanjem lokacije kursora. Sekvenca kojom se obavlja ova aktivnost oblika je :
Mov AH, 03 ; opcija 03
Mov BH, 00 ; stranica 00
Int 10h Nakon izvrenja ove sekvence DH = tekua vrsta, DL = tekua kolona, a u CX bie smetene informacije o obliku kursora. U tekstualnom na~inu rada, stranica 00 se bira kao tekue vidljiva stranica. Promena video "mode" - prvo treba naglasiti da nezavisno od tipa adaptera (MDA, CGA, EGA, MCGA, ili VGA) koji se koristi svi to se ti~e rada su navie kompatibilni. Na primer VGA emulira sve funkcije MCGA, EGA, CGA i MDA. Na sli~an na~in EGA emulira funkcije CGA i MDA, i td. Zbog ovoga mora da postoji na~in za promenu video "mode" na `eljeni "mode". Da bi uradili ovo, treba koristiti Int 10h sa AH = 00 i AL = video-"mode". Lista video-"mode"-ova je oblika kao na Slici B.12. Atribut bajt kod monohromatskih monitora - svakom znaku (karakteru) koji se prikazuje na ekranu pridru`uje se atribut. Atribut pru`a informaciju kolima za procesiranje video signala o boji i intenzitetu znaka (foreground) kao i o pozadini (background). Atribut bajt svakog znaka kod monohromatskog monitora je ograni~en a definicija bitova ima oblik kao na Slici B.13.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-16
Char Text/ Max Buffer AL Pixels Characters Box Graph Colors Aadapter Pages Start OHH 320x200 40x25 8x8 text 16* CGA 8 B8000h 320x350 40x25 8x14 text 16* EGA 8 B8000h 360x400 40x25 9x16 text 16* VGA 8 B8000h 320x400 40x25 8x16 text 16* MCGA 8 B8000h 01H 320x200 40x25 8x8 text 16 CGA 8 B8000h 320x350 40x25 8x14 text 16 EGA 8 B8000h 360x400 40x25 9x16 text 16 VGA 8 B8000h 320x400 40x25 8x16 text 16 MCGA 8 B8000h 02H 640x200 80x25 8x8 text 16* CGA 8 B8000h 640x350 80x25 8x14 text 16* EGA 8 B8000h 720x400 80x25 9x16 text 16* VGA 8 B8000h 640x400 80x25 8x16 text 16* MCGA 8 B8000h 03H 640x200 80x25 8x8 text 16 CGA 8 B8000h 640x350 80x25 8x14 text 16 EGA 8 B8000h 720x400 80x25 9x16 text 16 VGA 8 B8000h 640x400 80x25 8x16 text 16 MCGA 8 B8000h 04H 320x200 40x25 8x8 graph 4 CGA 1 B8000h 320x200 40x25 8x8 graph 4 EGA 1 B8000h 320x200 40x25 8x8 graph 4 VGA 1 B8000h 320x200 40x25 8x8 graph 4 MCGA 1 B8000h 05H 320x200 40x25 8x8 graph 4* CGA 1 B8000h 320x200 40x25 8x8 graph 4* EGA 1 B8000h 320x200 40x25 8x8 graph 4* VGA 1 B8000h 320x200 40x25 8x8 graph 4* MCGA 1 B8000h 06H 640x200 80x25 8x8 graph 2 CGA 1 B8000h 640x200 80x25 8x8 graph 2 EGA 1 B8000h 640x200 80x25 8x8 graph 2 VGA 1 B8000h 640x200 80x25 8x8 graph 2 MCGA 1 B8000h 07H 720x350 80x25 9x14 text mono MDA 8 B0000h 720x350 80x25 9x14 text mono EGA 4 B0000h 720x400 80x25 9x16 text mono VGA 8 B0000h 09H reserved 0AH reserved 0BH reserved 0CH reserved 0DH 320x200 40x25 8x8 graph 16 EGA 2/4 A0000H 320x200 40x25 8x8 graph 16 VGA 8 A0000H 0EH 640x200 80x25 8x8 graph 16 EGA 1/2 A0000H 640x200 80x25 8x8 graph 16 VGA 4 A0000H 0FH 640x350 80x25 9x14 graph mono EGA 1 A0000H 640x350 80x25 8x14 graph mono VGA 2 A0000H 10H 640x350 80x25 8x14 graph 4 EGA 1/2 A0000H 640x350 80x25 8x14 graph 16 VGA 2 A0000H 11H 640x480 80x30 8x16 graph 2 VGA 1 A0000H 640x480 80x30 8x16 graph 2 MCGA 1 A0000H 12H 640x480 80x30 8x16 graph 16 VGA 1 A0000H 13H 320x200 40x25 8x8 graph 256 VGA 1 A0000H 320x200 40x25 8x8 graph 256 MCGA 1 A0000H
Slika B.12 Video-"mode"-lista
Dodatak B
B-17
D7 D6 D5 D4 D3 D2 D1 D0
intenzitet znaka (foreground)
0=normalni intenzitet1=poja~ani intenzitet
intenzitet pozadine (background)
0=bez blinkanja1-sa blinkanjem
Slika B.13 Atribut bajt kod monohromatskog monitora
Neke mogue varijacije atributa su: Binarna vrednost heksadecimalna vrednost rezultat
0000 0000 00 belo-na- belo (nema prikaz) 0000 0111 07 belo-na-crno (normalni intgenzitet) 0000 1111 0F belo-na-crno(poja~an intenzitet) 1000 0111 87 belo-nacrno sa blinkanjem 0111 0111 77 crno-nacrno (nema prikaz) 0111 0000 70 crno-na-belo 1111 0000 F0 crno-na-belo sa blinkanjem
Atribut bajt kod CGA tekstualni "mode" - s obzirom da je rad kola za precisiranje video signala kod svih kolor monitora navie kompatibilan, za objanjenje manipulisanja sa bojama koristiemo CGA "mode" koji je zajedni~ki "sadr`ilac" za sve kolor monitore. Definicija bitova atribut bajta kod kolor monitora koji radi u CGA tekstualni "mode" prikazana je na Slici B.14.
D3D7 D6 D5 D4 D2 D1 D0
boja znaka (foreground)
intenzitet
boja pozadine
blinkanje
(blinkanje i intenzitet se odnose samona “foreground”)
B R G B I R G B
Slika B.14 Atribut bajt kod CGA
Analizirajui Sliku B.14 mo`e se zaklju~iti sledee: (a) kombinovanjem primarnih boja R, G i B pozadina mo`e bitri obojena u jednoj od osam boja (b) kominovanjem primarnih boja R, G i B sa bitom za intenzitet I tekstualna informacija koja se prikaxuje se mo`e prikazati u 16 razli~itih boja (definicija 16 moguih boja prikazana je na Slici B.13).
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-18
I R G B boja 0 0 0 0 crna 0 0 0 1 plava 0 0 1 0 zelena 0 0 1 1 cijan 0 1 0 0 crvena 0 1 0 1 magenta 0 1 1 0 braon 0 1 1 1 bela 1 0 0 0 siva 1 0 0 1 svetlo plava 1 0 1 0 svetlo zelena 1 0 1 1 svetlo cijan 1 1 0 0 svetlo crvena 1 1 0 1 svetlo magenta 1 1 1 0 `uta 1 1 1 1 jako bela
Slika B.15: 16 moguih boja
Ilustracije radi, programska sekvenca kojom se ispisuju po celom ekranu karakteri 20h (ASCII blanko) koristei jako belo na plavoj pozadini za CGA "mode" imae oblik Mov SH,00 ; postavi opciju mode
Mov AL, 03 ; CGA kolor tekstualni mode formata 80 * 25
Int 10h Mov AH, 09 ; opcija prikaza
Mov BH, 00 ; stranica 0
Mov AL, 20h ; ASCII kod za blanko
Mov CX, 800h ; ponovi 800h puta
Mov BL, 1Fh ; jako belo na plavo
Int 10h Direktni pristup memoriji ekrana za tekstujalni prikaz - I pored toga to se ne preporu~uje, "hrabriji" programeri se ~esto odlu~uju za direktni pristup video-memoriji ekrana u tekstualnom na~inu rada. Da bi pokazali kako se to radi analiziraemo VGA 25*80 tekstualni "mode". Memorija ekrana po~inje od lokacije B800:0000. Znak koji se prikazuje na poziciji 00,00 (Slika B.11) je smeten u memorijskim lokacijama B800:0000 i B800:0001. Naredni karakter bie smeten na lokacijama B800:0002 i B800:0003, itd. Ovo zna~i da svaki znak (karakter) zauzima prostor od dve memorijske lokacije. Prvi predstavlja ASCII kodirani znak koji se prikazuje, a drugi se odnosi na atribut bajt kojim se opisuje boja znaka, boja pozadine i da li znak blinka ili ne. Analiziraemo sada jednu kratku programsku sekvencu kojom se smekta ASCII kod blanko (20h) na svim pozicijama tekue stranice ekrana i atribut kojim se definie beo znak, crna pozadina, bez blinkanja. Sekvenca je oblika
CODE SEGMENT brisanje ; po~etak kodnog segmenta
ASUME CS : CODE MAIN PROC FAR ; po~etak procedure MAIN
ced ; izbor autokrementalnai na~in rada
Dodatak B
B-19
Mov AX, 0B800h ; adresa segmenta memorije prikaza
Mov ES, AX Mov DI, 0 ; ofset adresa memorije prikaza
Mov CX, 25*80 ; CX = broja~ karaktera
Mov AX, 0720h ; napuni karakter i boju
Rep Stosw ; ponovi Stosw 2000 puta
Mov AX, 4C00h ; izlaz na DOS
Int 21h MAIN Endp CODE Ends End MAIN Vie detalja o naredbi Int 21h je dato u okviru prekida Int 21h (tekst koji sledi).
DOS funkcijski poziv Int 21 h
Pored BIOS-ih servisa kakav je Int 10h koji se ~uva u ROM-u, i DOS mo`e da obezbedi usluge koje su obi~na slo`enije od BIOS-ih. Pristup DOS-im funkcijskim pozivima ostvaruje se na identi~an na~in kao i kod BIOS-a - softrverskim prekidima. Int 21h je tipi~an funkcijski poziv DOS-a koji obavlja izuzetno korisne funkcije. Delimi~na lista ovih opcija prikazana je u prilogu na kraju teksta. U tekstu koji sledi ukazaemo samo na neke od njih. Int 21h opcija 09 : predaja niza podataka monitoru Int 21h se mo`e koristiti za predaju skupa ASCII podataka ka monitoru. Ova aktivnost se obavlja na sledei na~in: Postavlja se AH = 09 a DX = ofset adresa ASCII podataka koji se prikazuju. Zatim se poziva Int 21h. Kraj teksta koji se prikazuje markiran je znakom '$'. Jedna tipi~na programska sekvenca ima oblik
ASCII_TEKST DB "Test koji se prikazuje", '$' Mov AH, 09 ; opcija 09 prikaz niza podataka
Mov DX,OFFSET ASCII_TEKST;DS:DX par segmenta i ofset adresa podataka
Int 21h ; poziv prekida
Int 21 h opcija 02 : predaja jednog podatka monitoru
Postoje slu~ajevi kada postoji potreba da se preda samo jedan podatak monitoru. Da bi se obavilo to neophodno je postaviti AH = 02 a DL = podatak koji se prikazuje, a zatim se poziva Int 21 h. Sekvenca kojom se vri prikaz slova 'M' ima oblik Mov AH, 02 ; izbor opcije 02 prikaz jednog karaktera Mov DL, 'M' ; DL = karakter koji se prikazuje Int 21h ; poziv prekida Int 21 h opcija 01 : unos jednog znaka sa ehom Ova funkcija ~eka da se znak primi sa tastature a zatim ga predaje monitoru ~ime ostvaruje subjektivni oseaj eha prema korisniku. Nakon izvrenja prekida, ulazni karakter se nalazi u AL. Sekvenca je oblika:
Mov AH, 01 ; opcija 01 - unos jednog podatka
Int 21 h ; nakon prekida AL = uneti ASCII znak
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-20
Sledea programska sekvenca kombinuje Int 10h sa Int 21h. Program obavlja sledee aktivnosti : (1) brie ekran; (2) postavlja kursor na centar ekrana, i (3) po~evi od te ta~ke ispisuje poruku "Ovaj tekst predstavlja rutinu za prikaz".
TITLE PROG_D Program za prikaz PAGE 60, 132
; segment magacina
SMAG SEGMENT DB 64 DUP (?) SMAG Ends
; segment podataka
SPOD SEGMENT PORUKA DB 'Ovaj tekst predstavlja rutinu za prikaz','S' SPOD Ends
; kodni segment
SKOD SEGMENT GLAVNI PROC FAR ASSUME CS : SKOD, DS : SPOD, SS : SMAG Mov AX, SPOD Mov DS, AX Call BRISANJE ; obrii ekran
Call KURSOR ; postavi poziciju kursora
Call PRIKAZ ; prika`i poruku
Mov AH, 4Ch Int 21h ; povratak na DOS
GLAVNI Endp ; ovaj potprogram brie ekran
BRISANJE PROC Mov AX, 0600h ; "scroll" funkcija za ekran
Mov BH, 07 ; normalni atribut
Mov CX, 0000 ; brii od vrste=00,i kolone=00
Mov DX, 184Fh ; do vrste=18 h, i kolone=4Fh
Int 10h ; pozivi prekid za brisanje
Ret BRISANJE Endp
; ovaj 'potprogram' se koristi za postavljanje kursora na centar enrana
KURSOR PROC Mov AX, 02 ; postavi funkciju kursora Mov BH, 00 ; stranica 00
Dodatak B
B-21
Mov DX, 12 ; centralna vrsta Mov DL, 39 ; centralna kolona
Int 10h ; pozivi prekid da postavi kursor
Ret KURSOR Endp
; ovaj potprogram prikazuje niz na ekranu
PRIKAZ PROC Mov AH, 09 ; funkcija prikaza
Mov DX, OFFSET PORUKA ; DX pokazuje na izlazni bafer
Int 21h ; pozovi prekid-prikaz poruke
Ret PRIKAZ Endp SKOD Ends END GLAVNI Int 21 h opcija 0A h : ulaz niza podataka sa tastature Opcija 0Ah od Int 21h obezbedjuje da se prihvate podaci sa tastature i smeste u unapred definisanu oblast memorije u segmentu podataka. Da bi obavitili ovo neophodno je da : AH=0Ah, DX=ofset adresa na koji se smeta niz podataka. Oblast gde se smetaju podaci naziva se baferska oblast. DOS zahteva da oblast bafera bude definisana u segmentu podataka a da pri bajt specificira obim bafera. DOS e smetati broj karaktera koji se prihvataju preko tastature u drugom bajtu u podatak koji se prihvata preko tastature se smeta u baferu po~ev od treeg bajta. Sledea programska sekvenca prihvatie do 6 karaktera sa tastature, uklju~ujui i "carriage return" dirku. [est lokacija je rezervisano u baferu i one su popunjene sa FFh.
ORG 0010h PODACI DB 6,?,6 DUP (FF) ; 0010h = 06, 0-012h do 0017h =FF
Mov AH, 0Ah ; opcija unos niza preko Int 21h
Mov DX, OFFSET PODACI ; napuni ofset adresu u bafer
Int 21h ; pozovi prekid 21h
Sadr`aj memorije na ofset adrese 0010 h pre poziva Int 21h je ofset adresa sadr`aj 0010 06 0011 00 0012 FF 0013 FF 0014 FF 0015 FF 0016 FF 0017 FF Kada se program izvrava on ~eka da se primi informacija sa tastature. Pod uslovom da smo otkucali "ELEF"<RETURN>, sadr`aj memorije po~ev od ofset lokacije 0010 h bie
0010 06 ; obim bafera 0011 04 ; otkucana su ~etiri karaktera 0012 45 ; ASCII kod E 0013 4C ; ASCII kod L
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-22
0014 45 : ASCII kod E 0015 46 ; ASCII kod F 0016 0D ; ASCII kod CR (carriage return) 0017 FF
Interesantno je sagledati kako se od strane DOS-a pristupa broja~u karaktera, tj. drugom bajtu. Jedan od na~ina je sledei
Mov AH,0Ah Mov DX,OFFSET PODACI Int 21h ; nakon to je podatak sa tastature prihvaen, pribavi se ; vrednost broja~a na sledei na~in
Mov BX, OFFSET PODACI Sub CH, CH ; Ch = 00
Mov CL, BX + 1 ; kopiraj broja~ u CL
Da bi locirali karakter CR, tj. vrednost 0Dh, u nizu i zamenili je sa, recimo 00h, potrebno je izvriti sledeu sekvencu
Mov SI, CX Mov BYTE PTR BX+SI+2,00 Aktuelno uneti podatak se memorie na lokaciju BX + 2.
Unos veeg broja podataka od obima bafera
Analizirajmo sada to e se desiti ako se unese vei broj karaktera od est (5 znakova + CR = 6). Unos poruke "ELEF se nalazi u Niu" <RETURN> uzrokovae da ra~unar generie tonski signal a sadr`aj bafera blie sledei:
ofset adresa sadr`aj 0010 06 0011 05 0012 45 0013 4C 0014 45 0015 46 0016 20 ; blanko 0017 OD ; ASCII kod za CR
Lokacija 0016 ~uva ASCII 20h za blanko karakter koji se u izvornom tekstu nalazi izmedju 'ELEF' i 'se nalazi u Niu'. Interesantno je sagledati ta e se desiti ako se aktivira samo dirka CR, kao u sledeem primeru
ORG 20h POD_2 DB 5, ?, 5 DUP (FF) Sadr`aj memorije nakon izvrenja sekvence bie:
ofset adresa sadr`aj 0020 05 0021 00 0022 0D
Dodatak B
B-23
0023 FF 0024 FF 0025 FF 0026 FF Stvarni broj karaktera koji je unet iznosi 0 i on se nalazi na lokaciji 0021. Treba ukazati da svaki podatak koji se unosi preko tastature prikazuje se na ekranu, tj. koristi se princip eho. Program koga emo analizirati obavlja sledee aktivnosti: (a) brie ekran; (b) postavlja kursor na po~etak tree linije od vrha ekrana, (c) prihvata poruku "Studiram na ELEF-u", (d) konvertuje mala slova poruke u velika, (e) prikazuje rezultat konvertovane poruke u narednoj liniji.
TITLE PROG2 Student Mika page 60,132
; segment magacina
SMAG SEGMENT DB 100 DUP((?) SMAG Ends
; segment podataka
SPOD SEGMENT BAFFER DB 19,?,19 DUP(?) ;bafer podataka sa tastature
ORG 18h OB_POD DB CR,LF,19 DUP(?),'$'; oblast gde se smetaju podaci nakon konverzije
SPOD Ends CR EQU 0Dh LF EQU 0Ah
; kodni segment
PSEG SEGMENT GLAVNI PROC FAR ASSUME CS : PSEG, DS : SPOD; SS : SMAG Mov AX, SPOD Mov DS, AX Call OBRISI : obrii ekran
Call KURSOR : postavi poziciju kursora
Call PRIHVAT ; upii niz u bafer
Call KONVER ; konverziju niza u velika slova
Call PRIKAZ ; prika`i oblast podataka
Mov AH, 4Dh Int 21h ; povratak na DOS
GLAVNI Endp ; potprogram za brisanje ekrana
OBRISI PROC
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-24
Mov AX, 0600 ; funcija "scroll" ekrana
Mov BH, 07 ; standardni atribut
Mov CX, 0000 ; vrsta = 00, kolona = 00
Mov DX,184Fh ; do vrste 18h, kolone 4Fh
Int 10h Ret OBRISI Endp
; ovaj potprogram postavlja kursor na po~etak tree vrste
KURSOR PROC Mov AX,06 ; funcija postavi kursora
Mov BH,00 ; stranica 00
Mov DL,01 ; kolona 1
Mov DH,03 ; vrsta 3
Int 10h ; pozovi funciju postavi kursora
Ret KURSOR Endp
; ovaj potprogram prikazuje niz na ekranu
PRIKAZ PROC Mov AH,09 ; funkcija prikaz niza
Mov DX,OFFSET OB_POD ; DX pokazuje na bafer
Int 21h ; poziv prekida~a prikaz
Ret PRIKAZ Endp
; ovaj potprogram smeta podatke sa tastature u bafer
PRIHVAT PROC Mov AH,0Ah ; funkcija unos niza
Mov DX, OFFSET BAFER ; DX pokazxuje na bafer
Int 21h ; poziv prekida
Ret PRIHVATI Endp
; ovaj potprogram konvertuje mala slova u velika
KONVER PROC Mov BX,OFFSET BAFER Mov CL,BX + 1 ; dobavi broj karaktera
Sub CH, CH ; CX=ukupan broj karaktera
Mov DI, CX ; indeks bafera
Mov BYTE PTR BX+DI +2, 20h ; zameni CR sa blanko
Mov SI,OFFSET OB_POD+2 ; adresa niza
Ponovi: Mov AL, BX + 2 ; dobavi otkucani podatak
Dodatak B
B-25
Cmp 61h ; provera da li je 'a'
JB Naredni ; ako je manji, idi na Naredni
Cmp AL, 7A h ; proveri sa 'Z'
JA Naredni ; ako je iznad ili na Naredni
And AL,11011111b ; konvertuj ga u veliko slovo
Naredni Mov SI,AL ; smesti u oblast podataka
Inc Si ; inkrementiraj broja~a
Inc BI Loop Ponovi ; broja~ petlje = 0
Ret KONVER Endp PSEG Ends End GLAVNI
Korienje CR i LF
U prethodnoj programskoj sekvenci pomou EQU iskaza CR (carriage return) je bio dodeljen ASCII kôd 0Dh, a LF (line fead) ASCII kôd 0Ah. Rezultat konverzije je bio sledei: Prikaz konvertovanog teksta je bio u novi red zahvaljujui tome to su poruci prethodili karakteri CR i LF. Za slu~aj da ne postoji CR, tekst bi se prikazivao od one pozicije korsora koja se tekue zatekne pa nadalje. U slu~aju da ima CR a nema LF, konvertovani niz bi se prikazivao u istoj liniji i to od po~etka tako da bi se preko starih karaktera kucali novi (konvetovani), tj. stari tekst bi bio zamenjen novim. Kombinacija CR i LF dovodi do pozicioniranja kursora na po~etak novog reda (u konkretnom slu~aju je to ~etvrti red). Programska sekvenca koja sledi prikazuje ime i prezime korisnika. Prezime mo`e biti duga~ko maksimalno 8 slova. Nakon unoenja prezimena program prikazuje njegovu du`inu na ekranu. Ova sekvenca prikazuje veliki broj funkcija koje su do sada bile analizirane.
TITLE PROG_3 citaj ime i prezime i prika`i du`inu PAGE 60, 32 ; segment magacina SMAG SEGMENT DB 100 DUP (?) SMAG Ends ; segment podataka SPOD SEGMENT PORUKA1 DB 'Vase prezime?''$' ORG 20 h BAFFER1 DB 9, ?, 9 DUP (0) ORG 30h PODUKA 2 DB, CR,LF, ' Broj slova u vaem imenu je:','$' SPOD Ends VRSTA EQU 08
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-26
KOLONA EQU 05 CR EQU 0D h ; CR = 0Dh LF EQU 0A h ; LF = 0Ah
; segment programa
PSEG SEGMENT GLAVNI PROC FAC ASSUME CS : PSEG, DS : SPOD, SS : SMAG Mov AX,SPOD Mov DSAX Call OBRISI Call KURSOR Mov AH,09 ; prika`i PROMPT
Mov DX,OFFSET PORUKA 1 Int 21h Mov AH,0Ah ; prihvati ime sa tastature
Mov DX,OFFSET BAFER1 InT 21h Mov BX,OFFSET BAFER1 ; odredi broj slova u prezimenu
Mov CL,BX + 1 ; dobavi broj slova u CL
Or CL, 30h ; kodiraj ih kao ASCII
Mov PORUKA2 + 40, CL ; smesti na kraju niza
Mov AH,09 ; prika`i drugu poruku
Mov DX, OFFSET PORUKA 2 Int 21h Mov AH, 4Ch Int 21h ; povratak na DOS
GLAVNI Endp ; procedura za brisanje
BRISANJE PROC ; obrii ekran
Mov AX, 0600h Mov BH, 07 Mov CX, 0000 Mov DX, 184Fh Int 10h Ret OBRISI Endp
; procedura kursor
KURSOR PROC ; postavi kursor na poziciju
Mov AH,02
Dodatak B
B-27
Mov BH,00 Mov DL,KOLONA Mov DH,VRSTA Int 10h Ret KURSOR Endp PSEG Ends End GLAVNI
BIOS Int 16H - programiranje tastature
Int 16 h je BIOS-ov prekid koji se isklju~ivo koristi za tastaturu. Provera da li je pritisnuta dirka - da bi proveriti da li neka dirka pritisnuta koristi se Int 16h funkcija AH = 01 na sledei na~in
Mov AH,01 ; proveri pritisnutu dirku
Int 16h ; pozovi Int 16h
Nakon povratka ZF = 0 ako nije pritisnuta dirka, a ZF = 1 ako je bilo koja dirka pritisnuta. Koja je dirka pritisnuta - ~esto je potrebno da saznamo ne samo da li je neka dirka pritisnuta nego i kod te dirke. Da bi obavili to odmah nakon Int 16h, funkcija AH = 01, treba koristiti Int 16h funkciju 00 h, tj.
Mov AH,00 ; dobavi kôd pritisnute dirke
Int 16h Nakon povratka u AL se nalazi kod pritisnute ASCII dirke. Sledea programska sekvenca prikazuje na~in korienja Int 16h.
TITLE PROG4 Korienje prekida Int 16 h ; ovaj program generie tonski signal uvek nakon to se
; pritisne bilo koja dirka
.MODEL SMALL .STACK .DATA PORUKA DB 'Pritisni bilo koju dirku da bi ukinuo ton ','$' .CODE GLAVNI PROC Mov AX,DATA Mov DS,AX Mov AH,09 Mov DX,OFFSET PORUKA ; prika`i poruku
Int 21h PONOVI Mov AH,02 ; alji ka monitoru jedan znak
Moy DL,07 ; predaj znak tonskog signala
Int 21h
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-28
Moy AH,01 ; proveri pritisnutu dirku
Int 16h JZ PONOVI ; ako nije pritisnuta vrati se u petlju
Mov AH, 4Ch ; ako je pritisnuta bilo koja dirka vrati se na DOS
Int 21h GLAVNI Endp End
Dodatak B
B-29
Section B.2 DOS INTERRUPT 21H AND 33H LISTING
This appendix lists many of the DOS 21H interrupts, which are used primarily for iNput, output, and file and memory management. In addition, this appendix covers some functions of INT 33 H, the mouse handLing interrupt. As was mentioned in Chapter 6, this interrupt is not a part of DOS or BIOS, but is part of the mouse driver software.
Section B.2.1 DOS 21H INTERRUPTS
First, before covering the DOS 21H interrupts, a few notes are given about file management under DOS. There are two commonly used ways to access files in DOS. One is through what is called a file handle, the other is through an FCB, or file control block. These terms are defined in detail below. Function calls 0FH through 28H use FCBs to access files. Function calls 39 H through 62 H use file handles. Handle calls are more powerful and easier to use. However, FCB calls maintain compatibillity down to DOS version 1.10 FCB calls have the furher lilmitation that they reference only the files in the current directory, wheras handle calls reference any file in any directory. FCB calls use the file control block to perorm any function on a file. Handle calls use an ASCIIZ string (defined below) to open, create, delete or rename a file, and use a file handle for I/O requests. There are some terms used in the interrupt listing that will be unfamiliar to many readers. DOS manuals provide complete coverage of the details of file managment, but a few key terms are defined below.
ASCIIZ string
This is a string composes of any combination of ASCII characters and terminated with one byte of binary zeros (00H). It is frequently used in DOS 21 H interrupt calls to specify a filename or path. The following is an example of an ASCIIZ string that was defined in the data segment of a program: NAME_1 DB ’C:\PROGRAMS/SYSTEM_A\PROGRAM5.ASM’,0
Directory
DOS keeps track of where files are located by means of a directory. Each disk can be partitioned into one or more directories. The directory lists each file in that directory, the number of bytes in the file, the date and time the file was created, and other information that DOS needs to access that file. The familiar DOS command “DIR” lists the directory of the current drive to the monitor.
DTA Disk transfer area
This is essentially a buffer area that DOS will use to hold data for reads or writes performed with FCB function calls. This area can be set up by your program anywhere in the data segment. Function call 1AH tells DOS the location of the DTA. Only one DTA can be active at a time.
FAT File allocation table
Each disk has a file allocation table that gives information about the clulsters on a disk. Each disk is divided into sectors, which are grouped into clulsters. The size of sectors and clusters varies among the different disk types. For each cluster in the disk, the FAT has a code indicating whether the cluster is being used by a file, is available, is reserved, or has been marked as a bad clulster. DOS this information in storing and retrieving files.
FCB File control block
One FCB is associated with each open file. It is composed of 37 bytes of data that give information about a file, such as drive, filename and extension, size of the file in bytes, and date and time it was
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-30
created. It also stores the current block and record numbers, which serve as pointers ilnto a file when it is being read or written to. DOS INT 21H function calls 0FH through 28H use FCBs to access files. Function 0FH is used to open a file, 16H to create a new file. Function calls 14H - 28H perform read/write functions on the file, and 16H is used to close the file. Typically, the filename information is set up with function call 29H (Parse File- name), and then the address of the FCB is placed in DS:DX and is used to access the file.
File handle
DOS function calls 3CH through 62H use file handles. When a file or device is created or opened with one of these calls, its file handle is returned. The file handle is used thereafter to refer to that file for input, closing the file, and so on. DOS has a few predefined file handles that can be used by any Assembly language program. These do not need to be opened before they are used: Handle value Refers to 0000 standard input device (typicallly, the keyboard) 0001 standard output device (typically, the monitor) 0002 standard error output device (typically, the monitor) 0003 standard auxiliary device (AUX1) 0004 standard printer device (PTR1)
PSP Program segment prefix
The PSP is a 256-byte area of memory reserved by DOS for each program. It provides an area to store chared information between the program and DOS. AH Function of INT 21H 00 Terminate the program Additional Call Register Result Registers CS = segment address of None
PSP (program segment prefix) Note: Files should be closed previously or data may be lost.
01 Keyboard input with echo Additional Call Registers Result Registers None AL = input character
Note: Checks for ctri-break. 02 Output character to monitor
Additional Call Register Result Registers DL = character to be displayed None
03 Asynchronous input from auxiliary device (serial device)
Additional Call Registers Result Registers None AL = input character
Dodatak B
B-31
AH Function of INT 21H 04 Asynchronous character output
Additional Call Registers Result Registers DL = charactet to be output None
05 Output character to printer
Additional Call Registers Result Registers DL = character to be printed None
06 Console I/O
Additional Call Registers Result Registers DL = OFFH if input AL = 0H if no character available or character to be = character that was input, if input successful displayed, if output
Note: if input, ZF is cleared and AL will have the character. ZF is set if input and no character was available.
07 Keyboard input without echo
Additional Call Registers Result Registers None AL = input character
Note: Does not check for ctrl-break. 08 Keyboard input without echo
Additional Call Registers Result Registers None AL= input character
Note: Checks for ctrl-break. 09 String output Additional Call Registers Result Registers
DS:DX = string address None Note: Displays characters beginning at address until a “$” (ASCII 36) is encountered.
0A String input Additional Call Registers Result Registers
DS:DX = address at which to store string None Note: Specify the maximum size of the string in byte 1 of the buffer. DOS will place the actual size of the string in byte 2. The string begins in byte 3.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-32
AH Function of INT 21H 0B Get keyboard status Additional Call Registers Result Registers
None AL= 00 if no character waiting = CFFH if character waiting
Note: Checks for ctrl-break. 0C Reset input buffer and call keyboard input function Additional Call Registers Result Registers
AL = keyboard function number None 01H, 06H, 07H, 08H or OAH Note: This function waits until a character is typed in.
0D Reset disk Additional Call Registers Result Registers
None None
Note: Flushes DOS file buffers but does not close files. 0E Set default drive Additional Call Registers Result Registers DL = code for drive AL = number of logical drives
(0=A, 1=B, 2=C, etc.) in system 0F Open file Additional Call Registers Result Registers DS:DX = address of FCB AL = 00 if succesful
= 0FFH if file not found
Note: Searches current directory for file. If found, FCB is filled. 10 Close file Additional Call Registers Result Registers DS:DX = address of FCB AL = 00 if successful
= 0FFH if file not found
Note: Flushes all buffers. Also updates directory if file has been modified. AH Function of INT 21H
Dodatak B
B-33
11 Search for first matching filename Additional Call Registers Result Registers DS:DX = address of FCB AL = 00 if match is found
`= 0FFH if no match found
Note: File names can contain wildcards “?” and “”. 12 Search for next match
Additional Call Registers Result Registers DS:DX = address of FCB AL = 00 if match is found
= 0FFH if no match found
Note: This call should be used only if previous call to 11H has been successful. 13 Delete file(s)
Additional Call Registers Result Registers DS:DX = address of FCB AL = 00 if file(s)deleted
= 0FFH if no files deleted
Note: Deletes all files in current directory matching filename, provided that they are not read-only. Files should be closed before deleting.
14 Sequential read
Additional Call Registers Result Registers DS:DX = address of operand FCB AL = 00H if read successful
= 01H if end of file and no date is read = 02H if DTA is too smail to hold the record. = 03H if partial recortd read and end of file is reached
Note: The file pointer, block pointer, and FCB record pointer are updated automatically by DOS
15 Sequential write
Additional Call Registers Result Registers DS:DX = address of operand FCB AL = 00H if write successful
= 01H if diskis ful = 02H if DTA is too small to hold the record.
Note: The file pointer, block pointer, and FCB record pointer are updated automatically by DOS. The record may not be written physically until a cluster is full or the file is closed.
AH Function of INT 21H
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-34
16 Crate/open a file
Additional Call Registers Result Registers DS:DX = address of unopened FCB AL = 00H if successful
= 0FFH if unsuccessful
Note: If the file already exists, it will be truncated to length 0. 17 Rename file(s)
Additional Call Registers Result Registers DS:DX = address of FCB AL = 00H if file(s) renamed
= 0FF if file not found or new name already exists.
Note: The old name is in the name position of the FCB: the new name is at the size (offset 16H) position.
18 Reserved 19 Get default drive Additional Call Registers Result Registers
None AL = 0H fore drive A = 1H for drive B = 2H for drive C
1A Specify DTA (disk transfer address)
Additional Call Registers Result Registers DS:DX = DTA None Note: Only one DTA can be current at a time. This function must be called before FCB reads, writes, and directory searches.
1B Get FAT (file allocation table) for default drive Additional Call Registers Result Registers None AL = number of sectors per cluster
CX = number of bytes per sector DX = number of cluster per disk DS:BX FAT id
1C Get FAT (file allocation table) for any drive Additional Call Registers Result Registers
DL = drive code AL = number of sectors per cluster 0 for A; 1 for B; 2 for C CX = number of bytes per sector DX = number of cluster per disk
DS:BX FAT id AH Function of INT 21H
Dodatak B
B-35
1D Reserved 1E Reserved 1F Reserved 20 Reserved 21 Random read
Additional Call Registers Result Registers DS:DX = address of operand FCB AL = 00H if read successful
= 01H if end of file and no data read = 02H if DTA too smail for record. = 03H if end fo file and partial read.
Note: Reads record pointed at by current block and record fields into DTA 22 Random write
Additional Call Registers Result Registers DS:DX = address of operand FCB AL = 00H if write successful
= 01H if disk is full = 02H if DTA too small for record
Note: Writes from DTA to record pointed at by current block and record fields. 23 Get file size
Additional Call Registers Result Registers DS:DX = address of unopened FCB AL = 00H if file found, number of records is
set in FCB random-record field (offset 0021 H) = 0FFH if no match found
Note: The FCB should contain the record size before the interrupt.
24 Set random record field
Additional Call Registers Result Registers DS:DX = address of opened FCB None Note: This sets the random-record field (offset 0021H) in the FCB. It is used prior to switching from sequential to random processing.
AH Funcion of INT 21H
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-36
25 Set interrupt vector
Additional Call Registers Result Registers DS:DX = interrupt handler addr. None AL = machine interrupt number
Note: This is used to change the way thesystem handles interrupts.
26 Create a new PSP (program segment prefix)
Additional Call Registers Result Registers DX = segment addr. of new PSP None Note: DOS versions 2.0 and higher recommend not using this service, but using service 4B (exec).
27 Random block read Additional Call Registers Result Registers DS:DX = address of opened FCB AL = 00H if read successful CX = number records to be read = 01H if end of file and no data read = 02H if DTA too smail for block = 03H if EOF and partial block read CX = number of records actually read
Note: Set the FCB random record and record size fields prior to the interrupt. DOS will update the random record, current block, and current record fields after the read.
28 Random block write Additional Call Registers Result Registers DS:DX = address of opened FCB AL = 00H if read successful CX = number records to be write = 01H if disk is full = 02H if DTA too smail for block = 03H if EOF and partial block read CX = number of records actually written
Note: Set the FCB random record and record size fields prior to the interrupt. DOS will update the random record, current block and current record fields after the write. If CX = 0 prior to the interrupt, nothing is written to the file and the file is truncated or extended to the length computed by the random record and redord size fields.
AH Function of INT 21H 29 Parse filename
Dodatak B
B-37
Additional Call Registers Result Registers DS:SI = address of command line DS:SI = address of first char after ES:DI = address of FCB ES:DI = address of first byte of AL = parsing flags in bits 0-3 formatted unopened FCB Bit 0 = 1 if leading separators AL = 00H if no wildcards were in are to be ignored: otherwise filename of extension no scan-off takes place = 01H if wildcard found Bit 1 = 1 if drive ID in FCB = 0FFH if drive specifier is invalid will be changed only if drive was specified in command line Bit 2 = 1 if filename will be changed only if filename was specified in command line Bit 3 = 1 if extension will be changed only if extension was specified in command line
Note: The command line is parsed for a filename, then an unopened FCB is created at DS:SI. The command should not be used if path names are specified.
2A Get system date Additional Call Registers Result Registers None CX = year (1980-2099) DH = month (1-12) DL = day (1-31) AL = day of week code (0 = Sunday,..., 6 = Saturday) 2B Set system date Additional Call Registers Result Registers CX = year (1980-2099) AL = 00H if date set DH = month (1-12) = 0FFH if date not valid DL = day (1-31) 2C Get system time Additional Call Registers Result Registers None CH = hour (0..23) CL = minute (0..59) DH = second (0..59) DL = hundredth of second (0..99)
Note: The format returned can be used in calculations but can be converted to a printable format.
AH Function of INT 21H 2D Set system time
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-38
Additional Call Registers Result Registers CH = hour (0..23) AL = 00H if time set CL = minute = 0FFH if time invalid DH = second DL = hundredth of second 2E Set/reset verify switch Additional Call Registers Result Registers AL = 0 to turn verify off None = 1 to turn verify on
Note: If verify is on. DOS will perform a verify every time data is written to disk. An interrupt call to 54H gets the setting of the verify switch.
2F Get DTA (disk transfer area) Additional Call Registers Result Registers None ES:BX = address of DTA 30 Get system time Additional Call Registers Result Registers None AL = major version number (0,2,3,etc.) AH = minor version number 31 Terminate process and stay resident (KEEP process) Additional Call Registers Result Registers AL = binary return code None DX = memory size in paragraphs
Note: This interrupt call terminates the current process and attempt to place the memory size in paragraphs in the initial allocation block, but does not release any other allocation blocks. The return code in AL can be retrieved by the parent process using interrupt 21 call 4DH.
32 Reserved 33 Ctrl-break control Additional Call Registers Result Registers AL = 00 to get state of ctrl-break check DL = 00 if ctrl-break check off = 01 to modify state of ctrl-break check = 01 if ctrl-break check on DL = 00 to turn check off = 01 to turn check on
Note: When ctrl-break check is set to off, DOS minimizes the times it checks for ctrl-break input. When it is set to on, DOS checks for ctrl-break on most operations.
AH Function of INT 21H 34 Reserved
Dodatak B
B-39
35 Get interrupt vector address Additional Call Registers Result Registers AL = interrupt number ES:BX = address of interrupt handler 36 Get free disk space Additional Call Registers Result Registers DL = drive code AX = FFFFH if drive code invalid (0 = default, = sectors per cluster if valid 1 = A, 2 = B, etc.) BX = number of available clusters CX = bytes per sector DX = total clusters per drive 37 Reserved 38 Country dependent information Additional Call Registers Result Registers DS:DX = address of 32-byte None block of memory AL = function code 39 Create subdirectory (MKDIR) Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful name of new subdirectory = 1 if failed = 5 if access denied AX = 3 if path not found 3A Remove subdirectory (RMDIR) Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful name of new subdirectory = 1 if failed AX = 3 if path not found = 5 if directory not empty = 15 if drive invalid
Note: The current directory cannot be removed. AH Function of INT 21H 3B Change the current subdirectory (CHDIR)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-40
Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful name of new subdirectory = 1 if failed AX = 3 if path not found 3C Create a file Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful and file name = 1 if failed CX = file attribute AX = handle if successful = 3 if path not found = 5 if access denied
Note: Creates a new file if filename does not exist, otherwise truncates the file to lenght zero. Opens the file for reading or writing. A 16-bit handle will be returned in AX if the create was successful.
3D Open file Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful and file name = 1 if failed AL = mode flags (see below) AX = 16-bit handle if successful = 1 if function number invalid = 2 if file not found = 3 if path not found = 4 if handle not available = 5 if access denied = 0CH if access code invalid AL mode flag summary: 7 6 5 4 3 2 1 0 (bits) Result 0 0 0 open for read 0 0 1 open for write 0 1 0 open for read/write 0 reserved 0 0 0 give other compatible access 0 0 1 read/write access denied to others 0 1 0 write access denied to others 0 1 1 read access denied to others 1 0 0 give full access to tohers 0 file inherited by child process 1 file private to current process AH Function of INT 21H 3E Close file
Dodatak B
B-41
Additional Call Registers Result Registers BX = file handle Carry flag = 0 if successful = 1 if failed AX = 6 if invalid handle or file not open
Note: All internal buffers are flushed before the file is closed. 3F Read from file or device Additional Call Registers Result Registers DS:DX = buffer address Carry flag = 0 if successful BX = file handle = 1 if failed CX = number of bytes to read AX = number of bytes actually read, = 5 if access denied = 6 if file not open or invalid handle
Note: When reading from the standard device (keyboard), at most one line of text will be read, regardless of the value of CX.
40 Write to fiile or device Additional Call Registers Result Registers DS:DX = buffer address Carry flag = 0 if successful BX = file handle = 1 if failed CX = number of bytes to write AX = number of bytes actually written if successful = 5 if access denied = 6 if file not open or invalid handle
Note: If the carry flag is clear and AX is less than CX, a partital record was written or a disk full or other error was encountered.
41 Delete file (UNLINK) Additional Call Registers Result Registers DS:DX = address of ASCIIZ file specification Carry flag = 0 if successful = 1 if failed AX = 2 if file not found = 5 if access denied
Note: This function cannot be used to delete a file that is read-only. First, change the file's attribute to 0 by using interrupt 21 call 43H, then delete the file. No wildcard characters can be used in the filename. This function works by deleting the directory entry for the file.
AH Function of INT 21H 42 Move file pointer (LSEEK)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-42
Additional Call Registers Result Registers BX = file handle Carry flag = 0 if successful CX:DX = offset = 1 if fail AL = 0 to move pointer offset AX = 1 if invalid function number bytes from start of file = 6 if file not open or invalid handle = 1 to move pointer offset DX:AX = absolute offset from start of bytes from current location file if successful = 2 to move pointer offset bytes from end-of-file
Note: To determine file size, call with AL =2 and offset = 0. 43 Get or set file mode (CHMOD) Additional Call Registers Result Registers DS:DX = address of ASCIIZ Carry flag = 0 if successful file specifier = 1 if fail AL = 0H to get attribute CX = current attribute if set = 1H to set attribute AX = 1 if invalid function number CX = attribute if setting = 2 if file not found = attribute codes if = 3 if file does not exist or path not found getting (see below) = 5 if attribute cannot be changed 7 6 5 4 3 2 1 0 attribute code bits 0 reserved 0 reserved x archive 0 directory (do not set with 43H; use extended kFCB) 0 volume-label (do not set with 43H; use ext. FCB) x system x read-only AH Function of INT 21H 44 I/O device control (IOCTL)
Dodatak B
B-43
Additional Call Registers Result Registers AL = 00H to get device info AX = number of bytes = 01H to set device info transferred if CF = 0 = 02H char read device to buffer otherwise = error code = 03H char write buffer to device = 04H block read device to buffer = 05H block write buffer to device = 06H check input status = 07H check output status = 08H test if block device changeable = 09H test if drive local or remote = 0AH test if handle local or remote = 0BH to change sharing retry count = 0CH char device I/O control = 0DH block device I/O control = 0EH get map for logical drive = 0FH set map for logical drive DS:DX = data buffer BX = file handle; CX = number of bytes 45 Duplicate a file handle (DUP) Additional Call Registers Result Registers BX = opened file handle Carry flag = 0 if successful = 1 if fail AX = returned handle if successful = 4 if no handle available = 6 if handle invalid or not open
Note: The two handles will work in tandem; for example, if the file pointer of one handle is moved, the other will also be moved.
46 Force a duplicate of a handle (FORCCDUP) Additional Call Registers Result Registers BX = first file handle Carry flag = 0 if successful CX = second file handle = 1 if fail AX = 4 if no handle available = 6 if handle invalid or not open
Note: If the file referenced by CX is open, it will be closed first. The second file handle will be forced to point identically to the first file handle. The two handles will work in tandem; for example, if the file pointer of one handle is moved, the other will also be moved.
AH Function of INT 21H 47 Get current directory
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-44
Additional Call Registers Result Registers DL = drive code Carry flag = 0 if successful (0 = default, 1 = A,...) = 1 if fail DS:SI = address of 64-byte buffer DS:SI = ASCIIZ path specifier AX = 0FH if drive specifier invalid
Note: The returned pathname does not include drive information or the leading "\". 48 Allocate memory Additional Call Registers Result Registers Carry flag = 0 if successful BX = number paragraphs = 1 if fail AX = points to block if successful = 7 if memory control blocks destroyed = 8 if insufficient memory BX = sixe of largest block available if failed 49 Free allocate memory Additional Call Registers Result Registers ES = segment address of block Carry flag = 0 if successful being released = 1 if fail AX =7 memory control blocks destroyed = 9 if invalid memory block address in ES
Note: Frees memory allocated by 48H. 4A Modify memory allocation (SETBLOCK) Additional Call Registers Result Registers ES = segment adddress of block Carry flag = 0 if successful BX = requested new block size = 1 if fail in paragraphs BX = max available block size in failed AX = if memory control blocks destroyed = 9 if invalid memory block address in ES
Note: Dynamically reduces or expands the memory allocated by a previous call to interrupt 21 function 48H.
AH Function of INT 21H 4B Load and/or execute program (EXEC)
Dodatak B
B-45
Additional Call Registers Result Registers DS:DX = address of ASCIIZ path AX = error code if CF not zero and filename to load ES:BX = address of parameter block AL = 0 to load and execute = 3 to load, not execute 4C Terminate a proces (EXIT) Additional Call Registers Result Registers AL = binary return code None
Note: Terminates a process, returning control to parent process or to DOS. A return code can be passed back in AL.
4D Ger return code of a Subprocess (WAIT) Additional Call Registers Result Registers None AL = return code AH = 00 if normal termination = 01 if terminated by ctrl-break = 02 if terminated by critical device error = 03 if terminated by call to interrupt 21
function 31H
Note: Returns the code sent via interrupt 21 function 4CH. The code can be returned only once.
4E Search for first match (FIND FIRST) Additional Call Registers Result Registers DS:DX = address of ASCIIZ Carry flag = 0 if successful file specification = 1 if failed CX = attribute to use in search AX = error code
Note: The filename should contain one or more wildcard characters. Befor this call, a previous call to interrupt 21 function 1AH must set the address of the DTA. If a matching filename is found, the current DTA will be filled in as follows: Bytes 0 - 20 reserved by DOS for use on subsequent search calls 21 : attribute found 22-23 : file time 24-25 : file date 26-27 : file size (least significant word) 28-29 : file size (most significant word) 30-42 : ASCIIZ file specification
AH Function of INT 21H 4F Search for next filename match (FIND NEXT)
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-46
Additional Call Registers Result Registers None Carry flag = 0 if successful = 1 if failed AX = error code
Note: The current DTA must be filled in by a previous interrupt 21 4EH of 4FH call. The DTA will be filled in as outlined on interrupt 21 function 4E.
50 Reserved 51 Reserved 52 Reserved 53 Reserved 54 Get verify state Additional Call Registers Result Registers None AL = 00 if verify OFF = 01 if ventfy ON
Note: The state of the verify flag is changed via interrupt 21 function 2EH. 55 Reserved 56 Rename file Additional Call Registers Result Registers DS:DX = address of old ASCIIZ Carry flag = 0 if successful filename specification = 1 if failed ES:DI = address of new ASCIIZ AX = 2 if file not foun filename specification = 3 if path or file not foun = 5 if access denied = 11H if different device in new name
Note: If a drive specification is used, it must be the same in the old and new filename specifications. However, the directory name may be different, allowing a move and rename in one operation.
AH Function of INT 21H 57 Get/set file date and time
Dodatak B
B-47
Additional Call Registers Result Registers AL = 00 to get Carry flag = 0 if successful = 01 to set = 1 if failed BX = file handle CX = time if getting CX = time if setting DX = date if getting DX = date if setting AX = 1 if function code invalid = 6 if handle invalid
Note: The file must be open before the interrupt. The format of date and time is: TIME: DATE: Bits 0BH-0FH hours (0-23) Bits 09H-0FH year (rel.1980) 05H-0AH minutes (0-59) 05H-08H month (0-12) 00H-04H number of 2- 00H-04H day (0-31) second increments (0-29)
58 Get/set allocation strategy Additional Call Registers Result Registers AL = 00 to get strategy Carry flag = 0 if successful = 01 to set strategy = 1 if failed BX = strategy if setting AX = strategy if getting 00 if first fit = error code if setting 01 if best fit 02 if last fit 59 Get extended error information Additional Call Registers Result Registers BX = 00 AX = extended error code (see Table B.1) BH = error class BL = suggested remedy CH = error locus
Warning! This function destroys the contents of registers CL, DX, SI, DI, BP, DS, and ES. Error codes will change with future version of DOS.
5A Create temporary file Additional Call Registers Result Registers DS:DX = address of ASCIIZ path Carry flag = 0 if successful CX = file attribute = 1 if failed (00 if normal, 01 if read-only, AX = handle if successful 02 if hidden, 04 if system) = error code if failed DS:DX = address of ASCIIZ path specification if successful
Note: Filies created with this interrupt function are nod delted when the program terminates.
AH AL Function of INT 21H 5B Create new file Additional Call Registers Result Registers
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-48
DS:DX = address of ASCIIZ Carry flag = 0 if successful file specification = 1 if failed CX = file attribute AX = handle if successful 00 if normal = error code if failed 01 if read-only 02 if hidden 04 if system
Note: This function works similarly to interrupt 21 function 3CH; however, this function fails if the file already exists, whereas function 3CH truncates the file to length zero.
5C Control record access Additional Call Registers Result Registers AL = 00 to lock, = 01 to unlock Carry flag = 0 if successful BX = file handle = 1 if failed CX:DX = region offset AX = error code SI:DI = region length
Note: Locks or unlocks records in systems that support muitatsking or networking. 5D Reserved 5E 00 Get machine name Additional Call Registers Result Registers DS:DX = address of buffer Carry flag = 0 if successful = 1 if failed CH = 0 if name undefined = 0 if name defined CL = NETBIOS number if successful DS:DX = address of identifier if successful AX = error code
Note: Returns a 15-byte ASCIIZ string computer identifier.
5E 02 Set printer setup Additional Call Registers Result Registers BX = redirection list index Carry flag = 0 if successful CX = setup strength length = 1 if failed DS:DX = address of setup string AX = error code
Note: This function specifies a string that will precede all files sent to the network printer form the local node in a LAN. Microsoft Networks must be running in order to use this function.
AH AL Function of INT 21H 5E 03 Get printer setup Additional Call Registers Result Registers BX = redirection list index Carry flag = 0 if successful
Dodatak B
B-49
ES:DI = address of buffer = 1 if failed AX = error code CX = length of setup string ES:DI = setup string if successful 5F 02 Get redirection list Additional Call Registers Result Registers BX = redirection list index Carry flag = 0 if successful = 1 if failed DS:SI = address of 16- byte BH = device status flag device name buffer bit 1 = 0 if valid device ES:DI = address of 128-byte = 1 in invalid device network name buffer BL = device type CX = parameter value DS:SI = addr. ASCIIZ local device name ES:DI = addr. ASCIIZ network name AX = error flag 5F 03 Redirect device Additional Call Registers Result Registers BL = device type Carry flag = 0 if successful 03 printer = 1 if failed 04 drive AX = error code CX = caller value DS:SI = address of ASCIIZ local device name ES:DI = address of ASCIIZ network name
Note: Used when operating under a LAN, this function allows you to add devices to the network redirection list.
5F 04 Cancel redirection Additional Call Registers Result Registers DS:SI = address of ASCIIZ Carry flag = 0 if successful local device name = 1 if failed AX = error code
Note: Used when operating under a LAN, this function allows you to delete devices from the network radirection list.
60 Reserved AH AL Function of INT 21H 61 Reserved 62 Get PSP (program segment prefix) address
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-50
Additional Call Registers Result Registers None BX = address of PSP
Dodatak B
B-51
A summary of th IBM error codes Table B.16: Extended Error Code Information Code Error 1 invalid function number 2 file not found 3 path not found 4 too many open files 5 access denied 6 invalid handle 7 memory control blocks destroyed 8 insuifficient memory 9 invalid memory block address 10 invalid environment 11 invalid format 12 invalid access code 13 invalid data 14 unknown unit 15 invalid disk drive 16 attempt to remove current directory 17 not same device 18 no more files 19 attempt to write on write-protected diskette 20 unknown unit 21 drive not ready 22 unknown command 23 data error (CRC) 24 bad request structure length 25 seek error 26 unknown media type 27 sector not found 28 printer out of paper 29 write fault 30 read fault 31 general failure 32 sharing violation 33 lock violation 34 invalid disk change 35 FCB unavailable 36 sharing buffer overflow 37-49 reserved 50 network request not supported 51 remote computer not listening 52 duplicate name on network 53 network name not found 54 network busy 55 network device no longer exists 56 net BIOS command limit exceeded 57 network adapter hardware error 58 incorrect response from network 59 unexpected network error 60 incompatible remote adapter 61 print queue full 62 not enough space for print file 63 print file was deleted 64 network name not found 65 access denied
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-52
66 network device typoe incorrect 67 network name not found 68 network name limit exceeded 69 net BIOS session limit exceeded 70 temporarily paused 71 network request not accepted 72 print or disk redirection is paused 73-79 reserved 80 file exists 81 reserved 82 cannot make directory entry 83 fail on INT 24 84 too many redirections 85 duplicate redirection 86 invalid password 87 invalid parameter 88 network device fault
Reprinted by permission from "IBM Disk Operating System Technical Reference" c. 1987 by International Business Machines Corporation.
Dodatak B
B-53
SECTION B.2: MOUSE INTERRUPTS 33H Mouse interrupts are covered in Chapter 6. The following is a partial list of commonly used functions of the mouse handler interrupt, 33H. This interrupt is loaded into the system with the mouse interrupt handler, which is loaded upos reading the "device=" directive in the CONFIG.SYS file. AH Function of INT 33H 00 Initialize the mouse
Additional Call Registers Result Registers None AX = 0H if mouse not available = FFFFH if mouse avasilable BX = number of mouse buttons
Note: This function is called only once to initialize the mouse. If mouse support is present, AX = FFFFH and the mouse driver is intialized, the mouse pointer is set to the center of the screen and concealed.
01 Display mouse pointer Additional Call Registers Result Registers None None
Note: This function displays the mouse pointer and cancels any excusion area. 02 Condeal mouse pointer Additional Call Registers Result Registers None None
Note: This function hides the mouse pointer but the mouse driver monitors its position. Most programs issue this command before they terminate.
03 Get mouse location and button status
Additional Call Registers Result Registers None BX = mouse button status bit 0 - left button bit 1 - right button bit 2 - center button = 0 if up; = 1 if down CX = horizontal position DX = vertical position
Note: The horizontal and vertical coordinates are returned in pixels.
AH Function of INT 33H
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-54
04 Set mouse pointer location
Additional Call Registers Result Registers CX = horizontal position None DX = vertical position
Note: The horizontal and vertical coordinates are in pixels. Will display the mouse pointer only within set limits; will not display in exclusion areas.
05 Get button press information Additional Call Registers Result Registers BX = button: 0 for left; AX = button status 1 for right; 2 for center bit 0 - left button bit 1 - right button bit 2 - center button = 0 if up: = 1 if down BX = button press count CX = horizontal position DX = vertical position
Note: This returns the status of all buttons as well as the number of presses for the button indicated in BX when called. The poisition of the mouse pointer is given in pixels and represents the position at the last button press.
06 Get button release information Additional Call Registers Result Registers BX = button: 0 for left; AX = button status 1 for right; 2 for center bit 0 - left button bit 1 - right button bit 2 - center button = 0 if up: = 1 if down BX = button release count CX = horizontal position DX = vertical position
Note: This returns the status of all buttons as well as the number of presses for the button indicated in BX when called. The poisition of the mouse pointer is given in pixels and represents the position at the last button release.
07 Set horizontal limits for mouse pointer Additional Call Registers Result Registers CX = minimum horizontal position None DX = maximum horizontal position
Note: This sets the horizontal limits (in pixels) for the mouse pointer. After this call, the mouse will be displayed within these limits.
AH Function of INT 33H
Dodatak B
B-55
08 Set vertical limits for mouse pointer Additional Call Registers Result Registers CX = minimum vertical position None DX = maximum vertical position
Note: This sets the vertical limits (in pixels) for the mouse pointer. After this call, the mouse will be displayed within these limits.
10 Set mouse pointer exclusion area Additional Call Registers Result Registers CX = upper left horizontal coordinate None DX = upper left vertical coordinate SI = lower right horizontal coordinate DI = lower right vertical coordinate
Note: This defines an area in which the mouse pointer will not display. An exclusion area can be cancelled by calling functions 00 or 01.
24 Get mouse information Additional Call Registers Result Registers None BH = major version BL = minor version CH = mouse type CL = IRQ number
Note: This returns the version number (e.g., version 7.5: BH = 7, BL = 5). Mouse type: 1 for bus; 2 for serial; 3 for InPort; 4 for PS/2; 5 for HP; IRQ = 0 for PS/2; otherwise = 2, 3, 4, 5 or 7.
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-56
SECTION B.3: BIOS INTERRUPTS
This section covers the most commonly used BIOS interrupts. INT 10H is used extensivbely for graphics programming. INT 11H returns the equipment configuration and INT 12H returns the memory size. INT 14H is used for asynchronous communication. Two functions of INT 15H are included: one to initiate a wait and another to return extended memory size. INT 16H is used for the keyboard and INT 17H for the printer. INT 1AH handles the timer and RTC.
SECTION B.3.1: INT 10H VIDEO FUNCTION CALLS
AH Function 00 Set video mode Additional Call Registers Result Registers AL = video mode None
See Table B.2 for a list of available video modes and their definition. 01 Set cursor type Additional Call Registers Result Registers CH = beginning line of cursor None (bits 0 - 4) CL = ending line of cursor (bits 0 - 4)
Note: All other bits should be set to zero. The blinking of the cursor is hardware controlled. 02 Set cursor position Additional Call Registers Result Registers BH = page number None DH = row DL = column
Note: When using graphics modes, BH must be set to zero. Text coordinates of the upper left-hand corner will be (0.0).
03H Read cursor position and size Additional Call Registers Result Registers BH = page number CH = beginning line of cursor CL = ending line of cursor DH = row DL = column
Note: When using graphics modes, BH must be set to zero. AH Function
Dodatak B
B-57
04H Read light pen position Additional Call Registers Result Registers None AH = 0 if light pen not triggered = 1 if light pen triggered BX = pixel column CH = pixel row (modes 04H - 06H) CX = pixel row (modes 0DG - 13H) DH = character row DL = character column 05H Select active display page Additional Call Registers Result Registers AL = page number None (see Table E-1 below)
Table B.3: Display Pages for Different Modes and Adapters
Mode Pages Adapters 00H 0-7 CGA EGA MCGA VGA 01H 0-7 CGA EGA MCGA VGA 02H 0-3 CGA 0-7 EGA MCGA VGA 03H 0-3 CGA 0-7 EGA MCGA VGA 07H 0-7 EGA VGA 0DH 0-7 EGA VGA 0EH 0-3 EGA VGA 0FH 0-1 EGA VGA 10H 0-1 EGA VGA
All other mode-adapter combinations support only one page.
06 Scroll window up Additional Call Registers Result Registers AL = number of lines to scroll None BH = display attribute CH = y coordinate of top left CL = x coordinate of top left DH = y coordinate of lower right DL = x coordinate of lower right
Note: If AL = 0, the entrire window is blank. Otherwise, the screen will be scrolled upward by the number of lines in AL. Lines scrolling off the top of the screen are lost, blank lines are scrolled in at the bottom according to the attribute in BH.
AH Function
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-58
07 Scroll window down Additional Call Registers Result Registers AL = number of lines to scroll None BH = display sttribute CH = y coordinate of top left CL = x coordinate of top left DH = y coordinate of lower right DL = x coordinate of lower right
Note: If AL = 0, the entrire window is blank. Otherwise, the screen will be scrolled down by the number of lines in AL. Lines scrolling off the bottom of the screen are lost, blank lines are scrolled in at the top according to the attribute in BH.
08 Read character and attribute at cursor position Additional Call Registers Result Registers BH = display page AH = attribute byte AL = ASCII character code 09 Write character and attribute at cursor position Additional Call Registers Result Registers AL = ASCII character code None BH = display page BH = attribute CX = number of characters to write
Note: Does not update cursor position. Use interrupt 10 Function 2 to set cursor position. 0A Write character at cursor position Additional Call Registers Result Registers AL = ASCII character code None BH = display page BL = graphic color CX = number of characters to write
Note: Write character(s) using existing video attribute. Does not update cursor position. Use interrupt 10 Function 2 to set cursor position.
AH Function
Dodatak B
B-59
0B Set color palette Additional Call Registers Result Registers BH = 00H to set border or None background colors = 01H to set palette BL = palette/color
Note: If BH = 00H and in text mode, this function will set the border color only. If BH = 00H and in graphics mode, this function will set background and border colors. If BH = 01H, this function will select the palette. In 320 x 200 four-color graphics, palettes 0 and 1 are available.
Pixel Colors for Palettes 0 and 1 Pixel Palette 0 Palette 1 0 background background 1 green cyan 2 red magenta 3 brown/yellow white
0C Write pixel Additional Call Registers Result Registers AL = pixel value None CX = pixel column DX = pixel row BH = page
Note: Coordinates and pixel value depend on the current video mode. Setting bit 7 of AL causes the pixel value in AL to be XORed with the current value of the pixel.
0D Read pixel Additional Call Registers Result Registers CX = pixel column AL = pixel value DX = pixel row BH = page 0E TTY character output Additional Call Registers Result Registers AL = character None BH = page BL = foreground color
Note: Writes character to the display and updates cursor position. TTY mode indicates minimal character processing. ASCII codes for bell, backspace, linefeed, and carriage return are translated into the appropriate action.
AH AL Function 0F Get video mode
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-60
Additional Call Registers Result Registers None AH = width of screen in characters AL = video mode BH = active display page
Note: See Table B.2 for a list of possible video modes. 10 00 SubFunction 00H: set palette register to color correspondence Additional Call Registers Result Registers AL = 00H None BH = color CL = palette register (00H to 0FH) 10 01 SubFunction 01H: set border color Additional Call Registers Result Registers AL = 01H None BH = border color 10 02 SubFunction 02H: set palette and border Additional Call Registers Result Registers AL = 02H None ES:DX = address of color list 13 Write String Additional Call Registers Result Registers AL = write mode None = 00H, attribute in BL,cursor not moved = 01H, attribute in BL. cursor moved = 02H, attributes follow char, cursor
not moved = 03H, attributes follow char, cursor moved ES:BP = address of string CX = character count DH = initial row position DL = intial column position BH = page
Note: For AL = 00 and 01, the string consists of characters only, which will all be displayed with the attribute in BL. For AL = 02 and 03, the data is stored with the attributes (char, attrib, char, attrib, and so on).
Table B.2: Video Modes and Their Definition char text/ Max Buffer AL Pisels Characters box graph Colors Adapter pages start 00H 320x200 40 x 25 8x8 text 16* CGA 8 B8000h 320x350 40 x 25 8x14 text 16* EGA 8 B8000h
Dodatak B
B-61
360x400 40 x 25 9x16 text 16* VGA 8 B8000h 320x400 40 x 25 8x16 text 16* MCGA 8 B8000h 01H 320x200 40 x 25 8x8 text 16 CGA 8 B8000h 320x350 40 x 25 8x14 text 16 EGA 8 B8000h 360x400 40 x 25 9x16 text 16 VGA 8 B8000h 320x400 40 x 25 8x16 text 16 MCGA 8 B8000h 02H 640x200 80 x 25 8x8 text 16* CGA 8 B8000h 640x350 80 x 25 8x14 text 16* EGA 8 B8000h 720x400 80 x 25 9x16 text 16* VGA 8 B8000h 640x400 80 x 25 8x16 text 16* MCGA 8 B8000h 03H 640x200 80 x 25 8x8 text 16 CGA 8 B8000h 640x350 80 x 25 8x14 text 16 EGA 8 B8000h 720x400 80 x 25 9x16 text 16 VGA 8 B8000h 640x400 80 x 25 8x16 text 16 MCGA 8 B8000h 04H 320x200 40 x 25 8x8 graph 4 CGA 4 B8000h 320x200 40 x 25 8x8 graph 4 EGA 1 B8000h 320x200 40 x 25 8x8 graph 4 VGA 1 B8000h 320x200 40 x 25 8x8 graph 4 MCGA 1 B8000h 05H 320x200 40 x 25 8x8 graph 4* CGA 1 B8000h 320x200 40 x 25 8x8 graph 4* EGA 1 B8000h 320x200 40 x 25 8x8 graph 4* VGA 1 B8000h 320x200 40 x 25 8x8 graph 4* MCGA 1 B8000h 06H 640x200 80 x 25 8x8 graph 2 CGA 1 B8000h 640x200 80 x 25 8x8 graph 2 EGA 1 B8000h 640x200 80 x 25 8x8 graph 2 VGA 1 B8000h 640x200 80 x 25 8x8 graph 2 MCGA 1 B8000h 07H 720x350 80 x 25 9x14 text mono MDA 8 B8000h 720x350 80 x 25 9x14 text mono EGA 4 B8000h 720x400 80 x 25 9x16 text mono VGA 8 B8000h 08H reserved 09H reserved 0AH reserved 0BH reserved 0CH reserved 0DH 320x200 40 x 25 8x8 graph 16 EGA 2/4 A0000h 320x200 40 x 25 8x8 graph 16 VGA 8 A0000h 0EH 640x200 80 x 25 8x8 graph 16 EGA 1/2 A0000h 640x200 80 x 25 8x8 graph 16 VGA 4 A0000h 0EH 640x350 80 x 25 9x14 graph mono EGA 1 A0000h 640x350 80 x 25 8x14 graph mono VGA 2 A0000h 10H 640x350 80 x 25 8x8 graph 4 EGA 1/2 A0000h 640x350 80 x 25 8x14 graph 16 VGA 2 A0000h 11H 640x480 80 x 30 8x16 graph 2 VGA 1 A0000h 640x480 80 x 30 8x16 graph 2 MCGA 1 A0000h 12H 640x480 80 x 30 8x16 graph 16 VGA 1 A0000h 13H 320x200 40 x 25 8x8 graph 256 VGA 1 A0000h 320x200 40 x 25 8x8 graph 256 MCGA 1 A0000h
* - color burst off
SECTION B.3.2: -- INT 11H - EQUIPMENT DETERMINATION
Get equipment configuration
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-62
Call Registers Result Registers None AX = equipment coee (see below)
Note: BIOS data area 40:10 is set during POST according to the equipment code word, which shows the optional equipment that is attached to the systsem.
Equipment Code Word
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
floppy disk drive installedmath coprocessor installedpointing device installednot usedinitial video mode (see below)floppy drives (see below)not usednumber RS-232 cardsnot usedintermal modern installednumber printers installed
Initial Video Mode Number of Floppy Drives 00 = Reserved 00 = 1 drive 01 = 40x25 color 01 = 2 drives 10 = 80x25 color 11 = 80x25 monochrome
SECTION B.3.3: -- INT 12H - MEMORY SIZE DETERMINATION
Get Conventional Memory Size Call Registers Result Registers None AX = memory size (kB)
Note: Returns amount of conventional memory available to DOS and application programs.
SECTION B.3.4 -- INT 14H - ASYNCHRONOUS COMMUNICATION
AH Function
Dodatak B
B-63
00 Initialize COM Port Additional Call Registers Result Registers AL = parameter (see below) AH = port status (see below) DX = port number (0 if COM1. AL = modem status (see below0 1 if COM2, etc.)
Note 1: The parameter byte in AL is defined as follows.
7 6 5 4 3 2 1 0 Indicates x x x Baud rate (000=110, 001=150, 010=300, 011=600, 100=1200, 101=2400, 110=4800, 111=9600) x x Parity (01=odd, 11=even, x0=none) x Stop bits (0=1, 1=2) x x Word length (10=7 bits, 11=8 bits) Note 2: The port status returned in AH is defined as follows: 7 6 5 4 3 2 1 0 Indicates 1 Timed-out 1 Transmit shift register empty 1 Transmit holding register empty 1 Break detected 1 Framing error detected 1 Party error detected 1 Overrun error detected
1 Received data ready
Note 3: The modem status returned in AL is defined as follows: 7 6 5 4 3 2 1 0 Indicates 1 Received line signal detect 1 Ring indicator 1 DSR (data set ready) 1 CTS (clear to send) 1 Change in receive line signal detect 1 Trailing edge ring indicator 1 Change in DSR status 1 Change in CTS status
AH Function 01 Write character to COM Port
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-64
Additional Call Registers Result Registers AL = character AH bit 7 = 0 if successful, 1 if not DX = port number (0 if COM1, AH bits 0 - 6 = status if successful 1 if COM2, etc.) AL = character
Note: The status byte in AH, bits 0 - 6, after the call is as follows:
7 6 5 4 3 2 1 0 Indicates 1 Transmit shift register empty 1 Transmit holding register empty 1 Break detected 1 Framing error detected 1 Party error detected 1 Overrun error detected 1 Received data ready
02 Read character from COM Port Additional Call Registers Result Registers DX = port number (0 if COM1, AH bit 7 = 0 iv successful, 1 if not AH bits 0 - 6 = status if successful 1 if COM2, etc.) AL = character read
Note: The status byte in AH, bits 1 - 4, after the call is as follows:
4 3 2 1 Indicates 1 Break detected 1 Framing error detected 1 Party error detected 1 Overrun error detected
03 Read COM Port Status Additional Call Registers Result Registers DX = port number (0 if COM1, AH = port status 1 if COM2, etc.) AL = modem status
Note: The port status and modem status returned in AH and AL are the same format as INT 14H function 00H, described above.
AH Function 04 Extended Initialize COM Port
Additional Call Registers Result Registers AL = 00H (break), 01H (no break) AH = port status (see function AH=0)
Dodatak B
B-65
DX = port number (0 if COM1, AL = modem status (see function AH=0) 1 if COM2, etc.) BH = parity = 00H none = 01H odd = 02H even = 03H stick parity odd = 04H stick parity even BL = stop bits = 00H (one stop bit) = 01H (1,5 bits for 5-bit word) = 01H (2 bits for > 5-bit word) CH = word length = 00H 5-bit = 01H 6-bit = 02H 7-bit = 03H 8-bit CL = baud rate = 00H 110 baud = 01H 150 baud = 02H 300 baud = 03H 600 baud = 04H 1200 baud = 05H 2400 baud = 06H 4800 baud = 07H 9600 baud = 08H 19200 baud 05 Extended COM Port Control
Additional Call Registers Result Registers AL = 00H (read control register) If read subfunction, = 01H (write to control register) BL = modem control register DX = port number (0 if COM1, If write subfunction, 1 if COM2, etc.) AL = modem status BL = Modem control register AH = line status bits 7 - 5 reserved bit 4: loop bit 3: out2 bit 2: out1 bit 1: RTS bit 0: DTR
Note: Subfunction AL = 00H returns the modem control register contents in BL. Subfunction AL = 01H writes the contents of BL into the modem control register and returns modem and line status register contents in AL and AH.
SECTION B.3.5: -- INT 15H - SYSTEM SERVICES
AH Function 86 Wait
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-66
Additional Call Registers Result Registers CX:DX time to wait in ms CF = 0 for successful wait = 1 if wait not performed
Note: The duration of the wait always be a multiple of 976 microseconds. 88 Extended memory size determination Additional Call Registers Result Registers None AX = extended memory (kB)
Note: Returns the amount of installed extended memory in kB, that is, the memory beginning at address 100000H, as determined by the POST. If DOS memory management is in control. 0 will be returned in AX even if you have extended memory.
SECTION B.3.6: -- INT 16H - KEYBOARD
AH Function 00 Keyboard read Additional Call Registers Result Registers None AH = key scan code AL = ASCII char
Note: Reads one character from the keyboard buffer and updates the head pointer. 01 Get keyboard status Additional Call Registers Result Registers None If no key waiting, ZF = 1. If key waiting, ZF = 0, AH = key scan code, AL = ASCII char.
Note: If a key is waiting, the scan code and character are returned in AH and AL, but the head pointer of the keyboard buffer is not updated.
AH Function 02 Get shift status Additional Call Registers Result Registers None AL = status byte
Dodatak B
B-67
bit 7: Insert pressed bit 6: Caps Lock pressed bit 5: Num Lock pressed bit 4: Scroll Lock pressed bit 3: Alt pressed bit 2: Ctrl pressed bit 1: Left Shift pressed bit 0: Right Shift pressed
Note: The keyboard status byte returned in AL indicates whether certain keys have been pressed. If the bit = 1, the key has been pressed.
03 Set typematic rate Additional Call Registers Result Registers AL = 05H None BH = repeat delay (see below) BL = repeat rate (see below)
Note: Sets the rate at which repeated keystrokes are accepted. The delay value in BH can be 00H (for 250), 01H (for 500), 02H (for 750), or 03H (for 1000). All values are in milliseconds. The repeat rate in BL represents the number of characters per second. Options are: 00H: 30.0 0BH: 10.9 16H: 4.3 01H: 26.7 0CH: 10.0 17H: 4.0 02H: 24.0 0DH: 9.2 18H: 3.7 03H: 21.8 0EH: 8.6 19H: 3.3 04H: 20.0 0FH: 8.0 1AH: 3.0 05H: 18.5 10H: 7.5 1BH: 2.7 06H: 17.1 11H: 6.7 1DH: 2.5 07H: 16.0 12H: 6.0 1DH: 2.3 08H: 15.0 13H: 5.5 1EH: 2.1 09H: 13.3 14H: 5.0 1EH: 2.0 0AH: 12.0 15H: 4.6 20H to FFH - reserved
10 Extended keyboard read Additional Call Registers Result Registers None AH = key scan code AL = ASCII char
Note: Used in place of INT 16H function 00H to allow program to detect F11, F12, and other keys of the extended keyborad. After the read, the head pointer of the keyboard buffer is updated.
AH Functrion 11 Extended keyboard status Additional Call Registers Result Registers None If no key waiting,
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-68
ZF = 1. If key waiting, ZF = 0, AH = key scan code, AL = ASCII char.
Note: This function is used instead of INT 16H function 01H so that programs can detect keys of the extended keyboard such as F11 and F12. If a key is waiting, the scan code and character are returned in AH and AL, but the head pointer of the keyboard buffer is not updated.
12 Extended shift status Additional Call Registers Result Registers None AL = shift status bit 7: Insert locked bit 6: Caps Lock locked bit 5: Num Lock locked bit 4: Scroll Lock locked bit 3: Alt pressed bit 2: Ctrl pressed bit 1: Left Shift pressed bit 0: Right Shift pressed AH = extended shift status bit 7: SysRq pressed bit 6: Caps Lock pressed bit 5: Num Lock pressed bit 4: Scroll Lock pressed bit 3: Right Alt pressed bit 2: Right Ctrl pressed bit 1: Left Alt pressed bit 0: Left Ctrl pressed
Note: The keyboard status byte returned in AL and AH indicate whether certain keys have been pressed. If the bit = 1, the key has been pressed.
SECTION B.3.6 -- INT 17H - PRINTER
AH Function
Dodatak B
B-69
00 Print charactrer Additional Call Registers Result Registers AL = character to print AL = status DX = printer (0 for LPT1, bit 7: printer not busy 1 for LPT2, 2 for LPT3) bit 6: printer acknowledge bit 5: out of paper bit 4: printer selected bit 3: I/O error bits 2-1: reserved bit 0: printer timed-out 01 Initilize port Additional Call Registers Result Registers AL = status (see function 00h) DX = printer (0 for LPT1, 1 for LPT2, 2 for LPT3) 02 Read status Additional Call Registers Result Registers AL = status (see function 00h) DX = printer (0 for LPT1, 1 for LPT2, 2 for LPT3)
SECTION B.3.7 -- INT 1AH TIMER AND REAL-TIME CLOCK SERVICES
AH Function 00 Read system-timer time counter Additional Call Registers Result Registers None CX = high portion of count DX = low portion of count AL = 0 if 24 hours has not passed sincew last read > 0 if 24 has passed since last read
Note: This function returns the number of ticks since midnight. A second is about 18.2 ticks. When the number of tivcks indicates that 24 hours has-passed, AL is incremented and the tick count is reset to zero. Calling this function resets AL so that whether 24 hours has passed can only be determined once a day.
AH Function 01 Set system-timer time conter Additional Call Registers Result Registers
Zbirka zadataka iz Mikroprocesora i mikrora~unara
B-70
CX = high portion of tick count None DX = low portion of tick count
Note: Calling this function will cause the timer overflow flag to be reset. 02 Read real-time clock time Additional Call Registers Result Registers None CH = hours CL = minutes DH = seconds DL = 01 for daylight savings option = 00 for no option CF = 0 if clock operating, otherwise = 1
Note: Hours, minutes, and seconds are returned in BCD format. This function is used to get the time in the CMOS time/date chip.
03 Set real-time clock time Additional Call Registers Result Registers CH = hours None CL = minutes DH = seconds DL = 01 for daylight savings option = 00 for no option
Note: Nours, minutes, and seconds are in BCD format. This function is used to set the time in the CMOPS time/date chip.
04 Read real-time clock date Additional Call Registers Result Registers None CH = century (19 od 20) CL = year DH = month DL = day CF = 0 if clock operating, otherwise = 1
Note: Century, year, month and day are in BCD format. This function is used to get the time in the CMOS time/date chip.
AH Function 05 Set real-time clock date Additional Call Registers Result Registers
Dodatak B
B-71
CH = century (19 od 20) None CL = year DH = month DL = day
Note: Century, year, month and day are in BCD format. This function is used to set the date in the CMOS time/date chip.
Dodatak C
Skup instrukcija mikropocesora MIPS
Name Register number Usage Preserved on call?
$zero 0 the constant value 0 n.a. $v0-$v1 2-3 values for results and expression
evalution no
$a0-$a3 4-7 arguments yes $t0-$t7 8-15 temporaries no $s0-$s7 16-23 saved yes $t8-$t9 24-15 more tempporaries no $gp 28 global pointer yes $sp 29 stack pointer yes $fp 30 frame pointer yes $ra 31 return address yes Figure 3.13. MIPS register convention. Register 1, called $at, is reserved for the assembler (see section 3.9), and registers 26-27, called $k0-$k1, are reserved for the operationg system. MIPS operands
Name Example Comments 32 registers $s0-$s7, $t0-$t9, $gp, Fast locations for data, In MIPS, data must be in
Zbirka zadataka iz Mikroprocesorskih sistema
$fp, $zero, $sp, $ra, $at, Hi, Lo
registers to perform arithmetic. MIPS register $zero always equals 0. Register $at is reserved for the assumbler to handle large constants. Hi and Lo contain the results of multiply and divide.
230 memory words
Memory [0], Memory [4], ..., Memory [4294967292]
Accessed only by data transfer instructions. MIPS uses byte addresses, so sequential words differ by 4. Memory holds data structures, such as arrays, and spilled registers, such as those saved on procedure calls.
MIPS assembly language Category Instruction Example Meaning Comments
add add $sl, $s2, $s3 $s1 = $s2 + $s3 Three operands; overflow detected
subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; overflow detected
add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 + constant; overflow detected add unsigned addu $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; overflow
undetected subtract unsigned subu $sl, $s2, $s3 $s1 = $s2 - $s3 Three operands; overflow
undetected add immediate unsigned
addiu $s1, $s2, 100 $s1 = $s2 + 100 + constant; overflow undetected
move from coporocessor register
mfc0 $s1, $epc $s1 = $epc Used to copy Exception PC plus other special registers
multiply mult $s2, $s3 Hi, Lo = $s2 * $s3 64-bit signed product in Hi, Lo multiply unsigned multu $s2, $s3 Hi, Lo = $s2 * $s3 64-bit unsigned product in Hi,
Lo divide div $s2, $s3 Lo = $s2/ $s3,
Hi = $s2 mod $s3 Lo = quotient, Hi = remainder
divide unsigned divu $s2, $s3 Lo = $s2/ $s3, Hi = $s2 mod $s3
Unsigned quotient and remainder
move from Hi mfhi $s1 $s1 = Hi Used to get copy of Hi
Arithmetic
move from Lo mflo $s1 $s1 = Lo Used to get copy of Lo and and $s1, $s2, $s3 $s1 = $s2 & $s3 Three reg. operands; logical
AND or or $s1, $s2, $s3 $s1 = $s2 ! $s3 Three reg. operands; logical OR and immediate andi $s1, $s2, 100 $s1 = $s2 & 100 Logical AND reg. constant or ori $s1, $s2, 100 $s1 = $s2 ! 100 Logical OR reg. constant shiftr left logical sll $s1, $s2, 10 $s1 = $s2 << 10 Shift left by constant
Logical
shift right logical srl $s1, $s2, 10 $s1 = $s2 >> 10 Shift right by constant load word lw $s1, 100($s2) $s1 = Memory
[$s2+100] Word from memory to register
store word sw $s1, 100($s2) Memory [$s2+100]= $s1
Word from register to memory
Dodatak C
load byte unsigned lbu $s1, 100($s2) $s1 = Memory [$s2+100]
Byte from memory to register
store byte sb $s1, 100($s2) Memory [$s2+100]= $s1
Byte from register to memory
Data transfer
load upper immediate
lui $s1, 100 $s1 = 100*216 Loads constant in upper 16 bits
branch on equal beq $s1, $s2, 25 if ($s1 ==$s2) go to PC + 4 + 100
Equal test; PC relative branch
branch on not equal bne $s1, $s2, 25 if ($s1!=$s2) go to PC + 4 + 100
Not equal test; PC relative
set on less than slt $s1, $s2, $s3 if($s2< $s3) $s1 = 1; else $s1 = 0
Compare less than; two's complement
set less than immediate
slti $s1, $s2, 100 if ($s2< 100) $s1 = 1; else $s1 = 0
Compare < constant; two's complement
set less than unsigned
sltu $s1, $s2, $s3 if($s2< $s3) $s1 = 1; else $s1 = 0
Compare less than; natural numbers
Conditional branch
set less than unsigned immediate
sltiu $s1, $s2, 100 if($s2< 100) $s1 = 1; else $s1 = 0
Compare < constant; natural numbers
jump j 2500 go to 10000 Jump to target address jump register jr $ra go to $ra For switch, procedure return
Unconditi-onal jump jump and link jal 2500 $ra =PC+4; go to
10000 For procedure call
Main MIPS assembly language instruction set. The floating-point instructions are shown in Figure 4.47 on page 291. Appendix A gives the full MIPS assembly language instructgion set. MIPS machine Language Example Name Format 6 bits 5 bits 5 bits 5 bits 5 bits 6
bits Coments
add R 0 2 3 1 0 32 add $1, $2, $3 sub R 0 2 3 1 0 34 sub $1, $2, $3 addi I 8 2 1 100 addi $1, $2,100 addu R 0 2 3 1 0 33 addu $1, $2, $3 subu R 0 2 3 1 0 35 subu $1, $2, $3 addiu I 9 2 1 100 addiu $1,$2,100 mfc0 R 16 0 1 14 0 0 mfc0 $1, $epc mult R 0 2 3 0 0 24 mult $2, $3 multu R 0 2 3 0 0 25 multu $2, $3 div R 0 2 3 0 0 26 div $2, $3 divu R 0 2 3 0 0 27 divu $2, $3 mfhi R 0 0 0 1 0 16 mfhi $1 mflo R 0 0 0 1 0 18 mflo $1 and R 0 2 3 1 0 36 and $1, $2, $3 or R 0 2 3 1 0 37 or $1, $2, $3 andi I 12 2 1 100 andi $1, $2,100
Zbirka zadataka iz Mikroprocesorskih sistema
ori I 13 2 1 100 ori $1, $2,100 sll R 0 0 2 1 10 0 sll $1, $2, 10 srl R 0 0 2 1 10 2 srl $1, $2, 10 lw I 35 2 1 100 lw $1,100($2) sw I 43 2 1 100 sw $1,100($2) lui I 15 0 1 100 lui $1,100 beq I 4 1 2 25 beq $1,$2,100 bne I 5 1 2 25 bne $1,$2,100 slt R 0 2 3 1 0 42 slt $1, $2, $3 slti I 10 2 1 100 slti $1,$2,100 sltu R 0 2 3 1 0 43 sltu $1, $2, $3 sltiu I 11 2 1 100 sltiu $1,$2,100 j J 2 2500 j 10000 jr R 0 31 0 0 0 8 jr $31 jal J 3 2500 jal 10000 MIPS Instruction formats
Name Flelds Comments Field size 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits All MIPS instructions 32 bits R-format op rs rt rd shamt funct Arithemetic instruction format I-Format op rs rt address/immediate Arithemetic instruction format J-Format op target address Jump instruction format Main MIPS machine language, Formats and examples are shown, with values in each field: op and funct fields form the opcode (each 6 bits), rs field gives a source register (5 bits), rt is also normally a source register (5 bits), rd is the destination register (5 bits), and shamt supplies the shift amount (5 bits). The field values are all in decimal. Floating-point machine language instructions are shown in Figure 4.47 on page 291. Appendix A gives the full MIPS machine language. MIPS floating-point operands Name Example Comments 32 floating point registers
$f0, $f1, $f2..., $f31, MIPS floating -point registers are used in pairs for double precision numbers.
230 memory words Memory [0], Memory [4], ...., Memory [4294967292]
Accessed only by data transfer instructions. MIPS uses byte addresses, so sequential words differ by 4. Memory holds data structures, such as arrays, and spilled registers, such as those saved on procedure calls.
MIPS floating-point assembly language
Category Instruction Example Meaning Comments FP add single add.s $f2, $f4, $f6 $f2 = $f4 + $f6 FP add (single precision)
Dodatak C
FP subtract single sub.s $f2, $f4, $f6 $f2 = $f4 - $f6 FP sub (single precision) FP multiply single mul.s $f2, $f4, $f6 $f2 = $f4 * $f6 FP. multiply(single
precision) FP divide single div.s $f2, $f4, $f6 $f2 = $f4 / $f6 FP divide (single precision) FP add double add.d $f2, $f4, $f6 $f2 = $f4 + $f6 FP add (double precision) FP subtract double sub.d $f2, $f4, $f6 $f2 = $f4 - $f6 FP sub (double precision) FP multiply double mul.d $f2, $f4, $f6 $f2 = $f4 * $f6 FP multiply (double
precision) FP divide double div.d $f2, $f4, $f6 $f2 = $f4 / $f6 FP divide (double
precision) load word copr.1 lwc1 $f1, 100($s2) $f1 = Memory
[$s2+100] 32-bit data to FP register
Data transfer store word copr.1 swc1 $f1,100($s2) Memory[$s2+100]
=$f1 32-bit data to memory
branch on FP true bclt 25 if(cond==1) go to PC+4+100
PC relative branch if FP cond.
branch on FP false bclf 25 if(cond==0) go to PC+4+100
PC relative branch if not cond.
FP compare single (eq.ne.lt.le.gt.ge)
c.lt.s $f2, $f4 if($f2 < $f4) cond=1; else cond = 0
FP compare less than single precision
Conditional branch
FP compare double c.lt.d $f2, $f4 if($f2 <$f4) (eq.ne.lt.le.gt.ge) cond=1; else cond = 0
FP compare less than single precision
MIPS floating-point machine language Name Format Example Comments add.s R 17 16 6 4 2 0 add.s $f2, $f4 $f6 sub.s R 17 16 6 4 2 1 sub.s $f2, $f4 $f6 mul.s R 17 16 6 4 2 2 mul.s $f2, $f4 $f6 div.s R 17 16 6 4 2 3 div.s $f2, $f4 $f6 add.d R 17 17 6 4 2 0 add.d $f2, $f4 $f6 sub.d R 17 17 6 4 2 1 sub.d $f2, $f4 $f6 mul.d R 17 17 6 4 2 2 mul.d $f2, $f4 $f6 div.d R 17 17 6 4 2 3 div.d $f2, $f4 $f6 lwc1 I 49 20 2 100 lwc1 $f2, 100($s4) swc1 I 57 20 2 100 swc1 $f2, 100($s4) bc1t I 17 8 1 25 bc1t 25 bc1f I 17 8 0 25 bc1f 25 c.lt.s R 17 16 4 2 0 60 c.lt.s $f2, $f4 c.lt.d R 17 17 4 2 0 60 c.lt.d $f2, $f4 Field size
6 bits
5 bits
5 bits
5 bits
5 bits
6 bits
All MIPS instruction 32 bits
Figure 4.47 MIPS floating-point architecture revealed thus far. See Appendix A, section A.10, on page a-49, for more detail.
Arithmetic and Logical Instructions
Zbirka zadataka iz Mikroprocesorskih sistema
Absolute value abs rdest, rsrc pseudoinstruction Put the absolute value of register rsrc in register rdest. Addition (with overflow)
add rd, rs, rt 0 rs rt rd 0 0x20 6 5 5 5 5 6 Addition (without overflow) addu rd, rs, rt 0 rs rt rd 0 0x21 6 5 5 5 5 6 Put the sum of registers rs and rt into register rd. Addition immediate (without overflow) addi rt, rs, imm 8 rs rt imm 6 5 5 16 Addition immediate (without overflow) addi rt, rs, imm 9 rs rt imm 6 5 5 16 Put the sum of register rs and sign-extended immediate into register rt. AND and rd, rs, rt 0 rs rt rd 0 0x24 6 5 5 5 5 6 Put the logical AND of registers rs and rt into register rd. AND immediate andi rd, rs, imm
0xc rs rt imm 6 5 5 16
Put the logical AND of register rs and the zero-extended immediate into register rt. Divide (with overflow) div rs, rt 0 rs rt 0 0x1a 6 5 5 10 6 Divide (without overflow) divu rs, rt 0 rs rt 0 0x1b 6 5 5 10 6 Divide register rs by register rt. Leave the quotient in register lo and the remainder in register hi. Note that if a operands is negative, the remainder is unspecified by the MIPS architecture and depends on the convention of the machine on which SPIM is run. Divide (with overflow)
Dodatak C div rdest, rsrcl, src2 pseudoinstruction Divide (without overflow) divu rdest, rsrcl, src2 pseudoinstruction Put the quotient of register rsrc1 and src2 into register rdest. Multiply mult rs, rt 0 rs rt 0 0x18 6 5 5 10 6 Unsigned multiply multu rs, rt 0 rs rt 0 0x19 6 5 5 10 6 Multiply register rs and rt. Leave the low-order word of the product in register lo and the high-order word in register hi. Multiply (without overflow) mul rdest, rsrcl, src2 pseudoinstruction Multiply (with overflow) mulo rdest, rsrcl, src2 pseudoinstruction Unsigned multiply (with overflow) mulou rdest, rsrcl, src2 pseudoinstruction Put the product of register rsrc1 and src2 into register rdest. Negate value (with overflow) neg rdst, rsrc pseudoinstructrion Negate value (without overflow) negu rdst, rsrc pseudoinstruction Put the negative of register rsrc into register rdst. NOR nor rd, rs, rt 0 rs rt rd 0 0x27 6 5 5 5 5 6 Put the logical NOR of registers rs and rt into register rd. NOT not rdest, rsrc pseudoinstruction Put the bitwise logical negation of register rsrc into register rdest. OR or rd, rs, rt 0 rs rt rd 0 0x25
Zbirka zadataka iz Mikroprocesorskih sistema 6 5 5 5 5 6 Put the logical OR of registers rs and rd into register rt. OR immediate ori rt, rs, imm 0xd rs rt imm 6 5 5 16 Put the logical OR of register rs and zero-extended immediate into register rt. Remainder rem rdest, rsrc1, rsrc2 pseudoinstruction Unsigned remainder remu rdest, rsrc1, rsrc2 pseudoinstruction Put the remainder od register rsrc1 divided by register rsrc2 into register rdest. Note that if an operand is negative, the remainder is unspecified by the MIPS architecture and depends on the convention of the machine on which SPIM is run. Shift left logical sll rd, rt, shamt 0 rs rt rd shamt 0 6 5 5 5 5 6 Shift left logical variable sllv rd, rt, rs 0 rs rt rd 0 4 6 5 5 5 5 6 Shift right arithmetic sra rd, rt, shamt 0 Rs Rt Rd shamt 3 6 5 5 5 5 6 Shift right arithmetic variable srav rd, rt, rs 0 rs rt rd 0 7 6 5 5 5 5 6 Shift right logical sra rd, rt, shamt 0 rs rt rd shamt 2 6 5 5 5 5 6 Shift right logical variable srlv rd, rt, rs 0 rs rt rd 0 6 6 5 5 5 5 6 Shift register rt left (right) by the distance indicated by immediate shamt or the register rs and put the result in register rd.
Dodatak C Rotate left rol rdest, rsrc1, rsrc2 pseudoinstruction Rotate right ror rdest, rsrc1, rsrc2 pseudoinstruction Rotate register rsrc1 left(right) by the distance indicated by rsrc2 and put the result in register rdest. Subtract (with overflow) sub rd, rs, rt 0 rs rt rd 0 0x22 6 5 5 5 5 6 Subtract (without overflow) subu rd, rs, rt 0 rs rt rd 0 0x23 6 5 5 5 5 6 . Put the difference of register rs and rt into register rd. Exclusive OR xor rd, rs, rt 0 rs rt rd 0 0x26 6 5 5 5 5 6 Put the logical XOR of registers rs and rt into register rd. XOR immedliate xori rt, rs, imm 0xe rs rt imm 6 5 5 16 Put the logical XOR of registers rs and the zero-extended immediate into register rt. Constant-Manipulating Instructions Load upper Immedliate lui rt, imm 0xf rs rt imm 6 5 5 16 Load the lower halfword of the immediate imm into the upper halfword of registers rt. The lower bits of the register are set to 0. Load Immediate li rdest, imm pseudoinstruction Move the immediate imm into register rdest. Comparison Instructions Set less than slt rd, rs, rt 0 rs rt rd 0 0x2a 6 5 5 5 5 6 Set less than unsigned
Zbirka zadataka iz Mikroprocesorskih sistema sltu rd, rs, rt 0 rs rt rd 0 0x2b 6 5 5 5 5 6 Set register rd to 1 if register rs is less than rt, and to 0 otherwise. Set less than Immediate slti rd, rs, imm 0xa rs rd imm 6 5 5 16 Set less than unsigned Immediate sltiu rd, rs, imm 0xb rs rd imm 6 5 5 16 Set register rd to 1 if register rs is less than the sign-extended immediate, and to 0 otherwise. Set equal seq rdest, rsrc1, rsrc2 pseudoinstruction Set register rdest to 1 if register rsrc1 equals rsrc2, and to 0 otherwise. Set greater than equal sge rdest, rsrc1, rsrc2 pseudoinstruction Set greater than equal unsigned sgeu rdest, rsrc1, rsrc2 pseudoinstruction Set register rdest to 1 if register rsrc1 is greater than or equal to rsrc2, and to 0 otherwise. Set greater than sgt rdest, rsrc1, rsrc2 pseudoinstruction Set greater than unsigned sgtu rdest, rsrc1, rsrc2 pseudoinstruction Set register rdest to 1 if register rsrc1 is greater than rsrc2, and to 0 otherwise. Set less than equal sle rdest, rsrc1, rsrc2 pseudoinstruction Set less than equal unsigned sleu rdest, rsrc1, rsrc2 pseudoinstruction Set register rdest to 1 if register rsrc1 is less than or equal to rsrc2, and to 0 otherwise. Set not equal sne rdest, rsrc1, rsrc2 pseudoinstruction Set register rdest to 1 if register rsrc1 is not equal to rsrc2, and to 0 otherwise. Branch Instructions
Dodatak C Branch instructions use a signed 16-bit instruction offset field; hence they can jump 2**15 - 1 instructions (not bytes) forward or 2**15 instructions backwards. The jump instruction contains a 26-bit address field. In the descriptions below, the offsets are not specified. Instead, the instructins branch to a label. This is the form used in most assembly language programs because the distance between instructions is difficult to calculate when pseudoinstructions expand into several real instructions. Branch Instruction b label pseudoinstruction Unconditionally branch to the instruction at the label. Branch coprocessor z true bczt label 0x1z 8 1 Offset 6 5 5 16 Branch coprocessor z false bczf label 0x1z 8 0 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if z's condition flag is true (false). z is 0, 1, 2, or 3. The floating-point unit is z = 1. Branch on equal beq rs, rt, label 4 rs rt Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs equals rt. Branch on greater than equal zero bgez rs, label 1 rs 1 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is greater than or equal to 0. Branch on greater than equal zero and link bgezal rs, label 1 rs 0x11 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is greater than or equal to 0. Save the address of the next instruction in register 31. Branch on greater than zero bgtz rs, label 7 rs 0 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is greater than 0. Branch on less than equal zero blez rs, label 6 rs 0 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is less than or equal to 0.
Zbirka zadataka iz Mikroprocesorskih sistema Branch on less than equal link bltzal rs, label 1 rs 0x10 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is less than 0. Save the address of the next instruction in register 31. Branch on less than zero bltz rs, label 1 rs 0 Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is less than 0. Branch on not equal bne rs, label 5 rs rt Offset 6 5 5 16 Conditionally branch the number of instructions specified by the offset if register rs is not equal to rt. Branch on equal zero beqz rsrc, label pseudoinstruction Conditionally branch to the instructions at the label if rsrc1 equals 0. Branch on greater than equal bge rsrc1, rsrc2, label pseudoinstruction Branch on greater the equal unsigned bgeu rsrc1, rsrc2, label pseudoinstruction Conditionally branch to the instruction at the label if register rsrc1 is greater than or equal to rsrc2. Branch on greater than bgt rsrc1, rsrc2, label pseudoinstruction Branch on greater then unsigned bgtu rsrc1, rsrc2, label pseudoinstruction Conditionally branch to the instruction at the label if register rsrc1 is greater than rsrc2. Branch on less than equal ble rsrc1, rsrc2, label pseudoinstruction Branch on less then equal unsigned bleu rsrc1, rsrc2, label pseudoinstruction Conditionally branch to the instruction at the label if register rsrc1 is less than or equal to rsrc2. Branch on less than blt rsrc1, rsrc2, label pseudoinstruction
Dodatak C Branch on less than unsigned bltu rsrc1, rsrc2, label pseudoinstruction Conditionally branch to the instruction at the label if register rsrc1 is less than rsrc2. Branch on not equal zero bnez rsrc, label pseudoinstruction Conditionally branch to the instruction at the label if register rsrc is not equal to 0. Jump Instructions Jump J target
2 target 6 26
Unconditionally jump to the instruction at target. Jump and link jal target 3 target 6 26 Unconditionally jump to the instruction at target. Save the address of the next instruction in register rd. Jump and link register jalr rs, rd 0 rs 0 rd 0 9 6 5 5 5 5 6 Unconditionally jump to the instruction whose address is in register rs. Save the address of the next instruction in register rd (which defaults to 31). Jump register jr rs 0x0 rs 0 0x8 6 5 16 5 Unconditionally jump to the instruction whose address is in register rs. Load address la rdest, address pseudoinstruction Load computed address-not the contents of the location-into register rdest. Load byte lb rt, address 0x20 rs rt Offset 6 5 5 16 Load unsigned byte lbu rt, address 0x24 rs rt Offset 6 5 5 16
Zbirka zadataka iz Mikroprocesorskih sistema Load the byte at address into register rt. The byte is sign-extended by lb, but not by lbu. Load halfword lh rt, address 0x21 rs rt Offset 6 5 5 16 Load unsigned halfword lhu rt, address 0x25 rs rt Offset 6 5 5 16 Load the 16-bit quantity (halfword) at address into register rt. The halfword is sign-extended by lh, but not by lhu. Load word lw rt, address 0x23 rs rt Offset 6 5 5 16 Load the 32-bit quantity (word) at address into register rt. Load word coprocessor lwcz rt, address 0x3z rs rt Offset 6 5 5 16 Load the word at address into register rt of coprocessor z (0-3). The floating-point unit is z = 1. Load word left lwl rt, address 0x22 rs rt Offset 6 5 5 16 Load word right lwr rt, address 0x23 rs rt Offset 6 5 5 16 Load the left (right) bytes from the word at the possibly unaligned address into register rt. Load doubleword ld rdest, address pseudoinstruction Load the 64-bit quantity at address into register rdest and rdest + 1. Unaligned load halfword ulh rdest, address pseudoinstruction . Unsigned load halfword unaligned ulhu rdest, address pseudoinstruction Load the 16-bit quantity (halfword) at the possibly unaligned address into register rdest. The halfword is sign-extended by ulh, but not ulhu.
Dodatak C Unsigned load word ulw rdest, address pseudoinstruction Load the 32-bit quantity (word) at the possibly unaligned address into register rdest. Store Instructions Store byte sb rt, address 0x28 rs rt Offset 6 5 5 16 Store the low byte from register rt at address. Store halfword sh rt, address 0x29 rs rt Offset 6 5 5 16 Store the low halfword from register rt at address. Store word sw rt, address 0x2b rs rt Offset 6 5 5 16 Store the word from register rt at address. Store word coprocessor swcz rt, address 0x3(1-z) rs rt Offset 6 5 5 16 Store the word from register rt of coprocessor z at address. The floating point unit is z = 1. Store word left swl rt, address 0x2a rs rt Offset 6 5 5 16 Store word right swr rt, address 0x2e rs rt Offset 6 5 5 16 Store the left (right) bytes from register rt at the possibly unaligned address. Store doubleword sd rsrc, address pseudoinstruction Store the 64-bit quantity in registers rsrc and rsrc + 1 address. Unaligned store halfword ush rsrc, address pseudoinstruction Store the low halfword from register rsrc at the possibly unaligned address.
Zbirka zadataka iz Mikroprocesorskih sistema Unaligned store word usw rsrc, address pseudoinstruction Store the word from register rsrc at the possibly unaligned address. Data Movement Instructions Move move rdest, rsrc pseudoinstruction Move register rsrc to rdest. Move from hi mfhi rd 0 0 rd 0 0x10 6 10 5 5 6 Move from lo mflo rd 0 0 rd 0 0x12 6 10 5 5 6 The multiply and divide unit produces its result in two additional registers, hi and lo. These instructions move values to and from these registers. The multiply, divide, and remainder pseudoinstructions that make this unit appear to operate on the general registers move the result after the computation finishes. Move the hi (lo) register to register rd. Move to hi mthi 0 rs 0 0x11 6 5 15 6 Move to lo mtlo 0 rs 0 0x13 6 5 15 6 Move register rs to the hi (lo) register . Move from coprocessor z mfcz rt, rd 0x1z 0 rt rd 0 6 5 5 5 11 Coprocessors have their own register sets. These instructions move values between these registers and the CPU's registers. Move coprocessor z's register rd to CPU register rt. The floating-point unit is coprocessor z = 1. Move double from coprocessor 1 mfcl, d redest, frsrc1 pseudoinstruction Move floating-point registers frsrc1 and frsrc1 + 1 to CPU registers rdest and rdest + 1. Move to coprocessor z mtcz rt, rd 0x1z 4 rt rd 0
Dodatak C 6 5 5 5 11 Move CPU register rt to coprocessor z's register rd. Floating-Point Instructions The MIPS has a floating-point coprocessor (numbered 1) that operates on single precision (32-bit) and double precision (64-bit) floating-point numbers. This coprocessor has its own registers, which are numbered $f0-$f31. Because these registers are only 32 bits wide, two of them are required to hold doubles, so only floating-point registers with even number can hold double precision values. Values are moved in or out of these registers one word (32 bits) at a time by lwc1, swc1, mtc1, and mfc1 instrucrtions described above or by the l.s, l.d, s.s, and s.d pseudoinstructions described below. The flag set by floating-point comparison operations is read by the CPU with its bclt and bclf instructions. In the actual instructions below, bits 21-26 are 0 for single precision and 1 for double precision. In the pseudoinstructions below, fdest is a floating-pooint register (e.g., $f2). Floating-point absolute value double abs.d fd, fs 0x11 1 0 fs fd 5 6 5 5 5 5 6 Floating-point absolute value single abs.s fd, fs 0x11 0 0 fs fd 5 6 5 5 5 5 6 Compute the absolute value of the floating-point double (single) in register fs and put it in register fd. Floating-point addition double add.d fd, fs, ft 0x11 1 ft fs fd 0 6 5 5 5 5 6 Floating-point addition single add.s fd, fs, ft 0x11 0 ft fs fd 0 6 5 5 5 5 6 Compute the sum of the floating-point double (single) in register fs and ft and put it in register fd. Compare equal double c.eq.d fs, ft 0x11 1 ft fs fd FC 2 6 5 5 5 5 2 4 Compare equal single c.eq.s fs, ft 0x11 0 ft fs fd FC 2 6 5 5 5 5 2 4 Compare the floating-point double in register fs against the one in ft and set the floating-point condition flag true if they are equal. Use the bclt or bclf instructions to test the value of this flag. Compare less than equal double c.le.d fs, ft 0x11 1 ft fs fd FC 2
Zbirka zadataka iz Mikroprocesorskih sistema 6 5 5 5 5 2 4 Compare less than equal single c.le.s fs, ft 0x11 0 ft fs fd FC 2 6 5 5 5 5 2 4 Compute the floating-point double in register fs against the one in ft and set the floating-point condition flag true if the first is less than or equal to the second. Use the bclt or bclf instructions to test the value of this flag. Compare less than double c.lt.d fs, ft
0x11 1 ft fs 0 FC 0xc 6 5 5 5 5 2 4
Compare less than single c.lt.s fs, ft
0x11 0 ft fs 0 FC 0xc 6 5 5 5 5 2 4
Compute the floating-point double in register fs against the one in ft and set the condition flag true if the first is less than the second. Use the bclt or bclf instructions to test the value of this flag. Convert single to double cvt.d.s fd, fs 0x11 1 0 fs fd 0x21 6 5 5 5 5 6 Convert integer to double cvt.d.w fd, fs 0x11 0 0 fs fd 0x21 6 5 5 5 5 6 Convert the single precisioion floating-point number or integer in register fs to a double precision number and put it in register fd. Convert double to single cvt.s.d fd, fs 0x11 1 0 fs fd 0x20 6 5 5 5 5 6 Convert integer to single cvt.s.w fd, fs 0x11 0 0 fs fd 0x20 6 5 5 5 5 6 Convert the double precisioion floating-point number or integer in register fs to a single precision number and put it in register fd. Convert double to integer cvt.w.d fd, fs 0x11 1 0 fs fd 0x24 6 5 5 5 5 6 Convert single to integer cvt.w.s fd, fs 0x11 0 0 fs fd 0x24
Dodatak C 6 5 5 5 5 6 Convert the double or single precisioion floating-point number in register fs to an integer and put it in register fd. Floating-point divide double div.d fd, fs, ft 0x11 1 ft fs fd 3 6 5 5 5 5 6 Floating-point divide signle div.s fd, fs, ft 0x11 0 ft fs fd 3 6 5 5 5 5 6 Compute the quotient of the floating-point doubles (singles) in registers fs and ft and put it in register fd. Load floating-point double l.d fdest, address pseudoinstruction Load floating-point single l.s fdest, address pseudoinstruction Load the floating-point double (single) at address into register fdest. Move floating-point double mov.d fd, fs 0x11 1 0 fs fd 6 6 5 5 5 5 6 Move floating-point single mov.s fd, fs 0x11 0 0 fs fd 6 6 5 5 5 5 6 Move the floating-point double (single) from register fs to register fd. Floating-point multiply double mul.d fd, fs, ft 0x11 1 ft fs fd 2 6 5 5 5 5 6 Floating-point multiply single mul.s fd, fs, ft 0x11 0 ft fs fd 2 6 5 5 5 5 6 Compute the product of the floating-point dobule (single) in registers fs and ft and put it in register fd. Negate double neg.d fd, fs 0x11 1 ft fs fd 7 6 5 5 5 5 6 Negate single
Zbirka zadataka iz Mikroprocesorskih sistema neg.s fd, fs 0x11 0 ft fs fd 7 6 5 5 5 5 6 Negate the floating-point double (single) in register fs and put it in register fd. Store floating-point double s.d fdest, address pseudoinstruction Store floating-point single s.s fdest, address pseudoinstgruction Store the floating-point double (single) in register fdest at address. Floating-point subtract double sub.d fd, fs, ft 0x11 1 ft fs fd 1 6 5 5 5 5 6 Floating-point subtract single sub.s fd, fs, ft 0x11 0 ft fs fd 1 6 5 5 5 5 6 Compute the difference of the floating-point double (single) in registers fs and ft and put it in register fd. Exception and Interrupt Instructions Return from exception rfe 0x10 1 0 0x20 6 1 19 6 Restore the Status register System call syscall 0 0 0xc 6 20 6 Register $v0 contains the number of the system call. Break break 0 code 0xd 6 20 6 Cause exception code. Exception 1 is reserved for the debugger. No operation nop 0 0 0 0 0 0 6 5 5 5 5 6 Do nothing.
DODATAK D
D-1
D. Dodatak
APPENDIX D: ASCII CODES
Ctrl Dec Hex Ch Code Dec Hex Ch Dec Hex Ch Dec He
x Ch
^@ 0 00 NUL 32 20 64 40 @ 96 60 ^A 1 01 SOH 33 21 ! 65 41 A 97 61 a ^B 2 02 STX 34 22 " 66 42 B 98 62 b ^C 3 03 ♥ ETX 35 33 # 67 43 C 99 63 c ^D 4 04 ♦ EOT 36 24 $ 68 44 D 100 64 d ^E 5 05 ♣ ENQ 37 25 % 69 45 E 101 65 e ^F 6 06 • ACK 38 26 & 70 46 F 102 66 f ^G 7 07 BEL 39 27 ' 71 47 G 103 67 g ^H 8 08 BS 40 28 ( 72 48 H 104 68 h ^I 9 09 HT 41 29 ) 73 49 I 105 69 i ^J 10 0A LF 42 2A * 74 4a J 106 6A j ^K 11 0B VT 43 2B + 75 4B K 107 6B k ^L 12 0C FF 44 2C ' 76 4C L 108 6C l ^M 13 0D CR 45 2D - 77 4D M 109 6D m ^N 14 0E SO 46 2E . 78 4E N 110 6E n ^0 15 0F SI 47 2F / 79 4F O 111 6F o ^P 16 10 DLE 48 30 0 80 50 P 112 70 p ^Q 17 11 DCL 49 31 1 81 51 Q 113 71 q ^R 18 12 DC2 50 32 2 82 52 R 114 72 r ^S 19 13 DC3 51 33 3 83 53 S 115 73 s ^T 20 14 DC4 42 34 4 84 54 T 116 74 t ^U 21 15 NAK 53 35 5 85 55 U 117 75 u ^V 22 15 SYN 54 36 6 86 56 V 118 76 v ^W 23 17 ERB 55 37 7 87 57 W 119 77 w ^X 24 18 ↑ CAN 56 38 8 88 58 X 120 78 x ^Y 25 19 ↓ EM 57 39 9 89 59 Y 121 79 y vZ 26 1A → SUB 58 3A : 90 5A Z 122 7A z ^[ 27 1B ← ESC 59 3B ; 91 5B 123 7B ^\ 28 1C FS 60 3C < 92 5C 124 7C | ^] 29 1D ↔ GS 61 3D = 93 5D 125 7D ^^ 30 1E s RS 62 3E > 94 5E 126 7E ~ ^_ 31 1F t US 63 3F ? 95 5F _ 127 7F
Zadatak 1
Na slici 1a) prikazan je skup instrukcija, a na slici 1b) organizacija akumulatorski-zasnovane centralno procesorske jedinice. Tip aktivnost asemblerski format komentar
AC:= M(X) LD X Load X iz M u AC
M(X):=AC ST X Store sadr`aj AC-a u M kao X
DR:=AC MOV DR,AC kopiraj sadr`aj AC u DR
prenos podataka
AC:=DR MOV AC,DR kopiraj sadr`aj DR u AC
AC:=AC+DR ADD Add DR sa AC
AC:=AC-DR SUB Sub DR od AC
AC:=AD and DR AND And DR sa AC
obrada podataka
AC:=not AC NOT komplementiraj sadr`aj AC-a
PC:=M(adr) BRA adr Jump na instrukciju ~ija je adresa adr
upravljanje tokom programa if AC=0 then
PC:=M(adr) BZ adr Jump na instrukciju
~ija je adresa adr ako je AC=0
a) skup instrukcija
Sekvencijalna upravlja~ka logika
IR IR IR
Upravlja~ki signali
Upravlja~ka jedinica CPU-a
Magistrala
DR DR
ALU
ProcesnajedinicaCPU-a
Ka M iU/I uredjajima
b)organizacija centralno procesorske jedinice
Slika 1: Akumulatorsko zasnovana centralna procesorska jedinica
Definisati: (1) dijagram toka rada akumulatorske zasnovane CPU (2) ako je upravljanje izvedeno kao direktno (hardwired) koristei tehniku “one hot”, projektovati logiku upravlja~ke jedinice.
Odgovor 1) Da bi se mogla projektovati upravlja~ka jedinica neophodno je prvo da se izvri identifikacija relevantnih upravlja~kih akcija (mikroopercija) na osnovu kojih hardver maine procesira instrukcije. Dijagram toka ( flowchart) koji opisuje ponaanje CPU-a prikazan je na slilci 2.
DR:=AC AC:=DR M(AR):=DR AC:=DR AC:=AC+DR AC:=AC-DR AC=ACandDR AC:=not.AC PC:=DR(ADR)
DR:=M(AR) DR:=AC
AR:=DR(X) AR:=DR(X)
AC=0?
neda
MOV AC,DRMOV DR,AC ADD SUB AND NOT BZ adrBRA adrSTXLDX
S0
S0
S1
S2
S3
S5 S5
S5S5
S5 S7 S6 S5 S8 S9 S10 S11 S12
PC:=PC+1 IR:=DR(OP)
DR:=M(AR)
AR:=PC
CPUaktivan
Kraj
Po~etak
ne
da
Dekodiranje IR-a
Slika 2 Dijagram toka akumulatorski zasnovane CPU
Mikrooperacije koje su prezentirane na dijagramu toka implicitno odredjuju upravlja~ke ta~ke kod interne strukture CPU-a. Na slici 3b) prikazan je pogodan skup upravlja~kih signala CPU-a i definisane su uloge ovih upravlja~kih signala, a na slici 3a) prikazane su pozicije (lokacije delovanja) odgovarajuih upravlja~kih ta~aka. Upravlja~ke linije se mogu svrstati u sledee tri osnovne grupe: • izbor funkcije c2, c9, c10, c11, c12 • upravljanje memorijom c1, c8 • usmeravanje podataka c0, c3, c4, c5, c6, c7
Sekvencijalna upravlja~ka logika
Upravlja~ki signali
IR AR PC
C4
C2
C3
C0
C5
Memorija iU/I podsistem
ALU
DR AC
C6C7C9C10C11C12
(a)
C8
C1
Magistrala
Upravlja~ki signali upravlja operacijomc0 AR:=PCc1 DR:=M(AR)c2 PC:=PC+1c3 PC:=DR(ADR)c4 IR:=DR(OP)c5 AR:=DR(ADR)c6 DR:=(AC)c7 AC:=DRc8 M(AR):=DRc9 AC:=AC+DRc10 AC:=AC-DRc11 AC:=AC and DRc12 AC:=not AC
(b)
Slika 3 Definisanje upravlja~kih ta~ka i upravlja~kih signala kod akumulatorski zasnovane CPU
2) Globalna organizacija upravlja~ke jedinice sa direktnim upravljanjem koja implementira dijagram toka sa slike 2 data je na slici 4. Usvojeno je da se opkod instrukcije koji se ~uva u registru IR dekodira u 10 signala, jedan po instrukciji. Svih deset izlaza dekodera (LD, ST,...,BZ), kao i signali Po~etak i status AC = 0 se dovode na ulaz sekvencijalne upravlja~ke logike koja na ovom izlazu generie upravlja~ke signale c0:c12. Blok sekvencijalna upravlja~ka logika je izveden kao kona~ni automat (FSM) koja ima 12 primarnih ulaza i 13 primarnih izlaza. Broj internih stanja FSM-a se mo`e odrediti na osnovu slike 2. Ako se svakom razli~itom bloku dodeli razli~ito stanje tada postoje ukupno 13 stanja, ozna~enih na dijagramu toka kao S0:S12. Implementacija maine koja ima 13 razli~itih stanja klasi~nom one-hot metodom je direktna. Potrebno je ugraditi 13 flip-flopova.
Kona~ni automat
IR
LD ST BZ
Dekoder
Statusni signal (AC=0)
Po~etak COC1C2
C12
Upravlja~ki signali
Instrukcioni registar
4
Slika 4 Organizacija upravlja~ke jedinice kod akumulatorski zasnovanog CPU-a
Broj stanja kona~nog automata definisan dijagramom toka sa slike 2 se mo`e redukovati, a da se pri tome i dalje sa~uva jednostavnost one-hot metoda. Naime najvei broj stanja S4:S12 prikazan na slici 2 a koji va`i za fazu izvrenja instrukcije se mo`e prepoznati od strane (karakteristi~an je i za) opkôd signale LD i ST koji su primarni ulazi FSM-a. To zna~i da je mogue izvriti grupisanje stanja tako da se dobije manji skup a da su pri tome izlazne akcije (upravlja~ki signali koje oni aktiviraju) odredjene od strane primarnih ulaza FSM-a kao i njegovih stanja. Drugim re~ima, mogue je zameniti stanja faze izvrenja pomou tri stanja S4*, S5* i S6* koja se od strane instrukcija Load i Store izvravaju u sekvenci, ali koja se za ostale instrukcije redukuju na jedno stanje S4*. Mogue je takodje redukovati fazu pribavljanja instrukcije na sekvencu od tri stanja ako ase S0 i S1 kombinuju u jedno stanje S1* tako da, FSM obavlja akciju AR:=PC nezavisno od toga da li je aktivan ili neaktivan. Ponaanje ovakve maine se mo`e opisati STG-om (state transition graph) koji je prikazan na slici 5. Na ovom grafu prikazani su samo signali koji direktno uti~u illi na kojima se direktno uti~e od strane stanja. Ilustracije radi STG ukazuje da ako smo u stanju S5*, tada se vri prelaz u stanje S6* (pri) kada je izlaz c1 = 1 (jedini aktivan izlaz) ako je tekua instrukcija tipa LD. Ovaj dogodjaj je ozna~en kao LD/c1 a prelaz sa S5* na S6* usmerenim potegom. Ako je tekua instrukcija ST, tada samo c6 postaje aktivan to je ozna~eno kao ST/c6. Ne postoje drugi tipovi instrukcija koji dozvoljavaju da FSM predje u stanje S6*. Kada je prelaz iz stanja Si u Sj automatski, a to zna~i da je prelaz nezavisan od primarnih ulaznih signala, kod prezentacije STG-a koristi se oznaka Ø/Oj.
S3
S4*
S5*
S2
S1*
S6*
Po~etak/co
Po~etak/c0
Æ/C1
Æ/C2+C4
(LD or ST)/c5
LD/c1;ST/c6
MOV/c6;MOV/c7;ADD/c9;SUB/c10;AND/c11;NOT/c12;BRA/c3;BZ and (AC = 0)/c3
BZ and (AC = 0)/ Æ
Slika 5 STG kod akumulatorsko-zasnovane CPU
Kona~ni automat se mo`e implementirati pomou est D flip-flopova, pri ~emu izlaz Di i-tog flip flopa ~ini hot promenljivu stanja Si tj. Si*. Na osnovu slike 5 izvodi se sledei skup logi~kih jedna~ina: D1*=D1⋅ etak~Po +D4⋅(MOV1+MOV2+ADD+SUB+AND+NOT+BRA+BZ)+D6 D2*=D1⋅Po~etak D3*=D2
D4*=D3
D5*=D4⋅(LD+ST) D6*=D5
Jedna~ine koje se odnose na definsanja stanja izlaznih signala se takodje izvode shodno prezentaciji datoj na slici 5. c0=D1 c1=D2+D5⋅LD c2=c4=D3 c3=D4⋅(BRA+BZ⋅(AC=0)) c5=D4⋅(LD+ST) c6=D4⋅MOV1+D5⋅ST c7=D4⋅MOV2+D6⋅LD c8=D6⋅ST c9=D4⋅ADD c10=D4⋅SUB c11=D4⋅AND c12=D4⋅NOT Na osnovu prethodnih jedna~ina mo`e se sintetizovati logika upravlja~ke jedinice koja je prikazana na slici 6.
Slika 6 One-hot implementacija upravlja~ke jedinice CPU-a shodno STG-u sa slike 5.
Test pitanje 1
Osnovne dve klju~ne karakteristike velikog broja ranijih ra~unara su bile sledee: 1) mali skup instrukcija, ali arhitekture nisu bile tipa Load/Store, tj. pristup memoriji nije bio ograni~en da se obavlja samo od strane ove dve instrukcije. 2) mali broj internih registara, tj znatno manji u odnosu na RISC procesore. Skup instrukcija za ovakav tip CPU-a prikazan je na slici 7 a njegova organizacija na slici 1b) Tip aktivnost asemblerski format komentar
AC:= M(X) LD X Puni X iz memorije u AC prenos podataka
M(X):=AC ST X Smeta sadr`aj AC-a u M kao X
AC:=AC+M(X) ADD X Sabira X sa AC
AC:=AC-M(X) SUB X Oduzima X od AC
AC:=AC and M(X)
AND X AND X sa AC
obrada podataka
AC:=not AC NOT komplementiraj sadr`aj AC-a
PC:=M(adr) BRA adr Jump na instrukciju ~ija je adresa adr
upravljanje tokom programa if AC=0 then
PC:=M(adr) BZ adr Jump na instrukciju ~ija je adresa
adr ako je AC+0
Slika 7 Modifikovani skup instrukcija akumulatorski zasnovane maine sa Slike 1b)
Instrukcije za obradu podataka sada se obraaju u glavnoj memoriji M, a registar DR nije vie vidljiv od strane programa (on se ipak i dalje koristi za pristup memoriji). Konstruisati dijagram toka modifikovane maine sli~an onom prikazanom na slici 2.
Odgovor Dijagram toka modifikovane maine prikazan je na slici 8. Izmene u dijagramu toka sa slike 8 u odnosu na onaj sa slike 2 sastoje se u sledeem:
i) kod faze izvrenja instrukcija ADD,SUB i AND dodat je korak koji se odnosi na pristup memoriji (trajanja dva taktna intervala).
ii) ne postoje vie instrukcija tipa MOV.
AC:=DR M(AR):=DR AC:=AC+DR AC:=AC-DR AC=ACandDR AC:=not.AC PC:=DR(ADR)
AC=0?
neda
ST XLD X ADD X SUB X AND X NOT BZ adrBRA adr
PC:=PC+1 IR:=DR(OP)
DR:=M(AR)
AR:=PC
CPUaktivan
Kraj
Po~etak
ne
da
Dekodiranje IR-a
DR:=M(AR)
AR:=DR(X)
DR:=AC
AR:=DR(X)
DR:=M(AR)
AR:=DR(X)
DR:=M(AR)
AR:=DR(X)
DR:=M(AR)
AR:=DR(X)
Slika 8 Dijagram toka modifikovane akumulatorsko-zasnovane CPU
Zadatak 2
Neka je akumulatorski zasnovana CPU sa slike 1 proirena na taj na~in da u svom repertoaru sadr`i i sledee instrukcije:
a) pomeranje ulevo - LSH, koja implementira operaciju AC:=AC[n-2:0].0
b) sabiranje sa prenosom - ADC kojom se izra~unava AC+DR+CY, gde je CY novi marker prenosa koji se setuje (resetuje) uvek kada se kao rezultat aritmeti~ke instrukcije javi (ne javi) prenos.
c) preskakanje jedne instrukcije ako postoji prenos (skip-on-carry) - SKC uzrokuje da CPU presko~i izvrenje naredne instrukcije samo ako je CY=1.
1) Pokazati promene koje je potrebno u~initi na dijagramu toka sa slike 2 kako bi mogle da se inkorporiraju nove instrukcije.
2) Specificirati minimalni skup novih upravlja~kih signala koje treba dodati u listi sa Slike 3b) kako bi se podr`avao rad ove tri nove instrukcije.
Odgovor Neophodne modifikacije prkazane su na slici 9. Marker prenosa CY se tretira kao jednobitno proirenje kod pomeranja sadr`aja akumulatora ulevo. Prethodne instrukcije ADD i SUB moraju se modifikovati tako da postavljaju izlazni prenos u marker bit CY. Za implementaciju instrukcija ADC i LSH potrebna su dva nova upravlja~ka signala c13 koji e dovoditi CY kao ulaz u ALU, kod operacije sabiranja, i c14 koji e dozvoljavati pomeranje ulevo sadr`aja akumulatora AC, koji sada treba da bude izveden kao pomera~ki registar sa paralelnim upisom i paralelnim ~itanjem. Instrukcija SKC se mo`e implementirati ako se PC inkrementira sa sadr`ajem CY. Za SKC se koristi stari upravlja~ki signal c2.
CY.AC:=AC+DR CY.AC:=AC-DR CY.AC:=AC+DR +CY AC:=AC(n-2:0).0 PC:=PC+1
CY=17
Ne
Da
SKCADD SUB ADC LSH
Deklodiranje IR-a
Slika 9 Promene u dijagramu toka modifikovanog CPU-a.
Zadatak 3
Razmotrimo akumulatorski-zasnovanu CPU definisanu na slikama 1-4 (Zadatak 1). Neka upravlja~ka jedinica CPU-a mora da ima 13 internih stanja S0:S12 definisanih na slici 2 a implementirana je kao Moore-ov automat koristei one-hot metodu pomou D flip-flopova i NAND kola. Dodeliti hot promenljivu Di stanju Si i odrediti potpuni skup jedna~ina FSM-a koje se odnose na naredno-stanje i izlaze u formi suma-proizvoda (SOP-sum-of-products). Odrediti broj NAND kola (uklju~ujui i invertore) potrebnih da se realizuje FSM ako usvojimo da je za D flip-flop potrebno pet NAND kola.
Odgovor
Da bi reili problem usvojiemo sledee: a) Signal Po~etak ukazivae da je CPU aktivan; b) Kada registar IR sadr`i opkôd INST, uslov INST, koji odgovara izlazu dekodera instrukcija, je istinit (True); c) Instrukcije MOV DR,AC i MOV AC,DR imaju opkôdove MOV1 i MOV2, respektivno.
Logi~ke jedna~ine koje se odnose na naredno-stanje FSM-a se mogu direktno napisati na osnovu sadr`aja slike 2:
D0+=D0⋅ etak~Po +D3⋅BZ⋅AC+D5+D6⋅MOV1+D7+D8+D9+D10+D11+D12 D1+=D0⋅Po~etak D2+=D1+D4⋅LDX D3+=D2⋅ LDX D4+=D3⋅LDX+D3⋅STX D5+=D4⋅LDX+D3⋅MOV2 D6+=D4⋅STX+D3⋅MOV1 D7+=D6⋅STX D8+=D3⋅ADD D9+=D3⋅SUB D10+=D3⋅AND D11+=D3⋅NOT D12+=D3⋅BRA+D3⋅BZ⋅ AC Usvojiemo da su upravlja~ki signali sa slike 3b) svi izlazni signali generisani od strane FSM-a, i da je svaki od njih aktivan kada se udje u odgovarajue stanje na dijagramu toka. Na primer c0 upravlja izvrenjem operacije AR:=PC, tj akcija pridru`ena stanju S1. Logi~ke jedna~ine koje se odnose na izlaze FSM-a su sledee
c0=D1 c4=D3 c8=D7 c12=D11 c1=D2 c5=D4 c9=D8 c2=D3 c6=D6 c10=D9 c3=D12 c7=D5 c11=D10 Da bi procenili broj NAND kola usvojiemo da D flip-flopovi koji predstavljaju Si generiu Di samo u pravoj, a ne u komplementarnoj, formi. Svaka od jedna~ina SOP tipa (D0
+,....,D12+) oblika je
P1+P2+...+Pk, a u zahtevanoj SOP (NAND-NAND) implementaciji zahteva k+1 NAND kolo, ~iji se fan-in nalazi u opsegu od jedan (invertor) do deset. Ukupan broj logi~kih kola da bi implementirali jedna~ine koje se odnose na D0
+....,D12+ iznosi 40. Na izlazima D flip-flopova nije potrebno povezivati
dodatna logi~ksa kola. Imajui u vidu da je ukupan broj stanja 13, a da konkretno reenje FSM-a tipa one-hot zahteva 13 flip-flopova, imaemo 13*5=65 NAND kola za realizaciju izlaza automata. Ukupan broj NAND kola koje treba ugraditi u automat jednak je 40+65=105.
Test pitanje
Postoje dva tipa upravlja~kih jedinica koje se koriste kod digitalnih sistema, jedna je za programibilne sisteme a druga za neprogramibilne sisteme. Ukazati na njihove osnovne razlike.
Odgovor Kod programibilnog sistema deo ulaza procesora ~ini sekvenca instrukcija. Svaka instrukcija specificira: operaciju koju sistem treba da obavi, koji operandi se koriste od strane te operacije, gde treba smestiti rezultate operacije, i u odredjenim situacijama, koju instrukciju izvriti kao narednu. Kod programibilnih sistema, instrukcije su obi~no smetene u memoriji, koja mo`e biti RAM ili ROM tipa. Da bi izvrio sekvencu instrukcija neophodno je adresirati memoriju u kojoj se nalaze (~uvaju) instrukcije. Adresu generie registar nazvan programski broja~ PC. Kao to i samo ime asocira PC ima ugradjenu logiku koja obezbedjuje funkciju brojanja. ^esto u sekvenci instrukcija se javlja potreba za promenom redosleda izvrenja operacija. U tom cilju koriste se odluke koje se zasnivaju na stanju
statusne informacije, pa je i to razlog da PC pored inkrementiranja treba da ima i ugradjenu mogunost paralelnog punjenja. To zna~i da kod programibilnih sistema upravlja~ka jedinica sadr`i: PC, logiku za odlu~ivanje, i logiku za interpretaciju instrukcija. Izvrenje instrukcije podrazumeva aktiviranje neophodne sekvence mikrooperacija u stazi podataka koja je potrebna da bi se obavila operacija specificirana od strane instrukcije.
Kod neprogramibilnih sistema upravlja~ka jedinica nije zadu`ena za pribavljanje instrukcije iz memorije, a takodje nije zadu`ena za sekvenciranje izvrenja ovih instrukcija. Ne postoji PC ili sli~an registar kod ovakvih sistema. Umesto toga, upravlja~ka jedinica definie koje operacije treba da se obave, a sekvenca ovih operacija odredjena je samo na osnovu ulaza u tu mainu i stanja statusnih bitova te maine.
Tipi~an primer programibilnog digitalnog sistema je ra~unar koji ima ugradjen, recimo, mikroprocesor kao CPU, a neprogramibilni digitalni sistem se obi~no realizuje kao kona~ni automat, tj. maina sa kona~nim brojem stanja - FSM, kakav je bo automat za prodaju tetrapak sokova ~iji smo rad analizirali.
Test pitanje
[ta je to ASM (Algorithmic State Machine) dijagram
Odgovor Zadatak koji se odnosi na obradu podataka kod digitalnih sistema, mo`e se definisati operacijama tipa registarski prenos, koji je kontrolisan od strane mehanizma za sekvenciranje. Ovaj tip zadatka mo`e se specificirati kao hardverski algoritam koga ~ini kona~ni broj proceduralnih koraka pomou kojih se obavlja obrada podataka. Najizazovniji i najkreativniji deo digitalnog sistema odnosi se na formulaciju hardverskih algoritama pomou kojih se posti`u `eljeni ciljevi. Hardverski algoritam se mo`e koristiti kao baza definisanje, kako staze-podataka, tako i upravlja~ke jedinice sistema.
Dijagram toka (stanja) je pogodno sredstvo za specifikaciju sekvence proceduralnih koraka i puteva odluke kod staze podataka. Realno posmatrano veoma je teko opisivati slo`enije neprogramibilne digitalne sisteme, kakvi su FSM-ovi, pomou dijagrama stanja, jer se pomou dijagrama ne sagledava tako dobro sve ono to se `eli predstaviti, tj. da se mo`e nedvosmisleno predstaviti korektno definisana sekvenca akcija (koraka) koja na osnovu ulaznih podataka generie `eljenu sekvencu (izlaznih) akcija. Drguim re~ima, nedostatak dijagrama stanja je da on ne mo`e jednozna~no da obuhvati sve ono to se `eli ostvariti kompleksnim (slo`enim) dijagramom toka, tako da je izuzetkom opisa jednostavnih FSM-ova, za slo`enija tehni~ka reenja dijgrami toka ne nude prihvatljiva reenja. Dijagram toka hardverskog algoritma mora da poseduje specijalne karakteristike koje ga bli`e (~vre) povezuju sa hardverom koji implementira taj algoritam. Od skoro projektanti hardvera koriste alternativne prezentacije za opis ponaanja hardvera. Jedna od takvih prezentacija, koja ima grafi~ku formu, je ASM dijagram. (ASM dijagram definie algoritme za hardver digitalnog tipa, pri ~emu je pojam kona~ni automat u ovom kontekstu korien kao pojam za sekvencijalno kolo).
ASM dijagram veoma podsea na konvencionalni dijagram toka, ali je njegova interpretacija neto druga~ija. Naime, kod konvencionalnog dijagrama toka proceduralni koraci i putevi odluke se opisuju tako da se ne sagledava uticaj vremenske komponente, tj. trenutak kada se odredjeni dogadjaj javio. Nasuprot tome ASM dijagram se razlikuje po tome to: pravi razliku izmedju dogadjaja, tj. uzima u obzir sekvencu dogadjaja, kao i vremenski odnos izmedju stanja. Ovo je veoma va`an aspekt koji se odnosi na projektovanje upravlja~ke jedinice kao i akcije koje se deavaju u toku tih stanja kao odziv na pobudne taktne impulse.
Nakon formulacije ASM dijagrama FSM-a lako je izvriti konverziju u dijagram stanja ili tabelu stanja. FSM model kod koga su svakom stanju dodeljeni iskazi nazivamo FSMD (FSM with
Datapath). Za FSMD ka`emo da u potpunosti mo`e da specificira ponaanje bilo kog digitalnog sistema.
Test pitanje
Kakvu notaciju koristi ASM?
Odgovor Kao to je prikazano na slici 1 ASM dijagram mo`e da predstavi FSMD pomou sledee ~etiri osnovne komponente (elemenata):
a) blok stanja (state box)
b) blok odluke (decision block),
c) izlazni blok (output box ili condition box)
d) ASM blok
Napomena: Ovo zna~i da ASM dijagram ~ine elementi a), b) i c).
kodstanja
imestanja
Lista iskaza
ulaz >> 2
X=max (t1,t2)
S6 220
Blokstanja
UslovFT
Broja~=001
broja~=broja~ +1suma=suma + X(i)
ASM blok
Izlazni blok
uslovnaizlazna lista
01
FT
T F
suma=0
uplata<200
novac=kasa
Slika 1 ASM dijagrami
Blok-stanje - ozna~ava stanje u ASM dijagramu. Blok stanje, u stazi podataka, ~ini skup bezuslovnih dodela promenljivim i izlaznim portovima. Za svaku kombinaciju ulaza postoji jedinstveni i
nedvosmisleni izlazni put iz ASM-a. Blok-stanje se identifikuje simboli~kim imenom koje se nalazi na gornjem levom kraju, binarno kodiranim stanjem na gornjem desnom kraju, i izlaznom listom signala. Izlazna lista je opisana signalima koji se potvrdjuju uvek kada se udje u to stanje. Signali mogu izra`avati rad kola u pozitivnoj ili negativnoj logici pa je zbog toga uobi~ajeno da ispred signala stoji prefiks “L.” ili “H.” koji ukazuje da li je signal aktivan kao nisko ili visoko. Mogue je takodje specificirati da li se signal potvrdjuje odmah (I), ili sa zakanjenjem (bez specijalnog prefiksa) sve dok ne naidje naredni taktni interval. Signal se ne pominje u izlaznoj listi ako ostaje nepotvrdjen. U trenutku kada se ASM prvi put crta kôd stanja nije poznat nego se on kasnije dodaje u toku procesa dodele stanja.
Blok-odluke - opisuje uslov pod kojim e FSMD, u stazi-podataka, obaviti specifi~ne akcije i selektovati naredno stanje. Uslovi se odnose na spoljne upravlja~ke ulaze ili statusne signale. Svaki blok-odluke karakteriu dva izlazna puta. Po prvom se vri grananje kada je uslov istinit (T-True), a po drugom kada je neistinit (F-False). Uobi~ajeno, na grani True, put se ozna~ava sa 1, a na grani False sa 0. Redosled po kome se blokovi-odluke kaskadno povezuju nema uticaj na odredjivanje narednog ASM bloka. Na slici 2a) i 2b) prikazani su funkcionalno ekvivalentni ASM blokovi. Kao to se vidi sa slike 2, u stanje S2 se ulazi kada su oba uslova U1 i U2 istiniti (T) ina~e se ulazi u S3.
U1
U2
001S1
1
1
0
0
S3S2
M2
M1
001S1
1
1
0
0
S3S2b)a)
Slika 2 Funkcionalno ekvivalentni ASM blokovi
Napomena: Blok-stanje je ozna~eno zaokru`enim simboli~kim imenom, kao na primer Sx
Izlazni-blok - opisuje kakve se dodele vre promenljivim ili izlazu. Dodela se vri pod specificiranim uslovima jednog ili veeg broja blokova-odluke.
ASM-blok - slo`ena struktura koju ~ine jedan blok-stanje, serijsko-paralelna mre`a blokova odluke i izlazni-blokovi. ASM-blok, kao celilna, se zaokru`uje isprekidanim linijama, a ima jedan ulazni i vie izlaznih puteva.
U optem slu~aju, ASM-dijagram ~ini vei broj medjusobno povezanih ASM-blokova, tako uredjeni da svaki izlazni put iz ASM bloka se povezuje na po jedan blok-stanja. Svaki ASM-blok opisuje operacije koje se izvravaju u toku jednog stanja.
Kada se FSMD specificira pomou ASM-dijagrama moraju se potovati sledea dva pravila:
1) Za svako stanje i skup uslova dijagram mora da definie jedinstveno naredno stanje.
2) Svaki put definisan mre`om uslovnih-blokova mora da vodi ka drugom stanju.
Na slici 3 prikazana su dva ASM dijagrama kod kojih se ne potuju prvila (1) i (2). Tako na primer, kod dijagrama sa slike 3a) ne potuje se pravilo (1), jer kada je Uslov_2 istinit, oba stanja S2 i S3 se specificiraju kao naredna. Na sli~an na~in, kod dijagrama sa slike 3b) ne potuje se pravilo (2), jer put definisan kada je Uslov_1 jednak T i Uslov_2 jednak F kreira petlju koja uklju~uje ova dva uslova umesto da vodi ka drugom stanju.
Uslov_2Uslov_1
S3S2
S1
1020
ASM-blok
Uslov_1
Uslov_2
S1ASM blok
S3S2
0 1
10
a) naredno-stanje nije dobro definisano
b) izlazni put nije dobro definisan
Slika 3 Nekorektno izvedeni ASM dijagram
ASM dijagram digitalnog logi~kog kola koje se koristi za proveru parnosti (broji broj jedinica u serijskoj ulaznoj povorci) prikazan je na slici 4a). Dijagram ~ine dva stanja Parno i Neparno, kodirana sa 0 i 1, respektivno. Ulaz je bit X, a izlaz bit Z, koji je potvrdjen kada je FSM u stanju Neparno. Na osnovu ASM dijagrama mo`e se izvesti tabela stanja-prelaza kao to je prikazano na slici 4a).
H . Z
X
X
Parno
T
TF
1
F
0
Neparno
a) ASM dijagram kola za proveru parnosti
ulaz X tekue stanje naredno stanje ulaz Z
F Parno Parno nije potvrdjen
T Parno Neparno nije potvrdjen
F Neparno Neparno potvrdjen
T Neparno Parno potvrdjen
b) tabela stanja- prelaza
Slika 4 ASM dijagram i tabela stanja-prelaza kola za proveru parnosti
Ilustracije radi, ASM dijagram FSM-a za prodaju tetrapak sokova prikazan je na slici 5
1d
01
50p
50p
50p
Op
1,5d
1d
1d
50p
reset
101d00
F
T
T
T
T
T
F
F
F
F
F
F
Op
H.Oslobodi
11
Slika 5 ASM dijagram automata za prodavanje sokova
ASM dijgram se uglavnom koristi kada se projektovanje vri ru~no. Savremeno projektovanje uglavnom podrazumeva korienje nekog CAD sredstva pomou koga se vri konverzija specifikacije dizajna u hardver. Zbog toga, umesto preko dijagrama toka FSM-ovi se naj~ee opisuju pomou jezika za opis hardvera (HDL-hardware description language). HDL opis se zatim kompajllira u implementaciju kona~nog automata koja koristi odabrane logi~ke module.
Zadatak
Nacrtati ASM-ov dijagram za sekvencijalno kolo koje e generisati izlaz Z=1 uvek kada se u ulaznoj serijskoj povorci prepozna oblik 101. Smatrati da povorku ~ini neprekidni niz bitova i da je preklapanje oblika dozvoljeno.
Odgovor ASM-ov dijagram je prikazan na slici 6. Inicijalno, kolo je u stanju S0 (000) i ~eka na prijem ulaznog bita x. Ako je x=1 kolo e postaviti izlaz na 0 i ostati u stanju S0. Uo~imo da ASM-ov blok-stanja S0 ~ine i blok-odluke ulaza x i izlazni-blok izlaza z. ASM-ov dijagram ~ine dva dodatna bloka kojima se pridru`uju stanja S1 i S2.
X
Z=0 Z=0
X
Z=0 Z=0
X
Z=0 Z=0
S2
S0 000
0
01
01
001
010S2
Slika 6 ASM dijagram za prepoznavanje serijskog bit oblika 101
Zadatak
Logika kojom se selektuje koji e se od sadr`aja registara R1 ili R2 upisati u registar R3 prikazana je na slici 1
R1
R2
S0
MUX
1
n
n
n
R0
L
set & load
Slika 1. Korienje multipleksera kod selekcije dva registra
Projektovati logiku koja e obavljati istu funkciju kao ona na slici 1 ali umesto multipleksera koristi trostati~ke bafere i dekoder.
Zadatak 1
Konvencionalna struktura staze podataka koja sve operacije obavlja za jedan taktni interval prikazana je na slici 1. Propagaciona kanjenja gradivnih blokova takodje su prikazana na slici 1.
(a) Odrediti minimalno vreme potrebno da se izvri jedna operacija
(b) Ako se staza podataka sa slike 1 u~ini proto~nom, kako je to prikazano na slici 2, odrediti maksimalnu radnu frekvenciju sa kojom se mo`e taktovati sistem.
RF polje
MUX B
Fukcionalna jedinica
MUX B 1ns
4ns
1ns
3ns
3ns
Cp
Slika 1 Konvencionalna staza podataka
Da bi se izvrila jedna mikrooperacija potrebno je ukupno vreme od 3+1+4+1+3=12 ns 12 ns ⇒83,3 MHz
WBOF
OFEX
EXWB
RF polje
MUX B
1ns
1ns
4ns
1ns
1ns
3ns
3ns
Cp
Fukcionalna jedinica
MUX D
Slika 2 Proto~no organizovana staza podataka
Trajanje jedne mikrooperacije odredjeno je u ovom slu~aju od najdu`eg kanjenja koje iznosi 1+1+3=5 ns 5ns =200MHz
Napomena: Odgovor predstavlja rafirani deo
Zadatak
Stazu podataka ~ine pet gradivnih blokova, A do E, medjusobno povezanih u petlji na sli~an na~in kako je to prikazano na slici 1. Maksimalno kanjenje svakog od gradivnih blokova je TA=3ns, TB=3ns, TC =4ns, TD=6ns i TE=5ns.
(a) Kojom se najviom radnom frekvencijom mo`e taktovati staza podataka?
(b) Staza podataka se modifikuje u trostepenu proto~nu. Na koji na~in treba kombinovati gradivne blokove u stepene, i kojom se najviom radnom frekvencijom trostepena staza podataka mo`e taktovati?
(c) Ponoviti korak (b) kada se staza podataka modifikuje u ~etvorostepenu proto~nu.
Zadatak
Blok dijagram trostepene proto~no organizovane staze podataka prikazan je na slici 3.
EXWB
D_podaciDadrese
RF polje(ovaj blok je isti blokkao i onaj na vrhuslike)
OFEX
RF polje
A-podaci B-podaci
MUX B
A B
Funkcionalna jedinica
Slika 3 Blok dijagram trostepene proto~no organizovane staze podataka
Funkcija upravlja~kih signala definisana je na potpuno identi~an na~in kao na slici 3.75c), a za propagacioona kanjenja signala kroz gradivne blokove i izbora frekvencije taktovanja sistema va`e specifikacije definisane na slici 2 (zadatak 1).
Za sekvencu mikrooperacije sa slike 3 odrediti ukupno vreme izvrenja.
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 podataka←R3 000 000 011 0 00000 0 0
R4←Ulaz podataka 100 000 000 0 00000 1 1
R5←0 101 000 000 0 01100 0 1
Slika 3 Sekvenca mikrooperacija
Odgovor Stanje upravlja~kih signala za sekvencu mikrooperacija sa slike 3 dato je istoj slici i predstavlja njen osen~ani deo. (Treba naglasiti da je stanje upravlja~kih signala definisano kao kod konvencionalne staze podataka).
Proto~no izvrenje sekvence mikrooperacije prikazano je na slici 4.
Taktni intervali
1 2 3 4 5 6 7 8 9
1. R←R2-R3 OF EX WB
2. R4←sl R6 OF EX WB
3. R7←R7+1 OF EX WB
4. R1←R0+2 OF EX WB
5. Izlaz podataka←R3 OF EX WB
6. R4 ←Ulaz podataka OF EX WB
7. R5←0 OF EX WB
↑
mikrooperacija
Slika 4 Proto~no izvrenje mikrooperacija sa Slike 3
Kao to se vidi sa slike 4 celokupna sekvenca se izvrava za 9 taktnih intervala, tj. za 9*5=45ns, u odnosu na 7*15=105ns kod konvencionalne staze podataka. To zna~i da se sekvenca mikrooperacije kod proto~no organizovane staze podataka izvrava 2,3 puta br`e u odnosu na izvrenje kod konvencionalne staze podataka.
Zadatak
Konvencionalna mikroprogramski upravljana CPU je preprojektovana kao mikroprocesor na ~ipu. Tekue CPU ima jedinstvenu 256*80-bitnu upravlja~ku memoriju i koristi horizontalni format instrukcije koji ima jedno 8-bitno polje koje se odnosi na branch adresu. Analize pokazuju da kod dvo-nivovske organizacije upravlja~ke jedinice za implementaciju skupa instrukcija potrebno je samo 64 300-bitnih nanoinstrukcija. Ako ukupni kapacitet upravlja~ke memorije ima presudni uticaj na cenu, da li novi dizajn treba da ima dvo-ili jedno-nivovsko upravljanje?
Odgovor Neka model organizacije dvo-nivovske upravlja~ke memorije ima formu kao na slici 1.
µPC
µPM
nPC
nPM
µIR nIR
Upravlja~ki signali
Od IR-a
Slika 1 Dvo-nivovska organizacija upravlja~ke jedinice
Napomena:IR-instrukcioni registar; µPC-mikroprogramski broja~; µPM-mikroprogramska memorija; µIR-mikroinstrukcini registar; nPC-nanoprogramski broja~, nPM-nanoprogramska memorija; nIR-nanoinstrukcioni registar
Kapacitet upravlja~ke memorije, S1, kod konvencionalnog jedno-nivovskog upravljanja je 256*80=20480 bitova. Kod dvo-nivovskog upravljanja, kapacitet nanoprogramske memorije S2n je 64*300=19200 bitova, dok kapacitet mikroprogramske memorije, S2m, iznosi 256*(8+6)=3584 bitova. (8 bitova po mikrore~i je rezervisano za adresno polje, a 6 bitova za adresiranje nanomemorije). Shodno prethodnom, ukupni kapacitet memorije dizajna koji koristi dvo-nivovsko upravljanje iznosi S2=S2m+S2n=19200+3584=22784 bitova. Kako je S2>S1 treba usvojiti jedno-nivovsko upravljanje.
Test pitanje
Prikazati blok emu jezgra mikroprogramski zasnovane upravlja~ke jedinice i ukratko ubjasniti princip njenog rada.
Odgovor
Logika generatoranaredne adrese
Upravlja~ko adresniregistar
Mikroprogramerska memorija
Poadaci
Upravlja~ki registar
Adrese (mikro programske)
sekvencer
Upravlja~ki signali od IR-a
Statusni signali odstaze podataka(selekcija adrese)
mikroinstrukcije
Upravlja~ki signali staze podataka (interni)
Spoljni upravlja~ki signali
Informacija onarednoj adresi
Slika 1 Organizacija jezgra mikroprogramski zasnovane upravlja~ke jedinice
Shodno strukturi prikazanoj na slici 1 ~italac treba da da odgovor koji se odnosi na objanjenje principa rada.
Zadatak
Blok ema ra~unara koga karakterie direktno upravljanje i koji pribavlja i izvrava svaku instrukciju za jedan taktni interval (ciklus) prikazana je na slici 1, a va`ei formati instrukcija na slici 2.
Adrese memorija gde susmetene instrukcije (IM)
PC
Dekoder instrukcija
D B A M F M R M A A A B S D W W
Upravlja~ki signali
Blok za proirenje nulama
D
RF polje
A B
1 0MUX B
Funkcionalna jedinica
F
BAFS
V
C
N
Z
0 1MUX D
Memorija ukojoj se ~uvaju podaci
podaci(izlazni)
adresepodaci ulazni
MD
MW
MB
BAAA
DA
RW
ulaz konstante
Mag. D
Mag. BMag. A
Memorija adrese
Podaci izlazni
Podaci ulazni
Slika 1 Blok ema ra~unara koji izvrava sve instrukcije za jedan taktni interval
15 9 8 6 5 3 2 0
opkod odredini izvorini izvorini
registar registar A registar B
(DR) (SA) (SB)
a) registarski
15 9 6 5 3 2 0
opkod odredini izvorini izvorini
registar registar A operand
(DR) (SA) (OP)
b) neposredni
Slika 2 Dvo-instrukcioni format Napomena: Formatom instrukcija, neposredni operand OP se mo`e specificirati na vrednost koja se nalazi u opsegu od 0002 do 1112. Blok za proirenje nulama (ZF) formira 16-bitni operand kao neozna~enu vrednost, na taj na~in to od bit pozicija BIT3 do BIT15 dopisuje nule. Tako na primer, ako operand OP ima, od strane instrukcije, specificiranu vrednost
1112 tada se vreednost operanda na izlazu bloka ZF, ozna~en kao ulaz-konstante, proiruje na sledeu 16-bitnu vrednost 0000 0000 0000 01112.
a)Za kolo sa slike 1 i format instrukcija prikazan na slici 2, projektovati logiku dekoder-instrukcija i definisati format upravlja~ke re~i.
b) Definisati opkôd polje, funkciju i stanje upravlja~kih bitova MB, MD, RW i MW za sledeih est instrukcija: ADDI,LD,ST,INC,NOT i ADD.
c) Neka je (R3)=500, M[500]=81 i M[502]=413. Kreirati programsku sekvencu za izra~unavanje vrednosti Y=413-(81+4). Vrednost Y smestiti na lokaciju M[504] .
d) Ako su propagaciona kanjenja kroz odgovarajue gradivne blokove sa slike 1 sledea:
tPC=1ns ; a`uriranje vrednosti PC-a
tIM= 4ns ; vreme pristupa memoriji gde se ~uvaju instrukcije
tRFR= 3ns ; vreme pristupa RF polju radi ~itanja
tMXB= 1ns ; vreme propagacije signala kroz MUXB
tFU, tMD = 4ns ; vreme propagacije signala kroz FU, ili vreme pristupa memoriji podataka
tMXD = 1ns ; vreme propagacije signala kroz MUXD
tRFW = 3ns ; vreme pristupa RF polju radi upisa
Odrediti propagaciono kanjenje signala unajgorem slu~aju kao i maksimalnu radnu taktnu frekvenciju sistema sa slike 1.
Odgovor a) Na~in dekodiranja instrukcije i odgovarajua logika dekodera prikazani su na Slici 3.
18 - 16
DA
15 - 13
AA
12 - 10
BA
9
MB
8 - 4
FS
2
MD
1
RW
0
MW
Opkod
15 14 13 -9
DR
8 - 6
SA
5 - 3
SB
2 - 0
Instrukcija
5 3 3 3
5
Bit 13
Upravlja~ka re~
Slika 3 Dekodiranje instrukcije
Tablica istine dekodera instrukcija prikazana je na slici 4.
bitovi instrukcije bitovi upravlja~ke re~i Bit 15 Bit 14 Bit 13 MB MD RW MW
kategorije operacije
0 0 0 0 0 1 0 funkcija ALU koja koristi registre 0 0 1 0 0 1 0 funkcija Pomera~a koja koristi registre 0 1 0 0 1 0 1 upis u memoriju kada se koriste registri 0 1 1 0 1 1 0 ~itanje memorije kada se koriste registri 1 0 0 1 0 1 0 operacija ALU-a koja koristi registre 1 0 1 1 0 1 0 funkcija Pomera~a koja koristi registre 1 1 0 1 1 0 1 upis memoriju kada se koristi konstanta 1 1 1 1 1 1 0 ~itanje memorije kada se koristi konstanta
Slika 4 Tablica istine dekodera-instrukcija Napomena: Treba uo~iti da se Bit13 koristi za upravljanje upisom u memoriju, a istovremeno predstavlja i prvi bit FS polja upravlja~ke re~i. Dvostruka uloga ovog bita sigurno unosi ograni~enja koje se odnose na rad funkcionalne-jedinice FU.
Op. kôd Simboli~ko ime
format Opis funkcija MB MD RW MW
1000010 ADI neposredni saberi neposredni operand R[DR]←R[SA]+zf I(2:0) 1 0 1 0
0110000 LD registarski napuni registar sadr`ajem memorijske lokacije
R[DR] ←M[R[SA]] 0 1 1 0
0100000 ST registarski smesti sadr`aj registra u memorijsku lokaciju
M[R[SA]] ←R[SB] 0 1 0 1
0000001 INC registarski inkrementiraj registar R[DR] ←R[SA]+1 0 0 1 0
0001110 NOT registarski komplementiraj registar R[DR] ←R[SA]
0 0 1 0
0000010 ADD registarski saberi registre R[DR] ←R[SA]+R[SB] 0 0 1 0
Slika 5 Definisanje opkôd polja i upravlja~kih bitova MB, MD, RW i MW kod instrukcija ADDI, LD, ST, INC, NOT i ADD
Napomena: Skraenica Zf se odnosi na proirenje nulama neposrednog operanda, OP, koji u neposrednom formatu instrukcija na slici 2 zauzima bit pozicije BIT2 do BIT0. tj I(2:O).
LD R1,[R3] ; M[500] → R1, tj (R1) =81
ADDI R1,R1,#4 ; R1+4→R1, tj (R1) =81+4=85 NOT R1,R1 ; komplementiraj R1
INC R1,R1 ; (R1)= -85, dvoji~ni komplement INC R3,R3 INC R3,R3 ; (R3)=502
LD R2,R3 ; M[502] → R2, tj (R2)=413 ADD R2,R2,R1 ; (R2)=413-85=328 INC R3,R3 INC R3,R3 ; (R3)=504 ST [R3],R2 ; R2 → M[504] Napomena: Par instrukcija INC R3,R3, INC R3,R3 (koji se u ovoj programskoj sekvenci javlja dvaput) mo`e se zameniti jedinstvenom instrukcijom ADDI R3,R3#2.
Put signala ~ije je kanjenje najvee prikazan je na Slici 6
-
PC
IM
RFpolje
MUX B
FU ili DM
MUX D
RF polje (upis)
3ns
1ns
4ns
1ns
3ns
4ns
1ns
Slika 6 Propagaciono kanjenje signala, u najgorem slu~aju, kroz sistem prikazan na Slici 1
Kao to se vidi sa Slike 6 ukupno propagaciono kanjenje iznosi 17ns, to ograni~ava maksimalnu radnu taktnu frekvenciju na 58,8 MHz.
Zadatak
Registri RF polja kod strukture sa slike 1 inicijalizovani su na vrednosti koje su jednake njihovim indeksima (R0=0, R1=1, R2=2,..., R7=7).
Za sledeu sekvencu instrukcija
ADD R0,R1,R2 ADD R3,R3,R4 ADD R5,R5,R6 ADD R0,R0,R3 ADD R0,R0,R5 ADD R0,R0,R7 ST R7,R0
odrediti:
(a) binarni sadr`aj svakog polja upravlja~ke re~i shodno formatu sa slike 3.
(b) promenu sadr`aja odgovarajueg registra od strane instrukcije
Zadatak
Skup instrukcija ra~unara sa slike 1 proiren je sa pet novih instrukcija pomou kojih se vri prenos podataka izmedju registara RF polja.
(a) Popuniti odgovarajua polja prikazana na slici 7a) (Na~in kodiranja odgovarajuih polja sa slike 7a) definisan je na slici 3.75). Ako se odgovarajue polje ne koristi ostaviti ga praznim.
(b) Popuniti odgovarajua polja prikazana na slici 7b) (Kod popunjavanja imati u vidu slike 3 i 4). Ako se odgovarajue polje ne koristi dodeliti mu vrednost 0.
instrukcija tipa registarski prenos DA AA BA MB FS MD RW MW
R0←R6⊕R7
R7←M[R6]
R6←R6+2
R7←sl R7
R6←R7
a)
instrukcija tipa registarski prenos opkôd DR SA SB ili operand
R0←R6⊕R7
R7←M[R6]
R6←R6+2
R7←sl R7
R6←R7
b)
Slika 7 Nove instrukcije kod ra~unara sa slike 1
Test pitanje
Blok ema mikroprogramski upravljenog ra~unara kod koga se svaka instrukcija izvrava za vei broj taktnih intervala (multiple-cycle microprogrammed computer) prikazana je na slici 8, a odgovarajui format mikroinstrukcione re~i na slici 9. Ukazati na osnovne razlike izmedju ra~unara koji ima implementirano direktno upravljanje, a sve instrukcije izvrava za jedan taktni interval (blok ema sa slike 1) i ra~unara sa slike 8.
PC
Blok za proirenje nulama
D 9*16 DA RF polje
A BA
1 0MUXB
Funkcionalna jedinica (FU)
F
BAFS
V
C
N
Z
0 1MUX D
Memorija M
podaci(izlazni)
adresepodaci ulazni
MD
MW
MB
TB||SBTA||SA
TD||DA'
RW
ulazkonstante
Mag. D
Mag. BMag. A
Memorijaadrese
Podaci izlazni
Podaci ulazni
AA
0 1MUX M
MM
IRopkôd DA' SA SB
0 1MUX C
MM
CAR
Mikroprogramska memorija256*s8
7 6 5 4 3 2 1 0MUX S
PI
N M I P T T T M F M R M MA S C I D A B B S D W M W
upravljanjesekvencijominstrukcija
upravljanje stazom podataka
mikroprogramsko upravljanje
staza podataka
8
333
708
MS
Z C N C V C 10
Slika 8 Blok ema mikroprogramski upravljanog ra~unara
27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NA MS MC IL PI TD TA TB MB FS MD RW MM MW
Slika 9 Format mikroinstrukcije
Odgovor Uporedjujui sliku 1 sa slikom 8 mo`emo zaklju~iti da su na slici 8 izvedene sledee klju~ne modifikacije.
(1) Izdvojene memorije za instrukcije i podatke (slika 1) zamenjene su jedinstvenom memorijom M (slika 8).
(2) Da bi se pristupilo instrukcijama izlaz PC-a preko multipleksera MUX M se dovodi na adresne ulaze memorije M. Selektorski ulaz MUX M-a je MM.
(3) RF polje je proireno sa 8 na 9 registara. Registri R0-R7 su vidljivi programeru. Registar R8 se koristi za privremeno ~uvanje podataka i nije vidljiv programeru. Da bi se adresirao R8, RF polju sa slike 8 je dodat jo po jedan bit na adresnim ulazima sa leve i desne strane. Adresni ulazi SA, SB i DA’ se kombinuju sa novim jednobitnim upravlja~kim signalima TA, TB i TD, respektivno, pa se na taj na~in formiraju signali TA≡SA, TB≡SB i TD≡DA’. Ove kombinacije su na slici 8 simboli~ki prikazane kao ~etvoro-adresni ulazi. Na slici 10 prikazana je specifikacija upravlja~kih signala koje smo do sada pomenuli.
(4) Instrukcioni registar IR puni se samo kada se iz memorije ~ita instrukcija. Signal IL (instruction load enable) omoguava punjenje IR-a.
(5) Programski broja~, PC, se inkrementira samo kada se instrukcija pribavlja iz memorije. Signal PI (increment enable signal) obezbedjuje da se vrednost programskog broja~a inkrementira.
TD TA TB MB FS MD RW MM MW
selekcija sel. sel. sel.
kôd
funkcija kôd sel. funkcija sel. funkcija
kôd
R[DR] R[SA] R[SB] registar 0 F=A 00000 FnUt nema
upis -NW
adrese nema
upis -NW
0
RS RS RS konstanta 1 F=A+1 00001 Data In upis -WR PC upis -WR 1
F=A+B 00010
F=A+B+1 00011
F=A+/B 00100
F=A+/B+1 00101
F=A-1 00110
F=A 00111
F=A∧B 01000
F=A∨B 01010
F=A⊕B 01100
F=/A 01110
F=A 10000
F=sl A 10010
F=sr A 10100
F=0 10110
Slika 10 Definicija upravlja~kih signala staze podataka kod ra~unara sa slike 8
(6) Treba uo~iti da polja DA, AA i SA nisu deo formata mikroinstrukcije sa slike 9 nego se direktno vode sa izlaza DA’, SA i SB registra IR na ulaze RF polja. Na ovaj na~in smanjuje se broj bitova u formatu mikroinstrukcije (Slika 9).
(7) MC je selektorski signal multipleksera MUX C.
(8) MS su selektorski signali multipleksera MUX S. Ako je rezultantna vrednost MUX S jednaka 1 tada se CAR (content addressable register) puni, ina~e se inkrementira. Tako na primer, ako je MS=0102, tada naredna adresa zavisie od vrednosti bita za prenos C (carry bit). Ako je C=1 tada je izlaz MUX S-a jednak 1 pa e naredna upravlja~ka adresa sa izlaza MUX C-a biti napunjena u CAR. Ako je C=0 tada je izlaz MUX S jednak je 0, pa naredna upravlja~ka adresa bie CAR+1. Na slici 11 prikazan je sadr`aj upravlja~ke informacije polja MS, MC, IL i PI.
MS MC IL PI
akcija simboli~ko ozna~avanje
kôd selekcija simbol.
ozn.
akcija simbol.
ozn.
akcija simbol.
ozn.
kôd
Increment CAR CNT 000 NA NXA No Load NLI No Load NLP 0
Load CAR NXT 001 Opcode OPC Load Instr. LDI Increment PC INP 1
If C=1, load CAR;
else increment CAR
BC 010
If V=1, load CAR; BV 011
else increment CAR
If Z=1, load CAR;
else increment CAR
BZ 100
If N=1, load CAR;
else increment CAR
BN 101
If C=0, load CAR;
else increment CAR
BNC 110
If Z=0, load CAR;
else increment CAR
BNZ 111
Slika 11 Definicija polja MS, MC, IL i PI formata mikroinstrukcija sa slike 9
Test pitanje
Za mikroprogramski upravljanu mainu prikazanu na slici 8 nacrtati ASM dijagram koji opisuje na~in realizacije prenosa informacije (podataka) izmedju registara kao i na~in sekvenciranja mikroinstrukcija potreban da se implementiraju faze pribavljanja i izvrenja sledeih insstrukcija: ADI,LD,ST,INC,NOT,ADD,....
Odgovor ASM dijagram je prikazan na slici 12. Kao to se vidi sa slike 12 procesiranje svake instrukcije ~ine dva koraka, pribavljanje, IF, i izvrenje instrukcije EX. U toku faze pribavljanja naredbe sadr`aj PC-a odredjuje memorijsku lokaciju iz koje se ~ita instrukcija a zatim smeta u IR. U istom taktnom intervalu PC se inkrementira i priprema za pribavljanje naredne instrukcije. Nakon stanja IF maina prelazi u stanje EX0, prvu aktivnost faze izvrenja instrukcije.
U toku EX0 sedam MS bitova registra IR se puni u CAR. Ova akcija uzrokuje da CAR mo`e da adresira 27, ili 128 razli~itih lokacija, od 0 do 127, u zavisnosti od vrednosti opkôda koji je smeten u IR. Ovih 128 razli~itih adresa predstavljaju po~etne adrese za 128 potencijalnih mikroprograma, po jedna mikroinstrukcija za izvrenje svake od instrukcija koja se specificira opkôdom. Efekat punjenja registra CAR prikazan je na slici 12.
IR=0000000?10
R (DR)<-R(SA)+zf IR (2:0)
EX0 IF
ADI
11000000
00000000
IR=0000001?10
R (DR)<-M(R(SA))
LD 00000001
IR=0000010?10
M (R (SA))<-R(SB)
ST 00000010
IR=0000011?10
R (DR)<-R(SA)+1
INC 00000011
IR=0000100?10
R(DR)<-R(SA)
NOT 00000100
R (DR)<-R(SA)+R (SB)
ADD 00000101IR=0000101?
10
IR=0000110?10
IR=0000111?10
IR <- M (PC)PC <- PC + 1
11000001
Slika 12 ASM dijagram mikroprogramski upravljane maine
Instrukciji ADI je dodeljen opkôd 000 00002, instrukciji LD opkôd 00000012,itd.
Simboli~ki mikroprogram zasnovan na ASM dijagramu prikazan je na slici 13. Simboli~ka imena (polja) u mikroinstrukcionoj re~i su identi~na kao ona na slici 10 i slici 11. Veliki broj ulaza na slici 13 je nepopunjen, iz prostog razloga to resursi koji se upravljaju ne koriste se od strane te mikroinstrukcije. Simboli~ki mikroprogram sa slike 13 preveden je u binarni mikroprogram na slici 14. U ovoj tabeli CAR adrese zadate kao binarne na slici 12 zamenjuju imena stanja u prve dve kolone. Nepopunjena polja na slici 13, na slici 14 se popunjavaju nulama
Opkôd NXT
ADD
MS MC IL PI TD TA TB MB FS MD RW MM MW
IF EXO CNT - LDI INP - - - - - - NW PC NW
EX0 - NXT OPC NLI NLP - - - - - - NW - NW
ADI IF NXT NXA NLI NLP DR SA - konstanta F=A+B FnUt WR - NW
LD IF NXT NXA NLI NLP DR SA - - - Data WR MA NW
ST IF NXT NXA NLI NLP - SA SB registar - - NW MA WR
INC IF NXT NXA NLI NLP DR SA - - F+A+1 FnUt WR - NW
NOT IF NXT NXA NLI NLP DR SA - - F=/A FnUt WR - NW
ADD IF NXT NXA NLI NLP DR SA SB registar F=A+B FnUt WR - NW
Slika 13 Simboli~ki mikroprogram faze pribavljanja i izvrenja za est instrukcija
adresa NXT ADD
MS MC IL PI TD TA TB MB FS MD RW MM MW
192 193 000 0 1 1 0 0 0 0 00000 0 0 1 0 193 000 001 1 0 0 0 0 0 0 00000 0 0 0 0 000 192 001 0 0 0 0 0 0 1 00010 0 1 0 0 001 192 001 0 0 0 0 0 0 0 00000 1 1 0 0 002 192 001 0 0 0 0 0 0 0 00000 0 0 0 1 003 192 001 0 0 0 0 0 0 0 00001 0 1 0 0 004 192 001 0 0 0 0 0 0 0 01110 0 1 0 0 005 192 001 0 0 0 0 0 0 0 00010 0 1 0 0
Slika 14 Binarni mikroprogram faze pribaljanja i izvrenja za est instrukcija
Treba naglasiti da se svaka instrukcija maine sa slike 9 izvrava za tri taktna intervala. Uo~imo da se kod maine sa slike 1 svaka instrukcija izvravala za jedan taktni ilnterval.
Test pitanje
Skup instrukcija maine sa slike 8 proiren je sa sledee dve instrukcije:
(1) LRI - Load register indirect ~iji je opkôd 000 0110. Kod ove instrukcije sadr`aj registra specificiran SA poljem adresira re~ u memoriji. Ova re~ predstavlja indirektnu adresu i koristi se za adresiranje re~i u memoriji koja se puni u regitar DR. Efekat ove instrukcije se mo`e predstaviti kao
R[DR] ← M[M[R[SA]]]
(2) SRM - Shift right multiple ~iji je opkôd 000 0111. Kod ove instrukcije sadr`aj registra DR se pomera udesno za broj bit pozicija specificiran trobitnim OP poljem. Registar R8 se koristi za ~uvanje broja pozicija koje treba pomerati. Iznos pomeranja mo`e biti od 0 do 7 bit pozicija.
Nacrtati ASM dijagrame za LRI i SRM instrukcije.
Odgovor ASM dijagrami karakteristi~ni za fazu izvrenja instrukcija LRI i SRM prikazani su na slikama 15 i 16, respektivno.
IR=0000110?
R8 <- M (R (SA))
LRI0 00000110
R (DR) ← M (R8)
LRI1 100001110
Ka fazi IF
10
od koraka EX0
Slika 15 ASM dijagram instrukcije LRI
R8 <- zf IR (2:0)
SRM1 00000111
R (DR) ← sr R (SA)
SRM2 100001111Napomena: SA = DR
Ka fazi IF
Ka fazi IF
IR=0000111?10
od koraka EX0
zf IR (2:0)=0?1
R8 <- R8 - 1
SRM3 100001000
R8 = 0?1
0
0
Slika 16 ASM dijagram instrukcije SRM
Vreme izvrenja instrukcije SRM, u zavisanosti od iznosa pomeranja, menja se u granicsama od 3 do 23 taktna intervala.
Zadatak
a) Da li arhitektura sa slike 1 mo`e da se u~ini proto~nom? Ako mo`e prikazati blok dijagram proto~ne maine.
b) Pokazati kako izgleda izvrenje sekvence
for i=1 to 7 do R(i) = R(i) + 1;
c) Pokazati kako proto~na maina izvrava sledeu sekvencu instrukcija
1 ADD R1,R0,R1 2 ADD R3,R2,R3 3 ADD R5,R4,R5 4 ADD R7,R6,R7 5 ADD R3,R1,R3 6 ADD R7,R5,R7 7 ADD R7,R3,R7 Odgovor Blok ema proto~no organizovane maine prikazana je na slici 17
RF poljeisto kao gore
D podaciRW
D
Podaci izlazni
Podaci ulazni
Memorija podatakaista kao gore
Ulaz podataka Adresa
MUX D
Memorijapodataka
podaci(izlazni)
adresaBA
Funkcionalna jedinica
F
FS
V
C
N
Z
Izlaz adresa
5
Adresamemorija za instrukcije instrukcije
PC
Dekoder instrukcija
Blok za proirenje nulama (ZF)
RF polje
Apod. B
MUX B MB
BAAA
Podatak BPodatak A
IF
DOFIR
IF
Stepen 4
Stepen 3
Stepen 2
Stepen 1
AA BA MB
EX------ WB
DOF------EX
MW
RWMDDA
FS
WB
MWPodatak I
Podatak F
MD
Slika 17 Blok dijagram proto~no organizovanog ra~unara
Proto~no izvrenje sekvence instrukcija
1 LDI R1,1 2 LDI R2,2 3 LDI R3,3 4 LDI R4,4 5 LDI R5,5 6 LDI R6,6 7 LDI R7,7 prikazano je na slici 18
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
taktni interval
instrukcija
Slika 18 Proto~no izvrenje sekvence for i=1 to 7 do R(i)=R(i)+1
c) Kompilator e detektovati zavisnosti po podacima izmedju instrukcija i modifikovae programsku sekvencu na sledei na~in, tj. da bi reio problem hazarda po podacima ubacivae operacije tipa NOP.
1 ADD R1,R0,R1 2 ADD R3,R2,R3 3 ADD R5,R4,R5 4 ADD R7,R6,R7 5 ADD R3,R1,R3 6 NOP 7 ADD R7,R5,R7 8 NOP 9 NOP
10 ADD R7,R3,R7 Proto~no izvrenje modifikovane sekvence imae oblik kao onaj na slici 19.
1 2 3 4 5 6 7 8 9 10 11 12 13
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WB
IF DOF EX WBR3,R7
R5,R7
R1,R3
1
2
3
4
5
6
7
8
9
10
instrukcija
taktni interval
Slika 19 Modifikovana sekvenca