KodulehekokkuvõTe

1,399 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,399
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

KodulehekokkuvõTe

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×