SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
I. SISSEJUHATUS
                                                                Arvutikomponendid FKEF.02.089

1-1. Ajalooline tagasivaade.

Mikroprotsessorite (MP) ajalooline areng.

Maailma esimene MP oli Intel 4004- 4-ja bitine MP. p-MOSFET, 50 KIP. Uuendatud 4040
oli kiirem. Samuti TMS-1000. 1971. a. 8008 - 8 bitine MP (mälu siin 14 bitti, max 16kb).
1973.a.-8080. Motrola-MC6800. Tabel 1-1 esimesed 8-bitised MP-d. 8080: f=500kHz, TTL
sobivus, 16 bitti mälu siin (64kb). Esimene personaalarvuti (PA) MITS Altair 8800 1974.a.
1977.a.-8085, viimane 8 bitine MP. f=770kHz (1,3 us.). Sisemine kell ja süsteemi kontroller.
Sama käsustikuga oli Zilog Z-80.

"Modernsed" MP-d alates 1978.a.

1978.a. 8086- andmed 16 bitti, aadress 20bitti (max mälu 1Mb), 1079.a. 8088- andmed 8 bitti,
aadress 20 bitti. Mõlemal oli 6 baidine vahemälu käskude hoidmiseks. f=2,5MHz. Mõlemad
olid CISC (Complex Instruction Set Computes). 1981.a. IBM PC XT-s 8088.

1983.a. 80286- andmed 16, mälu 24 bitti. f=4MHz. Alates 1986.a. 32-bitise MP-d. 80386
(mälu kuni 4Gb). Redutseeritud versioonid SX, SL, SLC. GUI-Graphical User Interface.
VGA-Variable Graphics Array. 386 f=40MHz. 1989.a. 80486- 386 edasiarandus + vahemälu
+ 387 f=66 MHz (DX2). 1993- Pentium f=133 MHz., vahemälu 16kb. 2 fixkoma
protsessorit- Superscalare Technology. Jump prediction technology- hüppekäskude
etteennustamine. Andmesiin 66 MHz (486- 33 MHz). RISC- reduced instruction set
computer. iCOMP- protsessorite kiiruslik võrdlus (iCOMP2- 10 korda väiksem). Joonised 1-
1 ja 1-2 iCOMP võrdlus eri protsessoritel. Tabel 1-2 Inteli ja Motorola toodetud
protsessoreid. 1995.a. Pentium Pro- 16kb L1-e (8kb andmed ja 8kb kood). 256k L2, 3
fixkoma protsessorit. 1997.a. Pentium II. 100 MHz andmesiin. 1998.a. Xeon= Pentium II L1
32 kb, L2 512kb, 1Mb või 2Mb. Uuemate protsessorite võrdlus vanematega on toodud
Tabelis I. Joonisel 1-3 on toodud 80486, Pentiumi, Pentium Pro ja Pentium II kontseptuaalne
võrdlus.

Tabel I: Inteli protsessorite ajalooline areng.

                                                                                     Valgus
                                                                                     läbib
                                                                   Lisandunud          ühe
Aast Protsesso Andmesii Aadresssii Transistori Kellata
                                                                    võrreldes       kellatak
 a       r      ni laius ni laius    te arv    kt [ns]
                                                                    eelmisega           ti
                                                                                    jooksul
                                                                                      [cm]
1977    8085          8          16          10t.        320                          9600

1978    8086         16          20          29t.        200        prefeching        6000
8086+clock,2*DM
                                                   A, INT contr.,
1980    80186    16   20       40t.       125                         3750
                                                  3*16 bit timers,
                                                       CS unit
                                                          real
                                                 mode+protected
1983    80286    16   24      100t        70                          2100
                                                  virtual address
                                                        mode
                                                 pipeline, address
1986    80386    32   32      275t.       33                          990
                                                translation caches
                                                  386+387+cache
1989    80486    32   32      1milj.      20    contr. +8kb cache     600
                                                       memory
                                                 2 parallel integer
                                                pipelines, floating
                                                   point pipeline,
1993 pentium     64   32      3milj.       5           dynamic        150
                                                branceprediction,
                                                data & code cache
                                                       8kb etc.
                                                 L2 cache (512kb)
       pentium                                      3 * 12-staged
1995             64   36    5.5 milj.      4                          120
         pro                                        pipelines etc.,
                                                        MMX
                                                      4*12-stage
       pentium                                       pipelines, L2
1997             64   36    7.5 milj.      3                           75
          II                                        cache 512kb,
                                                1Mb, or 2Mb etc.
                                                 70 new floating-
                                                   point instr., 12
                                                 new multimedia
       pentium                                     instructions, 8
1999             64   36    9.5 milj.     1.5                          45
         III                                     new cacheability
                                                   instructions to
                                                  improve the L1
                                                        cache
                                                 400 MHz system
                                                     bus, 144 new
                                                 double-precision
                                                    floating-point
       pentium                                     instr., 2*ALU,
2000             64   36   11 milj. ???   0.5                          15
         IV                                            NetBurst
                                                microarchitecture
                                                (20 stages branch
                                                 prediction), 0,13
                                                    um tchnology
1-2. Mikroprotsessoritel põhinevad personaalkompuutrite süsteemid.

Joonisel 1-4 on toodud personaalkompuutrite tüüpiline blokkdiagramm.

Mälu- ja sisend-väljund süsteemid

Joonisel 1-5 on toodud personaalkompuutri mälukaart. See on sarnane kõikidele Inteli
protsessoritele. Mälusüsteem on jaotatud 3-e ossa: TPA (transient program area, 640 kb),
süsteemi mälu (384 kb) ja XMS (extended memory system). ISA- (industry standart
arhitecture) 16 bitti, EISA (extended ISA) 32 bitti, MC (microchannel, PS-2) 32 bitti, PCI
(peripheral component interconnect) 32 või 64 bitti. ISA & EISA- 8MHz, PCI- 33 MHz.
VESA (Video Electronic Standards Association) või VL siin, 32 bitti, takteeritakse MP
sagedusega. USB (universal serial bus) 100Mbps. AGP (advanced graphics port) 66 MHz, 64
bitti. DOS (disk operating system). Joonisel 1-6 on toodud TPA jaotus DOS-s. BIOS (basic
I/O system). ROM (read only memory), RAM (random access memory), EEPROM
(electrically erasable read only memory), EPROM (erasable/programmabl read only
memory). CD-ROM memory (compact disk read only memory), DVD (Digital Versatile
Disk). COMMAND.COM (command processor). TSR (terminate and stay resident).
Joonisel 1-7 on toodud süsteemimälu jaotus DOS-s. CGA (color graphics adapter), EGA
(enhanced graphics adapter), VGA (variable graphics array). EMS (expanded memory
system). LIM-4 EMS. Joonisel 1-8 on toodud EMS mis on kasutusel vaid DOS-is vanematel
arvutitel. I/O, sisend-väljund aadressväli on 16 bitti (max 64kb) lai (vanematel arvutitel 10
bitti (1kb) lai). Joonisel 1-9 on kirjeldatud sisend-väljund seadmete aadressväli PC arvutites.

DOS operatsioonisüsteemi lühiülevaade

Kuigi DOS operatsioonisüsteem oli kasutusel vanemates arvutites ja praegu Win NT ja Win
2000 süsteemides kõik DOS-i programmid ei tööta (eriti need mis kasutavad absoluutset
adresseerimist), on siiski kasulik natukene DOS-i tutvustada, see annab ülevaate ka riistvara
funktsioneerimise loogikast.

Config.sys, high memory, extended memory manager, VCPI- virtual control program
interface. DPMI- DOS protected mode interface. Autoexec.bat.

Mikroprotsessor

Mikroprotsessor või CPU (central processing unit) on arvutisüsteemi "aju ja süda". Ta juhib
andmete voogu enda ja mälu ning sisend-väljundseadmete vahel (kui pole tegu mälu
otsepöördumisega) ning täidab lihtsamaid aritmeetilisi ja loogilisi operatsioone nende
andmetega. Tabelis 1-3 on toodud näited aritmeetilistest ja loogilistest operatsioonidest, mida
täidavad mikroprotsessorid. Fixkoma andmed on kas bait (8 bitti), sõna (16 bitti) või
topeltsõna (32 bitti). MP suunab programmi täitmist sõltuvalt aritmeetilise või loogilise tehte
tulemusest. Selleks kasutab ta nn. lippu (flag). Mõned Inteli MP-s kasutatavad lipud on
toodud tabelis 1-4. Siinid: aadresssiin, andmesiin, kontrollsiin. Joonisel 1-10 on
skemaatiliselt näidatud, kuidas MP juhib andmevoogusid läbi siinide. Mäluaadressid
(aadresssiini laius) on: 8086, 8088, 80186 ja 80188- 00000H-FFFFFH (1Mb); 80286 ja
80386SX- 000000H-FFFFFFH (16Mb); 80386EX- 0000000H-1FFFFFFH (32 MB);
80386DX, 80486, Pentium ja Pentium Pro- 00000000H-FFFFFFFFH (4Gb); Osadel
Pentium Pro konfiguratsioonidel, Pentium II, Pentium III ja Pentium IV- 000000000H-
FFFFFFFFFH. Andmesiini laius varieerub 8 bitist (8088 ja 80188) kuni 64 bitini (Pentium
Pro ja uuemad). Vaata ka tabelit 1-5. Joonisel 1-11 on toodud mälu struktureerimine
(pageing) eri protsessoritel. Kontrollsiini mõned signaalid on: MRDC (memory read control),
MWTC (memory write control), IORC (I/O read control ja IOWC (I/O write control).

1-3. Numbrisüsteemid

Positsiooniline noteering

Numbrid: kümnendsüsteemis (destimalsüsteemis) 0-9, kaheksandsüsteemis (oktaalsüsteemis)
0-7, kuuetestkümnendsüsteemis (heksadetsimaalsüsteemis) 0-F, kahendsüsteemis
(binarisüsteemis) 0 ja 1. Vaata näiteid 1-3 ja 1-4.

Konversteerimine detsimali.

Vaata näiteid 1-5 kuni 1-7.

Konverteerimine detsimalist.

Fixkoma arvud: 1. Jaga detsimalnumber baasnumbriga (näit. 2, 8, 16 või muu) 2. Kontrolli
jääki 3. Korda samme 1 ja 2 kuni kordaja on 0. Vaata näiteid 1-8 kuni 1-10. Ujuvkomaarvude
murdosa: 1. Korruta murdosa baasnumbriga 2. Kirjuta saadud tulemus kui number (isegi kui
see on 0) 3. Korda samme 1 ja 2 kuni jääk on 0. Osa arvude teisendus ei koondu, siis tuleb
vaadata millise täpsuseni tesendatakse. Vaata näiteid 1-11 kuni 1-13.

Binari-kodeeritud heksadetsimal.

Vaata näited 1-14 ja 1-15 ning tabel 1-6.

Negatiivsete arvude esitus

On kasutusel 2 süsteemi: baas- või baas - 1 komplement. Vaata näited 1-16 kuni 1-19.

1-4. Andmeformaadid arvutites.

Andmed arvutites on kas: ASCII kujul, BCD kujul, märgiga või märgita fixkoma arvuna või
ujuvkoma arvuna.

ASCII andmed:

ASCII (American Standard Code for Information Interchange) kujul hoitakse arvutis
sümbolinformatsiooni. Algselt oli ASCII 7-ne bitine, tänapäeval kasutatakse nn. 8- bitist ehk
laiendatud ASCII-d. Vaata tabeleid 1-7 ja 1-8. Paljud Windows programmid kasutavad
Unicode süsteemi, kus andmed on 16 bitises esituses (1 bait ASCII, teine lisainfo). Vaata
näidet 1-20 .

BCD (Binary Coded Decimal) andmed.

Pakitud BCD ja mittepakitud BCD. Vaata näidet 1-21 ja tabelit 1-9.

Fixkoma arvude esitused.
Baidilaiused (8 bitti): märgiga ja märgita arvude esitus. (vahemik -128 kuni 127 või 0-255).
Vaata näiteid 1-22 kuni 1-24.

Sõnalaiused (16 bitti): Inteli omapära (little endian format): arvu väiksemal positsioonil
numbrid (least significant byte) on salvestatud madalamal mäluaadressil ja most significant
byte- kõrgemal (vt. joonis 1-13). Arvude vahemik on -32768 kuni 32767 või 0-65535.

Topeltsõna laiused (32 bitti): arvude vahemik -2147483648 kuni 2147483647 või 0-
4294967296. Vaata joonist 1-14.

Ujuvkoma arvude esitus.

Ujuvkoma esitus on kas 4-ja biti laiune või 8-a biti laiune (topelttäpsusega arv) vt. joonis 1-
15 ja tabel 1-10. Arvu esitus koosneb märgist (1 bitt mõlema täpsuse korral), eksponendist (8
bitti või 10 bitti) ning mantissist (23 bitti või 52 bitti). Mantissi kujutamisel kasutatakse nn.
maskeeritud bitti, arv ümardatakse nii et viimane bitt oleks 1 ja see siis maskeeritakse.
Eksponent kujutatakse kui "biased exponent", lisatakse kas 127 (7FH) või 1023 (3FF). See on
selleks, et kujutada negatiivseid eksponente samal kujul.




         "Inteli" mikroprotsessorid ja nende arhitektuur
                                                                   Arvutikomponendid FKEF.02.089

Antud kursuse alguses tuleb juttu ainult Inteli 32 bitise sisemise arhitektuuriga
protsessoritest (IA-32 arhitektuur),

2-1. Mikroprotsessori sisemine arhitektuur.

Et kergendada mikroprotsessorite kursust mittekuulanud üliopilaste arusaamist
arvutikomponentide kursusest, teeme kolmandast loengust alates sissejuhatuse 8085
mikroprotsessorisse. Kes on selle osa enne juba läbinud, nendel pole ilmselt mõtet paari
loengusse tulla. Loodame et saame õpikuga edasi minna alates viiendast loengust.
Sissejuhatus 8085-te on inglisekeelse tekstina lingitud siia .

Läheme edasi 8086 käsitlemisega. 8086 koosneb sisuliselt kahest osast: Bus Interface Unit-ist
(BIU, siini interfeisi blokk) ja Execution Unit-ist ( EU, sooritusblokk). BIU loeb mälust käske
(feches instructions), loeb andmeid mälust ja portidest ning kirjutab andmeid mällu ja sisend-
väljund- portidesse. EU sooritab käske, mis on juba loetud mälust. BIU ja EU töötavad
teineteisest sõltumatult. BIO on protsessori interfeiss välismaailma. BIU sisaldab
segmentregistreid, käsuloendajat (instruction pointer), käskude vahemälu (instruction queue)
ja aadressgeneraatorit/ siini kontrollskeemi, mis kindlustavad käskude lugemise mälust, nende
järjekorda asetamise ja siini kontrolli. Käskude vahemälu on FIFO (first in, first out) tüüpi
registrite grupp mis võimaldab salvestada kuni kuus baiti käsukoode. Kui see buffer on täis, ei
teosta 8086 ühtegi siinioperatsiooni. Kui loetakse sisse hüppekäsk, tühjendatakse buffer ja
alustatakse käskude lugemist aadressilt, kuhu antud hüppekäsk suunab. Kui on tingimuslik
hüppekäsk, oodatakse ära enne käsu täitmise tulemus ja siis alles teostatakse hüpe, juhul kui
tingimused on täidetud. Tänapäevasemad protsessorid on tunduvalt keerulisemad, nendes
lisanduvad uudsed lahendused on toodud tabelis I eelmises osas. Täpsemalt käsitletakse seda
järgnevates loengutes. Nüüd läheme tagasi raamatu juurde.

Programmeerimismudel

On programmselt nähtavad ja programmselt nähtamatud registrid (vt. joonis 2-1). Registrite
nimed sõltuvad sellest kas nad on 32-e, 16-e või 8 bitise laiusega. Näiteks Aku: 32 bitti: EAX,
16 bitti AX, 8 bitti AH või AL, sõluvalt kumb 8 bitine osa sõnast. Nähtavad 32-e bitised
registrid 80386-st alates on: Aku (accumulator, EAX), Baas (base index, EBX), Loendur
(count, ECX), Andmed (data, EDX), pinuosundaja (stack pointer, ESP), baasosundaja (base
pointer, BP), sihtindeks (destination index, DI), lähteindeks (source index, SI), ja
käsuloendaja (instruction pointer, IP). Lisaks on protsessoris veel lipuregister (flags,
EFLAGS 32 bitisel protsessoril) ja 4 segmentregistrit: koodsegment (code, CS),
andmesegment (data, DS), ekstrasegment (extra, ES) ja pinusegment (stack, SS).
Segmentregistritel FS ja GS ei ole nimesid pandud. Registrite nimed tulenevad põhiliselt
sellest, milleks neid programmeerimisel kasutatakse. Täpsemalt loengul.

Lipud: Võivad muutuda ainult aritmeetiliste ja loogiliste käskude sooritamisel, kunagi ei
muutu andmesiirdamiskäskude täitmisel. C- ülekanne (carry), P- paarsus (parity), A-
lisaülekanne (auxiliary carry), Z- null (zero), S- märk (sign), T- lõks (trap), I- katkestus
(interrupt), D- suund (direction), O- ületäitumine (overflow), IOPL- sisend- väljund
priviligeeritud tase (I/O privilege level), NT- pesitssev ülesanne (üksteise sees olevad
ülesanded, nested task), RF- resümee (resume), VM- virtuaalne mood (virtual mode), AC-
reastamiskontroll (alignment check), VIF- virtuaalne katkestuslipp (virtual interrupt flag),
VIP- virtuaalne katkestusseis (virtual interrup pending), ID- identifikatsioon (identification).

2-2. Mälu adresseerimine "reaalmoodis"

Võimaldab adresseerida ainult esimest 1Mb mälu. Võimaldab DOS-is kirjutatud
programmidel töötada kõikides Inteli protsessorites.

Segment ja offset. Segmentregister defineerib mälu algusaadressi 64Kb blokil, offsetregister
defineerib baiti (sõna, topeltsõna) selle bloki sees (vt. joonis 2-3 ja tabel 2-1).
Absoluutaadressi saamiseks tuleb segmentregistri sisu nihutada 4 baiti vasakule (korrutada
16-ga ehk lisada lõppu 0H) ja siis liita offset. segmentregister saab mälu osundada 16 baidiste
blokkide, nn. paragrahvide (paragraph) täpsusega. Maksimaalne mäluaadress, mis 16 bitise
segment- ja offsetregistriga saab sellel meetodil adresseerida on 10FFEFH, see on 64Kb-
16baiti rohkem kui FFFFF. Alates 80286-st saab sinna ka reaalselt panna mälu (protsessoril
on olemas A20 aadresspinn). Seetõttu kutsutakse aadressvälja 100000H-10FFEFH high
memory area ja uuemad DOS-i versioonid lubavad sinna kirjutada opsüsteemi teatud osasid
(kui on installeeritud HIMEM.SYS).

"Vaikimisi" võetavad segment- ja offset registrite kombinatsioonid on toodud tabelites 2-2
ja 2-3 eri protsessorite kohta. Kood CS:IP, pinu SS:SP või BP, andmed DS:BX, DI või SI,
string ES:DI.( protsessorid 8086 kuni 80486). Kuni 80286-ni on 4 mälu segmentregistrit,
80386-st ülespoole aga 6 mälu segmentregistrit. Joonisel 2-4 on toodud näide süsteemist 4-ja
mälu segmenteerimispiirkonnaga. Joonisel 2-5 on toodud näidisprogrammi asetsemine mälus
DOS opsüsteemis.

2-3. Sissejuhatus mälu adresseerimisse kaitstud moodis.
Erinevus reaalmoodist on selles, kuidas MP interpreteerib segmentregistrit mälu
adresseerimisel. Segmentregister sisaldab selektorit, mis selekteerib kirjeldaja (descriptor)
kirjeldajate tabelist (descriptor table). Alates 80386-st on offset 32 bitine, mis võimaldab
adresseerida kuni 4Gb suuruste segmentide sees. Selektor (mis on segmentregistris) valib
välja ühe 8192-st kirjeldajast vastavast tabelist. Kirjeldaja kirjeldab piirkonda, pikkust ja
juurdepääsu õigusi mälusegmendi kohta. On 2 kirjeldajate tabelit, globaalsed kirjeldajad ja
lokaalsed kirjeldajad. Globaalne kirjeldaja on opsüsteemi kirjeldaja (system descriptor),
lokaalne aga rakendusprogrammi kirjeldaja (application descriptor). Iga programm saab siis
kasutada kuni 16384 mälusegmenti samal ajal. Iga kirjeldaja on 8 baiti lai, kirjeldajate tabelid
on kumbki 64 Kb suurused. Kirjeldajate tabelite strukuur on joonisel 2-6. Baasaadress
osundab mälusegmendi algust. Segmendi limiit (segment limit) näitab viimast ofseti aadressi,
mis eksisteerib antud segmendis. 80286-s on 16 bitine limiit, 386-st alates 20 bitine. Alates
386-st lisandub G bitt (teralisuse bitt, granularity bit). Kui G=0, siis segmendi limiit on
00000H kuni FFFFFH, kui G=1, siis nihutatakse segmenti 12 bitti vasakule, saadakse 4Kb
segmendi samm. AV näitab, kas segment on kättesaadav (AV=1) või mitte (AV=0). D näitab
kas käsud ja registrid on 16 või 32 bitised (D=0 - 16 bitised, D=1 - 32 bitised). Juurdepääsu
õiguste baidi (access rights byte) bitid on kirjeldatud joonisel 2-7. Need bitid võimaldavad
kontrolli üle kogu segmendi. Kontroll sõltub, kas tegemist on andme- või koodsegmendiga.
Kirjeldajad valitakse kirjeldajate tabelist segmentregistri abil. Joonisel 2-8 on toodud, kuidas
segmentregister töötab kaitstud moodis. Lisaks 13 bitisele selektorile (valib ühe 8192-st
kirjeldajast) on T1 bitt (T1=0, globaalne kirjeldaja; T1=1, lokaalne kirjeldaja) Soovitud
privileegi tase (reguested privilege level, RPL) määratakse ära 2-e bitiga. Kõrgeim on 00 ja
madalaim 11. Kasutatakse mitmekasutaja keskkondades. Joonisel 2-9 on näidatud, kuidas
segmentregister, mis sisaldab selektorit valib kirjeldaja globaalsest kirjeldajate tabelist.

Programmselt nähtamatud registrid.

Kirjeldajate tabelid on mälusüsteemis. Et organiseerida nendele juurdepääsu kasutatakse
programselt nähtamatuid registreid (alates 80286-st). Joonisel 2-10 on need registrid toodud.
Need registrid kontrollivad MP tööd kaitstud moodis. Osa nendest pole programselt juhitavad.
Iga segmentregister sisaldab lisaks 16 bitisele nähtavale osale veel 64 bitti (alates 80386-st,
80286-l on see 50 bitti) infot mis sisaldab baasaadressi (32 bitti), limiiti (20 bitti) ja
juurdepääsuõigusi (12 bitti). Kõik need väljad on kirjeldatud eelmises punktis. Need registrid
laetakse kirjeldajate tabelist kui segmentregister muutub. Nii pole vaja iga mälupöördumisega
lugeda infot kirjeldajate tabelist. Lisaks on nähtamatud GDTR (global descriptor table
register) ja IDTR (interrupt descriptor table register). GDTR sisaldab kirjeldajate tabeli
baasaadressi ja limiiti. Viimane on 16 bitti, seega tabeli suurus on 64 Kb. Kui MP läheb üle
kaitstud moodi laetakse GDTR ja IDTR sisu. IDTR registris sisaldub info
katkestustöötlusprogrammide aadresside kohta. LDTR (local descriptor table register)
sisaldab vastavat infot lokaalse kirjeldajate tabeli kohta. TR (task register) hoiab selektorit,
mille abil pääseb juurde kirjeldajale, mis defineerib ülesande. Ülesanne on üldiselt protseduur
või programm.See register võimaldab mitmeülesande (multitasking) süsteemides lihtsalt
lülituda ümber eri programmide vahel.

2-4. Mälu tabuleerimine (paging).

Mälu tabuleerimismehhanism, mis on kasutusel alates 80386-st lubab suvalisele füüsilisele
mälupiirkonnale määrata suvaline mäluaadress. Samuti võimaldab see mäluaadressid panna
piirkondadele, kus mälu füüsiliselt ei eksisteerigi.
Tabuleerimisregistrid.

 Joonisel 2-11 on toodud MP kontrollregistrite struktuur, mis juhivad mälu tabuleerimist. Kui
bitt PG=1, siis mälu lineaarne aadress muudetakse füüsiliseks aadressiks
tabuleerimismehhanismi kaudu. Muidu lineaarne aadress, mis genereeritakse programmide
poolt konverteeritakse otse füüsiliseks. Tabuleerimine toimib nii reaal- kui ka kaitstud
moodis. Register CR3 sisaldab lehekülje suunaja (directory) baasaadressi ja PCD (page cache
disable) ja PWT (page write through) bitte, mis kontrollivad MP vastavate pinnide tööd. Kui
PCD=1 siis PCD pinn läheb kõrgeks siinitsükli ajaks. See võimaldab välisriistvaral
kontrollida L2 vahemälu (cache memory). Lineaarne aadress, mis genereeritakse
programmide poolt jagatakse kolmeks sektsiooniks: page directory entry (lehekülje
suunasisend), page table entry (lehekülje tabeli sisend) ja page offset entry (lehekülje offseti
sisend). Joonisel 2-12 on toodud näide, kuidas see jagamine toimub. Et kiirendada mälu
tabuleerimist, on alates 80486-st sisse viidud TLB (translation look-aside buffer)
vahemälublokk. Selles hoitakse 32-e viimati külastatud mälulehekülje aadressi. Alates
Pentiumist on oma TLB nii andme- kui ka käsustiku jaoks.

Lehekülje suunaja ja lehekülje tabel.

Joonisel 2-13 on toodud tabuleerimismehhanismi seletus. Igas süsteemis on ainult üks
lehekülje suunaja, mõned lehekülje tabelid ja mitmed mäluleheküljed. Lehekülje suunaja
sisaldab 1024 32-e bitist aadressi, mis määravad 1024 leheküljetabelit. Leheküljesuunaja ja
iga leheküljetabel on 4Kb suurusega. Kui näiteks tabuleerida 4Gb mälu, läheb vaja 4Kb
suunaja jaoks ja 4Kb * 1024 = 4Mb lehekülje tabelite jaoks. DOS-is kasutab EMM386.exe
leheküljetabeleid, et ümber defineerida mälupiirkond C8000H-EFFFFH kui ülemine
mälublokk. Joonisel 2-14 on toodud näide, kuidas toimib mälupiirkondade
ümberadresseerimine.




                          Mälu adresseerimismoodid
                                                                  Arvutikomponendid FKEF.02.089




3-1. Andmemälu adresseerimine

Vaata jooniseid 3-1 ja 3-2.

Registeradresseerimine (register addressing): Allikas - register, tulem - register. Näit.
MOV ECX, EDX

Vahetu adresseerimine (immediate addressing): Allikas - sisaldub otse käsus, tulem-
register või mälupesa. Näit. MOV EBX, 12345678H

Otsene adresseerimine (direct addressing): Allikas ja tulem - register või mälupesa (üldiselt
on mälu-mälu ülekanne Intelis keelatud, erand on MOVS käsk). Mäluaadress arvutatakse
kasutades andmesegmenti DS ja käsus sisalduvat offsetti. Näit. MOV [1234H], AX. Mälu
aadress on DS*10H + 1234.

Registerkaudne adresseerimine (register indirect addressing): Allikas ja tulem - register
või mälupesa, mis adresseeritakse baas- või indeksregistri abil. Offset sisaldub registris, mis
on käsukoodis. Näit. MOV AX, [BX]. Mälu aadress saadakse: DS*10H + BX.

Baas plus indeks adresseerimine (base plus index addressing): Allikas ja tulem - register
või mälupesa. Mälu aadressi offset saadakse baas- ja indeksregistrite summana. Näit. MOV
[BX +DI], CL. Mälu aadress saadakse DS*10H + BX + DI.

Registersuhteline adresseerimine (register relative addressing): Allikas ja tulem - register
või mälupesa. Mälu aadressi offset saadakse indeks- või baasregistri ja hälbe (displacement)
summana. Näit: MOV AX, [BX + 4], mälu aadress: DS*10H + BX + 4.

Baassuhteline plus indeks adresseerimine (base relative plus index addressing): Allikas
ja tulem - register või mälupesa. Mälu aadressi offset saadakse baasregistri, indeksregistri ja
hälbe summana. Näit. MOV AX, [BX + DI + 4], mälu aadress: DS*10H + BX + DI + 4.

Skaleeritud indeks adresseerimine (scaled-index addressing): Kasutatakse alates 80386-st.
Allikas ja tulem - register või mälupesa. Teist registrit registripaaris kasutatakse kui
skaleerimisfakstorit. Näit. MOV [EBX + 2*ESI], AX, mälu aadress: DS*10H + EBX +
2*ESI.

Iga adresseerimismood on põhjalikult lahti seletatud järgnevatel lehekülgedel ja illustreeritud
näidete 3-1 kuni 3-12, tabelite 3-1 kuni 3-9 ja jooniste 3-3 kuni 3-13-ga.

3-2. Programmmälu adresseerimismoodid.

Need moodid kirjeldavad käskude JMP (jump- hüppekäskude) ja CALL (alamprogrammide
poole pöördumise käskude) adresseerimismoode. Siin eristatakse kolme moodi: otsene
adresseerimine, suhteline adresseerimine ja kaudne adresseerimine.

Otsesene programmmälu adresseerimismood (direct memory-addressing mode).

Siin sisaldub aadress, kuhu hüpatakse otse operatsioonkoodis. Nimetatakse veel far jump'ks
või intersegment jump'ks. Võimaldab hüpata kogu adresseeritava mälu ulatuses. Vt. joonis
3-14. Sama kehtib far CALL-i kohta. Reaalselt kasutatakse vähe.

Suhteline programmmälu adresseerimismood (relative program memory addressing).

"Suhteline" tähendab käsuloendaja suhtes. See mood ei ole kasutuses kõikides esimestes MP-
s. Antud adresseerimismoodi puhul antakse käsukoodis ainult hälve (displacement). Näit JMP
[2] hüppab 2 baiti edasi olevale aadressile (vt. joonis 3-15). See on segmendisisene hüpe
(intrasegment jump). Alates 80386-st on hälve 8 või 32 bitine märgiga arv. 8086-st kuni
80286-ni oli hälve 8 või 16 bitine märgiga arv. 8 bitine hälve võimaldab +127 kuni -128
baidise hüppe. Seda nimetatakse short jump'igs. 16 bitine hälve võimaldab near jump'i (+-
32Kb piirides). Alates 80386-st on võimalik +-2Gb-ne hüpe.

Kaudne programmmälu adresseerimismood (indirect program memory addressing).
Kaudseks adresseerimiseks kasutatakse yhte MP registritest, kus säilitatakse mäluaadressi
offsetti. Saab olla 16 või 32 bitine offset. Vaata tabelit 3-10, joonist 3-16 ja näidet 3-13.

3-3. Pinumälu adressseerimismoodid.

Pinumälu on LIFO (last-in, first-out) tüüpi mälu. Andmed kirjutatakse pinusse PUSH käsuga
ja loetakse pinust POP käsuga. Pinu adressseeritakse kahe registriga: SS (stack segment) ja
ESP või SP (stack pointer). Kui näiteks 2 baiti andmeid kirjutatakse pinusse siis SP-d (või
ESP-d) vähendatakse 2-e võrra. Kui andmed loetakse pinust, siis SP/ESP-d suurendatakse ühe
võrra iga baidi andmete kohta. PUSHA ja POPA kirjutavad/loevad kõik registris, peale
segmentregistrite, pinusse/pinust. Vaata joonist 3-17, tabelit 3-11 ja näidet 3-14.




                                       Masinkood
                                                                   Arvutikomponendid FKEF.02.089

Masinkood on binaarmoodis kood, millest MP "saab aru" ja millega teda juhitakse. Kokku on
üle 100 000 eri käsukoodi (eri adresseerimismeetoditega ja variatsioonidega). 8086-80286
käsud on 16 bitises moodis, alates 80386-st 16 või 32 bitises moodis. Reaal moodis on käsud
16 bitised, kaitstud moodis 16 või 32 bitised. Deskriptori D bitt näitab, kummas moodis on.
Windows opsüsteemid on alates 95-st 32 bitised. 16 bitise käsustiku ja 32 bitise käsustiku
formaadid on toodud joonisel 4-1a ja b. Esimest 2-e baiti 32 bitises käsus nimetatakse
"tagasilükatud eesliiteks" (override prefixes). Esimene modifitseerib operandi aadressi, teine
modifitseerib registri suurust. Kui 80386 ja uuem protsessor toimib 16 bitises moodis (reaal-
või kaitstud moodis) ja 32 bitine register on kasutuses, siis registrisuurune eesliide (register-
size prefix, 66H) on käsukoodi alguses. Kui on kasutusel 32 bitine mood ja 32 bitine register,
siis eesliidet ei kasutata. Kui 16 bitine register on kasutusel 32 bitises käsumoodis siis
kasutatakse eesliidet et valida vastav 16 bitine register. Aadressisuurust eesliidet (address
size- prefix, 67H) kasutatakse analoogselt. Tavaliselt valib opsüsteem, millises moodid MP
tööle pannakse, kas 16 bitises või 32 bitises moodis. (DOS töötab ainult 16 bitises moodis).

Käsukood (opcode) valib välja operatsiooni (liitmine, lahutamine, siire jne.), mida MP peab
teostama. Põhiliselt on käsukood 1 või 2 baiti lai. Joonisel 4-2 on toodud enamuse
käsukoodide esimese baidi struktuur. 6 bitti on ise käsukood, bitid 6 (D) direction ja 7 (W)
word määravad andmete liikumise suuna ja andmete laiuse. Kui W=0 on andmed baidi
laiused, kui W=1 siis sõna või topeltsõna laiused. Kui D=1, siis andmed liiguvad REG
piirkonda R/M piirkonnast, muidu vastupidi.

Joonisel 4-3 on toodud teise käsukoodi baidi struktuur. Siin on 3 piirkonda: MOD (mode) 2
bitti, REG (register) 3 bitti ja R/M (register/memory) 3 bitti. Tabelis 4-1 on toodud 16 bitise
käsu MOD piirkond. See määrab ära adresseerimistüübi ja selle kas järgneb hälve
(displacement) või mitte. Tabelis 4-2 on toodud MOD välja bittide tähendus 32 bitise
adresseerimismeetodi korral. Tabelis 4-3 on toodud REG ja R/M (kui MOD=11) väljade
bittide tähendus. Joonisel 4-4 on lahatud kood 8BEC assemblerkoodina. Saadakse et see on
käsk MOV BP, SP. Kood 668BE8H annab käsu MOV EBP, EAX, kui MP toimib 16 bitises
moodis (80386 ja uuem) ning valitakse 32 bitine register. Kui MOD=00, 01 või 10, siis R/M
väli saab tähenduse, mis on kirjas tabelis 4-4 16 bitise käsukoodi korral. Kõik 3-ndas peatükis
kirjeldatud 16 bitised adresseerimisviisid on kaetud tabeliga 4-4. Joonisel 4-5 on toodud 16
bitise käsu MOV DL, [DI] (kood 8A15H) lahtikirjutus.

On spetsiaalne adresseerimismood, mis ei ole kajastatud tabelites 4-2 kuni 4-4. See juhtub,
kui mälu andmed on adresseeritud ainult hälbe moodis 16 bitise käsukoodi korral (näit. MOV
[1000], DL). Sellisel juhul MOD=00 ja R/M=110. Üldiselt lahendab assembleri translaator
selle olukorra nii et tekitab hälbe 0 baaspointerile ja muudab MOD välja koodiks 01.
Joonistel 4-6 ja 4-7 on toodud vastavad näited.

32 bitine aadressmood on kasutusel alates protsessorist 80386. Kui need protsessorid töötavad
16 bitises moodis kasutatatkse aadressisuurust eesliidet 67. Tabelis 4-5 on toodud välja R/M
kodeering 32 bitises moodis. Kui R/M=100, ilmub lisabait käsukoodi, mida nimetatakse
skaleeritud indeksbaidiks (scaled- index bait). See võimaldab kodeerida teisi
adresseerimisviise, mis ei kajastu tabelis 4-5. Seda baiti kasutatakse adresseerimisviiside
kirjeldamisel, kus kaks registrit liidetakse, et adresseerida mälu. Joonisel 4-8 on toodud selle
baidi truktuur. Kaks vasemat bitti kirjeldavad skaleerimisfaktorit, ülejäänud kaks kolmebitist
välja kirjeldavad indeks- ja baasregistreid nagu toodud tabelis 4-3. Joonisel 4-9 on toodud
vahetu adresseerimisviisiga käsu MOV WORD PTR[BX+1000H], 1234H käsu kodeerimine
masinkoodi.

Kui segmentregistrite sisu siiratakse käsuga MOV, PUSH või POP siis kasutatakse
spetsiaalset registrite tabelit (vaata tabelit 4-6). Joonisel 4-10 on toodud käsu MOV BX,CS
konverteerimine masinkoodi. Segmentregistrite korral pole lubatud vahetu adresseerimine.

                             Sissejuhatus käsustikku.
                                                                    Arvutikomponendid FKEF.02.089

Et saada parimat ülevaadet IA-32 arhitektuuriga protsessorite käsustiku kohta, võib kasutada
Inteli koduleheküljel olevat informatsiooni. Nimelt leiab sealt dokumendi "IA-32 Intel
Architecture Software Developer's Manual", Volume 1: Basic Architekture. Selles on antud
IA-32 arhitektuuri põhjalik ülevaade ja loengukursuse aluseks ei võtnud me seda vaid
sellepärast, et see on natuke liiga mahukas (üle 400 lehekülje) ja paljud küsimused on
käsitletud liigse põhjalikkusega, see informatsioon aga jääb väljapoole arvutikomponentide
kursust. Siiski on mitmed küsimused seal kirjeldatud selgemalt ja kompaktsemalt kui õpikus.
Seetõttu kasutame mõnedel juhtudel ka seda dokumenti. Kes soovib aga saada väga
põhjalikku ülevaadet Inteli protsessoritest, võib antud dokumenti kasutada kui lisamaterjali.
Käsustikust ülevaate saamiseks kasutame selle dokumendi peatükki 5, edaspidi anname
viiteid mõningatele joonistele ja tabelitele selles failis, mille leiate kui klikite selle joonise
peale Edasistes tektides kasutame seda kui viidet IA-32.

IA-32 arhitektuuriga MP käsustik jaguneb järgmistesse klassidesse:

Üldotstarbelised käsud, ujuvkomaprotsessori käsud (x87 FPU), ujuvkomaprotsessori ja SIMD
juhtimiskäsud, MMX käsud, SSE laiendused, SSE2 laiendused, süsteemi käsud. Et näha
millised klassid on kasutusel millistel protsessoritel, vaata tabelit 5-1 eelpoolnimetatud failis.

5.1 Üldotstarbelised käsud
5.1.1 Andmesiirdamiskäsud.

Need käsud siirdavad andmeid mälu ja üldkasutatavate- ja segmentregistrite vahel. Samuti on
seal tingimuslikud siirdekäsud, andmevahetuskäsud ja pinukäsud. Siirdekäskude kohta saad
lugeda osast 7.2.1.1 (lk.7-3), vaata samuti tabelit 7-1. Andmevahetuskäsud on kirjeldatud osas
7.2.1.2 ja tabelis 7-2. Pinumanipulatsioonikäsud on osas 7.2.1.3 (joonised 7-2 kuni 7-5). Siia
gruppi võib lugeda ka andmete tüübimuutmiskäsud (vt. osa 7.2.1.4 ja joonis 7-6.).

5.1.2 Binaararitmeetikakäsud.

 Need käsud teostavad binaararitmeetilisi tehteid baidi, sõna ja topeltsõnadega, mis asetsevad
mälus ja/või üldkasutatavates registrites. Nendeks käskudeks on: liitmine, lahutamine,
inkrementeerimine, dekrementeerimine, võrdlemine, märgivahetus, korrutamine ja jagamine.
Täpsem kirjeldus on osas 7.2.2.

5.1.3 Kümnendaritmeetikakäsud.

Kümnendaritmeetikakäsud on mõeldud selleks, et justeerida eelnevat binaararitmeetika käsu
tulemit nii et moodustuks BCD number. Jagunevad need käsud pakitud ja mittepakitud BCD
arvude justeerimiskäskudeks. Vaata osa 7.2.3

5.1.4 Loogikakäsud.

Loogikakäsud jagunevad nihke (shift) ja pöördekäskudeks (rotate). Vaata joonised 7-7 kuni
7-11 ja osa 7.2.5.

5.1.5 Biti- ja baidikaupa käsud.

Need käsud opereerivad biti- või baidistringidega. Käsud sisaldavad bitikaupa testi- ja
modifikatsioonikäske, biti skaneerimiskäske, baidiasetamise käske tingimuse korral ning test
käske. Täpsemalt vaata osa 7.2.6 ja tabelit 7-3.

5.1.6 Programmi juhtimiskäsud (hüppekäsud).

Hüppekäsud jagunevad tingimuseta- ja tingimuslikeks käskudeks. Tingimusteta käsk
täidetakse igal juhul, tingimuslik vaid siis kui teatud bitt lipuregistris on 0 või 1, sõltuvalt
tingimusest. Programmi voogu juhivad käsud JMP (hüpe), CALL (pöördumine
alamprogrammi), RET (tagasipöördumine alamprogrammist), INT (katkestud) ja IRET
(katkestusprotseduurist tagasipöördumine). Siia gruppi võib lugeda ka LOOP käsugrupi, mille
abil organiseeritakse tsükleid. Samuti võib siia kuuluvaks lugeda käsud ENTER ja LEAVE,
mille abil organiseeritakse pöördumisi kõrgemataseme keele (näit. C) protseduuride poole.
Täpsemalt loe osast 7.2.7, 7.2.10 ja vaata tabelit 7-4.

5.1.7 Stringikäsud.

Üldiselt võib stringiks nimetada operandi, mis asetseb mälus. Stringikäsud on loodud, et
opereerida suurte andmemassiividega. Iga käsk opereerib ühe elemendiga, mis võib olla bait,
sõna või topeltsõna. Stringikäsud on ka ainsad, millel lubatakse mälu-mälu adresseerimist
(teistes käskudes peab vähemalt üks operand olema registris). Siia kuuluvad käsud MOVS
(Move string), CMPS (Compare string), SCAS (Scan string), LODS (Load string) ja STOS
(Store string). Samuti leidub siit grupp käske repeat (REP), korda tegevust kuni.... Täpsemalt
loe osast 7.2.8.

5.1.8 Sisend- väljundkäsud.

Siia kuuluvad käsud IN (input from port to register), INS (input from port to string), OUT
(output from register to port) ja OUTS (output string to pot). Täpsemalt loe osast 7.2.9.

5.1.9 Lipuregistri käsud (EFLAGS Instructions).

Nende käskude abil seatakse ja nullitakse lipuregistri bitte. Loe täpsemalt osa 7.2.11 ja vaata
joonist 7-12.

5.1.10 Segmentregistrite käsud.

Neid käske kasutab põhiliselt opsüsteem, et jaotada segmenteeritud mälu eri ülesannete vahel.
Loe osa 7.2.12.

5.1.11 Segakäsud (miscellaneous instructions).

Siia kuuluvad käsud LEA (load effective address), XLAT, XLATB (table lookup), CPUID
(protsessori identifikatsioon), NOP (no operation) ja UD2 (undefined). Loe osast 7.2.13.

5.2 Ujuvkomaprotsessori käsustik.

x87 ujuvkomaprotsessoris on 8 80-e bitist ujuvkomaregistrit, lisaks mõned teenindusregistrid
(vaata joonist 8-1). Kõik tehted tehakse nendes olevate topelttäpsusega ujuvkomaarvudega.
Käsugrupid on järgmised:

5.2.1 Andmesiirdamiskäsud.

Teostavad ujuvkoma- fikskoma- ja BCD arvude siirdamist mälu ja x87 registrite vahel. Siia
kuuluvad ka tingimuslikud siirdekäsud.

5.2.2 Põhiaritmeetika käsustik.

Need käsud teostavad põhilisi ujuvkomaaritmeetika ja fikskomaaritmeetika käske. Siia
kuuluvad liitmis-, lahutamis-, korrutamis- ja jagamiskäsud, samuti näiteks ruutjuure võtmine.
Operandideks on kas topelttäpsusega ujuvkoma- või täisarvud.

5.2.3 Võrdluskäsud.

Need käsud võrdlevad omavahel ujuvkoma- või fikskoma arve. Vastavalt tulemusele seatakse
lipud EFLAGS registris.

5.2.4 Transcendental instructions.

Siia alla kuuluvad põhilised triginimeetria ja logaritmilised operatsioonid. Argumendid on
ujuvkomaarvud.
5.2.5 Lae konstandid.

Nende käskudega laetakse põhikonstandid, nagu pii, naturaallogaritm kahest,
kümnendlogaritm kahest jne. x87 registritesse.

5.2.6 Ujuvkomaprotsessori juhtimiskäsud.

See käsugrupp opereerib x87 pinuga ning säilitab ja taastab ujuvkomaprotsessori olekut.

5.3 SIMD käsud.

Alates Pentium II-st ja Pentiumist MMX tehnoloogiaga (Pentium Pro) alustati single-
instruction, multiple data (SIMD) käsustiku juurutamist. See käsustiku laiendus sisaldab
MMX (multimedia extension) tehnoloogiat ning SSE ja SSE2 laiendusi. Et SIMD käske
teostada, lisati MP-le veel MMX ja XMM registrid. Täielik programmselt nähtavate registrite
komplekt on toodud joonisel 3-1. Lisaks üldkasutatavatele registritele ja x87 registritele on
seal 8 64 bitist MMX regitrit ja 8 128 bitist XMM registrit. SIMD käsustik opereerib kas 64
bitiste täisarvudega või 128 bitiste pakitud ujuvkomaarvudega. Joonisel 5-1 on toodud SIMD
käsustikku kasutava andmeformaatide kokkuvõte. MMX käsud teostavad SIMD operatsioone
kas pakitud baidi, sõna või topeltsõnadega, mis asetsevad MMX registrites. Suurt võitu
annavad MMX käsud programmides, mis teostavad fotokujutiste töötlust, multimeediat või
kommunikatsiooni. SSE laiendus tuli koos Pentium III protsessoriga. SSE käsud teostavad
operatsioone pakitud ühekordse täpsusega ujuvkoma arvudega mis asetsevad XMM registrites
ja pakitud täisarvudega MMX registrites. Need käsud kiirendavad tööd 3D geomeetria ning
video kodeerimis/dekodeerimis programmides. SSE2 laiendused tulid koos Pentium 4-ja ja
Xeon protsessoriga. SSE2 käsud opereerivad pakitud topelttäpsusega ujuvkomaarvudega
XMM registrites ja pakitud täisarvudega MMX registrites. SSE2 laiendavad SIMD käske
kahel moel: nad lisavad uued 128 bitised täisarvu käsud ja nad laiendavad 64 bitised MMX
täisarvukäsud 128 bitisteks XMM registreid kasutavateks käskudeks.

5.4 MMX käsustik.

MMX käsud on kasutusel alates Pentium Pro protsessorist. Need käsud opereerivad
operantidega, mis on pakitud täisarvud laiusega 1 bait, 2baiti (sõna), 4 baiti (topeltsõna) või 8
baiti (topelttopeltsõnad) ning mis asetsevad kas mälus, MMX registrites, või/ja
üldkasutatavates registrites. Need käsud jagunevad järgmistesse gruppidesse:

5.4.1 Andmesiirdekäsud.

Need käsud siirdavad 4-ja või 8-t baiti MMX registrite või MMX registri ja mälu vahel.

5.4.2 Teisendamiskäsud.

Need käsud pakivad ja pakivad lahti baite, sõnu ja topeltsõnu.

5.4.3 Pakitud aritmeetika käsud.

Need käsud teostavad aritmeetikatehteid täisarvudega, mis on esitatud pakitud kujul baidi,
sõna või topeltsõna laiusega.
5.4.4 Võrdluskäsud.

Need käsud võrdlevad baite, sõnu või topeltsõnu.

5.4.5 Loogikakäsud.

Need käsud teostavad loogikatehteid AND, AND NOT, OR ja XOR kaheksabaidiste
sõnadega.

5.4.6 Nihke- ja pöördekäsud.

Need käsud nihutavad pakitud baite, sõnu või topeltsõnu kui 64 bitiseid operande.

5.5 SSE käsud.

SSE käsud ilmusid koos Pentium III protsessoriga ja kujutavad endast SIMD ideoloogia
laiendust. Need käsud saab jaotada 4-ja gruppi: 1. SIMD normaaltäpsusega ujuvkoma käsud,
mis opereerivad XMM registritega. 2. MXSCR registri manageerimiskäsud. 3. 64 bitised
SIMD täisarvude käsud, mis opereerivad MMX registritega. 4. Vahemälu kontroll-, prefech ja
käske järjestavad käsud.

5.5.1 Andmesiirdekäsud.

Need käsud siirdavad pakitud ja skalaarseid normaaltäpsusega ujuvkomaoperande XMM
registrite ja XMM registrite ja mälu vahel.

5.5.2 Pakitud aritmeetikakäsud.

Need käsud teostavad aritmeetikaoperatsioone pakitud- ja skalaarsete ujuvkomaarvudega.

5.5.3 Võrdluskäsud.

Need käsud teostavad pakitud ja skalaarsete ujuvkomaarvude võrdlusi.

5.5.4 Loogikakäsud.

Teostavad loogikaoperatsioone AND, AND NOT, OR ja XOR pakitud normaaltäpsusega
ujuvkomaarvudega.

5.5.5 Lahtipakkimis- ja segamiskäsud.

Need käsud segavad omavahel baitide järjestust operandis ja pakivad lahti pakitud operandi.

5.5.6 Teisenduskäsud.

Teisendavad pakitud ja pakkimata neljabaidised täisarvud pakitud ja pakkimata
normaaltäpsusega ujuvkomaarvudeks ja vastupidi.

5.5.7 MXSCR registri manageerimiskäsud.
Neid on kaks käsku, mis võimaldavad salvestada ja taastada MXCSR staatus- ja
kontrollregistri sisu.

5.5.8 SSE 64-ja bitised SIMD täisarvkäsud.

Need täiendavad käsud kasutavad MMX registreid fikskoma arvudega operatsioonideks,
teostades operatsioone pakitud baitide, sõnade ja topeltsõnadega.

5.5.9 SSE vahemälu kontroll- ja järjestuskäsud.

Need käsud võimaldavad siirata andmeid vahemälu- ja MMX ning XXM registrite vahel, et
neid ajutiselt säilitada.

5.6. SSE2 käsud

Need käsud ilmusid koos Pentium 4 protsessoriga ning opereerivad pakitud topelttäpsusega
ujuvkomaoperandidega, mis on kas pakitud baidid, sõnad, topeltsõnad või neljabaidised
sõnad, mis asuvad XMM registrites. SSE2 käsud võib jagada nelja gruppi: 1. pakitud ja
skalaarsed topelttäpsusega ujuvkomakäsud. 2. pakitud normaaltäpsusega
ujuvkomateisenduskäsud. 3. 128 bitised SIMD fikskomakäsud. 4. vahemälu kontrolli- ja
käsujärjestuse käsud.

5.6.1 Andmesiidekäsud.

Need käsud siirdavad topelttäpsusega ujuvkomaarve XMM registriste vahel ja XMM
registrite ja mälu vahel..

5.6.2 Pakitud aritmeetikakäsud.

Siia kuuluvad liitmine, lahutamine, korrutamine, jagamine, ruutjuur ja miinimumi/maksimumi
määramine. Operandid on pakitud või skalaarsed topelttäpsusega ujuvkomaarvud.

5.6.3 Loogikakäsud.

Siia kuuluvad AND, AND NOT, OR ja XOR käsud. Operandid on pakitud topelttäpsusega
ujuvkomaarvud.

5.6.4 Võrdluskäsud.

Need käsud võrdlevad omavahel pakitud ja skalaarseid topelttäpsusega ujuvkomaarve.

5.6.5 Segamis- ja lahtipakkimiskäsud.

Need käsud kas segavad omavahel baite topelttäpsusega ujuvkomaarvudes või pakivad neid
arve lahti.

5.6.6 Konverteerimiskäsud.
Need käsud muundavad pakitud topeltsõna laiused fikskomaarvud pakitud ja skalaarseteks
topelttäpsusega ujuvkomaarvudeks ja vastupidi. Samuti muundavad nad topelttäpsusega
pakitud ja skalaarsed ujuvkomaarvud normaaltäpsusega ujuvkomaarvudeks ja vastupidi.

5.6.7 Pakitud normaaltäpsusega ujuvkomakäsud.

Need teostavad konverteerimisfunktsioone normaaltäpsusega ujuvkomaarvude ja fikskoma
arvude vahel.

5.6.8 128 bitised SIMD fikskomakäsud.

Need on lisakäsud, mis teostavad operatsioone pakitud sõnade, topeltsõnade ja neljabaidiste
sõnadega, mis asuvad XMM registrites.

5.6.9 Vahemälu kontrolli- ja käsujärjestuse käsud.

Need käsud võimaldavad siirata andmeid vahemälu ja XXM registrite vahel, et neid ajutiselt
säilitada.

5.7 Süsteemi käsud.

Neid käske kasutatakse et kontrollida protsessori neid funktsioone, mida kasutab
operatsioonsüsteem.

                                       Katkestused
                                                                  Arvutikomponendid FKEF.02.089

6.1 Katkestuste üldprotseduur.

Üldiselt kasutatakse katkestusi, et vahetada infot suhteliselt aeglaste sisend-
väljundseadmetega. Joonisel 12-1 on toodud näide programmi töötamise ja katkestuste
toimimise ajateljest. Inteli MP-l on kaks riistvara kontakti katkestuste küsimiseks (INTR ja
NMI) ja üks kontakt (INTA), mis annab loa katkestusprotseduuri toimimiseks. Samuti on seal
programmsed katkestused INT, INTO, INT 3 ja BOUND. Lipuregistris on lipud IF ja TF, mis
juhivad katkestusi. Lõpuks on spetsiaalne protseduur IRET (või IRETD alates 386-st)
katkestusprotseduurist väljumiseks.

Katkestuste juhtimine toimub katkestusvektorite tabeli kaudu. See tabel hõlmab esimesed
1024 baiti mälu algusest (aadressid 000000h-0003FFh). Seal on 256 erineva katkestuse 4-ja
baidised vektorid, mis sisaldavad katkestusprotseduuride algusaadresse (offset ja segment).
Joonisel 12-2 on toodud üks näide sellisest tabelist. Esimesed 5 vektorit on samad kõikide
Inteli MP-de jaoks (alates 8086-st). Tekstis on toodud katkestuste 0-18 kirjeldused. Täpsem
seletus on toodud ka katkestuste BOUND, INTO, INT, INT 3 ja IRET-i kohta.

Katkestusvektorite tabeli tõlgendus on erinev kui protsessor töötab reaalmoodis või kaitstud
moodis. Kaitstud moodis ei paigutata mällu mitte vektoreid vaid vektoritabeli kirjeldajad
(descriptors), analoogselt mälu adresseerimisele kaitstud moodis. Katkestuskirjeldajate tabel
(interrupt descriptor table, IDT) on 256*8 = 2Kbaiti suur. Selle tabeli algusaadress on registris
IDTR (interrupt descriptor table address register). Joonisel 12-3 on toodud selle tabeli
elemendi struktuur.

Katkestuste töötlus toimub järgmiste astmete kaupa:

1. Lipuregister paigutatakse pinusse.

2. IF ja TF lipuf kustutatakse, see keelab katkestuse katksestusprotseduuri töötlemisel.

3. CS register kirjutatakse pinusse.

4. IP kirjutatakse pinusse.

5. Uus IP ja CS võetakse kas katkestusvektorite tabelist (reaalmoodis) või
katkestuskirjeldajate tabelist (kaitstud moodis).

IF ja TF bittide asetus lipuregistris on toodud joonisel 12-4. IF-i seatakse ja nullitakse
vastavalt käskudega STI ja CLI. TF lipu seadmiseks ja nillimiseks tuleb kasutada
programmilõiku, mis on toodud näidetes 12-1 ja 12-2.

6.2 Riistvara katkestused.

Protsessoril on 2 riistvarakatkestuse pinni: NMI (non-maskable interrupt) ja INTR (interrupt
request). Kui NMI sisend aktiveeritakse, siis juhtub tüüp 2 katkestus. Seda katkestust ei saa
programmselt keelata (see ei ole maskeeritud). INTR sisend tuleb aga väljaspoolse riistvaraga
dekodeerida, et valida vektor. Tavaliselt kasutatakse selleks vektoreid numbritest 20h kuni
FFh-ni kuna Intel on reserveerinud katkestused 00h kuni 1Fh sisemisteks katkestusteks ja
tuleviku arenguteks. INTA on samuti katkestuspinn, aga see on väljaviik ja seda kasutab
väline katkestuskontroller, et sünkroniseerida enda töö protsessoriga.

NMI on tõusva frondiga takteeritav katkestuspinn. Tavaliselt on NMI külge ühendatud kas
paarsuskontroller või/ja toiteblokikontroller. Joonisel 12-6 on näide toitepinge
kontrollloogikast. Et MP jõuaks pärast pinge kadumist veel oma registrid kirjutada
patareitoitelisse mällu, vajab ta toidet vähemalt 75 ms. Joonisel 12-7 on toodud sellise toite
põhimõtteskeem.

INTR sisseviik on tasemetundlik, s.t. seda peab hoidma kõrgel tasemel (loogiline 1) kuni see
detekteeritakse. INTR signaal asetatakse välise loogika (katkestuskontrolleri) poolt ja
kustutatakse katkestusprotseduuri jooksul. See maskeeritakse (keelatakse)
katkestustöötlusprogrammi poolt ja muudetakse uuesti kättesaadavaks pärast käsku IRET või
IRETD (kaitstud moodis). MP vastab INTR aktiveerimisele INTA aktiveerimisega. Vaata
aegdiagrammi joonisel 12-8. Vastuseks INTA signaalile peab katkestuskontroller
genereerima vektori numbri andmesiini bittidele D0 kuni D7. Joonisel 12-9 on toodud kõige
lihtsam võimalus (mida muidugi ei kasutata) selle numbri genereerimiseks. Joonisel 12-10 on
skeem, mis genereerib suvalise numbri (mis on määratud lülititega) vastuseks INTA
signaalile. Kuidas teha INT sisend fronditundlikuks on näidatud joonisel 12-11.

Kõige lihtsam on ühendada klaviatuur protsessoriga kasutades katkestusprotseduuri. Kuidas
seda teha kasutades kivi 82C55 on toodud joonisel 12-12. Sealt on ka näha, et MP-le vastab
klaviatuur katkestusvektoriga 40h.
6.3 Katkestusstruktuuride laiendamine.

 Joonisel 12-13 on joonise 12-10 modifikatsioon, mis võimaldab lisada seitse eri vektoriga
katkestust. Seal on lisatud ainult üks 8 sisendiga NAND kivi. Aktiveerides samaaegselt eri IR
sisendeid, saab genereerida kuni 128 eri vektoriga katkestust. Kasutades nn. Daisy-Chained
katkestusloogikat saab katkestusstruktuuri laiendada ka ainult ühe katkestusvektori
kasutusega. Seda loogikat kasutatakse tavaliselt suurte riistavasüsteemide puhul. Tehes
mitmete katkestustellijatele loogilise OR-i, saab kasutada ainult ühte vektorit. Milline
konkreetne moodul tellis katkestuse, tehakse kindlaks tavaliselt kasutades loogikat, kus
protsessor saadab välja INTA signaali, mis läbib kõik moodulid. Mis ei tellinud katkestust,
see moodul laseb INTA signaali edasi järgmisele jne. Moodul, mis tellis katkestuse, püüab
aga selle signaali kinni ja edasi enam ei päästa. Kui mitu moodulit tellisid samaaegselt
katkestuse, on eelistatud see, mis asub INTA signaali teel protsessorile lähemal.

6.4 8259A Programmeeritav katkestuskontroller.

8259A lisab kaheksa prioriseeritud katkestusvektorit MP-le. Neid saab ka kaskadeerida,
kasutades ühte isand- (master) kontrollerit ja kuni kaheksat sekundaar- (või ori-, slave
kontrollerit). Nii saab kuni 64 eri katkestusvektorit. 8259 on lihtsalt MP-ga ühendatav, kuna
pinnid on otseühendatavad, väljaarvatu CS pinn, mis nõuab dekodeerimist ja WR pinn, mis
tuleb asendada sisend- väljund banki kirjutuspulsiga. Joonisel 12-15 on toodud 8259 pinnide
asetus ja tekstis seletatud nende otstarvet. Joonisel 12-16 on toodud skeem, kuidas üks 8259
ühendada 8086 protsessoriga. Joonisel 12-17 on toodud kaskadeeritud kahe 8259-a
ühendamine 386-s protsessoriga. Seda skeemi kasutatake paljudes vanemates PC-des ja nende
kloonides. Enne kasutamist tuleb 8259A initsialiseerida. Seda tehakse initsialiseerides
käsusõnad (Initialization command words, ICW). Eri reziime saab programmeerida kasutades
eri käsusõnu (operation command words, OCW).

Initsialiseerimine: kui 8259-t kasutatakse üksinda (mitte kaskadeeritult), tuleb laadida sõnad
ICW1, ICW2 ja ICW4, kui kaskadeeritult, siis lisandub ICW3. Sõnade sisukirjeldused ja
bitikombinatsioonid on toodud joonisel 12-18. Nende sõnade laadimisel peab pinn A0 olema
1.

Käsusõnad: nende kautamisel peab pinn A0 olema 0 (siiski, kui laetakse OCW1-e peab pinn
A0 olema 1). OCW peab olema programmeeritud kohe peale initsialiseerimist, kuna see
määrab ära katkestusmaski. Teised sõnad, OCW2 ja OCW3 kirjutatakse selle järgi. Joonisel
12-19 on toodud nende sõnade bitikombinatsioonid.

Staatusregistrid: 8259-l on 3 staatusregistrit: interrupt request register IRR
(katkestusküsimise register), in-service rgister ISR (siseteeninduse register) ja interrupt mask
register IMR (katkestusmaskregister). Joonisel 12-20 on toodud nende registrite sisu.

Kuigi inglisekeelses originaalmaterjalis on toodud 8259A programmeerimisnäide kui 16550
UART (universal asynchronous reciver/transmitter) ühendada 8088 MP-ga läbi 8259A, läheb
see liiga sügavuti ja seetõttu selles kursuses me seda näidet ei käsitle. Seda saab vaadelda kui
lisamaterjali, nendele kes on asjast rohkem huvitataud.

6.5 Katkestuste näiteid.
Reaalaja kell: Joonisel 12-26 on toodud lihtne skeemijupp, mis genereerib iga 20 või 16,5 ms
(sõltuvalt võrgusagedusest) järgi katkestuse NMI pinnile kasutades schmitti trigerit. Näites
12-14 on toodud programmilõik mis salvestab kella näidu.

Klaviatuur: Vaata joonist 12-27.




                            Sisend- väljund interfeis.
                                                                   Arvutikomponendid FKEF.02.071

7.1 Sissejuhatus sisend/väljundinterfeisidesse.

7.1.1 Sisend- väljundkäsustik.

Info lugemiseks pordist kasutatakse käske IN või INS. Info väljastamiseks pordile kasutatakse
käske OUT või OUTS. IN ja OUT siirdavad infot I/O (input/output, ehk sisend- väljund)
portide ja aku vahel (AL, AX või EAX). I/O pordi aadress on kas 16 bitisel kujul registris DX
või järgneb 8 bitisel kujul otse käsule. See aadress dekodeeritakse välise loogika poolt. 8 bitist
aadressi nimetatakse fikseeritud aadressiks p8, registris DX olevat 16 bitist pordi aadressi
nimetatakse varieeruvaks aadressiks.

Käsud INS ja OUTS siirdavad infot mälu ja I/O pordi vahel. Mälu aadress määratakse
registrite ES:DI ja DS:SI kombinatsiooniga. Nagu kõikide stringikäskude puhul
inkrementeeritakse või dekrementeeritakse (sõltuvalt suunalipust DF) pärast käsu täitmist
register SI või DI. Tsüklis saab neid käske kasutada, et lugeda või kirjutada infot rohkem kui
üks kord (kasutades näiteks REP prefiksit). Tabelis 11-1 on toodud võimalikud
sisend/väljundkäskude kombinatsioonid.

7.1.2 Isoleeeritud- ja mälupöördumistsükliga sisend/väljund.

Isoleeritud sisend/väljund skeemiks nimetatakse skeemi, kus I/O aadressid on isoleeritud
mäluaadressidest, s.t. on oma sisend-väljund aadresside ruum. I/O aadressruumiga infot
vahetades kasutatakse eraldi loogikat ning MP pinnidest M/IO ja W/R tehakse I/O
lugemissignaal IORC ja kirjutamissignaal IOWC. PC-s kasutatakse isoleeritud I/O porte et
kontrollida perifeeriaseadmeid. 8 bitist aadressi kasutatakse süsteemi välisseadmete poolt
pöördumiseks (näit. taimer ja klaviatuur), 16 bitist aadressi kasutatakse järjestik- ja
paralleelportide poole pöördumisel, samuti video- ja kettaseadmete adresseerimiseks.

Mälupöördumisega sisend/väljundi korral paigutatakse I/O seadmed lihtsalt mäluaadressidele
ning nende poole pöördutakse samade käskudega kui mälu poole. Samuti ei aktiveerita siis
IORC ja IOWC signaale. Joonisel 11-1 on toodud 8086/8088 protsessori mälu- ja I/O
aadresside skeem mõlemal, nii isoleeritud kui ka mälupöördumistsükliga sisend/väljundi
korral.

7.1.3 Personaalarvuti sisend/väljundaadressid.
Joonisel 11-2 on toodud PC I/O aadresside kaart. Sisend- väljund portide aadressid 0000h-
03FFh on reserveeritud emaplaadi ja ISA siini jaoks. Aadressid 0400h-FFFFh on tavaliselt
saadaval eri emaplaadi funktsioonide ja PCI siini jaoks. Ujuvkoma protsessor kasutab
aadresse 00F8h kuni 00FFh kommunikatsioonide jaoks. Seetõttu on pordid 00F0h-00FFh
reserveeritud. I/O aadressid 0000h-00FFh on fikseeritud, 00FFh-st ülespoole aga varieeruvad.

7.1.4 Põhilised sisendi ja väljundi interfeisid.

Elektroonsete sisendiinterfeisidena kasutatakse põhiliselt kolmeolekulisi buffermikroskeeme.
Lihtne näide on toodud joonisel 11-3. Iga kord kui teostatakse käsk IN kopeeritakse lülitite
olek registrisse AL (joonis 11-3). Buffermikroskeem aktiveeritakse signaaliga SEL, see
signaal saadakse dekodeerimisloogikast. Väljundinterfeis saab andmed MP-st ja peab neid
mingi aja säilitama, et välisseade jõuaks need vastu võtta. Joonisel 11-4 on toodud lihtne
skeem, kuidas LED-dele (valgusdioodidele) väljastada andmesiini olek. Mikroskeemi
74ALS374 kasutatakse kui buffrit, mis säilitab oleku pärast OUT käsku. Käsk ise kestab
vähem kui 1 mks. ja see ei paneks kunagi LED-e vilkuma.

7.1.5 Käepigistusloogika (handshaking).

 Et sünkroniseerida aeglase sisend-väljundseadme tööd kiire protsessoriga kasutatakse nn.
handshaking e. polling loogikat. Näitena on toodud printer. Joonisel 11-5 on toodud tüüpilise
printeri pistiku skeem. Antud näite puhul printer aktiveerib BUSY kontakti kui ta ei ole
valmis andmeid vastu võtma. MP siis kontrollib selle pinni olekut ja saadab järgmise baidi
andmeid, kui printer on valmis neid vastu võtma.

7.1.6 Mõningaid märkusi interfeiselektroonika kohta.

Kui kasutatakse mehaanilisi lüliteid sisendseadmetena (joonis 11-6), tuleb arvestada et
lülitamise hetkel tekib sädelemine ja kuna MP on väga kiire, loeb ta selle sädelemise 1-0-1-0
jne vaheldumiseks. Et sädelemise ülekandmist vältida, kasutatakse mitmeid abiskeeme (v.t.
joonis 11-7). Mõlemad skeemivariandid on asünkroonsed trigerid. Väljundseadmete
konstrueerimisel tuleb arvestada, et MP ja mitmed tugikiibistikud annavad välja väga väikest
voolu ja seetõttu tuleb interfeiskiipidena kasutada tundlikke vooluvõimendeid. Näitena on
toodud joonistel 11-8 ja 11-9, kuidas ühendada MP-ga LED ja DC mootor, kasutades
trensistorvõimendeid.

7.2 Sisend-väljunpordi aadressi dekodeerimine.

Kui kasutatakse mälupöördumistsükliga sisend-väljundit, siis dekodeeritakse seadet nagu
mälu. Põhierinevus isoleeritud- ja mälupöördumistsükliga sisend-väljundi vahel on see mitu
aadressbitti dekodeeritakse. Mälu korral dekodeeritakse näiteks A0-A31, I/O korral aga A0-
A15 või A0-A7. Aadressi dekodeerimisel kasutatakse dekoodreid, mis aktiviseerivad ainult
ühe oma väljunditest kui sisendaadress on õige. Selle aktiivse väljundiga siis lubatakse siinile
ainult üks mikroskeem korraga, aktiveerides vastava kivi CS pinni (vt. jooniseid 11-10 kuni
11-12). Andmesiin saab I/O pordil olla kas 8 bitti, 16 bitti või tänapäeval ka 32 bitti lai.
Vastavalt võtab siis seade kas 1 baidi, 2 baiti või 4 baiti aadressruumist. Vaata jooniseid 11-
13 kuni 11-16.

7.3 Programmeeritav perifeeriainterfeis 82C55.
Progammeeritav perifeeriainterfeis (PPI) 82C55 on laialt kasutatav komponent. Sellel on
sisendiks-väljundiks 24 pinni, mis on programmeeritavad 12 pinniste gruppidena ning ta
töötab kolmes eri moodis. Ise on ta TTL standartiga sobiv. Kasutatakse teda ka näiteks
paralleelprinteri ja klaviatuuri interfeisidena.

7.3.1 82C55 põhikirjeldus.

Joonisel 11-17 on toodud 82C55-e skeem. Tal on 3 I/O porti A, B ja C mis on
programmeeritavad kui grupid. Grupp A sisaldab pinne PA0-PA7 ja PC4-PC7. Grupp B
sisaldab pinne PB0-PB7 ja PC0-PC3. PPI aktiveeritakse CS signaaliga. Funktsioon valitakse
aadressbittidega A1 ja A0 (00-portA, 01 portB, 10 portC ja 11 käsuregister). Joonisel 11-18
on näitena toodud, kuidas 82C55 ühendatakse 386 protsessoriga. Kõik 82C55 pinnid peale CS
pinni, mis dekodeeritakse eri loogikaga, on otse ühendatud MP pinnidega. RESET signaal
nullib PPI ja paneb ta moodi 0 reziimi. Eraldi programmeerimist 82C55 ei vaja, ta on kohe
töövalmis pärast RESET signaali.

7.3.2 82C55 programmeerimine.

Programmeerimine toimub kasutades kahte sisemist registrit nagu on näidatud joonisel 11-19.
Grupi B bitid (port B + alumine osa pordist C) on programmeeritavad kui sisend- või
väljundpinnideks. Grupp B opereerib ainult moodides 0 või 1. Mood 0 on lihtne
sisend/väljund mood mis võimaldab grupi B pinne kasutada lihtsate sisendpinnidena või
lukustatavate väljundpinnidena. Mood 1 on strobeeritud operatsioon, kus porti B kasutatakse
andmete siirdamaiseks ja C porti "handshakingu" (käepigistuse) signaalideks (andmevahetuse
sünkroniseerimiseks). Grupi A pinne saab lisaks moodidele 0 või 1 kasutada ka moodis 2.
Mood kaks on mood, kus port A on kui kahesuunaline andmesiin. Kui bitti 7 käsubaidis
kirjutatakse 1 siis tõlgendatakse teda käsubaidina A, kui sinna kirjutatakse 0 siis käsubaidina
B. See võimaldab pordi C bitte panna 1-ks või 0-ks kui 82C55 töötab moodis 1 või 2.

7.3.3 Mood 0.

Selles moodis töötab 82C55 kui bufferdatud sisendseade või kui lukustatav väljundseade.
Joonisel 11-20 on 82C55 ühendatud kaheksa 7-e segmendilise LED-i külge. Siin on nii A kui
B programmeeritud kui väljundpordid. Tekstis on seletatud, kuidas selline süsteem töötab.
Joonisel 11-21 on näidatud, kuidas 82C55-t kasutada vedelkristallidel displei interfeisina,
samuti on toodud vastavate programmide näidised. Joonistel 11-22 ja 11-23 on 82C55 abil
ühendatud MP süsteemi sammmootor, joonisel 11-24 aga 16 klaviatuurine maatriks. Kõiki
neid näiteid võib vaadelda kui lisamaterjali, neid ei ole mõtet väga põhjalikult uurida.

7.3.4 Mood 1 strobeeritud sisend.

Selles moodis töötavad pordid A ja B kui lukustatavad sisendseadmed. Porti C kasutatakse
kui handshaking signaale. Näitena vaata jooniseid 11-26 ja 11-27.

7.3.5 Mood 1 strobeeritud väljund.

See on sarnane mood 0 väljundoperatsioonile selle erinevusega, et kasutatakse
kontrollsignaale handshakinguks. Näitena vaata jooniseid 11-28 ja 11-29.

7.3.6 Mood 2.
Selles moodis töötab ainult grupp A. Siin port A muutub kahesuunaliseks lubades andmeid
võtta vastu ja saata sama pordi kaudu. Näitena vaata joonist 11-30.

Joonisel 11-31 on toodud tabel, kus on summeeritud kõik 82C55 töötamismoodid ja kuidas
eri portide pinne nendes tõlgendatakse.

7.4 Programmeeritav klaviatuuri/displei interfeis 8279.

Kuna seda interfeissi tänapäevates arvutites eriti ei kasutata, siis vaatleme teda kui ajaloolist
näidet. Põhjalikult tema töösse me ei süvene. See skeem skaneerib ja dekodeerib kuni 64
klhvist klaviatuuri ja juhib 16 numbrilist displeid. Ta on konstrueeritud selliselt, et
võimalikult hästi sobituda MP-ga. Joonisel 11-33 on toodud näiteks, kuidas see mikroskeem
ühildada MP 8088 siinidega. Et 8279 initsialiseerida, tuleb ta programmeerida (erinevalt
82C55-st). Temasse tuleb kirjuatada 8 kontrollsõna. Esimesed 3 bitti numbrist, mis
kirjutatakse kontrollporti valivad ühe kaheksast erinevast kontrollsõnast. Kontrollsõnad on
toodud tabelis 11-4. Näide, kuidas ühendada 8279-ga 6-e numbrilist displeid on toodud
joonisel 11-37.

7.5 Programmeeritav taimer 8254.

Antud mikroskeem sisaldab 3 sõltumatut 16 bitist loendajat maksimaalse sagedusega 10
MHz. PC-s on sellel kivil 3 funktsiion: 1. genereerida kellakatkestust sagedusega umbes
20Hz, 2. genereerida DRAM mälude regenereerimissignaali, 3. anda kindla sagedusega
signaali valjuhääldajale ja teistele seadmetele.

7.5.1 8254-a põhikirjeldus.

Joonisel 11-38 on toodud 8254-a blokkskeem. 8254 on 8253-e edasiarendus. Iga loendaja
omab 3-e välispinni: CLK, GATE ja OUT. CLK sisendisse antakse väline sagedus, GATE
sisendit kasutatakse teatud juhtimissignaalide jaoks mõnes timeri moodis, OUT on loendaja
väljund. MP-ga ühendamiseks kasutatakse pinne D0-D7, RD, WR, CS, A1 ja A0.
Aadresspinne A1 ja A0 kasutatakse, et adresseerida 4-a sisemist registrit, mida kasutataske
programmeerimiseks ja loendajast lugemiseks ja sinna kirjutamiseks. Loendaja 0 on
programmeeritud genereerima umbes 20Hz sagedusega signaali kella katkestuse (vektoriga 8)
jaoks. Loendaja 1 on programmeeritud 15 µs pulsside genereerimiseks, mida kasutatakse läbi
DMA tsükli DRAM mälukivide regenereerimiseks. Loendaja 2 on programmeeritud
valjuhääldaja tooni genereerimiseks.

7.5.2 8254 programmeerimine.

Iga loendaja on individuaalselt programmeeritav kirjutades sinna kontrollsõna. Joonisel 11-39
on toodud iga biti/bittide kombinatsioonide tähendused kontrollsõnas. Iga loendaja omab
lisaks programmi kontrollsõna, mis valib kuidas loendaja töötab. 8254 saab töötada kuues eri
moodis. Joonisel 11-40 on näidatud, kuidas iga nendest moodidest funktsioneerib. Joonisel
11-41 on toodud skeemi näidis, kuidas 8254 panna genereerima kindla sagedusega meander
impulsse. Samuti on võimaldab 8254 lugeda iga loendaja sisu. Et seda teha, tuleb
programmeerida loendaja lukustamise kontrollsõna. See säilitab lugemise hetkel loendajas
oleva väärtuse kuni see MP poolt maha loetakse (v.t. joonist 11-42). Kui on vaja maha lugeda
rohkem kui üks loendaja korraga, tuleb kasutada nn. tagasilugemise (read-back) kontrollsõna.
See on toodud joonisel 11-43. Joonisel 11-44 on toodud 8254 staatusregistri sisu. Kuidas
kasutada 8254-ja kui DC mootori kiiruse kontrollerit on toodud joonisel 11-45.

7.6 Programmeeritav järjestikinterfeis 16550.

 16550 on UART (universal asynchronous receiver/transmitter), mis on ühildatav Inteli MP-
ga. Seade võimaldab infot vahetada kiirusega kuni 1.5 Mbaudi (bitti sekundis). 16550 sisaldab
FIFO buffrit sügavusega 16 baiti. Joonisel 11-47 illustreeritakse asünkroonset
andmeedastusprotokolli. Iga raam sisaldab stardibiti, seitse andmebitti, paarsusbiti ja ühe
stopbiti. Antud struktuur võib varieeruda, näiteks võib olla 8 andmebitti, samuti ei tarvitse
olla paarsusbitti. Joonisel 11-48 on toodud 16550 funktsionaalne kirjeldus. Mikroskeem on
kas 40 pinnises DIP kestas või 44 pinnises PLCC kestas. Funktsionaalselt on saatja ja
vastuvõtja sõltumatud. 16550 saab töötada kas simplex moodis (kasutatakse ainult saatjat või
vastuvõtjat), pool-duplex moodis (kasutatakse nii saatjat kui vastuvõtjat aga mitte üheaegselt
ja täis-duplex moodis (kasutatakse üheaegselt nii saatjat kui vastuvõtjat). 16550 pinnide
kirjeldused on toodud tabelis. Aadressbittidega A0, A1 ja A2 määratakse ära sisemine register
(vaata tabel 11-8). 16550 programmeerimine on lihtne ja koosneb kahest etapist: kõigepealt
initsialiseeritakse UART ja siis juhitakse tema tööd registrite abil. Initsialiseerimine toimub
pärast riistvaralist või programmvaralist resetti ja koosneb kahest etapist: programmeeritakse
kontrollregister ja siis baudimäära generaator. Kontrollregistris, mis adresseeritakse I/O
aadressiga 011 (A2, A1, A0), pannakse paika andmebittide arv, stopbittide arv ja paarsusbitt.
Joonisel 11-49 on toodud kontrollregistri bittide tähendused. Tabelis 11-9 on spetsialiseeritud
paarsusbittide kombinatsioonid sõltyvalt kolmest olekuregistri bitist ST, P ja PE. Baudimäära
generaator programmeeritakse kasutades aadressbittide kombinatsiooni 000 ja 001 (A2, A1,
A0). Pordis 000 hoitakse 16 bitise jagaja alumisi bitte, pordis 001 aga ülemisi bitte. Tabelis
11-10 on toodud standartsed baudimäärad ja jagajad kui kasutatakse kvartsi sagedusega
18,432 MHz. Joonisel 11-50 on näidatud, kuidas 16550 ühendada MP-ga. Samuti on
näidisprogrammid, kuidas UART-i prorammeerida andmete saatmisel ja vastuvõtmisel.

7.7 Kvartsgeneraator 8284A.

8284-l on mitu funktsiooni MP süsteemis, ta genereerib sünkroniseerivat kellasignaali,
RESET signaali, READY sünkroniseeritud signaali ja paljude TTL välisseadmete jaoks
kellasignaali. Joonisel 9-2 on toodud generaatori mikroskeemi pinnide tähendused ja
allpoololevas tabelis nende funktsioonid. 8284 koosneb kahest osast: kellageneraatorist ja
RESET sünkronisatsioonist. Kellgeneraatoril on 2 sisendit, X1, X2, mis määravad ära kella
sageduse ja kuhu ühendatakse kvartskristall. Generaator genereerib meandersignaali, mis
läheb väljundisse OSC. Seda kasutatakse mõnikord kui sisendsagedust teiste 8284
generaatorite jaoks. Kui F/C on 0, siis jagatakse see sisemine sagedus 3-ga, kui aga 1, siis
kasutatakse välist sagedust, mis samuti jagatakse 3-ga. Antud jagaja genereerib aegdiagrammi
READY signaali sünkroniseerimiseks, CLK signaali ja sisendi teisele 2-ga jagajale, mis
omakorda genereerib välisseadmetele sünkrosignaali, mis on jagatud kuuega ehk 2 korda
aeglasem, kui MP-l. Joonisel 9-4 on toodud skeem, kuidas 8284 on ühendatud protsessoriga.
15 MHz kvartsi abiga genereeritakse 5 MHz-ne taktsignaal protsessorile ja 2,5 MHz-ne
kellasignaal välisseadmetele. RC ahel garanteerib RESET signaali pärast toite sisselülitamise
või nupule vajutamisel. D triger 8284 sees garanteerib, et RESET signaal on kõrge pärast 4-ja
kellasignaali ja püsib kõrge vähemalt 50 µs.

7.8 READY signaal ja ooteolekud (wait states).
Protsessoril on sisendpinn READY, mida kasutatakse aeglaste sisend-väljudseadmete ja
aeglase mälu sünkroniseerimisel. Ooteolek (wait state) on ekstra kellaperiood, mis pannakse
T2-e ja T3-e vahele, et pikendada sünkroniseerimisperioodi. Kui välisloogika aktiviseerib
READY pinni, siis protsessor pikendab andmevahetustsüklit ja nii "pikendab" aegdiagrammi.
See võimaldab sünkroniseerida aeglaste seadmete tööd. READY pinn nõuab siiski teatud
aegdiagrammist kinnipidamist. Joonisel 9-14 on toodud näide READY signaali
sünkroniseerimise kohta kasutades RDY sisendit 8284-s. RDY aegdiagramm on toodud
joonisel 9-15. READY signaali genereerib tavaliselt 8284. Kasutades ASYNC sisendit antud
kivil, saab kasutada ühest või kahest sünkroniseerimistsüklit. Kui ASYNC on 1, kasutatakse
üheastmeslist sünkronisatsiooni, kui 0 siis kaheastmelist. Joonisel 9-17 on toodud skeem,
mille abiga saab genereerida nii mitu ooteolekut kui palju vajatakse. Joonisel 9-18 on toodud
aegdiagramm selle skeemi töötamisel.

  Sisend-väljund mälu otsepöördumisega (Direct Memory
                     Access, DMA)
                                                                 Arvutikomponendid FKEF.02.089




DMA kontroll käib kahe protsessori pinni abil: HOLD ja HOLDA. Joonisel 13-1 on toodud
DMA tsükli tavaline aegdiagramm. Pärast HOLD pinni aktiveerimist vastab protsessor (pärast
paari takti) HOLDA pinni aktiveerimisega ja läheb kõrge impedansiga olekusse, andes siini
teisele kontrollerole hallata. HOLD signaalil on kõrgem prioriteet kui INTR või NMI
signaalidel. Temast kõrgem prioriteet on RESET signaalil. DMA READ signaaliga
kirjutatakse andmed mälust I/O seadmesse, DMA WRITE signaaliga aga kirjutatakse I/O
seadmest mällu. DMA tsüklis aktiveeritakse mõlemad, nii mälu kui ka sisend-väljundseadme
kirjutamis- või lugemissignaalid. 8086 baasil näide selle teostamisest on toodud joonisel 13-2.
Andmete edastamiskiiruse mälu ja sisend-väljundseadmete vahel määrab tavaliselt ära DMA
kontroller.

8.1 DMA kontroller 8237.

Joonisel 13-3 on toodud 8237-e blokkdiagramm. 8237 on neljakanaliline ja võimaldab
andmeedastust kiirusega kuni 1.6 Mb/s. Iga kanal on võimeline adresseerima 64 kb mälu ja
siirdama 64 kb andmeid ühe programmeerimistsükliga. Pinnide difinitsioonid on toodud
tabelis. 8237-e programmeerimine toimub kasutades käsuregistrit (command register CR).
Selle 8 bitise registri bittide tähendused on toodud joonisel 13-4. Lisaks toimub 8237-e
juhtimine moodregistrite abil. Iga kanal omab oma moodregistrit, mille struktuur on toodud
joonisel 13-5. Antud mikroskeemi juhtimisel osalevad veel küsiregister (request register),
mask register ja status register. Nende struktuur on toodud joonistel 13-6 kuni 13-9. Kõiki
registreid saab juhtida kasutades aadresspinne A0 kuni A3 ja signaale IOR ja IOW. Mis
kombinatsioonid on kasutusel, on toodud joonisel 13-10. Et eristada 16 bitiste andmete
ülekandmisel, kumb baitidest on aktiivne, kasutatakse sisemist D trigerit (F/L), mis on kas 1
või 0 (vt. joonist 13-11). Et 8237-e ühte kanalit programmeerida, tuleb läbi teha 4 käsku: 1.
nullida F/L triger, 2. keelata antud kanal, 3. programmeerida aadressi madalamad bitid ja siis
kõrgemad bitid, 4. programmeerida loendurite madalamad ja siis kõrgemad bitid. Kuidas
8237 ühendada näiteks protsessoriga 80X86 on toodud joonisel 13-12. Tavaliselt on PC
arvutites 2 DMA kontrollerit, mis asetsevad I/O aadressidel 0000h-000Fh (kanalid 0-3) ja
00C0h-00DFh (kanalid 4-7). Mis aadressidel on registrid, kus sisalduvad mäluaadresside bitid
A16-A23 ja A24-A31 on toodud tabelis 13-1.

8086 protsessoris ei olnud stringikäske, mälu-mälu andmesiirdeoperatsioone sai teostada
ainult DMA kanali vahendusel. Samuti sai mällu kirjutada ühte kindlat baiti kõige kiiremini
kasutades DMA kanaleid (näiteks videomälu tühjendamine). Vastavad näidisprogrammid on
toodud näidetes 13-1 ja 13-2. Joonisel 13-13 on toodud näidsena, kuidas andmeid printida
kasutades DMA kanalit.

8.2 Jagatud siini operatsioonid.

Tänapäevastes arvutites on tavaliselt kasutusel mitu siini, mis jagunevad lokaalseteks ja
jagatuteks. Kuna tavaliselt on välisseadmete kontrollerid juba oma olemuselt kindlat
programmi sooritavad protsessorid, tuleb eristada siine, mida kasutab ainult üks arbiiter
(protsessor) või mitu arbiitrit. Jagatud siine kasutab siis mitu arbiitrit (siiski üks fikseeritud
ajahetkel). Joonisel 13-14 on näidisena toodud lokaalse ja jagatud siini põhimõtteskeem.
Lokaalne siin on ühendatud mälu ja sisend-väljundseadmetega mis on otse juurdepääsetavad
ühele protsessorile ilma eri spetsiaalsete protokollide või reegliteta. Jagatud siinile peab olema
juurdepääs mitme eri protsessori poolt ning see võib sisaldada mälu ja I/O seadmeid, mis on
juurdepääsetavad kõikide protsessorite poolt. Joonisel 13-15 on näitena toodud, kuidas 8088
ühendada kui jagatud siiniarbiitrit. Tegelikult võib ka DMA kontrollerit pidada jagatud siini
arbiitriks, kuna ta suudab siini kontrollida. Erinevus täielikust siiniarbiitrist on ainult see, et
viimane suudab sooritada eri programme, siis DMA kontroller suudab siirdada ainult andmeid
mälu ja sisend- väljundseadmete vahel. Üheks näiteks siiniarbiitrile on kivi 8289. Jagatud siin
on konstrueeritud tavaliselt jagama infot vaid mitme eri MP vahel, samal ajal kui lokaalsetel
siinidel tegutsevad MP üksi, kasutades oma lokaalseid ressursse ja sooritades oma lokaalseid
programme. Joonisel 13-16 on toodud 8289 blokkdiagramm. Samas on toodud ka tema
pinnide tähendused.

Weitere ähnliche Inhalte

Andere mochten auch (13)

Gpib
GpibGpib
Gpib
 
Eisa
EisaEisa
Eisa
 
Pci
PciPci
Pci
 
Sector 10 Estatal
Sector 10 EstatalSector 10 Estatal
Sector 10 Estatal
 
Isa
IsaIsa
Isa
 
Vme
VmeVme
Vme
 
Input Output
Input OutputInput Output
Input Output
 
Encuentro Nuevos MEdios EICTV (Cuba)
Encuentro Nuevos MEdios EICTV (Cuba)Encuentro Nuevos MEdios EICTV (Cuba)
Encuentro Nuevos MEdios EICTV (Cuba)
 
Industrial organic chemistry
Industrial organic chemistryIndustrial organic chemistry
Industrial organic chemistry
 
Dma
DmaDma
Dma
 
Magento devhub
Magento devhubMagento devhub
Magento devhub
 
Interrupts
InterruptsInterrupts
Interrupts
 
Canada’s Anti-Spam Legislation
Canada’s Anti-Spam LegislationCanada’s Anti-Spam Legislation
Canada’s Anti-Spam Legislation
 

Kürzlich hochgeladen

Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...
Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...
Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...Eesti Loodusturism
 
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...Eesti Loodusturism
 
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdf
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdfMaaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdf
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdfEesti Loodusturism
 
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...Eesti Loodusturism
 
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdf
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdfRMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdf
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdfEesti Loodusturism
 
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdf
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdfLeaderLiit_Triin Kallas_strateegiapäev 09.04.pdf
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdfEesti Loodusturism
 
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...Eesti Loodusturism
 
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdf
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdfEMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdf
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdfEesti Loodusturism
 
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...Eesti Loodusturism
 
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...Eesti Loodusturism
 
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptx
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptxEMÜ_Tarmo Pilving_strateegiapaev_090424.pptx
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptxEesti Loodusturism
 

Kürzlich hochgeladen (11)

Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...
Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...
Maaturism_Raili Mengel_Loodusturismi ettevõtjate võimalused Eesti Maaturismi ...
 
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...
2024-04-09 Visit Estonia esitlus_Piret Koodi_Loodusturismi strateegiapäev_väl...
 
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdf
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdfMaaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdf
Maaturism ja ELTÜ_ELin Priks_välisturgude võimekus_Intereg_projekt_090424.pdf
 
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...
VisitEstonia_Lily Allas_VisitEstonia loodusturismi tegevused_strateegiapaev_0...
 
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdf
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdfRMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdf
RMK_Marge Rammo_Külastuskorraldus_strateegiapäev_0904.pdf
 
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdf
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdfLeaderLiit_Triin Kallas_strateegiapäev 09.04.pdf
LeaderLiit_Triin Kallas_strateegiapäev 09.04.pdf
 
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...
KKA_Kaja Lotman_Loodusturism ja ettevõtlus kaitsealadel_strateegiapaev_090424...
 
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdf
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdfEMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdf
EMÜ_Marika Kose_loodust hoidev loodusturism_strateegiapaev_090424.pdf
 
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...
Annika Klemets_Loodusturismi väljavaated rohehoiu perspektiivist_strateegiapa...
 
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...
Maaturism_Raili Mengel_Märgis Matkajasõbralik_Hiker-friendly_strateegiapaev_0...
 
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptx
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptxEMÜ_Tarmo Pilving_strateegiapaev_090424.pptx
EMÜ_Tarmo Pilving_strateegiapaev_090424.pptx
 

KodulehekokkuvõTe

  • 1. I. SISSEJUHATUS Arvutikomponendid FKEF.02.089 1-1. Ajalooline tagasivaade. Mikroprotsessorite (MP) ajalooline areng. Maailma esimene MP oli Intel 4004- 4-ja bitine MP. p-MOSFET, 50 KIP. Uuendatud 4040 oli kiirem. Samuti TMS-1000. 1971. a. 8008 - 8 bitine MP (mälu siin 14 bitti, max 16kb). 1973.a.-8080. Motrola-MC6800. Tabel 1-1 esimesed 8-bitised MP-d. 8080: f=500kHz, TTL sobivus, 16 bitti mälu siin (64kb). Esimene personaalarvuti (PA) MITS Altair 8800 1974.a. 1977.a.-8085, viimane 8 bitine MP. f=770kHz (1,3 us.). Sisemine kell ja süsteemi kontroller. Sama käsustikuga oli Zilog Z-80. "Modernsed" MP-d alates 1978.a. 1978.a. 8086- andmed 16 bitti, aadress 20bitti (max mälu 1Mb), 1079.a. 8088- andmed 8 bitti, aadress 20 bitti. Mõlemal oli 6 baidine vahemälu käskude hoidmiseks. f=2,5MHz. Mõlemad olid CISC (Complex Instruction Set Computes). 1981.a. IBM PC XT-s 8088. 1983.a. 80286- andmed 16, mälu 24 bitti. f=4MHz. Alates 1986.a. 32-bitise MP-d. 80386 (mälu kuni 4Gb). Redutseeritud versioonid SX, SL, SLC. GUI-Graphical User Interface. VGA-Variable Graphics Array. 386 f=40MHz. 1989.a. 80486- 386 edasiarandus + vahemälu + 387 f=66 MHz (DX2). 1993- Pentium f=133 MHz., vahemälu 16kb. 2 fixkoma protsessorit- Superscalare Technology. Jump prediction technology- hüppekäskude etteennustamine. Andmesiin 66 MHz (486- 33 MHz). RISC- reduced instruction set computer. iCOMP- protsessorite kiiruslik võrdlus (iCOMP2- 10 korda väiksem). Joonised 1- 1 ja 1-2 iCOMP võrdlus eri protsessoritel. Tabel 1-2 Inteli ja Motorola toodetud protsessoreid. 1995.a. Pentium Pro- 16kb L1-e (8kb andmed ja 8kb kood). 256k L2, 3 fixkoma protsessorit. 1997.a. Pentium II. 100 MHz andmesiin. 1998.a. Xeon= Pentium II L1 32 kb, L2 512kb, 1Mb või 2Mb. Uuemate protsessorite võrdlus vanematega on toodud Tabelis I. Joonisel 1-3 on toodud 80486, Pentiumi, Pentium Pro ja Pentium II kontseptuaalne võrdlus. Tabel I: Inteli protsessorite ajalooline areng. Valgus läbib Lisandunud ühe Aast Protsesso Andmesii Aadresssii Transistori Kellata võrreldes kellatak a r ni laius ni laius te arv kt [ns] eelmisega ti jooksul [cm] 1977 8085 8 16 10t. 320 9600 1978 8086 16 20 29t. 200 prefeching 6000
  • 2. 8086+clock,2*DM A, INT contr., 1980 80186 16 20 40t. 125 3750 3*16 bit timers, CS unit real mode+protected 1983 80286 16 24 100t 70 2100 virtual address mode pipeline, address 1986 80386 32 32 275t. 33 990 translation caches 386+387+cache 1989 80486 32 32 1milj. 20 contr. +8kb cache 600 memory 2 parallel integer pipelines, floating point pipeline, 1993 pentium 64 32 3milj. 5 dynamic 150 branceprediction, data & code cache 8kb etc. L2 cache (512kb) pentium 3 * 12-staged 1995 64 36 5.5 milj. 4 120 pro pipelines etc., MMX 4*12-stage pentium pipelines, L2 1997 64 36 7.5 milj. 3 75 II cache 512kb, 1Mb, or 2Mb etc. 70 new floating- point instr., 12 new multimedia pentium instructions, 8 1999 64 36 9.5 milj. 1.5 45 III new cacheability instructions to improve the L1 cache 400 MHz system bus, 144 new double-precision floating-point pentium instr., 2*ALU, 2000 64 36 11 milj. ??? 0.5 15 IV NetBurst microarchitecture (20 stages branch prediction), 0,13 um tchnology
  • 3. 1-2. Mikroprotsessoritel põhinevad personaalkompuutrite süsteemid. Joonisel 1-4 on toodud personaalkompuutrite tüüpiline blokkdiagramm. Mälu- ja sisend-väljund süsteemid Joonisel 1-5 on toodud personaalkompuutri mälukaart. See on sarnane kõikidele Inteli protsessoritele. Mälusüsteem on jaotatud 3-e ossa: TPA (transient program area, 640 kb), süsteemi mälu (384 kb) ja XMS (extended memory system). ISA- (industry standart arhitecture) 16 bitti, EISA (extended ISA) 32 bitti, MC (microchannel, PS-2) 32 bitti, PCI (peripheral component interconnect) 32 või 64 bitti. ISA & EISA- 8MHz, PCI- 33 MHz. VESA (Video Electronic Standards Association) või VL siin, 32 bitti, takteeritakse MP sagedusega. USB (universal serial bus) 100Mbps. AGP (advanced graphics port) 66 MHz, 64 bitti. DOS (disk operating system). Joonisel 1-6 on toodud TPA jaotus DOS-s. BIOS (basic I/O system). ROM (read only memory), RAM (random access memory), EEPROM (electrically erasable read only memory), EPROM (erasable/programmabl read only memory). CD-ROM memory (compact disk read only memory), DVD (Digital Versatile Disk). COMMAND.COM (command processor). TSR (terminate and stay resident). Joonisel 1-7 on toodud süsteemimälu jaotus DOS-s. CGA (color graphics adapter), EGA (enhanced graphics adapter), VGA (variable graphics array). EMS (expanded memory system). LIM-4 EMS. Joonisel 1-8 on toodud EMS mis on kasutusel vaid DOS-is vanematel arvutitel. I/O, sisend-väljund aadressväli on 16 bitti (max 64kb) lai (vanematel arvutitel 10 bitti (1kb) lai). Joonisel 1-9 on kirjeldatud sisend-väljund seadmete aadressväli PC arvutites. DOS operatsioonisüsteemi lühiülevaade Kuigi DOS operatsioonisüsteem oli kasutusel vanemates arvutites ja praegu Win NT ja Win 2000 süsteemides kõik DOS-i programmid ei tööta (eriti need mis kasutavad absoluutset adresseerimist), on siiski kasulik natukene DOS-i tutvustada, see annab ülevaate ka riistvara funktsioneerimise loogikast. Config.sys, high memory, extended memory manager, VCPI- virtual control program interface. DPMI- DOS protected mode interface. Autoexec.bat. Mikroprotsessor Mikroprotsessor või CPU (central processing unit) on arvutisüsteemi "aju ja süda". Ta juhib andmete voogu enda ja mälu ning sisend-väljundseadmete vahel (kui pole tegu mälu otsepöördumisega) ning täidab lihtsamaid aritmeetilisi ja loogilisi operatsioone nende andmetega. Tabelis 1-3 on toodud näited aritmeetilistest ja loogilistest operatsioonidest, mida täidavad mikroprotsessorid. Fixkoma andmed on kas bait (8 bitti), sõna (16 bitti) või topeltsõna (32 bitti). MP suunab programmi täitmist sõltuvalt aritmeetilise või loogilise tehte tulemusest. Selleks kasutab ta nn. lippu (flag). Mõned Inteli MP-s kasutatavad lipud on toodud tabelis 1-4. Siinid: aadresssiin, andmesiin, kontrollsiin. Joonisel 1-10 on skemaatiliselt näidatud, kuidas MP juhib andmevoogusid läbi siinide. Mäluaadressid (aadresssiini laius) on: 8086, 8088, 80186 ja 80188- 00000H-FFFFFH (1Mb); 80286 ja 80386SX- 000000H-FFFFFFH (16Mb); 80386EX- 0000000H-1FFFFFFH (32 MB); 80386DX, 80486, Pentium ja Pentium Pro- 00000000H-FFFFFFFFH (4Gb); Osadel Pentium Pro konfiguratsioonidel, Pentium II, Pentium III ja Pentium IV- 000000000H- FFFFFFFFFH. Andmesiini laius varieerub 8 bitist (8088 ja 80188) kuni 64 bitini (Pentium
  • 4. Pro ja uuemad). Vaata ka tabelit 1-5. Joonisel 1-11 on toodud mälu struktureerimine (pageing) eri protsessoritel. Kontrollsiini mõned signaalid on: MRDC (memory read control), MWTC (memory write control), IORC (I/O read control ja IOWC (I/O write control). 1-3. Numbrisüsteemid Positsiooniline noteering Numbrid: kümnendsüsteemis (destimalsüsteemis) 0-9, kaheksandsüsteemis (oktaalsüsteemis) 0-7, kuuetestkümnendsüsteemis (heksadetsimaalsüsteemis) 0-F, kahendsüsteemis (binarisüsteemis) 0 ja 1. Vaata näiteid 1-3 ja 1-4. Konversteerimine detsimali. Vaata näiteid 1-5 kuni 1-7. Konverteerimine detsimalist. Fixkoma arvud: 1. Jaga detsimalnumber baasnumbriga (näit. 2, 8, 16 või muu) 2. Kontrolli jääki 3. Korda samme 1 ja 2 kuni kordaja on 0. Vaata näiteid 1-8 kuni 1-10. Ujuvkomaarvude murdosa: 1. Korruta murdosa baasnumbriga 2. Kirjuta saadud tulemus kui number (isegi kui see on 0) 3. Korda samme 1 ja 2 kuni jääk on 0. Osa arvude teisendus ei koondu, siis tuleb vaadata millise täpsuseni tesendatakse. Vaata näiteid 1-11 kuni 1-13. Binari-kodeeritud heksadetsimal. Vaata näited 1-14 ja 1-15 ning tabel 1-6. Negatiivsete arvude esitus On kasutusel 2 süsteemi: baas- või baas - 1 komplement. Vaata näited 1-16 kuni 1-19. 1-4. Andmeformaadid arvutites. Andmed arvutites on kas: ASCII kujul, BCD kujul, märgiga või märgita fixkoma arvuna või ujuvkoma arvuna. ASCII andmed: ASCII (American Standard Code for Information Interchange) kujul hoitakse arvutis sümbolinformatsiooni. Algselt oli ASCII 7-ne bitine, tänapäeval kasutatakse nn. 8- bitist ehk laiendatud ASCII-d. Vaata tabeleid 1-7 ja 1-8. Paljud Windows programmid kasutavad Unicode süsteemi, kus andmed on 16 bitises esituses (1 bait ASCII, teine lisainfo). Vaata näidet 1-20 . BCD (Binary Coded Decimal) andmed. Pakitud BCD ja mittepakitud BCD. Vaata näidet 1-21 ja tabelit 1-9. Fixkoma arvude esitused.
  • 5. Baidilaiused (8 bitti): märgiga ja märgita arvude esitus. (vahemik -128 kuni 127 või 0-255). Vaata näiteid 1-22 kuni 1-24. Sõnalaiused (16 bitti): Inteli omapära (little endian format): arvu väiksemal positsioonil numbrid (least significant byte) on salvestatud madalamal mäluaadressil ja most significant byte- kõrgemal (vt. joonis 1-13). Arvude vahemik on -32768 kuni 32767 või 0-65535. Topeltsõna laiused (32 bitti): arvude vahemik -2147483648 kuni 2147483647 või 0- 4294967296. Vaata joonist 1-14. Ujuvkoma arvude esitus. Ujuvkoma esitus on kas 4-ja biti laiune või 8-a biti laiune (topelttäpsusega arv) vt. joonis 1- 15 ja tabel 1-10. Arvu esitus koosneb märgist (1 bitt mõlema täpsuse korral), eksponendist (8 bitti või 10 bitti) ning mantissist (23 bitti või 52 bitti). Mantissi kujutamisel kasutatakse nn. maskeeritud bitti, arv ümardatakse nii et viimane bitt oleks 1 ja see siis maskeeritakse. Eksponent kujutatakse kui "biased exponent", lisatakse kas 127 (7FH) või 1023 (3FF). See on selleks, et kujutada negatiivseid eksponente samal kujul. "Inteli" mikroprotsessorid ja nende arhitektuur Arvutikomponendid FKEF.02.089 Antud kursuse alguses tuleb juttu ainult Inteli 32 bitise sisemise arhitektuuriga protsessoritest (IA-32 arhitektuur), 2-1. Mikroprotsessori sisemine arhitektuur. Et kergendada mikroprotsessorite kursust mittekuulanud üliopilaste arusaamist arvutikomponentide kursusest, teeme kolmandast loengust alates sissejuhatuse 8085 mikroprotsessorisse. Kes on selle osa enne juba läbinud, nendel pole ilmselt mõtet paari loengusse tulla. Loodame et saame õpikuga edasi minna alates viiendast loengust. Sissejuhatus 8085-te on inglisekeelse tekstina lingitud siia . Läheme edasi 8086 käsitlemisega. 8086 koosneb sisuliselt kahest osast: Bus Interface Unit-ist (BIU, siini interfeisi blokk) ja Execution Unit-ist ( EU, sooritusblokk). BIU loeb mälust käske (feches instructions), loeb andmeid mälust ja portidest ning kirjutab andmeid mällu ja sisend- väljund- portidesse. EU sooritab käske, mis on juba loetud mälust. BIU ja EU töötavad teineteisest sõltumatult. BIO on protsessori interfeiss välismaailma. BIU sisaldab segmentregistreid, käsuloendajat (instruction pointer), käskude vahemälu (instruction queue) ja aadressgeneraatorit/ siini kontrollskeemi, mis kindlustavad käskude lugemise mälust, nende järjekorda asetamise ja siini kontrolli. Käskude vahemälu on FIFO (first in, first out) tüüpi registrite grupp mis võimaldab salvestada kuni kuus baiti käsukoode. Kui see buffer on täis, ei teosta 8086 ühtegi siinioperatsiooni. Kui loetakse sisse hüppekäsk, tühjendatakse buffer ja alustatakse käskude lugemist aadressilt, kuhu antud hüppekäsk suunab. Kui on tingimuslik hüppekäsk, oodatakse ära enne käsu täitmise tulemus ja siis alles teostatakse hüpe, juhul kui tingimused on täidetud. Tänapäevasemad protsessorid on tunduvalt keerulisemad, nendes
  • 6. lisanduvad uudsed lahendused on toodud tabelis I eelmises osas. Täpsemalt käsitletakse seda järgnevates loengutes. Nüüd läheme tagasi raamatu juurde. Programmeerimismudel On programmselt nähtavad ja programmselt nähtamatud registrid (vt. joonis 2-1). Registrite nimed sõltuvad sellest kas nad on 32-e, 16-e või 8 bitise laiusega. Näiteks Aku: 32 bitti: EAX, 16 bitti AX, 8 bitti AH või AL, sõluvalt kumb 8 bitine osa sõnast. Nähtavad 32-e bitised registrid 80386-st alates on: Aku (accumulator, EAX), Baas (base index, EBX), Loendur (count, ECX), Andmed (data, EDX), pinuosundaja (stack pointer, ESP), baasosundaja (base pointer, BP), sihtindeks (destination index, DI), lähteindeks (source index, SI), ja käsuloendaja (instruction pointer, IP). Lisaks on protsessoris veel lipuregister (flags, EFLAGS 32 bitisel protsessoril) ja 4 segmentregistrit: koodsegment (code, CS), andmesegment (data, DS), ekstrasegment (extra, ES) ja pinusegment (stack, SS). Segmentregistritel FS ja GS ei ole nimesid pandud. Registrite nimed tulenevad põhiliselt sellest, milleks neid programmeerimisel kasutatakse. Täpsemalt loengul. Lipud: Võivad muutuda ainult aritmeetiliste ja loogiliste käskude sooritamisel, kunagi ei muutu andmesiirdamiskäskude täitmisel. C- ülekanne (carry), P- paarsus (parity), A- lisaülekanne (auxiliary carry), Z- null (zero), S- märk (sign), T- lõks (trap), I- katkestus (interrupt), D- suund (direction), O- ületäitumine (overflow), IOPL- sisend- väljund priviligeeritud tase (I/O privilege level), NT- pesitssev ülesanne (üksteise sees olevad ülesanded, nested task), RF- resümee (resume), VM- virtuaalne mood (virtual mode), AC- reastamiskontroll (alignment check), VIF- virtuaalne katkestuslipp (virtual interrupt flag), VIP- virtuaalne katkestusseis (virtual interrup pending), ID- identifikatsioon (identification). 2-2. Mälu adresseerimine "reaalmoodis" Võimaldab adresseerida ainult esimest 1Mb mälu. Võimaldab DOS-is kirjutatud programmidel töötada kõikides Inteli protsessorites. Segment ja offset. Segmentregister defineerib mälu algusaadressi 64Kb blokil, offsetregister defineerib baiti (sõna, topeltsõna) selle bloki sees (vt. joonis 2-3 ja tabel 2-1). Absoluutaadressi saamiseks tuleb segmentregistri sisu nihutada 4 baiti vasakule (korrutada 16-ga ehk lisada lõppu 0H) ja siis liita offset. segmentregister saab mälu osundada 16 baidiste blokkide, nn. paragrahvide (paragraph) täpsusega. Maksimaalne mäluaadress, mis 16 bitise segment- ja offsetregistriga saab sellel meetodil adresseerida on 10FFEFH, see on 64Kb- 16baiti rohkem kui FFFFF. Alates 80286-st saab sinna ka reaalselt panna mälu (protsessoril on olemas A20 aadresspinn). Seetõttu kutsutakse aadressvälja 100000H-10FFEFH high memory area ja uuemad DOS-i versioonid lubavad sinna kirjutada opsüsteemi teatud osasid (kui on installeeritud HIMEM.SYS). "Vaikimisi" võetavad segment- ja offset registrite kombinatsioonid on toodud tabelites 2-2 ja 2-3 eri protsessorite kohta. Kood CS:IP, pinu SS:SP või BP, andmed DS:BX, DI või SI, string ES:DI.( protsessorid 8086 kuni 80486). Kuni 80286-ni on 4 mälu segmentregistrit, 80386-st ülespoole aga 6 mälu segmentregistrit. Joonisel 2-4 on toodud näide süsteemist 4-ja mälu segmenteerimispiirkonnaga. Joonisel 2-5 on toodud näidisprogrammi asetsemine mälus DOS opsüsteemis. 2-3. Sissejuhatus mälu adresseerimisse kaitstud moodis.
  • 7. Erinevus reaalmoodist on selles, kuidas MP interpreteerib segmentregistrit mälu adresseerimisel. Segmentregister sisaldab selektorit, mis selekteerib kirjeldaja (descriptor) kirjeldajate tabelist (descriptor table). Alates 80386-st on offset 32 bitine, mis võimaldab adresseerida kuni 4Gb suuruste segmentide sees. Selektor (mis on segmentregistris) valib välja ühe 8192-st kirjeldajast vastavast tabelist. Kirjeldaja kirjeldab piirkonda, pikkust ja juurdepääsu õigusi mälusegmendi kohta. On 2 kirjeldajate tabelit, globaalsed kirjeldajad ja lokaalsed kirjeldajad. Globaalne kirjeldaja on opsüsteemi kirjeldaja (system descriptor), lokaalne aga rakendusprogrammi kirjeldaja (application descriptor). Iga programm saab siis kasutada kuni 16384 mälusegmenti samal ajal. Iga kirjeldaja on 8 baiti lai, kirjeldajate tabelid on kumbki 64 Kb suurused. Kirjeldajate tabelite strukuur on joonisel 2-6. Baasaadress osundab mälusegmendi algust. Segmendi limiit (segment limit) näitab viimast ofseti aadressi, mis eksisteerib antud segmendis. 80286-s on 16 bitine limiit, 386-st alates 20 bitine. Alates 386-st lisandub G bitt (teralisuse bitt, granularity bit). Kui G=0, siis segmendi limiit on 00000H kuni FFFFFH, kui G=1, siis nihutatakse segmenti 12 bitti vasakule, saadakse 4Kb segmendi samm. AV näitab, kas segment on kättesaadav (AV=1) või mitte (AV=0). D näitab kas käsud ja registrid on 16 või 32 bitised (D=0 - 16 bitised, D=1 - 32 bitised). Juurdepääsu õiguste baidi (access rights byte) bitid on kirjeldatud joonisel 2-7. Need bitid võimaldavad kontrolli üle kogu segmendi. Kontroll sõltub, kas tegemist on andme- või koodsegmendiga. Kirjeldajad valitakse kirjeldajate tabelist segmentregistri abil. Joonisel 2-8 on toodud, kuidas segmentregister töötab kaitstud moodis. Lisaks 13 bitisele selektorile (valib ühe 8192-st kirjeldajast) on T1 bitt (T1=0, globaalne kirjeldaja; T1=1, lokaalne kirjeldaja) Soovitud privileegi tase (reguested privilege level, RPL) määratakse ära 2-e bitiga. Kõrgeim on 00 ja madalaim 11. Kasutatakse mitmekasutaja keskkondades. Joonisel 2-9 on näidatud, kuidas segmentregister, mis sisaldab selektorit valib kirjeldaja globaalsest kirjeldajate tabelist. Programmselt nähtamatud registrid. Kirjeldajate tabelid on mälusüsteemis. Et organiseerida nendele juurdepääsu kasutatakse programselt nähtamatuid registreid (alates 80286-st). Joonisel 2-10 on need registrid toodud. Need registrid kontrollivad MP tööd kaitstud moodis. Osa nendest pole programselt juhitavad. Iga segmentregister sisaldab lisaks 16 bitisele nähtavale osale veel 64 bitti (alates 80386-st, 80286-l on see 50 bitti) infot mis sisaldab baasaadressi (32 bitti), limiiti (20 bitti) ja juurdepääsuõigusi (12 bitti). Kõik need väljad on kirjeldatud eelmises punktis. Need registrid laetakse kirjeldajate tabelist kui segmentregister muutub. Nii pole vaja iga mälupöördumisega lugeda infot kirjeldajate tabelist. Lisaks on nähtamatud GDTR (global descriptor table register) ja IDTR (interrupt descriptor table register). GDTR sisaldab kirjeldajate tabeli baasaadressi ja limiiti. Viimane on 16 bitti, seega tabeli suurus on 64 Kb. Kui MP läheb üle kaitstud moodi laetakse GDTR ja IDTR sisu. IDTR registris sisaldub info katkestustöötlusprogrammide aadresside kohta. LDTR (local descriptor table register) sisaldab vastavat infot lokaalse kirjeldajate tabeli kohta. TR (task register) hoiab selektorit, mille abil pääseb juurde kirjeldajale, mis defineerib ülesande. Ülesanne on üldiselt protseduur või programm.See register võimaldab mitmeülesande (multitasking) süsteemides lihtsalt lülituda ümber eri programmide vahel. 2-4. Mälu tabuleerimine (paging). Mälu tabuleerimismehhanism, mis on kasutusel alates 80386-st lubab suvalisele füüsilisele mälupiirkonnale määrata suvaline mäluaadress. Samuti võimaldab see mäluaadressid panna piirkondadele, kus mälu füüsiliselt ei eksisteerigi.
  • 8. Tabuleerimisregistrid. Joonisel 2-11 on toodud MP kontrollregistrite struktuur, mis juhivad mälu tabuleerimist. Kui bitt PG=1, siis mälu lineaarne aadress muudetakse füüsiliseks aadressiks tabuleerimismehhanismi kaudu. Muidu lineaarne aadress, mis genereeritakse programmide poolt konverteeritakse otse füüsiliseks. Tabuleerimine toimib nii reaal- kui ka kaitstud moodis. Register CR3 sisaldab lehekülje suunaja (directory) baasaadressi ja PCD (page cache disable) ja PWT (page write through) bitte, mis kontrollivad MP vastavate pinnide tööd. Kui PCD=1 siis PCD pinn läheb kõrgeks siinitsükli ajaks. See võimaldab välisriistvaral kontrollida L2 vahemälu (cache memory). Lineaarne aadress, mis genereeritakse programmide poolt jagatakse kolmeks sektsiooniks: page directory entry (lehekülje suunasisend), page table entry (lehekülje tabeli sisend) ja page offset entry (lehekülje offseti sisend). Joonisel 2-12 on toodud näide, kuidas see jagamine toimub. Et kiirendada mälu tabuleerimist, on alates 80486-st sisse viidud TLB (translation look-aside buffer) vahemälublokk. Selles hoitakse 32-e viimati külastatud mälulehekülje aadressi. Alates Pentiumist on oma TLB nii andme- kui ka käsustiku jaoks. Lehekülje suunaja ja lehekülje tabel. Joonisel 2-13 on toodud tabuleerimismehhanismi seletus. Igas süsteemis on ainult üks lehekülje suunaja, mõned lehekülje tabelid ja mitmed mäluleheküljed. Lehekülje suunaja sisaldab 1024 32-e bitist aadressi, mis määravad 1024 leheküljetabelit. Leheküljesuunaja ja iga leheküljetabel on 4Kb suurusega. Kui näiteks tabuleerida 4Gb mälu, läheb vaja 4Kb suunaja jaoks ja 4Kb * 1024 = 4Mb lehekülje tabelite jaoks. DOS-is kasutab EMM386.exe leheküljetabeleid, et ümber defineerida mälupiirkond C8000H-EFFFFH kui ülemine mälublokk. Joonisel 2-14 on toodud näide, kuidas toimib mälupiirkondade ümberadresseerimine. Mälu adresseerimismoodid Arvutikomponendid FKEF.02.089 3-1. Andmemälu adresseerimine Vaata jooniseid 3-1 ja 3-2. Registeradresseerimine (register addressing): Allikas - register, tulem - register. Näit. MOV ECX, EDX Vahetu adresseerimine (immediate addressing): Allikas - sisaldub otse käsus, tulem- register või mälupesa. Näit. MOV EBX, 12345678H Otsene adresseerimine (direct addressing): Allikas ja tulem - register või mälupesa (üldiselt on mälu-mälu ülekanne Intelis keelatud, erand on MOVS käsk). Mäluaadress arvutatakse
  • 9. kasutades andmesegmenti DS ja käsus sisalduvat offsetti. Näit. MOV [1234H], AX. Mälu aadress on DS*10H + 1234. Registerkaudne adresseerimine (register indirect addressing): Allikas ja tulem - register või mälupesa, mis adresseeritakse baas- või indeksregistri abil. Offset sisaldub registris, mis on käsukoodis. Näit. MOV AX, [BX]. Mälu aadress saadakse: DS*10H + BX. Baas plus indeks adresseerimine (base plus index addressing): Allikas ja tulem - register või mälupesa. Mälu aadressi offset saadakse baas- ja indeksregistrite summana. Näit. MOV [BX +DI], CL. Mälu aadress saadakse DS*10H + BX + DI. Registersuhteline adresseerimine (register relative addressing): Allikas ja tulem - register või mälupesa. Mälu aadressi offset saadakse indeks- või baasregistri ja hälbe (displacement) summana. Näit: MOV AX, [BX + 4], mälu aadress: DS*10H + BX + 4. Baassuhteline plus indeks adresseerimine (base relative plus index addressing): Allikas ja tulem - register või mälupesa. Mälu aadressi offset saadakse baasregistri, indeksregistri ja hälbe summana. Näit. MOV AX, [BX + DI + 4], mälu aadress: DS*10H + BX + DI + 4. Skaleeritud indeks adresseerimine (scaled-index addressing): Kasutatakse alates 80386-st. Allikas ja tulem - register või mälupesa. Teist registrit registripaaris kasutatakse kui skaleerimisfakstorit. Näit. MOV [EBX + 2*ESI], AX, mälu aadress: DS*10H + EBX + 2*ESI. Iga adresseerimismood on põhjalikult lahti seletatud järgnevatel lehekülgedel ja illustreeritud näidete 3-1 kuni 3-12, tabelite 3-1 kuni 3-9 ja jooniste 3-3 kuni 3-13-ga. 3-2. Programmmälu adresseerimismoodid. Need moodid kirjeldavad käskude JMP (jump- hüppekäskude) ja CALL (alamprogrammide poole pöördumise käskude) adresseerimismoode. Siin eristatakse kolme moodi: otsene adresseerimine, suhteline adresseerimine ja kaudne adresseerimine. Otsesene programmmälu adresseerimismood (direct memory-addressing mode). Siin sisaldub aadress, kuhu hüpatakse otse operatsioonkoodis. Nimetatakse veel far jump'ks või intersegment jump'ks. Võimaldab hüpata kogu adresseeritava mälu ulatuses. Vt. joonis 3-14. Sama kehtib far CALL-i kohta. Reaalselt kasutatakse vähe. Suhteline programmmälu adresseerimismood (relative program memory addressing). "Suhteline" tähendab käsuloendaja suhtes. See mood ei ole kasutuses kõikides esimestes MP- s. Antud adresseerimismoodi puhul antakse käsukoodis ainult hälve (displacement). Näit JMP [2] hüppab 2 baiti edasi olevale aadressile (vt. joonis 3-15). See on segmendisisene hüpe (intrasegment jump). Alates 80386-st on hälve 8 või 32 bitine märgiga arv. 8086-st kuni 80286-ni oli hälve 8 või 16 bitine märgiga arv. 8 bitine hälve võimaldab +127 kuni -128 baidise hüppe. Seda nimetatakse short jump'igs. 16 bitine hälve võimaldab near jump'i (+- 32Kb piirides). Alates 80386-st on võimalik +-2Gb-ne hüpe. Kaudne programmmälu adresseerimismood (indirect program memory addressing).
  • 10. Kaudseks adresseerimiseks kasutatakse yhte MP registritest, kus säilitatakse mäluaadressi offsetti. Saab olla 16 või 32 bitine offset. Vaata tabelit 3-10, joonist 3-16 ja näidet 3-13. 3-3. Pinumälu adressseerimismoodid. Pinumälu on LIFO (last-in, first-out) tüüpi mälu. Andmed kirjutatakse pinusse PUSH käsuga ja loetakse pinust POP käsuga. Pinu adressseeritakse kahe registriga: SS (stack segment) ja ESP või SP (stack pointer). Kui näiteks 2 baiti andmeid kirjutatakse pinusse siis SP-d (või ESP-d) vähendatakse 2-e võrra. Kui andmed loetakse pinust, siis SP/ESP-d suurendatakse ühe võrra iga baidi andmete kohta. PUSHA ja POPA kirjutavad/loevad kõik registris, peale segmentregistrite, pinusse/pinust. Vaata joonist 3-17, tabelit 3-11 ja näidet 3-14. Masinkood Arvutikomponendid FKEF.02.089 Masinkood on binaarmoodis kood, millest MP "saab aru" ja millega teda juhitakse. Kokku on üle 100 000 eri käsukoodi (eri adresseerimismeetoditega ja variatsioonidega). 8086-80286 käsud on 16 bitises moodis, alates 80386-st 16 või 32 bitises moodis. Reaal moodis on käsud 16 bitised, kaitstud moodis 16 või 32 bitised. Deskriptori D bitt näitab, kummas moodis on. Windows opsüsteemid on alates 95-st 32 bitised. 16 bitise käsustiku ja 32 bitise käsustiku formaadid on toodud joonisel 4-1a ja b. Esimest 2-e baiti 32 bitises käsus nimetatakse "tagasilükatud eesliiteks" (override prefixes). Esimene modifitseerib operandi aadressi, teine modifitseerib registri suurust. Kui 80386 ja uuem protsessor toimib 16 bitises moodis (reaal- või kaitstud moodis) ja 32 bitine register on kasutuses, siis registrisuurune eesliide (register- size prefix, 66H) on käsukoodi alguses. Kui on kasutusel 32 bitine mood ja 32 bitine register, siis eesliidet ei kasutata. Kui 16 bitine register on kasutusel 32 bitises käsumoodis siis kasutatakse eesliidet et valida vastav 16 bitine register. Aadressisuurust eesliidet (address size- prefix, 67H) kasutatakse analoogselt. Tavaliselt valib opsüsteem, millises moodid MP tööle pannakse, kas 16 bitises või 32 bitises moodis. (DOS töötab ainult 16 bitises moodis). Käsukood (opcode) valib välja operatsiooni (liitmine, lahutamine, siire jne.), mida MP peab teostama. Põhiliselt on käsukood 1 või 2 baiti lai. Joonisel 4-2 on toodud enamuse käsukoodide esimese baidi struktuur. 6 bitti on ise käsukood, bitid 6 (D) direction ja 7 (W) word määravad andmete liikumise suuna ja andmete laiuse. Kui W=0 on andmed baidi laiused, kui W=1 siis sõna või topeltsõna laiused. Kui D=1, siis andmed liiguvad REG piirkonda R/M piirkonnast, muidu vastupidi. Joonisel 4-3 on toodud teise käsukoodi baidi struktuur. Siin on 3 piirkonda: MOD (mode) 2 bitti, REG (register) 3 bitti ja R/M (register/memory) 3 bitti. Tabelis 4-1 on toodud 16 bitise käsu MOD piirkond. See määrab ära adresseerimistüübi ja selle kas järgneb hälve (displacement) või mitte. Tabelis 4-2 on toodud MOD välja bittide tähendus 32 bitise adresseerimismeetodi korral. Tabelis 4-3 on toodud REG ja R/M (kui MOD=11) väljade bittide tähendus. Joonisel 4-4 on lahatud kood 8BEC assemblerkoodina. Saadakse et see on käsk MOV BP, SP. Kood 668BE8H annab käsu MOV EBP, EAX, kui MP toimib 16 bitises moodis (80386 ja uuem) ning valitakse 32 bitine register. Kui MOD=00, 01 või 10, siis R/M väli saab tähenduse, mis on kirjas tabelis 4-4 16 bitise käsukoodi korral. Kõik 3-ndas peatükis
  • 11. kirjeldatud 16 bitised adresseerimisviisid on kaetud tabeliga 4-4. Joonisel 4-5 on toodud 16 bitise käsu MOV DL, [DI] (kood 8A15H) lahtikirjutus. On spetsiaalne adresseerimismood, mis ei ole kajastatud tabelites 4-2 kuni 4-4. See juhtub, kui mälu andmed on adresseeritud ainult hälbe moodis 16 bitise käsukoodi korral (näit. MOV [1000], DL). Sellisel juhul MOD=00 ja R/M=110. Üldiselt lahendab assembleri translaator selle olukorra nii et tekitab hälbe 0 baaspointerile ja muudab MOD välja koodiks 01. Joonistel 4-6 ja 4-7 on toodud vastavad näited. 32 bitine aadressmood on kasutusel alates protsessorist 80386. Kui need protsessorid töötavad 16 bitises moodis kasutatatkse aadressisuurust eesliidet 67. Tabelis 4-5 on toodud välja R/M kodeering 32 bitises moodis. Kui R/M=100, ilmub lisabait käsukoodi, mida nimetatakse skaleeritud indeksbaidiks (scaled- index bait). See võimaldab kodeerida teisi adresseerimisviise, mis ei kajastu tabelis 4-5. Seda baiti kasutatakse adresseerimisviiside kirjeldamisel, kus kaks registrit liidetakse, et adresseerida mälu. Joonisel 4-8 on toodud selle baidi truktuur. Kaks vasemat bitti kirjeldavad skaleerimisfaktorit, ülejäänud kaks kolmebitist välja kirjeldavad indeks- ja baasregistreid nagu toodud tabelis 4-3. Joonisel 4-9 on toodud vahetu adresseerimisviisiga käsu MOV WORD PTR[BX+1000H], 1234H käsu kodeerimine masinkoodi. Kui segmentregistrite sisu siiratakse käsuga MOV, PUSH või POP siis kasutatakse spetsiaalset registrite tabelit (vaata tabelit 4-6). Joonisel 4-10 on toodud käsu MOV BX,CS konverteerimine masinkoodi. Segmentregistrite korral pole lubatud vahetu adresseerimine. Sissejuhatus käsustikku. Arvutikomponendid FKEF.02.089 Et saada parimat ülevaadet IA-32 arhitektuuriga protsessorite käsustiku kohta, võib kasutada Inteli koduleheküljel olevat informatsiooni. Nimelt leiab sealt dokumendi "IA-32 Intel Architecture Software Developer's Manual", Volume 1: Basic Architekture. Selles on antud IA-32 arhitektuuri põhjalik ülevaade ja loengukursuse aluseks ei võtnud me seda vaid sellepärast, et see on natuke liiga mahukas (üle 400 lehekülje) ja paljud küsimused on käsitletud liigse põhjalikkusega, see informatsioon aga jääb väljapoole arvutikomponentide kursust. Siiski on mitmed küsimused seal kirjeldatud selgemalt ja kompaktsemalt kui õpikus. Seetõttu kasutame mõnedel juhtudel ka seda dokumenti. Kes soovib aga saada väga põhjalikku ülevaadet Inteli protsessoritest, võib antud dokumenti kasutada kui lisamaterjali. Käsustikust ülevaate saamiseks kasutame selle dokumendi peatükki 5, edaspidi anname viiteid mõningatele joonistele ja tabelitele selles failis, mille leiate kui klikite selle joonise peale Edasistes tektides kasutame seda kui viidet IA-32. IA-32 arhitektuuriga MP käsustik jaguneb järgmistesse klassidesse: Üldotstarbelised käsud, ujuvkomaprotsessori käsud (x87 FPU), ujuvkomaprotsessori ja SIMD juhtimiskäsud, MMX käsud, SSE laiendused, SSE2 laiendused, süsteemi käsud. Et näha millised klassid on kasutusel millistel protsessoritel, vaata tabelit 5-1 eelpoolnimetatud failis. 5.1 Üldotstarbelised käsud
  • 12. 5.1.1 Andmesiirdamiskäsud. Need käsud siirdavad andmeid mälu ja üldkasutatavate- ja segmentregistrite vahel. Samuti on seal tingimuslikud siirdekäsud, andmevahetuskäsud ja pinukäsud. Siirdekäskude kohta saad lugeda osast 7.2.1.1 (lk.7-3), vaata samuti tabelit 7-1. Andmevahetuskäsud on kirjeldatud osas 7.2.1.2 ja tabelis 7-2. Pinumanipulatsioonikäsud on osas 7.2.1.3 (joonised 7-2 kuni 7-5). Siia gruppi võib lugeda ka andmete tüübimuutmiskäsud (vt. osa 7.2.1.4 ja joonis 7-6.). 5.1.2 Binaararitmeetikakäsud. Need käsud teostavad binaararitmeetilisi tehteid baidi, sõna ja topeltsõnadega, mis asetsevad mälus ja/või üldkasutatavates registrites. Nendeks käskudeks on: liitmine, lahutamine, inkrementeerimine, dekrementeerimine, võrdlemine, märgivahetus, korrutamine ja jagamine. Täpsem kirjeldus on osas 7.2.2. 5.1.3 Kümnendaritmeetikakäsud. Kümnendaritmeetikakäsud on mõeldud selleks, et justeerida eelnevat binaararitmeetika käsu tulemit nii et moodustuks BCD number. Jagunevad need käsud pakitud ja mittepakitud BCD arvude justeerimiskäskudeks. Vaata osa 7.2.3 5.1.4 Loogikakäsud. Loogikakäsud jagunevad nihke (shift) ja pöördekäskudeks (rotate). Vaata joonised 7-7 kuni 7-11 ja osa 7.2.5. 5.1.5 Biti- ja baidikaupa käsud. Need käsud opereerivad biti- või baidistringidega. Käsud sisaldavad bitikaupa testi- ja modifikatsioonikäske, biti skaneerimiskäske, baidiasetamise käske tingimuse korral ning test käske. Täpsemalt vaata osa 7.2.6 ja tabelit 7-3. 5.1.6 Programmi juhtimiskäsud (hüppekäsud). Hüppekäsud jagunevad tingimuseta- ja tingimuslikeks käskudeks. Tingimusteta käsk täidetakse igal juhul, tingimuslik vaid siis kui teatud bitt lipuregistris on 0 või 1, sõltuvalt tingimusest. Programmi voogu juhivad käsud JMP (hüpe), CALL (pöördumine alamprogrammi), RET (tagasipöördumine alamprogrammist), INT (katkestud) ja IRET (katkestusprotseduurist tagasipöördumine). Siia gruppi võib lugeda ka LOOP käsugrupi, mille abil organiseeritakse tsükleid. Samuti võib siia kuuluvaks lugeda käsud ENTER ja LEAVE, mille abil organiseeritakse pöördumisi kõrgemataseme keele (näit. C) protseduuride poole. Täpsemalt loe osast 7.2.7, 7.2.10 ja vaata tabelit 7-4. 5.1.7 Stringikäsud. Üldiselt võib stringiks nimetada operandi, mis asetseb mälus. Stringikäsud on loodud, et opereerida suurte andmemassiividega. Iga käsk opereerib ühe elemendiga, mis võib olla bait, sõna või topeltsõna. Stringikäsud on ka ainsad, millel lubatakse mälu-mälu adresseerimist (teistes käskudes peab vähemalt üks operand olema registris). Siia kuuluvad käsud MOVS (Move string), CMPS (Compare string), SCAS (Scan string), LODS (Load string) ja STOS
  • 13. (Store string). Samuti leidub siit grupp käske repeat (REP), korda tegevust kuni.... Täpsemalt loe osast 7.2.8. 5.1.8 Sisend- väljundkäsud. Siia kuuluvad käsud IN (input from port to register), INS (input from port to string), OUT (output from register to port) ja OUTS (output string to pot). Täpsemalt loe osast 7.2.9. 5.1.9 Lipuregistri käsud (EFLAGS Instructions). Nende käskude abil seatakse ja nullitakse lipuregistri bitte. Loe täpsemalt osa 7.2.11 ja vaata joonist 7-12. 5.1.10 Segmentregistrite käsud. Neid käske kasutab põhiliselt opsüsteem, et jaotada segmenteeritud mälu eri ülesannete vahel. Loe osa 7.2.12. 5.1.11 Segakäsud (miscellaneous instructions). Siia kuuluvad käsud LEA (load effective address), XLAT, XLATB (table lookup), CPUID (protsessori identifikatsioon), NOP (no operation) ja UD2 (undefined). Loe osast 7.2.13. 5.2 Ujuvkomaprotsessori käsustik. x87 ujuvkomaprotsessoris on 8 80-e bitist ujuvkomaregistrit, lisaks mõned teenindusregistrid (vaata joonist 8-1). Kõik tehted tehakse nendes olevate topelttäpsusega ujuvkomaarvudega. Käsugrupid on järgmised: 5.2.1 Andmesiirdamiskäsud. Teostavad ujuvkoma- fikskoma- ja BCD arvude siirdamist mälu ja x87 registrite vahel. Siia kuuluvad ka tingimuslikud siirdekäsud. 5.2.2 Põhiaritmeetika käsustik. Need käsud teostavad põhilisi ujuvkomaaritmeetika ja fikskomaaritmeetika käske. Siia kuuluvad liitmis-, lahutamis-, korrutamis- ja jagamiskäsud, samuti näiteks ruutjuure võtmine. Operandideks on kas topelttäpsusega ujuvkoma- või täisarvud. 5.2.3 Võrdluskäsud. Need käsud võrdlevad omavahel ujuvkoma- või fikskoma arve. Vastavalt tulemusele seatakse lipud EFLAGS registris. 5.2.4 Transcendental instructions. Siia alla kuuluvad põhilised triginimeetria ja logaritmilised operatsioonid. Argumendid on ujuvkomaarvud.
  • 14. 5.2.5 Lae konstandid. Nende käskudega laetakse põhikonstandid, nagu pii, naturaallogaritm kahest, kümnendlogaritm kahest jne. x87 registritesse. 5.2.6 Ujuvkomaprotsessori juhtimiskäsud. See käsugrupp opereerib x87 pinuga ning säilitab ja taastab ujuvkomaprotsessori olekut. 5.3 SIMD käsud. Alates Pentium II-st ja Pentiumist MMX tehnoloogiaga (Pentium Pro) alustati single- instruction, multiple data (SIMD) käsustiku juurutamist. See käsustiku laiendus sisaldab MMX (multimedia extension) tehnoloogiat ning SSE ja SSE2 laiendusi. Et SIMD käske teostada, lisati MP-le veel MMX ja XMM registrid. Täielik programmselt nähtavate registrite komplekt on toodud joonisel 3-1. Lisaks üldkasutatavatele registritele ja x87 registritele on seal 8 64 bitist MMX regitrit ja 8 128 bitist XMM registrit. SIMD käsustik opereerib kas 64 bitiste täisarvudega või 128 bitiste pakitud ujuvkomaarvudega. Joonisel 5-1 on toodud SIMD käsustikku kasutava andmeformaatide kokkuvõte. MMX käsud teostavad SIMD operatsioone kas pakitud baidi, sõna või topeltsõnadega, mis asetsevad MMX registrites. Suurt võitu annavad MMX käsud programmides, mis teostavad fotokujutiste töötlust, multimeediat või kommunikatsiooni. SSE laiendus tuli koos Pentium III protsessoriga. SSE käsud teostavad operatsioone pakitud ühekordse täpsusega ujuvkoma arvudega mis asetsevad XMM registrites ja pakitud täisarvudega MMX registrites. Need käsud kiirendavad tööd 3D geomeetria ning video kodeerimis/dekodeerimis programmides. SSE2 laiendused tulid koos Pentium 4-ja ja Xeon protsessoriga. SSE2 käsud opereerivad pakitud topelttäpsusega ujuvkomaarvudega XMM registrites ja pakitud täisarvudega MMX registrites. SSE2 laiendavad SIMD käske kahel moel: nad lisavad uued 128 bitised täisarvu käsud ja nad laiendavad 64 bitised MMX täisarvukäsud 128 bitisteks XMM registreid kasutavateks käskudeks. 5.4 MMX käsustik. MMX käsud on kasutusel alates Pentium Pro protsessorist. Need käsud opereerivad operantidega, mis on pakitud täisarvud laiusega 1 bait, 2baiti (sõna), 4 baiti (topeltsõna) või 8 baiti (topelttopeltsõnad) ning mis asetsevad kas mälus, MMX registrites, või/ja üldkasutatavates registrites. Need käsud jagunevad järgmistesse gruppidesse: 5.4.1 Andmesiirdekäsud. Need käsud siirdavad 4-ja või 8-t baiti MMX registrite või MMX registri ja mälu vahel. 5.4.2 Teisendamiskäsud. Need käsud pakivad ja pakivad lahti baite, sõnu ja topeltsõnu. 5.4.3 Pakitud aritmeetika käsud. Need käsud teostavad aritmeetikatehteid täisarvudega, mis on esitatud pakitud kujul baidi, sõna või topeltsõna laiusega.
  • 15. 5.4.4 Võrdluskäsud. Need käsud võrdlevad baite, sõnu või topeltsõnu. 5.4.5 Loogikakäsud. Need käsud teostavad loogikatehteid AND, AND NOT, OR ja XOR kaheksabaidiste sõnadega. 5.4.6 Nihke- ja pöördekäsud. Need käsud nihutavad pakitud baite, sõnu või topeltsõnu kui 64 bitiseid operande. 5.5 SSE käsud. SSE käsud ilmusid koos Pentium III protsessoriga ja kujutavad endast SIMD ideoloogia laiendust. Need käsud saab jaotada 4-ja gruppi: 1. SIMD normaaltäpsusega ujuvkoma käsud, mis opereerivad XMM registritega. 2. MXSCR registri manageerimiskäsud. 3. 64 bitised SIMD täisarvude käsud, mis opereerivad MMX registritega. 4. Vahemälu kontroll-, prefech ja käske järjestavad käsud. 5.5.1 Andmesiirdekäsud. Need käsud siirdavad pakitud ja skalaarseid normaaltäpsusega ujuvkomaoperande XMM registrite ja XMM registrite ja mälu vahel. 5.5.2 Pakitud aritmeetikakäsud. Need käsud teostavad aritmeetikaoperatsioone pakitud- ja skalaarsete ujuvkomaarvudega. 5.5.3 Võrdluskäsud. Need käsud teostavad pakitud ja skalaarsete ujuvkomaarvude võrdlusi. 5.5.4 Loogikakäsud. Teostavad loogikaoperatsioone AND, AND NOT, OR ja XOR pakitud normaaltäpsusega ujuvkomaarvudega. 5.5.5 Lahtipakkimis- ja segamiskäsud. Need käsud segavad omavahel baitide järjestust operandis ja pakivad lahti pakitud operandi. 5.5.6 Teisenduskäsud. Teisendavad pakitud ja pakkimata neljabaidised täisarvud pakitud ja pakkimata normaaltäpsusega ujuvkomaarvudeks ja vastupidi. 5.5.7 MXSCR registri manageerimiskäsud.
  • 16. Neid on kaks käsku, mis võimaldavad salvestada ja taastada MXCSR staatus- ja kontrollregistri sisu. 5.5.8 SSE 64-ja bitised SIMD täisarvkäsud. Need täiendavad käsud kasutavad MMX registreid fikskoma arvudega operatsioonideks, teostades operatsioone pakitud baitide, sõnade ja topeltsõnadega. 5.5.9 SSE vahemälu kontroll- ja järjestuskäsud. Need käsud võimaldavad siirata andmeid vahemälu- ja MMX ning XXM registrite vahel, et neid ajutiselt säilitada. 5.6. SSE2 käsud Need käsud ilmusid koos Pentium 4 protsessoriga ning opereerivad pakitud topelttäpsusega ujuvkomaoperandidega, mis on kas pakitud baidid, sõnad, topeltsõnad või neljabaidised sõnad, mis asuvad XMM registrites. SSE2 käsud võib jagada nelja gruppi: 1. pakitud ja skalaarsed topelttäpsusega ujuvkomakäsud. 2. pakitud normaaltäpsusega ujuvkomateisenduskäsud. 3. 128 bitised SIMD fikskomakäsud. 4. vahemälu kontrolli- ja käsujärjestuse käsud. 5.6.1 Andmesiidekäsud. Need käsud siirdavad topelttäpsusega ujuvkomaarve XMM registriste vahel ja XMM registrite ja mälu vahel.. 5.6.2 Pakitud aritmeetikakäsud. Siia kuuluvad liitmine, lahutamine, korrutamine, jagamine, ruutjuur ja miinimumi/maksimumi määramine. Operandid on pakitud või skalaarsed topelttäpsusega ujuvkomaarvud. 5.6.3 Loogikakäsud. Siia kuuluvad AND, AND NOT, OR ja XOR käsud. Operandid on pakitud topelttäpsusega ujuvkomaarvud. 5.6.4 Võrdluskäsud. Need käsud võrdlevad omavahel pakitud ja skalaarseid topelttäpsusega ujuvkomaarve. 5.6.5 Segamis- ja lahtipakkimiskäsud. Need käsud kas segavad omavahel baite topelttäpsusega ujuvkomaarvudes või pakivad neid arve lahti. 5.6.6 Konverteerimiskäsud.
  • 17. Need käsud muundavad pakitud topeltsõna laiused fikskomaarvud pakitud ja skalaarseteks topelttäpsusega ujuvkomaarvudeks ja vastupidi. Samuti muundavad nad topelttäpsusega pakitud ja skalaarsed ujuvkomaarvud normaaltäpsusega ujuvkomaarvudeks ja vastupidi. 5.6.7 Pakitud normaaltäpsusega ujuvkomakäsud. Need teostavad konverteerimisfunktsioone normaaltäpsusega ujuvkomaarvude ja fikskoma arvude vahel. 5.6.8 128 bitised SIMD fikskomakäsud. Need on lisakäsud, mis teostavad operatsioone pakitud sõnade, topeltsõnade ja neljabaidiste sõnadega, mis asuvad XMM registrites. 5.6.9 Vahemälu kontrolli- ja käsujärjestuse käsud. Need käsud võimaldavad siirata andmeid vahemälu ja XXM registrite vahel, et neid ajutiselt säilitada. 5.7 Süsteemi käsud. Neid käske kasutatakse et kontrollida protsessori neid funktsioone, mida kasutab operatsioonsüsteem. Katkestused Arvutikomponendid FKEF.02.089 6.1 Katkestuste üldprotseduur. Üldiselt kasutatakse katkestusi, et vahetada infot suhteliselt aeglaste sisend- väljundseadmetega. Joonisel 12-1 on toodud näide programmi töötamise ja katkestuste toimimise ajateljest. Inteli MP-l on kaks riistvara kontakti katkestuste küsimiseks (INTR ja NMI) ja üks kontakt (INTA), mis annab loa katkestusprotseduuri toimimiseks. Samuti on seal programmsed katkestused INT, INTO, INT 3 ja BOUND. Lipuregistris on lipud IF ja TF, mis juhivad katkestusi. Lõpuks on spetsiaalne protseduur IRET (või IRETD alates 386-st) katkestusprotseduurist väljumiseks. Katkestuste juhtimine toimub katkestusvektorite tabeli kaudu. See tabel hõlmab esimesed 1024 baiti mälu algusest (aadressid 000000h-0003FFh). Seal on 256 erineva katkestuse 4-ja baidised vektorid, mis sisaldavad katkestusprotseduuride algusaadresse (offset ja segment). Joonisel 12-2 on toodud üks näide sellisest tabelist. Esimesed 5 vektorit on samad kõikide Inteli MP-de jaoks (alates 8086-st). Tekstis on toodud katkestuste 0-18 kirjeldused. Täpsem seletus on toodud ka katkestuste BOUND, INTO, INT, INT 3 ja IRET-i kohta. Katkestusvektorite tabeli tõlgendus on erinev kui protsessor töötab reaalmoodis või kaitstud moodis. Kaitstud moodis ei paigutata mällu mitte vektoreid vaid vektoritabeli kirjeldajad (descriptors), analoogselt mälu adresseerimisele kaitstud moodis. Katkestuskirjeldajate tabel (interrupt descriptor table, IDT) on 256*8 = 2Kbaiti suur. Selle tabeli algusaadress on registris
  • 18. IDTR (interrupt descriptor table address register). Joonisel 12-3 on toodud selle tabeli elemendi struktuur. Katkestuste töötlus toimub järgmiste astmete kaupa: 1. Lipuregister paigutatakse pinusse. 2. IF ja TF lipuf kustutatakse, see keelab katkestuse katksestusprotseduuri töötlemisel. 3. CS register kirjutatakse pinusse. 4. IP kirjutatakse pinusse. 5. Uus IP ja CS võetakse kas katkestusvektorite tabelist (reaalmoodis) või katkestuskirjeldajate tabelist (kaitstud moodis). IF ja TF bittide asetus lipuregistris on toodud joonisel 12-4. IF-i seatakse ja nullitakse vastavalt käskudega STI ja CLI. TF lipu seadmiseks ja nillimiseks tuleb kasutada programmilõiku, mis on toodud näidetes 12-1 ja 12-2. 6.2 Riistvara katkestused. Protsessoril on 2 riistvarakatkestuse pinni: NMI (non-maskable interrupt) ja INTR (interrupt request). Kui NMI sisend aktiveeritakse, siis juhtub tüüp 2 katkestus. Seda katkestust ei saa programmselt keelata (see ei ole maskeeritud). INTR sisend tuleb aga väljaspoolse riistvaraga dekodeerida, et valida vektor. Tavaliselt kasutatakse selleks vektoreid numbritest 20h kuni FFh-ni kuna Intel on reserveerinud katkestused 00h kuni 1Fh sisemisteks katkestusteks ja tuleviku arenguteks. INTA on samuti katkestuspinn, aga see on väljaviik ja seda kasutab väline katkestuskontroller, et sünkroniseerida enda töö protsessoriga. NMI on tõusva frondiga takteeritav katkestuspinn. Tavaliselt on NMI külge ühendatud kas paarsuskontroller või/ja toiteblokikontroller. Joonisel 12-6 on näide toitepinge kontrollloogikast. Et MP jõuaks pärast pinge kadumist veel oma registrid kirjutada patareitoitelisse mällu, vajab ta toidet vähemalt 75 ms. Joonisel 12-7 on toodud sellise toite põhimõtteskeem. INTR sisseviik on tasemetundlik, s.t. seda peab hoidma kõrgel tasemel (loogiline 1) kuni see detekteeritakse. INTR signaal asetatakse välise loogika (katkestuskontrolleri) poolt ja kustutatakse katkestusprotseduuri jooksul. See maskeeritakse (keelatakse) katkestustöötlusprogrammi poolt ja muudetakse uuesti kättesaadavaks pärast käsku IRET või IRETD (kaitstud moodis). MP vastab INTR aktiveerimisele INTA aktiveerimisega. Vaata aegdiagrammi joonisel 12-8. Vastuseks INTA signaalile peab katkestuskontroller genereerima vektori numbri andmesiini bittidele D0 kuni D7. Joonisel 12-9 on toodud kõige lihtsam võimalus (mida muidugi ei kasutata) selle numbri genereerimiseks. Joonisel 12-10 on skeem, mis genereerib suvalise numbri (mis on määratud lülititega) vastuseks INTA signaalile. Kuidas teha INT sisend fronditundlikuks on näidatud joonisel 12-11. Kõige lihtsam on ühendada klaviatuur protsessoriga kasutades katkestusprotseduuri. Kuidas seda teha kasutades kivi 82C55 on toodud joonisel 12-12. Sealt on ka näha, et MP-le vastab klaviatuur katkestusvektoriga 40h.
  • 19. 6.3 Katkestusstruktuuride laiendamine. Joonisel 12-13 on joonise 12-10 modifikatsioon, mis võimaldab lisada seitse eri vektoriga katkestust. Seal on lisatud ainult üks 8 sisendiga NAND kivi. Aktiveerides samaaegselt eri IR sisendeid, saab genereerida kuni 128 eri vektoriga katkestust. Kasutades nn. Daisy-Chained katkestusloogikat saab katkestusstruktuuri laiendada ka ainult ühe katkestusvektori kasutusega. Seda loogikat kasutatakse tavaliselt suurte riistavasüsteemide puhul. Tehes mitmete katkestustellijatele loogilise OR-i, saab kasutada ainult ühte vektorit. Milline konkreetne moodul tellis katkestuse, tehakse kindlaks tavaliselt kasutades loogikat, kus protsessor saadab välja INTA signaali, mis läbib kõik moodulid. Mis ei tellinud katkestust, see moodul laseb INTA signaali edasi järgmisele jne. Moodul, mis tellis katkestuse, püüab aga selle signaali kinni ja edasi enam ei päästa. Kui mitu moodulit tellisid samaaegselt katkestuse, on eelistatud see, mis asub INTA signaali teel protsessorile lähemal. 6.4 8259A Programmeeritav katkestuskontroller. 8259A lisab kaheksa prioriseeritud katkestusvektorit MP-le. Neid saab ka kaskadeerida, kasutades ühte isand- (master) kontrollerit ja kuni kaheksat sekundaar- (või ori-, slave kontrollerit). Nii saab kuni 64 eri katkestusvektorit. 8259 on lihtsalt MP-ga ühendatav, kuna pinnid on otseühendatavad, väljaarvatu CS pinn, mis nõuab dekodeerimist ja WR pinn, mis tuleb asendada sisend- väljund banki kirjutuspulsiga. Joonisel 12-15 on toodud 8259 pinnide asetus ja tekstis seletatud nende otstarvet. Joonisel 12-16 on toodud skeem, kuidas üks 8259 ühendada 8086 protsessoriga. Joonisel 12-17 on toodud kaskadeeritud kahe 8259-a ühendamine 386-s protsessoriga. Seda skeemi kasutatake paljudes vanemates PC-des ja nende kloonides. Enne kasutamist tuleb 8259A initsialiseerida. Seda tehakse initsialiseerides käsusõnad (Initialization command words, ICW). Eri reziime saab programmeerida kasutades eri käsusõnu (operation command words, OCW). Initsialiseerimine: kui 8259-t kasutatakse üksinda (mitte kaskadeeritult), tuleb laadida sõnad ICW1, ICW2 ja ICW4, kui kaskadeeritult, siis lisandub ICW3. Sõnade sisukirjeldused ja bitikombinatsioonid on toodud joonisel 12-18. Nende sõnade laadimisel peab pinn A0 olema 1. Käsusõnad: nende kautamisel peab pinn A0 olema 0 (siiski, kui laetakse OCW1-e peab pinn A0 olema 1). OCW peab olema programmeeritud kohe peale initsialiseerimist, kuna see määrab ära katkestusmaski. Teised sõnad, OCW2 ja OCW3 kirjutatakse selle järgi. Joonisel 12-19 on toodud nende sõnade bitikombinatsioonid. Staatusregistrid: 8259-l on 3 staatusregistrit: interrupt request register IRR (katkestusküsimise register), in-service rgister ISR (siseteeninduse register) ja interrupt mask register IMR (katkestusmaskregister). Joonisel 12-20 on toodud nende registrite sisu. Kuigi inglisekeelses originaalmaterjalis on toodud 8259A programmeerimisnäide kui 16550 UART (universal asynchronous reciver/transmitter) ühendada 8088 MP-ga läbi 8259A, läheb see liiga sügavuti ja seetõttu selles kursuses me seda näidet ei käsitle. Seda saab vaadelda kui lisamaterjali, nendele kes on asjast rohkem huvitataud. 6.5 Katkestuste näiteid.
  • 20. Reaalaja kell: Joonisel 12-26 on toodud lihtne skeemijupp, mis genereerib iga 20 või 16,5 ms (sõltuvalt võrgusagedusest) järgi katkestuse NMI pinnile kasutades schmitti trigerit. Näites 12-14 on toodud programmilõik mis salvestab kella näidu. Klaviatuur: Vaata joonist 12-27. Sisend- väljund interfeis. Arvutikomponendid FKEF.02.071 7.1 Sissejuhatus sisend/väljundinterfeisidesse. 7.1.1 Sisend- väljundkäsustik. Info lugemiseks pordist kasutatakse käske IN või INS. Info väljastamiseks pordile kasutatakse käske OUT või OUTS. IN ja OUT siirdavad infot I/O (input/output, ehk sisend- väljund) portide ja aku vahel (AL, AX või EAX). I/O pordi aadress on kas 16 bitisel kujul registris DX või järgneb 8 bitisel kujul otse käsule. See aadress dekodeeritakse välise loogika poolt. 8 bitist aadressi nimetatakse fikseeritud aadressiks p8, registris DX olevat 16 bitist pordi aadressi nimetatakse varieeruvaks aadressiks. Käsud INS ja OUTS siirdavad infot mälu ja I/O pordi vahel. Mälu aadress määratakse registrite ES:DI ja DS:SI kombinatsiooniga. Nagu kõikide stringikäskude puhul inkrementeeritakse või dekrementeeritakse (sõltuvalt suunalipust DF) pärast käsu täitmist register SI või DI. Tsüklis saab neid käske kasutada, et lugeda või kirjutada infot rohkem kui üks kord (kasutades näiteks REP prefiksit). Tabelis 11-1 on toodud võimalikud sisend/väljundkäskude kombinatsioonid. 7.1.2 Isoleeeritud- ja mälupöördumistsükliga sisend/väljund. Isoleeritud sisend/väljund skeemiks nimetatakse skeemi, kus I/O aadressid on isoleeritud mäluaadressidest, s.t. on oma sisend-väljund aadresside ruum. I/O aadressruumiga infot vahetades kasutatakse eraldi loogikat ning MP pinnidest M/IO ja W/R tehakse I/O lugemissignaal IORC ja kirjutamissignaal IOWC. PC-s kasutatakse isoleeritud I/O porte et kontrollida perifeeriaseadmeid. 8 bitist aadressi kasutatakse süsteemi välisseadmete poolt pöördumiseks (näit. taimer ja klaviatuur), 16 bitist aadressi kasutatakse järjestik- ja paralleelportide poole pöördumisel, samuti video- ja kettaseadmete adresseerimiseks. Mälupöördumisega sisend/väljundi korral paigutatakse I/O seadmed lihtsalt mäluaadressidele ning nende poole pöördutakse samade käskudega kui mälu poole. Samuti ei aktiveerita siis IORC ja IOWC signaale. Joonisel 11-1 on toodud 8086/8088 protsessori mälu- ja I/O aadresside skeem mõlemal, nii isoleeritud kui ka mälupöördumistsükliga sisend/väljundi korral. 7.1.3 Personaalarvuti sisend/väljundaadressid.
  • 21. Joonisel 11-2 on toodud PC I/O aadresside kaart. Sisend- väljund portide aadressid 0000h- 03FFh on reserveeritud emaplaadi ja ISA siini jaoks. Aadressid 0400h-FFFFh on tavaliselt saadaval eri emaplaadi funktsioonide ja PCI siini jaoks. Ujuvkoma protsessor kasutab aadresse 00F8h kuni 00FFh kommunikatsioonide jaoks. Seetõttu on pordid 00F0h-00FFh reserveeritud. I/O aadressid 0000h-00FFh on fikseeritud, 00FFh-st ülespoole aga varieeruvad. 7.1.4 Põhilised sisendi ja väljundi interfeisid. Elektroonsete sisendiinterfeisidena kasutatakse põhiliselt kolmeolekulisi buffermikroskeeme. Lihtne näide on toodud joonisel 11-3. Iga kord kui teostatakse käsk IN kopeeritakse lülitite olek registrisse AL (joonis 11-3). Buffermikroskeem aktiveeritakse signaaliga SEL, see signaal saadakse dekodeerimisloogikast. Väljundinterfeis saab andmed MP-st ja peab neid mingi aja säilitama, et välisseade jõuaks need vastu võtta. Joonisel 11-4 on toodud lihtne skeem, kuidas LED-dele (valgusdioodidele) väljastada andmesiini olek. Mikroskeemi 74ALS374 kasutatakse kui buffrit, mis säilitab oleku pärast OUT käsku. Käsk ise kestab vähem kui 1 mks. ja see ei paneks kunagi LED-e vilkuma. 7.1.5 Käepigistusloogika (handshaking). Et sünkroniseerida aeglase sisend-väljundseadme tööd kiire protsessoriga kasutatakse nn. handshaking e. polling loogikat. Näitena on toodud printer. Joonisel 11-5 on toodud tüüpilise printeri pistiku skeem. Antud näite puhul printer aktiveerib BUSY kontakti kui ta ei ole valmis andmeid vastu võtma. MP siis kontrollib selle pinni olekut ja saadab järgmise baidi andmeid, kui printer on valmis neid vastu võtma. 7.1.6 Mõningaid märkusi interfeiselektroonika kohta. Kui kasutatakse mehaanilisi lüliteid sisendseadmetena (joonis 11-6), tuleb arvestada et lülitamise hetkel tekib sädelemine ja kuna MP on väga kiire, loeb ta selle sädelemise 1-0-1-0 jne vaheldumiseks. Et sädelemise ülekandmist vältida, kasutatakse mitmeid abiskeeme (v.t. joonis 11-7). Mõlemad skeemivariandid on asünkroonsed trigerid. Väljundseadmete konstrueerimisel tuleb arvestada, et MP ja mitmed tugikiibistikud annavad välja väga väikest voolu ja seetõttu tuleb interfeiskiipidena kasutada tundlikke vooluvõimendeid. Näitena on toodud joonistel 11-8 ja 11-9, kuidas ühendada MP-ga LED ja DC mootor, kasutades trensistorvõimendeid. 7.2 Sisend-väljunpordi aadressi dekodeerimine. Kui kasutatakse mälupöördumistsükliga sisend-väljundit, siis dekodeeritakse seadet nagu mälu. Põhierinevus isoleeritud- ja mälupöördumistsükliga sisend-väljundi vahel on see mitu aadressbitti dekodeeritakse. Mälu korral dekodeeritakse näiteks A0-A31, I/O korral aga A0- A15 või A0-A7. Aadressi dekodeerimisel kasutatakse dekoodreid, mis aktiviseerivad ainult ühe oma väljunditest kui sisendaadress on õige. Selle aktiivse väljundiga siis lubatakse siinile ainult üks mikroskeem korraga, aktiveerides vastava kivi CS pinni (vt. jooniseid 11-10 kuni 11-12). Andmesiin saab I/O pordil olla kas 8 bitti, 16 bitti või tänapäeval ka 32 bitti lai. Vastavalt võtab siis seade kas 1 baidi, 2 baiti või 4 baiti aadressruumist. Vaata jooniseid 11- 13 kuni 11-16. 7.3 Programmeeritav perifeeriainterfeis 82C55.
  • 22. Progammeeritav perifeeriainterfeis (PPI) 82C55 on laialt kasutatav komponent. Sellel on sisendiks-väljundiks 24 pinni, mis on programmeeritavad 12 pinniste gruppidena ning ta töötab kolmes eri moodis. Ise on ta TTL standartiga sobiv. Kasutatakse teda ka näiteks paralleelprinteri ja klaviatuuri interfeisidena. 7.3.1 82C55 põhikirjeldus. Joonisel 11-17 on toodud 82C55-e skeem. Tal on 3 I/O porti A, B ja C mis on programmeeritavad kui grupid. Grupp A sisaldab pinne PA0-PA7 ja PC4-PC7. Grupp B sisaldab pinne PB0-PB7 ja PC0-PC3. PPI aktiveeritakse CS signaaliga. Funktsioon valitakse aadressbittidega A1 ja A0 (00-portA, 01 portB, 10 portC ja 11 käsuregister). Joonisel 11-18 on näitena toodud, kuidas 82C55 ühendatakse 386 protsessoriga. Kõik 82C55 pinnid peale CS pinni, mis dekodeeritakse eri loogikaga, on otse ühendatud MP pinnidega. RESET signaal nullib PPI ja paneb ta moodi 0 reziimi. Eraldi programmeerimist 82C55 ei vaja, ta on kohe töövalmis pärast RESET signaali. 7.3.2 82C55 programmeerimine. Programmeerimine toimub kasutades kahte sisemist registrit nagu on näidatud joonisel 11-19. Grupi B bitid (port B + alumine osa pordist C) on programmeeritavad kui sisend- või väljundpinnideks. Grupp B opereerib ainult moodides 0 või 1. Mood 0 on lihtne sisend/väljund mood mis võimaldab grupi B pinne kasutada lihtsate sisendpinnidena või lukustatavate väljundpinnidena. Mood 1 on strobeeritud operatsioon, kus porti B kasutatakse andmete siirdamaiseks ja C porti "handshakingu" (käepigistuse) signaalideks (andmevahetuse sünkroniseerimiseks). Grupi A pinne saab lisaks moodidele 0 või 1 kasutada ka moodis 2. Mood kaks on mood, kus port A on kui kahesuunaline andmesiin. Kui bitti 7 käsubaidis kirjutatakse 1 siis tõlgendatakse teda käsubaidina A, kui sinna kirjutatakse 0 siis käsubaidina B. See võimaldab pordi C bitte panna 1-ks või 0-ks kui 82C55 töötab moodis 1 või 2. 7.3.3 Mood 0. Selles moodis töötab 82C55 kui bufferdatud sisendseade või kui lukustatav väljundseade. Joonisel 11-20 on 82C55 ühendatud kaheksa 7-e segmendilise LED-i külge. Siin on nii A kui B programmeeritud kui väljundpordid. Tekstis on seletatud, kuidas selline süsteem töötab. Joonisel 11-21 on näidatud, kuidas 82C55-t kasutada vedelkristallidel displei interfeisina, samuti on toodud vastavate programmide näidised. Joonistel 11-22 ja 11-23 on 82C55 abil ühendatud MP süsteemi sammmootor, joonisel 11-24 aga 16 klaviatuurine maatriks. Kõiki neid näiteid võib vaadelda kui lisamaterjali, neid ei ole mõtet väga põhjalikult uurida. 7.3.4 Mood 1 strobeeritud sisend. Selles moodis töötavad pordid A ja B kui lukustatavad sisendseadmed. Porti C kasutatakse kui handshaking signaale. Näitena vaata jooniseid 11-26 ja 11-27. 7.3.5 Mood 1 strobeeritud väljund. See on sarnane mood 0 väljundoperatsioonile selle erinevusega, et kasutatakse kontrollsignaale handshakinguks. Näitena vaata jooniseid 11-28 ja 11-29. 7.3.6 Mood 2.
  • 23. Selles moodis töötab ainult grupp A. Siin port A muutub kahesuunaliseks lubades andmeid võtta vastu ja saata sama pordi kaudu. Näitena vaata joonist 11-30. Joonisel 11-31 on toodud tabel, kus on summeeritud kõik 82C55 töötamismoodid ja kuidas eri portide pinne nendes tõlgendatakse. 7.4 Programmeeritav klaviatuuri/displei interfeis 8279. Kuna seda interfeissi tänapäevates arvutites eriti ei kasutata, siis vaatleme teda kui ajaloolist näidet. Põhjalikult tema töösse me ei süvene. See skeem skaneerib ja dekodeerib kuni 64 klhvist klaviatuuri ja juhib 16 numbrilist displeid. Ta on konstrueeritud selliselt, et võimalikult hästi sobituda MP-ga. Joonisel 11-33 on toodud näiteks, kuidas see mikroskeem ühildada MP 8088 siinidega. Et 8279 initsialiseerida, tuleb ta programmeerida (erinevalt 82C55-st). Temasse tuleb kirjuatada 8 kontrollsõna. Esimesed 3 bitti numbrist, mis kirjutatakse kontrollporti valivad ühe kaheksast erinevast kontrollsõnast. Kontrollsõnad on toodud tabelis 11-4. Näide, kuidas ühendada 8279-ga 6-e numbrilist displeid on toodud joonisel 11-37. 7.5 Programmeeritav taimer 8254. Antud mikroskeem sisaldab 3 sõltumatut 16 bitist loendajat maksimaalse sagedusega 10 MHz. PC-s on sellel kivil 3 funktsiion: 1. genereerida kellakatkestust sagedusega umbes 20Hz, 2. genereerida DRAM mälude regenereerimissignaali, 3. anda kindla sagedusega signaali valjuhääldajale ja teistele seadmetele. 7.5.1 8254-a põhikirjeldus. Joonisel 11-38 on toodud 8254-a blokkskeem. 8254 on 8253-e edasiarendus. Iga loendaja omab 3-e välispinni: CLK, GATE ja OUT. CLK sisendisse antakse väline sagedus, GATE sisendit kasutatakse teatud juhtimissignaalide jaoks mõnes timeri moodis, OUT on loendaja väljund. MP-ga ühendamiseks kasutatakse pinne D0-D7, RD, WR, CS, A1 ja A0. Aadresspinne A1 ja A0 kasutatakse, et adresseerida 4-a sisemist registrit, mida kasutataske programmeerimiseks ja loendajast lugemiseks ja sinna kirjutamiseks. Loendaja 0 on programmeeritud genereerima umbes 20Hz sagedusega signaali kella katkestuse (vektoriga 8) jaoks. Loendaja 1 on programmeeritud 15 µs pulsside genereerimiseks, mida kasutatakse läbi DMA tsükli DRAM mälukivide regenereerimiseks. Loendaja 2 on programmeeritud valjuhääldaja tooni genereerimiseks. 7.5.2 8254 programmeerimine. Iga loendaja on individuaalselt programmeeritav kirjutades sinna kontrollsõna. Joonisel 11-39 on toodud iga biti/bittide kombinatsioonide tähendused kontrollsõnas. Iga loendaja omab lisaks programmi kontrollsõna, mis valib kuidas loendaja töötab. 8254 saab töötada kuues eri moodis. Joonisel 11-40 on näidatud, kuidas iga nendest moodidest funktsioneerib. Joonisel 11-41 on toodud skeemi näidis, kuidas 8254 panna genereerima kindla sagedusega meander impulsse. Samuti on võimaldab 8254 lugeda iga loendaja sisu. Et seda teha, tuleb programmeerida loendaja lukustamise kontrollsõna. See säilitab lugemise hetkel loendajas oleva väärtuse kuni see MP poolt maha loetakse (v.t. joonist 11-42). Kui on vaja maha lugeda rohkem kui üks loendaja korraga, tuleb kasutada nn. tagasilugemise (read-back) kontrollsõna.
  • 24. See on toodud joonisel 11-43. Joonisel 11-44 on toodud 8254 staatusregistri sisu. Kuidas kasutada 8254-ja kui DC mootori kiiruse kontrollerit on toodud joonisel 11-45. 7.6 Programmeeritav järjestikinterfeis 16550. 16550 on UART (universal asynchronous receiver/transmitter), mis on ühildatav Inteli MP- ga. Seade võimaldab infot vahetada kiirusega kuni 1.5 Mbaudi (bitti sekundis). 16550 sisaldab FIFO buffrit sügavusega 16 baiti. Joonisel 11-47 illustreeritakse asünkroonset andmeedastusprotokolli. Iga raam sisaldab stardibiti, seitse andmebitti, paarsusbiti ja ühe stopbiti. Antud struktuur võib varieeruda, näiteks võib olla 8 andmebitti, samuti ei tarvitse olla paarsusbitti. Joonisel 11-48 on toodud 16550 funktsionaalne kirjeldus. Mikroskeem on kas 40 pinnises DIP kestas või 44 pinnises PLCC kestas. Funktsionaalselt on saatja ja vastuvõtja sõltumatud. 16550 saab töötada kas simplex moodis (kasutatakse ainult saatjat või vastuvõtjat), pool-duplex moodis (kasutatakse nii saatjat kui vastuvõtjat aga mitte üheaegselt ja täis-duplex moodis (kasutatakse üheaegselt nii saatjat kui vastuvõtjat). 16550 pinnide kirjeldused on toodud tabelis. Aadressbittidega A0, A1 ja A2 määratakse ära sisemine register (vaata tabel 11-8). 16550 programmeerimine on lihtne ja koosneb kahest etapist: kõigepealt initsialiseeritakse UART ja siis juhitakse tema tööd registrite abil. Initsialiseerimine toimub pärast riistvaralist või programmvaralist resetti ja koosneb kahest etapist: programmeeritakse kontrollregister ja siis baudimäära generaator. Kontrollregistris, mis adresseeritakse I/O aadressiga 011 (A2, A1, A0), pannakse paika andmebittide arv, stopbittide arv ja paarsusbitt. Joonisel 11-49 on toodud kontrollregistri bittide tähendused. Tabelis 11-9 on spetsialiseeritud paarsusbittide kombinatsioonid sõltyvalt kolmest olekuregistri bitist ST, P ja PE. Baudimäära generaator programmeeritakse kasutades aadressbittide kombinatsiooni 000 ja 001 (A2, A1, A0). Pordis 000 hoitakse 16 bitise jagaja alumisi bitte, pordis 001 aga ülemisi bitte. Tabelis 11-10 on toodud standartsed baudimäärad ja jagajad kui kasutatakse kvartsi sagedusega 18,432 MHz. Joonisel 11-50 on näidatud, kuidas 16550 ühendada MP-ga. Samuti on näidisprogrammid, kuidas UART-i prorammeerida andmete saatmisel ja vastuvõtmisel. 7.7 Kvartsgeneraator 8284A. 8284-l on mitu funktsiooni MP süsteemis, ta genereerib sünkroniseerivat kellasignaali, RESET signaali, READY sünkroniseeritud signaali ja paljude TTL välisseadmete jaoks kellasignaali. Joonisel 9-2 on toodud generaatori mikroskeemi pinnide tähendused ja allpoololevas tabelis nende funktsioonid. 8284 koosneb kahest osast: kellageneraatorist ja RESET sünkronisatsioonist. Kellgeneraatoril on 2 sisendit, X1, X2, mis määravad ära kella sageduse ja kuhu ühendatakse kvartskristall. Generaator genereerib meandersignaali, mis läheb väljundisse OSC. Seda kasutatakse mõnikord kui sisendsagedust teiste 8284 generaatorite jaoks. Kui F/C on 0, siis jagatakse see sisemine sagedus 3-ga, kui aga 1, siis kasutatakse välist sagedust, mis samuti jagatakse 3-ga. Antud jagaja genereerib aegdiagrammi READY signaali sünkroniseerimiseks, CLK signaali ja sisendi teisele 2-ga jagajale, mis omakorda genereerib välisseadmetele sünkrosignaali, mis on jagatud kuuega ehk 2 korda aeglasem, kui MP-l. Joonisel 9-4 on toodud skeem, kuidas 8284 on ühendatud protsessoriga. 15 MHz kvartsi abiga genereeritakse 5 MHz-ne taktsignaal protsessorile ja 2,5 MHz-ne kellasignaal välisseadmetele. RC ahel garanteerib RESET signaali pärast toite sisselülitamise või nupule vajutamisel. D triger 8284 sees garanteerib, et RESET signaal on kõrge pärast 4-ja kellasignaali ja püsib kõrge vähemalt 50 µs. 7.8 READY signaal ja ooteolekud (wait states).
  • 25. Protsessoril on sisendpinn READY, mida kasutatakse aeglaste sisend-väljudseadmete ja aeglase mälu sünkroniseerimisel. Ooteolek (wait state) on ekstra kellaperiood, mis pannakse T2-e ja T3-e vahele, et pikendada sünkroniseerimisperioodi. Kui välisloogika aktiviseerib READY pinni, siis protsessor pikendab andmevahetustsüklit ja nii "pikendab" aegdiagrammi. See võimaldab sünkroniseerida aeglaste seadmete tööd. READY pinn nõuab siiski teatud aegdiagrammist kinnipidamist. Joonisel 9-14 on toodud näide READY signaali sünkroniseerimise kohta kasutades RDY sisendit 8284-s. RDY aegdiagramm on toodud joonisel 9-15. READY signaali genereerib tavaliselt 8284. Kasutades ASYNC sisendit antud kivil, saab kasutada ühest või kahest sünkroniseerimistsüklit. Kui ASYNC on 1, kasutatakse üheastmeslist sünkronisatsiooni, kui 0 siis kaheastmelist. Joonisel 9-17 on toodud skeem, mille abiga saab genereerida nii mitu ooteolekut kui palju vajatakse. Joonisel 9-18 on toodud aegdiagramm selle skeemi töötamisel. Sisend-väljund mälu otsepöördumisega (Direct Memory Access, DMA) Arvutikomponendid FKEF.02.089 DMA kontroll käib kahe protsessori pinni abil: HOLD ja HOLDA. Joonisel 13-1 on toodud DMA tsükli tavaline aegdiagramm. Pärast HOLD pinni aktiveerimist vastab protsessor (pärast paari takti) HOLDA pinni aktiveerimisega ja läheb kõrge impedansiga olekusse, andes siini teisele kontrollerole hallata. HOLD signaalil on kõrgem prioriteet kui INTR või NMI signaalidel. Temast kõrgem prioriteet on RESET signaalil. DMA READ signaaliga kirjutatakse andmed mälust I/O seadmesse, DMA WRITE signaaliga aga kirjutatakse I/O seadmest mällu. DMA tsüklis aktiveeritakse mõlemad, nii mälu kui ka sisend-väljundseadme kirjutamis- või lugemissignaalid. 8086 baasil näide selle teostamisest on toodud joonisel 13-2. Andmete edastamiskiiruse mälu ja sisend-väljundseadmete vahel määrab tavaliselt ära DMA kontroller. 8.1 DMA kontroller 8237. Joonisel 13-3 on toodud 8237-e blokkdiagramm. 8237 on neljakanaliline ja võimaldab andmeedastust kiirusega kuni 1.6 Mb/s. Iga kanal on võimeline adresseerima 64 kb mälu ja siirdama 64 kb andmeid ühe programmeerimistsükliga. Pinnide difinitsioonid on toodud tabelis. 8237-e programmeerimine toimub kasutades käsuregistrit (command register CR). Selle 8 bitise registri bittide tähendused on toodud joonisel 13-4. Lisaks toimub 8237-e juhtimine moodregistrite abil. Iga kanal omab oma moodregistrit, mille struktuur on toodud joonisel 13-5. Antud mikroskeemi juhtimisel osalevad veel küsiregister (request register), mask register ja status register. Nende struktuur on toodud joonistel 13-6 kuni 13-9. Kõiki registreid saab juhtida kasutades aadresspinne A0 kuni A3 ja signaale IOR ja IOW. Mis kombinatsioonid on kasutusel, on toodud joonisel 13-10. Et eristada 16 bitiste andmete ülekandmisel, kumb baitidest on aktiivne, kasutatakse sisemist D trigerit (F/L), mis on kas 1 või 0 (vt. joonist 13-11). Et 8237-e ühte kanalit programmeerida, tuleb läbi teha 4 käsku: 1. nullida F/L triger, 2. keelata antud kanal, 3. programmeerida aadressi madalamad bitid ja siis kõrgemad bitid, 4. programmeerida loendurite madalamad ja siis kõrgemad bitid. Kuidas 8237 ühendada näiteks protsessoriga 80X86 on toodud joonisel 13-12. Tavaliselt on PC arvutites 2 DMA kontrollerit, mis asetsevad I/O aadressidel 0000h-000Fh (kanalid 0-3) ja
  • 26. 00C0h-00DFh (kanalid 4-7). Mis aadressidel on registrid, kus sisalduvad mäluaadresside bitid A16-A23 ja A24-A31 on toodud tabelis 13-1. 8086 protsessoris ei olnud stringikäske, mälu-mälu andmesiirdeoperatsioone sai teostada ainult DMA kanali vahendusel. Samuti sai mällu kirjutada ühte kindlat baiti kõige kiiremini kasutades DMA kanaleid (näiteks videomälu tühjendamine). Vastavad näidisprogrammid on toodud näidetes 13-1 ja 13-2. Joonisel 13-13 on toodud näidsena, kuidas andmeid printida kasutades DMA kanalit. 8.2 Jagatud siini operatsioonid. Tänapäevastes arvutites on tavaliselt kasutusel mitu siini, mis jagunevad lokaalseteks ja jagatuteks. Kuna tavaliselt on välisseadmete kontrollerid juba oma olemuselt kindlat programmi sooritavad protsessorid, tuleb eristada siine, mida kasutab ainult üks arbiiter (protsessor) või mitu arbiitrit. Jagatud siine kasutab siis mitu arbiitrit (siiski üks fikseeritud ajahetkel). Joonisel 13-14 on näidisena toodud lokaalse ja jagatud siini põhimõtteskeem. Lokaalne siin on ühendatud mälu ja sisend-väljundseadmetega mis on otse juurdepääsetavad ühele protsessorile ilma eri spetsiaalsete protokollide või reegliteta. Jagatud siinile peab olema juurdepääs mitme eri protsessori poolt ning see võib sisaldada mälu ja I/O seadmeid, mis on juurdepääsetavad kõikide protsessorite poolt. Joonisel 13-15 on näitena toodud, kuidas 8088 ühendada kui jagatud siiniarbiitrit. Tegelikult võib ka DMA kontrollerit pidada jagatud siini arbiitriks, kuna ta suudab siini kontrollida. Erinevus täielikust siiniarbiitrist on ainult see, et viimane suudab sooritada eri programme, siis DMA kontroller suudab siirdada ainult andmeid mälu ja sisend- väljundseadmete vahel. Üheks näiteks siiniarbiitrile on kivi 8289. Jagatud siin on konstrueeritud tavaliselt jagama infot vaid mitme eri MP vahel, samal ajal kui lokaalsetel siinidel tegutsevad MP üksi, kasutades oma lokaalseid ressursse ja sooritades oma lokaalseid programme. Joonisel 13-16 on toodud 8289 blokkdiagramm. Samas on toodud ka tema pinnide tähendused.