x86
x86 on käsustike perekond, mis põhineb protsessoril Intel 8086.
Protsessorit 8086 hakati tootma aastal 1978. See täiendas Inteli eelmisi protsessoreid 16-bitiste käskudega. Nimi x86 tuleneb sellest, et mõnede Inteli hilisemate protsessorite nimed lõppesid samuti numbrikombinatsiooniga "86". Aastate jooksul on x86 käsustikku oluliselt täiustatud ja laiendatud, kuid peaaegu alati tagasiühilduvalt. x86 arhitektuuri kasutavad Intel, AMD, Cyrix, VIA ja paljud teised protsessoritootjad.
Kuna nimetust x86 hakati kasutama pärast 80386 tulekut, siis viitab x86 tavaliselt ühilduvusele 32-bitise käsustikuga, mida 80836 kasutas. Mõnikord kasutatakse tähistust x86-32, et eristada seda 16-bitisest x86 käsustikust ja 64-bitisest käsustikust x86-64. Kuigi enamik x86-protsessoritest uutes personaalarvutites ja serverites toetavad 64-bitist käsustikku, kasutatakse vanemate süsteemidega ühilduvusprobleemide vältimiseks tähistust x86-64 (või x64). Tähistust x86 kasutatakse seejuures ainult 32-bitiste võimalustega protsessorite puhul.
8086 loodi peamiselt manussüsteemides ja väiksemates personaalarvutites kasutamiseks, vastuseks edukale 8080-ühilduvale Zilog Z80-le[1]. Hiljem tulid x86 arhitektuurile uued võimalused ja kasvas arvutusvõimsus. Tänapäeval on x86 üldlevinud nii personaalarvutites kui ka serverites ja tööjaamades. x86-põhist riistvara toetab suur hulk tarkvara, sealhulgas operatsioonisüsteemid Windows, Linux, BSD, Solaris ja Mac OS X.
Moodsaid x86 süsteeme kasutatakse manussüsteemides suhteliselt harva. Patareitoitega seadmetes eelistatakse lihtsamaid 16-bitised x86-protsessoreid. 32- ja 64-bitised süsteemid selles valdkonnas on näiteks VIA C7, VIA Nano, AMD Geode, Athlon Neo ja Intel Atom.
"Kohmakat" x86 arhitektuuri, mis sisaldab igandeid esimestest 8-bitistest protsessoritest, on korduvalt üritatud asendada, ka Inteli enda poolt. Selle näideteks on iAPX 432, Intel 960, Intel 860 ning Inteli ja Hewlett Packardi arhitektuur Itanium. Siiski on pideva mikroarhitektuuride ja tootmisprotsessi täiustamise tõttu x86-ga raske konkureerida. Kui AMD tuli välja x86 64-bitiste laiendustega, siis vastas Intel ühilduva lahendusega. Lisaks annavad 8-tuumaline Intel Xeon ja 12-tuumaline AMD Opteron tunnistust x86 hea skaleeruvuse kohta.
Kronoloogia
muudaAllolevas tabelis on levinumad[2] tarbijale suunatud protsessorid, mis kasutavad x86 käsustikku. Tabel on jaotatud põlvkondadesse, mis tõstavad esile tähtsaid muutuseid x86 ajaloos. Märkus: CPU põlvkonnad ei ole rangelt määratletud.
Põlvkond | Esmalt avalikustatud | Tuntumad Protsessorid | Lineaarne/füüsiline addressiruum | Märkimisväärsed uued muutused |
---|---|---|---|---|
1 | 1978 | Intel 8086, Intel 8088 | 16-bitine / 20-bitine (segmenditud) | esimesed x86- mikroprotsessorid |
2 | 1982 | Intel 80186, Intel 80188, NEC V20/V30 | riistvara kiirete arvutuste tarvis, nt kiire korrutamine ja jagamine | |
Intel 80286 | 16-bitine (30-bitine virtuaalne) / 24-bitine (segmenditud) | MMU (inglise keeles memory managment unit) ja suurem aadressiruum | ||
3 (IA-32) | 1985 | Intel 80386, AMD Am386 | 32-bitine (46-bitine virtuaalne) / 32-bitine | 32-bitine käsustik, MMU koos paging´uga |
4 | 1989 | Intel486, AMD Am486, Cyrix III-Samuel, VIA C3-Samuel2 / VIA C3-Ezra (2001) | RISCi-laadne käsukonveier, integreeritud FPU ja vahemälu | |
5 | 1993 | Pentium, Pentium MMX, Rise mP6 | kasutab superscalarit, 64-bitine andmesiin, kiirem FPU, MMX käsustik | |
5/6 | 1996 | Cyrix 6x86, Cyrix MII, Cyrix III-Joshua (2000) | ||
6 | 1995 | Pentium Pro, AMD K5, Nx586 (1994) | nagu eelmine / 36-bitine füüsiline (PAE) | PAE (Pentium Pro), integreeritud L2-vahemälu (Pentium Pro) |
1997 | AMD K6/-2/3, Pentium II/III, IDT/Centaur-C6 | L3-vahemälu tugi, 3DNow!, SSE (Streaming SIMD Extensions) | ||
7 | 1999 | Athlon, Athlon XP | superskalaarne FPU | |
2000 | Pentium 4 | kõrge taktsagedus, SSE2, hüperhargtöötlus | ||
6-M/7-M | 2003 | Pentium M, VIA C7 (2005), Intel Core (2006) | optimeeritud madalaks voolutarbeks | |
8 (x86-64) | 2003 | Athlon 64, Opteron | 64-bitine / 40-bitine | x86-64, HyperTransport |
2004 | Pentium 4 Prescott | väga kõrge taktsageduse, SSE3, 64-bit võimekus on saadaval ainult pesaga LGA 775 | ||
9 | 2006 | Intel Core 2 | madal voolutarve, mitu tuuma, madalam taktsagedus, SSE4 (Penryn) | |
10 | 2007 | AMD Phenom | nagu eelmine / 48-bitine | neljatuumaline, 128-bitised FPUd, SSE4a, HyperTransport 3 või QuickPath, L3-vahemälu, modulaarne disain |
2008 | Intel Core i3, Intel Core i5, Intel Core i7 | |||
Intel Atom | väga madal voolutarve | |||
VIA Nano | ||||
11 | 2010 | Intel Sandy Bridge, AMD Bulldozer | SSE5/AVX (Advanced Vector Extensions) |
Arhitektuur
muudax86 on muutuva instruktsioonipikkusega CISC-arhitektuur, mille käsustik on välja arenenud lihtsamate 8-bitiste arhitektuuride, nt 8008, 8080 ja 8085, järjestikusel täiendamisel. Toetatud on baidi kaupa adresseerimine. Andmesõnade paigutus on peeneotsaline. Iga andmesõna suuruse puhul on lubatud ligipääs joondamata mäluaadressilt. Suurim täisarv ja mäluaadress võib sõltuvalt arhitektuuri põlvkonnast olla 16, 32 või 64 biti pikkune. Uuemad protsessorid toetavad ka väiksemaid andmesõnasid. SIMD võimaldab üheaegselt töödelda mitut skalaari.
Ujukomaarvutus ja SIMD
muudaProtsessorile 8086 loodi kaasprotsessorina lisaks ujukomaprotsessor 8087. Hiljem sai sellest 80387. Järgnevatel protsessoritel on ujukomaprotsessori funktsionaalsus tagasiühilduvalt sisse ehitatud. Lisaks on uuematel protsessoritel SIMD plokk, milles saab töödelda korraga ühte või kahte 128-bitist andmesõna, milles mõlemas võib olla 2, 4, 8 või 16 ühesuurust täisarvu. See tähendab, et protsessor saab mälust laadida või mälusse salvestada korraga 128-bitise andmesõna ning teha mitme 128-bitise andmesõnaga paralleelselt loogilisi operatsioone. Tulevased x86-protsessorid toetavad ka 256-bitised SIMD operatsioone.
Segmentimine
muuda1970. aastatel muutus mälu odavamaks, kuid 16 biti abil sai adresseerida vaid 64 kB mälu. 8086 võttis kasutusele lihtsa segmendiregistri, mis suurendas mäluaadressi pikkust 4 biti võrra. Korrutades mäluaadressi 16-ga, oli võimalik adresseerida 1 MB (1 048 576 baiti), mis oli sellel ajal väiksema arvuti jaoks suur mälukogus. See oli suhteliselt keeruline lahendus, kuid vähendas riistvara keerukust ja tootmiskulusid.
Reaalrežiimis saadakse 20-bitine mäluaadress nihutades segmendi aadressi 4 biti võrra vasakule ja liites sellele nihke. Näiteks, kui segmendiregister DS on väärtusega A000h ja register SI väärtusega 5677h, siis DS:SI viitab absoluutsele aadressile DS × 10h + SI = A5677h. Seega saab reaalrežiimis adresseerida 220 baiti ehk 1 MB. Vaikimisi kasutatakse koodi jaoks segmendiregistrit CS, andmete jaoks DS-i ja pinu jaoks SS-i. Instruktsiooni eesliite abil saab määrata, millist neljast segmendiregistrist kasutada.
Kaitserežiimis ei viita segmendiregister füüsilisele aadressile, vaid sisaldab "selektorit", mis viitab süsteemitaseme struktuurile, milleks on segmendi deskriptor (kirjeldus). Deskriptor sisaldab segmendi alguse füüsilist mäluaadressi, segmendi pikkust ja ligipääsuõigusi. Mälu kasutamisel kontrollitakse, kas nihe vastab segmendis asuvale aadressile. Kui nihe asub segmendist väljaspool, siis tekitatakse erand (exception).
Adresseerimine
muudaAdresseerimine 16-bitistel x86-protsessoritel näeb välja järgmine:
32-bitise aadressiruumi adresserimine 32- või 64-bitisel x86 protsessoril:
64-bitises koodis adresseerimine 64-bitisel x86 protsessoril:
ja
x86 registrid
muuda16-bitised
muudaEsimestel Inteli x86-protsessoritel 8086 ja 8088 on neliteist 16-bitist registrit. Neli neist (AX, BX, CX, DX) on üldotstarbelised registrid (GPR – General Purpose Register). Need registrid on jaotatud kaheks. Näiteks registri BX ülemine osa on kättesaadav registri BH ja alumine osa registri BL kaudu. Registreid SP ja BP kasutatakse pinusse viitamiseks. SP ehk pinuviit (Stack Pointer) viitab pinu pealmisele elemendile, BP (Base Pointer) viitab tavaliselt lokaalmuutujate alale. Registreid SI (Source Index) ja DI (Destination Index) kasutatakse järjendite indekseerimiseks.
Nelja segmendiregistri (CS, DS, SS ja ES) abil moodustatakse mäluaadress. Register FLAGS sisaldab erinevaid lippe, näiteks ületäituvuse lipp (overflow flag) ja ülekande lipp (carry flag). IP ehk instruktsiooniviit (Instruction Pointer) viitab instruktsioonile, mida hakatakse parajasti mälust lugema ja seejärel täitma.
32-bitised
muuda32-bitise protsessori 80386 tulekul laiendati enamikku registritest 32 biti suurusteks. Segmendiregistrid jäid endiselt 16-bitisteks. 32-bitilisust väljendab täht E (Extended) registrite nimede ees x86 assemblerkeeles. Näiteks register AX on uue 32-bitise registri EAX alumised 16 bitti, SI on ESI alumised 16 bitti jne. Lisati ka kaks uut segmendiregistrit FS ja GS.
Spetsiaalsete instruktsiooni eesliidete abil saab määrata, et 16-bitine kood sisaldab 32-bitist instruktsiooni või vastupidi.
Protsessorile 80486 lisandus ujukomaplokk koos kaheksa 80-bitise registriga.[3] Pentium II protsessorile lisandusid kaheksa 64-bitist MMX täisarvuregistrit (MMX0–MMX7). Need registrid jagasid alumisi bitte FPU pinuga (st(0)–st(7)).[3] Pentium III-st alates oli x86 protsessoritel 32-bitine SSE haldusregister MXCSR ja kaheksa 128-bitist ujukomaregistrit (XMM0–XMM7).[3]
64-bitised
muudaAMD Opteroni protsessorist alates on registrid 64 biti suurused. Nende nimed on RAX, RBX, ECX, RDX, RSI, RDI, RBP, RSP, RFLAGS ja RIP. EAX on 64-bitise RAX registri alumised 32 bitti jne. Lisandusid kaheksa üldotstarbelist registrit (R8–R15), mida on võimalik kasutada vaid 64-bitises režiimis.
Kasutus
muudaÜldotstarbelisi registreid võib kasutada igaks otstarbeks, kuid tavaliselt eelistatakse mõnede operatsioonide puhul kindlaid registreid. EAX on sobilik aritmeetiliste tehete jaoks, sest instruktsioon, milles vähemalt üks operand on EAX, on üldjuhul baidi võrra lühem ja seega ka kiiremini mälust loetav.[4] EAX registrit nimetatakse ka akumulaatoriks (accumulator). EBX-i kasutatakse järjendi baasindeksina (base). ECX-i kasutatakse tihti loendurina (counter). Näiteks tsükli koostamise instruktsioon LOOP vähendab ECX registrit ühe võrra ja hüppab tsükli algusse, kui ECX-i väärtus ei ole 0.[5] EDX on üldine register andmete (data) hoidmiseks.
64-bitistel registritel R8–R15 kindlat otstarvet ei ole.
Laiendused
muudaPAE
muudaPAE (Physical Address Extension) ehk füüsilise aadressi laiendus lisati esmalt protsessorile Pentium Pro. See lubab 32-bitises kaitserežiimis füüsilist aadressiruumi laiendada ja kasutada rohkem kui 4 GB mälu. Tavaliselt on aadressiruum kaitserežiimis 4 GB suurune.[6]
Virtualiseerimine
muudaMõned x86-protsessorid toetavad riistvaralist virtualiseerimist. Inteli lahendus kannab nime Intel VT[7], AMD vastav tehnoloogia on AMD-V[8]. Emulaatorid x86 platvormil virtuaalmasinate jooksutamiseks on näiteks VMWare, Parallels, Microsoft Hyper-V ja Virtual PC. Avatud lähtekoodiga projektidest on tuntud QEMU, VirtualBox ja Xen.
Viited
muuda- ↑ "Birth of a Standard: The Intel 8086 Microprocessor". Originaali arhiivikoopia seisuga 26. september 2010. Vaadatud 10. detsembril 2010.
- ↑ "Microprocessor Hall of Fame". Intel. Originaali arhiivikoopia seisuga 6.07.2007. Vaadatud 11.08.2007.
- ↑ 3,0 3,1 3,2 Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 1, p. 2-33 (2009)
- ↑ "Randall Hyde: The Art of Assembly Language 6.5.1.1". Originaali arhiivikoopia seisuga 27. juuli 2011. Vaadatud 13. detsembril 2010.
- ↑ "Randall Hyde: The Art of Assembly Language 6.9.6". Originaali arhiivikoopia seisuga 14. aprill 2010. Vaadatud 13. detsembril 2010.
- ↑ Physical Address Extension – PAE Memory and Windows
- ↑ Intel® Virtualization Technology (Intel® VT)
- ↑ "AMD Virtualization (AMD-V™) Technology". Originaali arhiivikoopia seisuga 25. veebruar 2012. Vaadatud 11. veebruaril 2012.
Välislingid
muuda- x86 registers – Yasm User Manual. Chapter 20. x86 architecture.