Όχι πλήρως. Για συγκεκριμένα προχωρημένα χαρακτηριστικά του x86 χρειάζεται άδεια από την Intel, ενώ αντίστοιχα γιατον x86-64 ίσως χρειάζεται άδεια από την AMD. Ο επεξεργαστής 80486 κυκλοφορεί πάνω από 20 χρόνια στην αγορά [1]καιδεντον επηρεάζουν πατέντες. Αυτό το υποσύνολο της αρχιτεκτονικής x86 είναι επομένως ανοιχτό.
Καταχωρητές
Γενικής χρήσης
16-bit: 6 καταχωρητές με ειδικούς ρόλους + BP και SP; 32-bit: 6 GPRs + EBP και ESP; 64-bit: 14 GPRs + RBP και RSP.
Ο όρος x86 αναφέρεται σεμια οικογένεια από αρχιτεκτονικές συνόλου εντολών[2]που βασίζονται στηνCPUIntel 8086. Ο επεξεργαστής 8086 κυκλοφόρησε το 1978 σαν μια πλήρως 16-bit επέκταση του8080 της Intel που βασιζόταν σε τεχνολογία 8-bit, και εισήγαγε τοsegmentationγιανα ξεπεράσει το φράγμα των 16-bit διευθύνσεων της προηγούμενης σχεδίασης. Ο όρος x86 προήλθε από το γεγονός ότι οι πρώτοι απόγονοι του 8086 είχαν και αυτοί ονόματα που τελείωναν σε "86". Μετα χρόνια έχουν γίνει πολλές προσθήκες και επεκτάσεις στοσύνολο εντολών x86, σχεδόν πάντα με βάση την προς τα πίσω συμβατότητα (backward compatibility).[3]Η αρχιτεκτονική έχει υλοποιηθεί σε επεξεργαστές της Intel, της Cyrix, της AMD, της VIA, και πολλών άλλων εταιρειών.
Ο όρος δεν είναι συνώνυμος μετην συμβατότητα μετον IBM PC: η τελευταία απαιτεί και άλλο υλικό. Υπήρξαν και άλλα συστήματα που χρησιμοποίησαν τσιπ x86, όπως ταενσωματωμένα συστήματακαιο φορητός υπολογιστής GRID Compass, κάποιες φορές πριν από τον ίδιο τονIBM PC.
Ο όρος διαδόθηκε μετάτην κυκλοφορία του80386, και υπονοεί συνήθως συμβατότητα μετοσύνολο εντολών 32-bit του 80386. Αυτό συχνά γράφεται καισανx86-32γιανα ξεχωρίζει από το αρχικό "x86-16" που ήταν 16-bit ή από τοx86-64που είναι 64-bit.[4]Ανκαιοι περισσότεροι επεξεργαστές x86 που χρησιμοποιούνται σενέουςπροσωπικούς υπολογιστέςκαιεξυπηρετητές έχουν δυνατότητες 64-bit, γιανα αποφεύγονται προβλήματα συμβατότητας με παλαιότερους υπολογιστές ή συστήματα, συχνά χρησιμοποιείται ο όρος x86-64 (ή x64) γιανα υποδηλώνει λογισμικό 64-bit, μετον όρο x86να χρησιμοποιείται μόνο για λογισμικό 32-bit.[5][6]
Ανκαιο 8086 αναπτύχθηκε αρχικά γιαενσωματωμένα συστήματακαι μικρούς προσωπικούς υπολογιστές (για χρήση δηλαδή από έναν χρήστη), ως απάντηση στον επιτυχημένο Zilog Z80που ήταν 8080-συμβατός,[7] σύντομα η γραμμή των x86 απέκτησε περισσότερα χαρακτηριστικά και επεξεργαστική ισχύ. Σήμερα οι x86 είναι πολύ διαδεδομένοι στους σταθερούς και στους φορητούς υπολογιστές και έχουν αντικαταστήσει τους μεσαίου μεγέθους υπολογιστές (midrange computers) και τους επεξεργαστές RISCσε πολλούς εξυπηρετητές καισταθμούς εργασίας. Το υλικό των x86 υποστηρίζεται από ένα μεγάλο μέρος τουλογισμικού, όπως ταλειτουργικά συστήματαDOS, Windows, Linux, BSD, SolarisκαιMac OS X.
Οι σύγχρονοι x86 δεν απαντώνται συχνά σεενσωματωμένα συστήματακαισε εφαρμογές με απαιτήσεις χαμηλής κατανάλωσης ενέργειας (όπως αυτές που βασίζονται σε μικρές μπαταρίες), ούτε σε αγορές φτηνών μικροεπεξεργαστών, όπως οιοικιακές συσκευέςκαιτα παιχνίδια.[8] Συνήθως χρησιμοποιούνται απλές αρχιτεκτονικές 8-bit και 16-bit, ανκαι υπάρχουν οι x86-συμβατοί VIA C7, VIA Nano, AMDGeode, Athlon Neo, καιIntel Atom, που είναι σχεδιάσεις 32-bit και 64-bit με σχετικά μικρή κατανάλωση και κόστος.
Πολλοί έχουν προσπαθήσει, συμπεριλαμβανομένης της ίδιας της Intel, να αντικατασταθεί η "άκομψη" αρχιτεκτονική x86, η οποία είχε προκύψει κατευθείαν από τους πρώτους απλούς μικροεπεξεργαστές 8-bit. Παραδείγματα είναι οiAPX 432 (γνωστός καισανIntel 8800), οIntel 960, οIntel 860καιη αρχιτεκτονική Itanium της Intel και της Hewlett Packard. Παρόλα αυτά, η συνεχής βελτίωση της μικροαρχιτεκτονικήςκαιτωνκυκλωμάτωντων x86, καθώς καιη ανάπτυξη της βιομηχανίας των ημιαγωγών έχουν εδραιώσει τους x86 σε πολλές περιοχές εφαρμογών. Η επέκταση 64 bit της AMD για τους x86 (στην οποία η Intel τελικά απάντησε μεμια συμβατή σχεδίαση)[9]καιη δυνατότητα των x86 να κλιμακώνουν τις επιδόσεις τους, όπως ο οκταπύρηνος Intel Xeon καιο 12-πύρηνος AMD Opteron δείχνουν πώς στην περίπτωση του x86 η συνεχής εξέλιξη κλασικών βιομηχανικών προτύπων μπορεί να αντεπεξέλθει στον ανταγωνισμό από νέες και διαφορετικές αρχιτεκτονικές.[10]
Σημείωση: Στο κείμενο που ακολουθεί, κάθε χρήση των προθεμάτων kilo/mega/giga/tera έχει τη δυαδική τους σημασία (δυνάμεις του 1024).
Στον παρακάτω πίνακα φαίνονται τα εμπορικά ονόματα κοινών[11] επεξεργαστών που υλοποιούν το σύνολο εντολών x86, ομαδοποιημένα ανά γενιές που δείχνουν κάποια σημαντικά σημεία στην ιστορία του x86. Να σημειωθεί ότι οι γενιές αυτές δεν είναι ακριβείς: κάθε μια ορίζει ένα γενικό πλαίσιο με βάση κάποια βελτιωμένη ή εμπορικά πετυχημένη μικροαρχιτεκτονική επεξεργαστών.
Η αρχιτεκτονική x86 κυκλοφόρησε για πρώτη φορά το 1978 μετηνΚΜΕIntel 8086, που ήταν μια πλήρως 16-bit σχεδίαση, η οποία είχε βασιστεί στους παλιότερους επεξεργαστές 8-bit 8008και8080. Ανκαιδεν ήταν συμβατή στο επίπεδο του δυαδικού κώδικα (binary compatible), σχεδιάστηκε έτσι ώστε να επιτρέπει σε προγράμματα συμβολικής γλώσσαςπου είχαν γραφτεί για αυτούς τους επεξεργαστές (καιγιατον σύγχρονό τους 8085) να μεταφράζονται μηχανικά σε αντίστοιχη συμβολική γλώσσα 8086. Αυτό είχε σαν συνέπεια ο νέος επεξεργαστής να αποτελέσει ελκυστική λύση για πολλούς καταναλωτές. Ο εξωτερικός δίαυλος όμως του 8086 ήταν 16-bit και αυτό οδήγησε σε σημαντική επανασχεδίαση του υλικού, καθώς επίσης καισε άλλες επιπλοκές και σημεία πουτο κόστος αυξανόταν. Γιανα αντιμετωπίσει αυτό το εμπόδιο, η Intel εισήγαγε τον σχεδόν πανομοιότυπο 8088, ο οποίος στην πραγματικότητα ήταν ένας 8086 με εξωτερικό δίαυλο 8-bit που επέτρεπε απλούστερες πλακέτες τυπωμένων κυκλωμάτων (printed circuit boards) και χρειαζόταν λιγότερα τσιπDRAM (του 1-bit) - ήταν επίσης πιο εύκολο να επικοινωνήσει μετα ήδη διαδεδομένα (δηλ. χαμηλού κόστους) συστήματα και περιφερειακά τσιππου ήταν 8-bit. Αυτό, μαζί με άλλους, μη τεχνικούς λόγους, οδήγησε στην απόφαση της IBM να κατασκευάσει έναν οικιακό / προσωπικό υπολογιστήμε βάση τον 8088, παρά τη διαθεσιμότητα επεξεργαστών 16-bit από την Motorola, την Zilog καιτην National Semiconductor (ενώ εξέτασε επίσης και άλλους επεξεργαστές 8-bit που ήδη κυκλοφορούσαν). ΟIBM PCπου προέκυψε, επικράτησε των συστημάτων CP/Mμε βάση τονZ80, των υπολογιστών Apple II, και άλλων διαδεδομένων υπολογιστών, με αποτέλεσμα να γίνει τοντε φάκτο πρότυπο των προσωπικών υπολογιστών καιο 8088 και οι απόγονοί τουνα επικρατήσουν σε αυτόν τον κλάδο της αγοράς μικροεπεξεργαστών.
Ένας άλλος παράγοντας ήταν ο προχωρημένος αλλά ασύμβατος επεξεργαστής 32-bit Intel 8800 (γνωστός καισαν iAPX 432) που απέτυχε στην αγορά περίπου την ίδια εποχή που κυκλοφόρησε ο IBM-PC: ο 8800 απογοήτευσε από πλευράς ταχύτητας σε σχέση μετον καινούριο και γρήγορο 80286 στις αρχές του 1982. (Ο80186, που κυκλοφόρησε παράλληλα μετον 80286, προοριζόταν γιαενσωματωμένα συστήματα, και στόχευε ήδη σεμια μεγάλη αγορά.) Η εμπορική αποτυχία του 32-bit 8800 ήταν ένας βασικός λόγος πουη Intel συνέχισε να αναπτύσσει πιο προχωρημένους επεξεργαστές συμβατούς μετον 8086, όπως ο80386 (επέκταση στα 32-bit του γρήγορου 80286).
Διάφορες εταιρείες, όπως ηIBM, ηNEC,[12]ηAMD, ηTI, ηSTM, ηFujitsu, ηOKI, ηSiemens, ηCyrix, ηIntersil, ηC&T, ηNexGenκαιηUMC, άρχισαν να σχεδιάζουν καινα κατασκευάζουν επεξεργαστέςγια προσωπικούς υπολογιστές και ενσωματωμένα συστήματα. Αυτά οι υλοποιήσεις του x86 συνήθως δεν ήταν απλές αντιγραφές αλλά είχαν διαφορετική εσωτερική μικροαρχιτεκτονικήκαι παρείχαν διαφορετικές λύσεις σε ηλεκτρονικά και φυσικά προβλήματα υλοποίησης. Τα πρώτα συμβατά τσιπ ήταν 16-bit, ενώ σχεδιάσεις 32-bit ακολούθησαν πολύ αργότερα. Στην αγορά τωνπροσωπικών υπολογιστών, οι πρώτες σημαντικές ποσότητες εμφανίστηκαν γύρω στο 1990 με τους επεξεργαστές που ήταν συμβατοί μετονi386καιτονi486, συχνά χρησιμοποιώντας το ίδιο όνομα μετα πρωτότυπα τσιπ της Intel. Άλλες εταιρείες που σχεδίασαν ή κατασκεύασαν επεξεργαστές x86 ή x87 ήταν η ITT Corporation, ηNational Semiconductor, η ULSI System Technology καιη Weitek.
Μετά τονi486που είχε πλήρη διοχέτευση (pipelining), ηIntel κυκλοφόρησε την εμπορική ονομασία Pentium (η οποία, σε αντίθεση με τους κωδικούς αριθμούς, μπορούσε να κατοχυρωθεί σαν εμπορικό σήμα) γιατη νέα της γραμμή υπερβαθμωτών (superscalar) σχεδιάσεων x86. Λόγω της εξαφάνισης των ονομασιών x86 για νομικούς λόγους, ηIBM συνεργάστηκε μετηνCyrixγιατην κατασκευή του5x86καιστη συνέχεια των γρήγορων σχεδιάσεων 6x86 (M1) και6x86MX (MII) της Cyrix, που ήταν τα πρώτα τσιπ x86 που υλοποίησαν μετονομασία καταχωρητών (register renaming) ώστε να είναι δυνατή ηυποθετική εκτέλεση (speculative execution). Παράλληλα, η AMD σχεδίασε και κατασκεύασε (αλλά κυκλοφόρησε με καθυστέρηση) τον προχωρημένο 5k86 (K5), ο οποίος, εσωτερικά, ήταν βασισμένος σε σημαντικό βαθμό στις παλιότερες σχεδιάσεις 29KRISC της AMD - παρόμοια μετονNx586 της NexGen, χρησιμοποιούσε μια στρατηγική όπου αφιερωμένες βαθμίδες της διοχέτευσης αποκωδικοποιούν εντολές x86 σε εύκολα διαχειρίσιμες μικρολειτουργίες (micro-operations), μια μέθοδος που από τότε έγινε ο κανόνας για τις περισσότερες σχεδιάσεις του x86 μέχρι σήμερα.
Κάποιες πρώιμες εκδόσεις αυτών τωντσιπ είχαν προβλήματα απαγωγής θερμότητας. Ο 6x86 είχε επίσης κάποια μικρά προβλήματα συμβατότητας και από τονNx586 έλειπε ημονάδα κινητής υποδιαστολής (FPU) καιη (τότε σημαντική) συμβατότητα σε ακίδες (pin-compatibility), ενώ οK5 αποδείχτηκε λιγο αργός, όταν (τελικά) κυκλοφόρησε. Πολλοί καταναλωτές επίσης δεν γνώριζαν για αυτές τις εναλλακτικές έναντι του Pentium. Αυτά τα προβλήματα οδήγησαν σε εμπορική αποτυχία των εναλλακτικών σχεδιάσεων, παρά το γεγονός ότι οK5 είχε πολύ καλή συμβατότητα μετον Pentium καιο6x86 ήταν σημαντικά πιο γρήγορος από τον Pentium σε πράξεις ακεραίων.[13]ΗAMD αργότερα κατάφερε να εδραιωθεί σαν σημαντικός παίχτης στην αγορά, λόγω των επεξεργαστών K6, ενώ τελικά ανέπτυξε τους πολύ επιτυχημένους AthlonκαιOpteron. Υπήρξαν και άλλες εταιρείες που συμμετείχαν στην αγορά, όπως η Centaur Technology (γνωστή παλιότερα σαν IDT), η Rise Technology καιηTransmeta. Η επεξεργαστές C3καιC7 της VIA Technologies, που έχουν χαμηλή κατανάλωση ενέργειας, σχεδιάστηκαν από την Centaur και κυκλοφορούν για μεγάλο χρονικό διάστημα. Η τελευταία σχεδίαση της Centaur, οVIA Nano, είναι ο πρώτος επεξεργαστής τους μευπερβαθμωτήκαιυποθετική εκτέλεση. Έχει ενδιαφέρον το ότι κυκλοφόρησε περίπου την ίδια χρονική περίοδο μετον πρώτο επεξεργαστή της Intel με εκτέλεση εντός σειράς ("in-order") μετά τονPentiumP5, τονIntel Atom.
Η αρχιτεκτονική του συνόλου εντολών έχει επεκταθεί δύο φορές για μεγαλύτερα μεγέθη λέξης (word size). Το 1985, η Intel κυκλοφόρησε τον επεξεργαστή 32-bit 80386 (γνωστό καισαν i386), ο οποίος σταδιακά αντικατέστησε τα παλιά τσιπ 16-bit στους υπολογιστές (νακαιδε συνέβη το ίδιο σταενσωματωμένα συστήματα) κατά τα επόμενα χρόνια: το επαυξημένο αυτό προγραμματιστικό μοντέλο αρχικά ονομάστηκε αρχιτεκτονική του i386 ("i386 architecture"), λόγω του ονόματος της πρώτης του υλοποίησης, αλλά στη συνέχεια η Intel το ονόμασε IA-32 όταν εισήγαγε την (διαφορετική) αρχιτεκτονική IA-64. Μεταξύ 1999-2003, ηAMD επέκτεινε αυτήν την αρχιτεκτονική 32-bit στα 64 bits καιτην ονόμασε x86-64 (σε αρχικά της έγγραφα) καιστη συνέχεια AMD64. Σύντομα η Intel υιοθέτησε αυτές της επεκτάσεις της AMD κάτω από το όνομα IA-32e, το οποίο στη συνέχεια άλλαξε σε EM64T, και τελικά κατέληξε στο όνομα Intel 64. Ανάμεσα σε αυτά τα πέντε ονόματα, ηπιο κοινή ονομασία είναι η αρχική x86-64, ανκαιηMicrosoftκαιηSun Microsystems ακόμα χρησιμοποιούν τον όρο x64.
Η αρχιτεκτονική x86 έχει εντολές μεταβλητού μήκους και είναι κυρίως σχεδίαση "CISC" δύο διευθύνσεων με έμφαση στην προς τα πίσω συμβατότητα (backward compatibility). Το σύνολο εντολών δεν είναι όμως κλασικό CISC, αλλά επεκτείνει με διακριτό τρόπο τις απλές αρχιτεκτονικές 8-bit του8008καιτου8080. Υποστηρίζεται η διευθυνσιοδότηση με byte καιοι λέξεις αποθηκεύονται στη μνήμη σε σειρά μικρού άκρου (little-endian). Επιτρέπεται η πρόσβαση στη μνήμη σε διευθύνσεις πουδεν είναι στοιχισμένες (unaligned) για όλα τα μεγέθη λέξεων που επιτρέπονται. Το μεγαλύτερο μέγεθος που υποστηρίζεται εγγενώς για αριθμητική ακεραίων και διευθύνεσιες μνήμης ή σχετικές διευθύνσεις-offsets) είναι 16, 32, ή 64 bits ανάλογα μετη γενιά της αρχιτεκτονικής (οι νεότεροι επεξεργαστές υποστηρίζουν απευθείας και μικρότερους ακεραίους). Πολλές απλές τιμές μπορούν να επεξεργαστούν ταυτόχρονα μέσω της μονάδας SIMD που περιλαμβάνεται στις μεταγενέστερες γενιές, όπως περιγράφεται στη συνέχεια.[14]Για κοινές καταστάσεις και τιμές που βρίσκονται στο εύρος -128..127, για χρήση σε σχετικές διευθύνσεις ή απλά δεδομένα, μπορούν να χρησιμοποιηθούν κατευθείαν αριθμοί 8-bit. Οι εντολές συνήθως έχουν μήκος 2 ή 3 byte (ανκαι κάποιες είναι πολύ μεγαλύτερες και άλλες είναι ένα byte).
Γιανα εξοικονομηθεί και άλλο χώρος γιατην κωδικοποίηση των εντολών, οι περισσότεροι καταχωρητές (registers) εκφράζονται σαν κώδικες (opcodes) με χρήση 3 bit, καιτο πολύ ένας τελεστέος μιας εντολής μπορεί να είναι θέση μνήμης (υπάρχουν σχεδιάσεις "CISC", όπως οPDP-11, που χρησιμοποιούν δύο). Αυτός ο τελεστέος όμως μπορεί να είναι ταυτόχρονα καιοπροορισμός (destination), ή ταυτόχρονα ηπροέλευση (source) καιο προορισμός, ενώ ο άλλος τελεστέος, η προέλευση, μπορεί να είναι είτε καταχωρητής (register), είτε απευθείας τιμή (immediate). Αυτό, μαζί με άλλους παράγοντες, οδηγεί σε μικρό μέγεθος κώδικα που συμπεριφέρεται καλά σε σχέση με τους επεξεργαστές 8-bit και χρησιμοποιεί αποδοτικά την κρυφή μνήμη για τις εντολές (instruction cache memory). Ο σχετικά μικρός αριθμός των καταχωρητών γενικής χρήσης (κληρονομιά των 8-bit επεξεργαστών) έχει οδηγήσει σε συχνή χρήση της διευθυνσιοδότησης με βάση καταχωρητές (register-relative addressing) και μικρές σχετικές διευθύνσεις, ειδικά για πρόσβαση στηνστοίβα. Έχει υπάρξει σημαντική έρευνα γιανα γίνουν αυτές οι περιπτώσεις πρόσβασης τόσο γρήγορες, όσο η πρόσβαση στους καταχωρητές, δηλ. μεμια μόνο εντολή, συνήθως όταν τα δεδομένα υπάρχουν ήδη στην κρυφή μνήμη πρώτου επιπέδου.
Γιατον αρχικό επεξεργαστή 8086 αναπτύχθηκε ένας ξεχωριστός επεξεργαστής κινητής υποδιαστολής, με εσωτερικούς καταχωρητές 80-bit, ο8087. Τοτσιπ αυτό τελικά οδήγησε στην ανάπτυξη του80387, ενώ οι μεταγενέστεροι επεξεργαστές ενσωμάτωσαν μια προς τα πίσω συμβατή έκδοση αυτής της λειτουργικότητας στο ίδιο τσιπμετον κύριο επεξεργαστή. Οι μοντέρνες σχεδιάσεις x86 περιλαμβάνουν επιπλέον μια μονάδα SIMD (βλ. παρακάτω, SSE) όποι οι εντολές μπορούν να εκτελούνται παράλληλα σε (μία ή δύο) λέξεις των 128-bit, με κάθε λέξη να περιέχει 2 ή 4 αριθμούς κινητής υποδιαστολής (μήκους 64 ή 32 bit ο καθένας), ή εναλλακτικά 2, 4, 8 ή 16 ακεραίους (μήκους 64, 32, 16 ή 8 bit ο καθένας αντίστοιχα). Το εύρος των καταχωρητών SIMD σημαίνει ότι οι επεξεργαστές x86 που υπάρχουν σήμερα μπορούν να φορτώσουν ή να αποθηκεύσουν μέχρι 128 bit δεδομένων από τη μνήμη μεμια μόνο εντολή καινα εκτελέσουν λειτουργίες επιπέδου bit (αλλά όχι αριθμητική ακεραίων[15]) σε ποσότητες πλήρως 128-bit παράλληλα. Οι επόμενοι επεξεργαστές x86 έχουν λειτουργίες SIMD 256-bit (με φόρτωση και αποθήκευση στη μνήμη 256-bit).
Κατά τη διάρκεια της εκτέλεσης, οι σύγχρονοι επεξεργαστές x86 χρησιμοποιούν κάποιων επιπλέον σταδίων αποκωδικοποίησης γιανα σπάσουν τις περισσότερες εντολές σε μικρότερα κομμάτια, τις μικρο-εντολές (micro-operations). Αυτές δίνονται σεμια μονάδα ελέγχου που τις κρατά και κατανέμει χρονικά την εκτέλεσή τους, διατηρώντας πάντα τη συμβατότητα μετη σημασιολογία του x86, ώστε να μπορούν να εκτελεστούν παράλληλα (εν μέρει), από μια εξειδικευμένη μονάδα εκτέλεσης (ο επεξεργαστής έχει αρκετές τέτοιες μονάδες διαθέσιμες). Αυτές οι σύγχρονες σχεδιάσεις x86 είναι επομένως υπερβαθμωτές (superscalar), και μπορούν να εκτελούν εντολές εκτός σειράς (out of order execution) καιυποθετικά (μέσω μετονομασίας καταχωρητών), το οποίο σημαίνει ότι μπορούν να εκτελούν ταυτόχρονα πολλές εντολές x86 (κατά τμήματα ή ολόκληρες), και όχι απαραίτητα μετην ίδια σειρά μετην οποία δόθηκαν από το πρόγραμμα που εκτελείται.
Όταν πρωτοκυκλοφόρησε αυτή η τεχνολογία ονομάστηκε "πυρήνας RISC" ("RISC core") ή "μετάφραση RISC" ("RISC translation"), για εμπορικούς λόγους, αλλά και γιατί αυτές οι μικρο-εντολές έχουν κάποιες ιδιότητες που έχουν κάποια είδη των εντολών RISC. Παρόλα αυτά, ο παραδοσιακός μικροκώδικας (microcode) που χρησιμοποιείται από τη δεκαετία του 1950 έχει επίσης αυτές τις ιδιότητες καιη μόνη διαφορά της νέας αυτής προσέγγισης ήταν ότι η μετάφραση σε μικρο-λειτουργίες τώρα γινόταν με ασύγχρονο τρόπο. Οι μονάδες εκτέλεσης δε χρειαζόταν να συγχρονίζονται μετα στάδια αποκωδικοποίησης, κάτι που πρόσφερε νέες δυνατότητες γιατην ανάλυση της (αποθηκευμένης) ροής των εντολών, καιτον εντοπισμό λειτουργιών που μπορούν να εκτελεστούν παράλληλα, τροφοδοτώντας παραπάνω από μια μονάδα εκτέλεσης.
Νεότεροι επεξεργαστές κάνουν καιτο αντίστροφο: συνδυάζουν κάποιες ακολουθίες από εντολές του x86 (όπως μια εντολής σύγκρισης που ακολουθείται από ένα άλμα υπό συνθήκη) σε πολυπλοκότερες μικρο-εντολές που ταιριάζουν καλύτερα στο μοντέλο εκτέλεσης και μπορούν να εκτελεστούν γρηγορότερα ή με χρήση λιγότερων πόρων.
Μια άλλη τεχνική προς την κατεύθυνση της αύξησης της ταχύτητας είναι η προσωρινή αποθήκευση αποκωδικοποιημένων μικρο-εντολών, ώστε ο επεξεργαστής να μπορεί άμεσα να τις χρησιμοποιήσει ξανά, αντί να πρέπει να αποκωδικοποιήσει πάλι κάποιες εντολές. Τοπιο γνωστό παράδειγμα τέτοιας μνήμης βρίσκεται στημικροαρχιτεκτονική NetBurst της Intel (οι επεξεργαστές Pentium 4) και ονομάζεται Execution Trace Cache.
ΗTransmeta χρησιμοποιεί μια τελείως διαφορετική μέθοδο στους επεξεργαστές της που είναι συμβατοί με τους x86. Χρησιμοποιούν μια μετάφραση της τελευταίας στιγμής (just-in-time translation) γιανα μετατρέπουν εντολές x86 σε εντολές που καταλαβαίνει ο ίδιος ο επεξεργαστής. Η Transmeta υποστηρίζει ότι αυτή προσέγγιση οδηγεί σε σχεδίαση με χαμηλότερη κατανάλωση ενέργειας επειδή ο επεξεργαστής μπορεί να αγνοήσει το πολύπλοκο στάδιο αποκωδικοποίησης των κλασικών υλοποιήσεων x86.
Στα τέλη της δεκαετίας του 1970, λόγω του χαμηλού κόστους της μνήμης, οι μικροϋπολογιστές έφτασαν το όριο διευθύνσεων στα 16-bit που ήταν 64-KB. Κάποιοι μικροϋπολογιστές όπως οPDP-11 χρησιμοποιούσαν κάποιες πολύπλοκες τεχνικές εναλλαγής πινάκων μνήμης (bank-switching), ενώ άλλοι, όπως οVAX της Digital, σχεδίασαν ακριβότερους επεξεργαστές που μπορούσαν να χειριστούν απευθείας διευθύνσεις και δεδομένα των 32-bit. Ο αρχικός 8086, ο οποίος είχε προκύψει από τον απλό μικροεπεξεργαστή 8080και στόχευε σε χρήση σε μικρούς και φτηνούς υπολογιστές, έκανε χρήση απλών καταχωρητών τμήματος (segment registers), οι οποίοι αύξησαν το εύρος των διευθύνσεων μνήμης μόνο κατά 4 bit. Πολλαπλασιάζοντας μια διεύθυνση 64-KB μετο 16, η διεύθυνση 20-bit που προέκυπτε μπορούσε να διευθυνσιοδοτήσει συνολικά ένα megabyte (1,048,576 byte), ένα αρκετά μεγάλο μέγεθος για τους μικρούς υπολογιστές της εποχής. Η ιδέα των καταχωρητών τμήματος δεν ήταν νέα, πολλοί από τους παλαιότερους μεγαλύτερους υπολογιστές χρησιμοποιούσαν καταχωρητές τμήματος γιανα κάνουν την εναλλαγή μεταξύ διαφορετικών εργασιών. Στην πράξη, η τεχνική αυτή, όπως υλοποιήθηκε στον x86 δέχτηκε σημαντική κριτική γιατί έκανε πιο πολύπλοκο τον προγραμματισμό καιτη συγγραφή μεταγλωττιστών. Ανκαιη αρχιτεκτονική σύντομα επέτρεψε τις γραμμικές διευθύνσεις 32-bit (αρχίζοντας από τον 80386 του 1985), σημαντικές εταιρείες (όπως ηMicrosoft) άργησαν πολλά χρόνια να μετατρέψουν τα 16-bit συστήματά τους. Ο 80386 (καιο 80486) για πολλά χρόνια χρησιμοποιήθηκε σαν ένας γρηγορότερος 8086, συμβατός μετα 16-bit.
Τα δεδομένα καιο κώδικας μπορούσαν να χρησιμοποιηθούν σε "κοντινά" ("near") τμήματα 16-bit μέσα σε αυτόν τον χώρο διευθύνσεων του 1 MB, ενώ ένας μεταγλωττιστής μπορούσε να λειτουργεί με "μακρινό" ("far") τρόπο χρησιμοποιώντας ζεύγη 32-bit τμήμα:μετατόπισηπουνα φτάνουν μέχρι το 1 MB. Ανκαι αυτό στη συνέχεια της δεκαετίας του 1980 αποδείχτηκε εξίσου περιοριστικό, λειτούργησε γιατην αγορά των PC που τότε εμφανιζόταν και διευκόλυνε πολύ την μετάφραση λογισμικού από τους παλιούς 8008, 8080, 8085, καιZ80γιατον νέο επεξεργαστή. Το 1985, το μοντέλο διευθύνσεων με τμήματα 16-bit πρακτικά απομακρύνθηκε, μετην χρήση καταχωρητών μετατόπισης 32-bit, στη σχεδίαση του386.
Στηνπραγματική κατάσταση (real mode), η διευθυνσιοδότηση μνήμης με τμήματα γίνεται μετην ολίσθηση της διεύθυνσης τμήματος κατά 4 bit αριστερά καιτην προσθήκη της μετατόπισης ώστε να προκύψει η τελική διεύθυνση 20-bit. Για παράδειγμα, ανο DS είναι A000h καιο SI είναι 5677h, το DS:SI δείχνει στην απόλυτη διεύθυνση DS × 10h + SI = A5677h. Ο συνολικός χώρος διευθύνσεων στην πραγματική κατάσταση είναι επομένως 220 byte, ή 1 MB, ένα εντυπωσιακό μέγεθος γιατην εποχή (1978). Όλες οι διευθύνσεις μνήμης αποτελούνται από ένα τμήμα καιμια μετατόπιση και κάθε τύπος πρόσβασης (κώδικας, δεδομένα, στοίβα) είχε δικό του καταχωρητή (για δεδομένα ήταν ο DS, για κώδικα ο CS, για στοίβα ο SS). Σε περίπτωση πρόσβασης για δεδομένα, ο καταχωρητής τμήματος μπορεί να είναι οποιοσδήποτε από τους τέσσερις καταχωρητές τμήματος, με χρήση του κατάλληλου προθέματος (segment override prefix).
Σύμφωνα μετην τεχνική των τμημάτων, δύο διαφορετικά ζεύγη από τμήματα και μετατοπίσεις μπορούν να δείχνουν στην ίδια απόλυτη διεύθυνση. Δηλαδή, ανο DS είναι A111h καιο SI είναι 4567h, το DS:SI δείχνει στην ίδια διεύθυνση A5677h όπως καιτο παράδειγμα παραπάνω. Επίσης η τεχνική κάνει αδύνατη την χρήση παραπάνω από τεσσάρων τμημάτων ταυτόχρονα. Ο CS καιο SS είναι πολύ σημαντικοί γιατην σωστή λειτουργία του προγράμματος, επομένως μόνο ο DS καιο ES μπορούν να χρησιμοποιηθούν γιανα δείχνουν σε τμήματα με δεδομένα εκτός του προγράμματος (ή, πιο σωστά, εκτός του τμήματος του προγράμματος που εκτελείται αυτήν τη στιγμή) ή εκτός της στοίβας.
Στηνπροστατευμένη κατάσταση (protected mode), ένας καταχωρητής τμήματος δεν περιλαμβάνει πιατην φυσική διεύθυνση της αρχής ενός τμήματος, αλλά δείχνει σεμια δομή του συστήματος που ονομάζεται περιγραφέας τμήματος (segment descriptor). Ο περιγραφέας τμήματος περιέχει τη φυσική διεύθυνση της αρχής του τμήματος, το μήκος του τμήματος καιτα δικαιώματα πρόσβασης στο τμήμα. Η μετατόπιση ελέγχεται αν είναι μέσα στο μήκος του τμήματος, αν είναι εκτός προκαλείται εξαίρεση (exception). Οι μετατοπίσεις που αναφέρονται σε θέσεις μέσα στο τμήμα συνδυάζονται με τις φυσικές διευθύνσεις στην αρχή του τμήματος γιανα προκύψει η τελική διεύθυνση που αντιστοιχεί σε αυτήν την μετατόπιση.
Η χρήση τμημάτων δυσκολεύει τον προγραμματισμό καιτην σχεδίαση μεταγλωττιστών γιατί η χρήση κοντινών και μακρινών δεικτών επηρεάζει την ταχύτητα των προγραμμάτων.
Οι τρόποι διευθυνσιοδότησης των επεξεργαστών x86 στα 16-bit μπορούν να περιγραφούν περιληπτικά ως εξής:
Οι τρόποι διευθυνσιοδότησης για διευθύνσεις μήκους 32-bit σε επεξεργαστές x86 των 32-bit ή των 64-bit μπορούν να περιγραφούν από τον τύπο:
Οι τρόποι διευθυνσιοδότησης για κώδικα 64-bit για επεξεργαστές x86 στα 64-bit μπορούν να περιγραφούν από τους εξής τύπους:
και
Ο δεύτερος τύπος διευθυνσιοδότησης για κώδικα 64-bit (σε σχέση μετον καταχωρητή RIP, που είναι ο δείκτης εντολής, instruction pointer) διευκολύνει την υλοποίηση κώδικα πουδεν εξαρτάται από τις θέσεις μνήμης (όπως οι κοινές βιβλιοθήκεςσε κάποια λειτουργικά συστήματα).
Ο 8086 είχε 64 KB από χώρο 8-bit (ή εναλλακτικά 32 K-λέξεις των 16-bit) για είσοδο/έξοδο και 64 KB (ένα τμήμα) στοίβας μνήμης με υποστήριξη υλικού. Στη στοίβα μπορούσαν να τοποθετηθούν μόνο λέξεις (2 byte). Η στοίβα μεγάλωνε προς τα κάτω (προς αριθμητικά μικρότερες διευθύνσεις), μετο SS:SP να δείχνει στο κάτω άκρο της. Υπήρχαν 256 διακοπές (interrupts), οι οποίες μπορούσαν να κληθούν από το υλικό ή το λογισμικό. Οι διακοπές αυτές μπορούσαν να είναι διαδοχικές, χρησιμοποιώντας την στοίβα γιανα αποθηκεύουν την διεύθυνση επιστροφής τους.
Ο αρχικός 8086καιο8088 έχουν δεκατέσσερις καταχωρητές των 16-bit. Από αυτούς οι τέσσερις (AX, BX, CX, DX) είναι γενικής χρήσης (ανκαιο καθένας μπορεί να έχει επιπλέον ρόλους, για παράδειγμα μόνο ο CX μπορεί να χρησιμοποιηθεί ως μετρητής στην εντολή επανάληψης loop). Καθένας τους μπορεί να διαβαστεί σαν δύο ξεχωριστά byte (για παράδειγμα, το υψηλότερο byte του BX ονομάζεται BH καιτο χαμηλότερο byte BL). Υπάρχουν δύο καταχωρητές δεικτών: ο SP που δείχνει στην κορυφή της στοίβας (Stack Pointer) καιο BP που δείχνει σε κάποιο άλλο σημείο της στοίβας (Base Pointer), συνήθως πιο πάνω από τις τοπικές μεταβλητές. Δύο καταχωρητές, ο SI καιο DI, χρησιμοποιούνται ως δείκτες σε πίνακες.
Γιατον σχηματισμό διευθύνσεων μνήμης χρησιμοποιούνται τέσσερις καταχωρητές (CS, DS, SS και ES). Οκαταχωρητής FLAGS περιέχει σημαίες (flags), όπως το υπόλοιπο (carry), η υπερχείλιση (overflow) καιο έλεγχος για μηδέν. Τέλος, ο δείκτης εντολής (instruction pointer, IP) δείχνει στην επόμενη εντολή πουθα διαβαστεί από τη μνήμη καιθα εκτελεστεί.
ΣτονIntel 80286 υπάρχουν τρεις επιπλέον καταχωρητές που κρατούν διευθύνσεις πινάκων από περιγραφείς (GDTR, LDTR, IDTR) και ένας τέταρτος καταχωρητής εργασιών (task register, TR).
Μετην εμφάνιση του επεξεργαστή 32-bit 80386, οι καταχωρητές γενικής χρήσης, οι καταχωρητές βάσης, οι καταχωρητές δεικτών, ο δείκτης εντολής καιο καταχωρητής FLAGS, που ήταν 16-bit, επεκτάθηκαν στα 32 bit (αυτό όμως δεν συνέβη καιγια τους καταχωρητές τμήματος). Αυτό αναπαριστάται με ένα πρόθεμα "E" (από την αγγλική λέξη Extendedπου δείχνει την επέκταση) μπροστά από τα ονόματα των καταχωρητών στη συμβολική γλώσσα του x86. Επομένως, ο καταχωρητής AX αντιστοιχεί στα κατώτερα 16 bit του νέου καταχωρητή EAX που είναι 32-bit, ο SI αντιστοιχεί στα κατώτερα 16 bit του ESI, κοκ. Οι καταχωρητές γενικής χρήσης, οι καταχωρητές βάσης καιοι καταχωρητές δείκτη μπορούν να χρησιμοποιηθούν σαν βάση στους διάφορους τρόπους διευθυνσιοδότησης, ενώ όλοι οι καταχωρητές εκτός από τον καταχωρητή στοίβας μπορούν να χρησιμοποιηθούν σαν δείκτες στο σχημαστισμό διευθύνσεων.
Προστέθηκαν επίσης δύο νέοι καταχωρητές τμήματος (FS και GS). Λόγω του αυξημένου αριθμού των καταχωρητών, των εντολών καιτων τελεστέων, χρειάστηκε επέκταση της μορφής τουκώδικα μηχανής. Γιανα διατηρηθεί η συμβατότητα, τα τμήματα με εκτελέσιμο κώδικα μπορούν να σημειωθούν ανάλογα μετοαν περιέχουν εντολές 16-bit ή 32-bit. Ειδικά προθέματα επιτρέπουν σε εντολές 32-bit να υπάρχουν σε ένα τμήμα 16-bit και αντίστροφα.
Στον Pentium II προστέθηκαν οχτώ καταχωρητές ακεραίων MMX 64-bit (MMX0..MMX7, που μοιράζονται τα κατώτερα bit μετη στοίβα της μονάδας κινητής υποδιαστολής που είναι 80-bit (st(0)..st(7))).[16]Στον Pentium III προστέθηκαν ένας καταχωρητής ελέγχου κατάστασης των 32-bit (control/status register, MXCSR) γιατο σύνολο εντολών Streaming SIMD Extension (SSE)και οχτώ καταχωρητές SSE των 128-bit για αριθμούς κινητής υποδιαστολής (XMM0..XMM7).[16]
Από τον επεξεργαστή AMD Opteronκαι μετά, η αρχιτεκτονική x86 επέκτεινε τους καταχωρητές από 32 bit σε 64 bit με παρόμοιο τρόπο μετην επέκταση από τα 16 στα 32-bit προστατευμένης κατάστασης (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), ενώ προστέθηκαν οχτώ επιπλέον γενικοί καταχωρητές 64-bit (R8, R9..R15) μετην δημιουργία τουx86-64. Οι επεκτάσεις αυτές όμως μπορούν να χρησιμοποιηθούν μόνο στην κατάσταση 64-bit, που είναι ημια από τις δύο καταστάσεις που είναι διαθέσιμες σε μακρά κατάσταση (long mode). Οι τρόποι σχηματισμού διευθύνσεων δεν άλλαξαν σημαντικά σε σχέση μετην κατάσταση 32-bit, μόνο οι διευθύνσεις επεκτάθηκαν στα 64 bit, ενώ οι εικονικές διευθύνσεις επεκτείνονται (μαζί μετο πρόσημό τους) στα 64 bit. Επιπλέον προστέθηκε μια κατάσταση σχηματισμού διευθύνσεων για αναφορές στη μνήμη σε σχέση μετον καταχωρητή RIP (τονδείκτη εντολής), γιατη διευκόλυνση της υλοποίησης κώδικα πουνα είναι ανεξάρτητος από την τοποθέτησή του (position-independent code), ο οποίος χρησιμοποιείται σε διαμοιραζόμενες βιβλιοθήκεςσε κάποια λειτουργικά συστήματα.
Οι επεξεργαστές x86 (αρχίζοντας από τον 80386) περιλαμβάνουν επίσης κάποιους ειδικούς καταχωρητές όπως οικαταχωρητές ελέγχου (CR0 έως 4, CR8 μόνο στα 64-bit), καταχωρητές αποσφαλμάτωσης (DR0 έως 3, επιπλέον 6 και 7), οι καταχωρητές δοκιμών (TR3 έως 7, μόνο στον 80486), οι καταχωρητές περιγραφέων (GDTR, LDTR, IDTR), ο καταχωρητής εργασιών (TR) καιοι διάφοροι ειδικοί καταχωρητές κάθε μοντέλου (model-specific registers ή MSRs, αρχίζοντας από τον Pentium).
Ανκαιοι βασικοί καταχωρητές (εκτός του δείκτη εντολής) είναι "γενικής χρήσης" και μπορούν να χρησιμοποιηθούν για οτιδήποτε, αρχικά προτάθηκε η εξής χρήση τους:
AX/EAX/RAX: συσσωρευτής (Accumulator)
BX/EBX/RBX: δείκτης βάσης (Base index), για παράδειγμα σε πίνακες
CX/ECX/RCX: μετρητής (Counter)
DX/EDX/RDX: δεδομένα (Data)/γενική χρήση
SI/ESI/RSI: δείκτης πηγής (Source Index) για λειτουργίες μεσυμβολοσειρές
DI/EDI/RDI: δείκτης προορισμού (Destination Index) για λειτουργίες με συμβολοσειρές
SP/ESP/RSP: δίκτης στοίβας (Stack Pointer) που δείχνει στο πάνω μέρος της στοίβας
BP/EBP/RBP: δείκτης βάση στοίβας (Stack Base Pointer) που δείχνει στη διεύθυνση του τρέχοντος πλαισίου στοίβας
IP/EIP/RIP: δείκτης εντολής (Instruction Pointer) - κρατάει το μετρητή προγράμματος (program counter), που δείχνει στην τρέχουσα εντολή.
Δεν προτάθηκαν κάποιες ιδιαίτερες χρήσεις για τους άλλους 8 καταχωρητές που είναι διαθέσιμοι στην κατάσταση 64-bit.
Κάποιες εντολές μεταγλωττίζονταν και εκτελούνταν γρηγορότερα όταν χρησιμοποιούσαν τους καταχωρητές ανάλογα με τις παραπάνω χρήσεις. Για παράδειγμα, αν χρησιμοποιηθεί ο AL σανσυσσωρευτήςγιανα προστεθεί μια απευθείας τιμή τύπου byte σε αυτόν, προκύπτει η γρήγορη εντολή 04h (πρόσθεση στον AL), ενώ αν χρησιμοποιηθεί ο καταχωρητής BL προκύπτει η γενική (δηλ. όχι εξειδικευμένη) εντολή 80C3h. Άλλο παράδειγμα είναι η διαίρεση διπλής ακρίβειας καιο πολλαπλασιασμός που λειτουργούν με τους καταχωρητές AX και DX.
Οι σύγχρονοι μεταγλωττιστές εκμεταλλεύονται το byte sib ("scaled index byte") που επιτρέπει τον ομοιόμορφο χειρισμό των καταχωρητών. Κάποιες ειδικές εντολές έχασαν την προτεραιότητά τους στη σχεδίαση υλικού και έγιναν πιο αργές σε σχέση με ισοδύναμες σύντομες ακολουθίες εντολών, όπως η εντολή LODSW.
Η πραγματική κατάσταση (real mode) είναι κατάσταση λειτουργίας του8086καιτων μεταγενέστερων επεξεργαστών που είναι συμβατοί μετον x86. Η πραγματική κατάσταση έχει χώρο διευθύνσεων μνήμης χωρισμένο σε τμήματα 20 bit (επομένως οι διευθύνσεις μπορούν να αναφέρονται μόνο σε 1 MB μνήμης), η πρόσβαση του λογισμικού τις ρουτίνες τουBIOSκαιστα περιφερειακά του υλικού είναι απευθείας καιδεν υπάρχουν οι έννοιες της προστασίας μνήμης ή της πολυεπεξεργασίαςστο επίπεδο του υλικού. Όλοι οι επεξεργαστές x86 της σειράς 80286και έπειτα εκκινούν σε πραγματική κατάσταση, ενώ οι80186καιοι προηγούμενοι επεξεργαστές είχαν μόνο μια κατάσταση, που αντιστοιχούσε στην πραγματική κατάσταση των μεταγενέστερν τσιπ.
Γιανα γίνει χρήση περισσότερων από 64 KB μνήμης, πρέπει να χρησιμοποιηθούν οι καταχωρητές τμήματος. Αυτό περιέπλεξε την κατάσταση γιατην υλοποίηση μεταγλωττιστών, όπου χρειάστηκε να χρησιμοποιηθούν ειδικές καταστάσεις δεικτών, όπως η "κοντινή" ("near"), η "μακρινή" ("far") καιη "μεγάλη" ("huge"), ώστε να προσαρμοστούν στο μοντέλο της αρχιτεκτονικής με τμήματα, με κάποιους δείκτες να περιέχουν μετατοπίσεις 16-bit σε έμμεσα δηλωμένα τμήματα, ενώ άλλοι περιείχαν διευθύνσεις τμημάτων και μετατοπίσεις μέσα σε τμήματα.
Εκτός από την πραγματική κατάσταση ο Intel 80286 υποστήριζε την προστατευμένη κατάσταση (protected mode), που επέκτεινε την φυσική μνήμη που μπορούσε να αναφερθεί μέσω διευθύνσεων σε 16 MBκαιτην εικονική μνήμη (virtual memory) σε 1 GB, ενώ παρείχε προστατευμένη μνήμη (protected memory), η οποία εμπόδιζε ένα πρόγραμμα να επηρεάζει τα υπόλοιπα. Αυτό ήταν δυνατό επειδή οι καταχωρητές τμημάτων χρησιμοποιούνταν μόνο σαν δείκτες σε έναν πίνακα από τμήματα. Υπήρχαν δύο τέτοιοι πίνακες, ο Καθολικός Πίνακας Περιγραφέων (Global Descriptor Table, GDT) καιο Τοπικός Πίνακας Περιγραφέων (Local Descriptor Table, LDT), ο καθένας από τους οποίους μπορούσε να έχει μέχρι 8192 περιγραφείς τμημάτων, με κάθε τμήμα να παρέχει πρόσβαση σε μνήμη μεγέθους 64 KB. Ο πίνακας τμημάτων έδινε μια διεύθυνση βάσης (base address) των 24-bit, η οποία μπορούσε να προστεθεί σε κάποια μετατόπιση γιανα προκύψει μια απόλυτη διεύθυνση. Σε κάθε τμήμα μπορούσε να δοθεί ένα επίπεδο ασφάλειας (ring level), από ένα σύνολο τεσσάρων τέτοιων επιπέδων, για ασφάλεια σε επίπεδο υλικού.
ΟIntel 80386 υποστήριξε πρώτος τις σελίδες (paging) στην προστατευμένη κατάσταση, που επέτρεπαν τη χρήση εικονικής μνήμης με σελίδες.
Οι σελίδες χρησιμοποιούνται εκτενώς στα σύγχρονα λειτουργικά συστήματα με δυνατότητες πολυδιεργασίας. Τα λειτουργικά συστήματα Linux, 386BSDκαιWindows NT αναπτύχθηκαν στον 386 γιατί ήταν η πρώτη αρχιτεκτονική επεξεργαστή της Intel που υποστήριζε σελίδες και μετατοπίσεις τμημάτων 32-bit. Η αρχιτεκτονική του 386 έγινε η βάση γιατην περαιτέρω ανάπτυξη της σειράς x86.
Οι επεξεργαστές x86 που υποστηρίζουν προστατευμένη κατάσταση εκκινούν σε πραγματική κατάσταση γιανα είναι συμβατοί με τους προηγούμενους επεξεργαστές τύπου 8086. Όταν ο επεξεργαστής αρχίζει να λειτουργεί (booting), αρχικοποιεί την πραγματική κατάσταση και αρχίζει να εκτελεί εντολές. Ο κώδικας εκκίνησης του λειτουργικού συστήματος, ο οποίος μπορεί να βρίσκεται σε μνήμη ανάγνωσης (ROM), μπορεί να βάλει τον επεξεργαστή σε προστατευμένη κατάσταση γιανα είναι διαθέσιμες οι σελίδες καιτα άλλα επιπλέον χαρακτηριστικά. Το σύνολο εντολών της προστατευμένης κατάστασης είναι συμβατό με αυτό της πραγματικής κατάστασης.
Υπάρχει επίσης μια ειδική κατάσταση της προστατευμένης κατάστασης 32-bit, που ονομάζεται εικονική κατάσταση 8086 (virtual 8086 mode). Πρόκειται γιαμια ειδική υβριδική κατάσταση λειτουργίας που επιτρέπει σε προγράμματα και λειτουργικά συστήματα πραγματικής κατάστασης να εκτελούνται κάτω από τον έλεγχο ενός λειτουργικού συστήματος προστατευμένης μνήμης που έχει το ρόλο του επόπτη (supervisor). Αυτό επιτρέπει την ταυτόχρονη εκτέλεση προγραμμάτων προστατευμένης κατάστασης και πραγματικής κατάστασης. Η κατάσταση αυτή είναι διαθέσιμη μόνο στις εκδόσεις 32-bit της προστατευμένης κατάστασης - η εικονική κατάσταση 8086 δεν υπάρχει στην έκδοση 16-bit της προστατευμένης κατάστασης, ή στην μακρά κατάσταση.
Το 2002 ήταν πια προφανές ότο ο χώρος διευθύνσεων 32-bit της αρχιτεκτονικής x86 περιόριζε την ταχύτητά της σε εφαρμογές που χειρίζονταν μεγάλους όγκους δεδομένων. Ένας χώρος διευθύνσεων 32-bit επέτρεπε στον επεξεργαστή να αναφερθεί απευθείας μέσω διευθύνσεων μόνο σε 4 GB δεδομένων, που ήταν μικρό μέγεθος για τις ανάγκες της επεξεργασίας βίντεοκαιτωνβάσεων δεδομένων, ενώ η χρήση διευθύνσεων 64-bit επέτρεπε την αναφορά σε 16,777,216 TB (ή 16 δισεκατομμύρια GB) δεδομένων, ανκαιοι περισσότερες αρχιτεκτονικές 64-bit δεν υποστηρίζουν πρόσβαση σε όλον τον χώρο διευθύνσεων των 64-bit (η AMD64, για παράδειγμα, υποστηρίζει μόνο 48 bit, χωρισμένα σε 4 επίπεδα σελίδων, μιας διεύθυνσης 64-bit).
ΗAMD ανέπτυξε την επέκταση της αρχιτεκτονικής x86 από 32-bit σε64-bit, η οποία χρησιμοποιείται σήμερα στους επεξεργαστές x86, αρχικά μετο όνομα x86-64, και αργότερα σανAMD64. Η αρχιτεκτονική αυτή χρησιμοποιείται από τις οικογένειες επεξεργαστών Opteron, Athlon 64, Turion 64καιτα μεταγενέστερα μοντέλα τωνSempron. Η επιτυχία των επεξεργαστών AMD64, σε συνδυασμό μετην πειρορισμένη αποδοχή της αρχιτεκτονικής IA-64 έκανε την Intel να κυκλοφορήσει την δική της υλοποίηση του συνόλου εντολών AMD64. Η Intel είχε ήδη υλοποιήσει υποστήριξη για AMD64[17] αλλά είχε επιλέξει ναμηντην ενεργοποιήσει, ελπίζοντας ότι η AMD δενθα προλάβαινε να κυκλοφορήσει τους AMD64 πριν εδραιωθεί το νέο σύνολο εντολών IA-64 του Itanium. Αρχικά αποκαλούσε την υλοποίηση της επέκτασης AMD64 σανEM64T, καιστη συνέχεια σανIntel 64.
Στα έγγραφά τους καιστα ονόματα των προϊόντων τους, η Microsoft καιη Sun αναφέρονται στους AMD64/Intel 64 συνολικά σανx64, όσον αφορά τα λειτουργικά συστήματα Windows and Solaris αντίστοιχα. Οι διανομές τουLinux τους αποκαλούν είτε σαν "x86-64" (ή "x86_64"), είτε σαν "amd64". Τα συστήματα BSD χρησιμοποιούν τον όρο "amd64" ενώ τοMac OS X χρησιμοποιεί τον όρο "x86_64".
Η μακρά κατάσταση είναι κυρίως μια επέκταση του συνόλου εντολών 32-bit, αλλά σε αντίθεση μετη μετάβαση από τα 16 στα 32 bit, πολλές εντολές αφαιρέθηκαν από την κατάσταση 64 bit. Αυτό δεν επηρεάζει την πραγματική δυαδική συμβατότητα των προγραμμάτων (τα παλιά προγράμματα μπορούν να εκτελεστούν σε άλλες καταστάσεις, που ακόμα υποστηρίζουν τις παλιές εντολές) αλλά αλλάζει τον τρόπο που πρέπει να λειτουργούν οισυμβολομεταφραστέςκαιοιμεταγλωττιστέςτου νέου κώδικα.
Αυτή ήταν η πρώτη φορά πουμιασημαντική επέκταση της αρχιτεκτονικής x86 ξεκίνησε από άλλη εταιρεία από την Intel. Ήταν επίσης η πρώτη φορά πουη Intel υιοθέτησε τεχνολογία τέτοιου τύπου από εξωτερική πηγή.
Οι πρώτοι επεξεργαστές x86 μπορούσαν να επεκταθούν με υλικό για αριθμητική κινητής υποδιαστολής (floating-point), το οποίο ήταν μια σειρά από αριθμητικούς συνεπεξεργαστέςμε ονόματα του τύπου 8087, 80287 και 80387. Με λίγες εξαιρέσεις, από τον 80486 και έπειτα, οι επεξεργαστές x86 ενσωμάτωσαν αυτήν την λειτουργικότητα x87 στο ίδιο τοτσιπ, κάτι που έκανε τις εντολές του x87 ντε φάκτο μέρος του συνόλου εντολών x86.
Οι καταχωρητές του x87, έχουν ονόματα ST(0) έως ST(7), είναι 80 bit και αποθηκεύουν αριθμούς σύμφωνα μετο πρότυπο κινητής υποδιαστολής διπλής εκτεταμένης ακρίβειας του IEEE. Οι καταχωρητές αυτοί οργανώνονται σανστοίβαμετον ST(0) στην κορυφή της στοίβας. Αυτό έγινε ώστε να εξοικονομηθεί χώρος εντολών και έτσι οι καταχωρητές είναι άμεσα προσβάσιμοι μόνο στις αριθμητικές εντολές που χειρίζονται αποκλειστικά καταχωρητές: ο ST0 πρέπει πάντα να είναι το ένας από τους δύο τελεστέους, είτε η πηγή, είτε ο προορισμός, ανεξάρτητα από τον άλλο τελεστέο, που μπορεί να είναι ένας καταχωρητής ST(x) ή μια αναφορά στην μνήμη.
Το MMX είναι σύνολο εντολών SIMDπου σχεδιάστηκε από την Intel και κυκλοφόρησε πρώτη φορά το 1997 για τον μικροεπεξεργαστή Pentium MMX. Το σύνολο εντολών MMX αναπτύχθηκε με βάση μια παρόμοια ιδέα που ήδη είχε χρησιμοποιηθεί στονIntel i860. Υποστηρίζεται στους περισσότερους επεξεργαστές IA-32 που ακολούθησαν, από την Intel και από άλλες εταιρείες. Το MMX συνήθως χρησιμοποιείται για εφαρμογές πολυμέσων, όπως η επεξεργασία βίντεο.
Το MMX πρόσθεσε 8 νέους "καταχωρητές" στην αρχιτεκτονική, γνωστούς μετα ονόματα από MM0 έως MM7 (στο εξής θα αποκαλούνται MMn). Στην πραγματικότητα, αυτοί οι νέοι "καταχωρητές" ήταν απλά ονόματα που έδειχναν στους υπάρχοντες καταχωρητές της στοίβας της μονάδας κινητής υποδιαστολής x87. Έτσι, οτιδήποτε γινόταν στην στοίβα κινητής υποδιαστολής επηρέαζε τους καταχωρητές MMX. Σε αντίθεση μετην στοίβα αυτή όμως, οι καταχωρητές MMn δεν ήταν σχετικοί αλλά απόλυτοι και άρα μπορούσαν να χρησιμοποιηθούν ανεξάρτητα. Το σύνολο εντολών δεν είχε σημασιολογία στοίβας καιμε αυτόν τον τρόπο τα υπάρχοντα λειτουργικά συστήματα μπορούσαν να αποθηκεύουν καινα επαναφέρουν τους επεξεργαστές όταν εκτελούσαν παραπάνω από ένα προγράμματα, χωρίς αλλαγές.
Κάθε καταχωρητής MMn είναι ένας ακέραιος 64-bit. Μια από τις βασικές ιδέες όμως του συνόλου εντολών MMX ήταν οιτύποι πακεταρισμένων δεδομένων (packed data types), που σήμαινε ότι αντί να χρησιμοποιείται ολόκληρος ο καταχωρητής για έναν ακέραιο των 64-bit (quadword), μπορούσε να χρησιμοποιηθεί για δύο ακεραίους των 32-bit (doubleword), τέσσερις ακεραίους των 16-bit (word) ή οχτώ ακεραίους των 8-bit (byte). Οι καταχωρητές MMn των 64-bit του συνόλου εντολών MMX αποτελούσαν επίσης εναλλακτικά ονόματα γιατη στοίβα της μονάδας κινητής υποδιαστολής και κάθε καταχωρητής κινητής υποδιαστολής είχε εύρος 80 bit - αυτό σήμαινε ότι τα ανώτερα 16 bit των καταχωρητών κινητής υποδιαστολής δεν χρησιμοποιούνται από τις εντολές MMX. Σε αυτά τα bit δινόταν πάντα η τιμή ένα από κάθε εντολή MMX, που αντιστοιχούσε στην αναπαράσταση σε κινητή υποδιαστολή της έννοιας δεν-είναι-αριθμός (Not-A-Number, NaN) ή άπειρο.
Το 1997 η AMD κυκλοφόρησε την τεχνολογία 3DNow! Χρονικά εμφανίστηκε την ίδια εποχή που άρχισαν να είναι δημοφιλείς οι εφαρμογές γραφικών τριών διαστάσεων (3D) και είχε σχεδιαστεί ώστε να βελτιώσει την ταχύτητα επεξεργασίας διανυσμάτων (vector processing) του επεξεργαστή σε εφαρμογές που έκαναν σημαντική χρήση γραφικών. Οι προγραμματιστές ηλεκτρονικών παιχνιδιών 3D καιοι εταιρείες που σχεδίαζαν κάρτες γραφικών και άλλο υλικό για γραφικά 3D χρησιμοποίησαν το 3DNow! γιανα έχουν καλύτερη απόδοση στους επεξεργαστές K6καιAthlon της AMD.
Το 3DNow! σχεδιάστηκε σανμια φυσική εξέλιξη του MMX από τους ακέραιους στους αριθμούς κινητής υποδιαστολής και χρησιμοποιεί τα ίδια ονόματα καταχωρητών μετο MMX, από το MM0 έως το MM7. Η μόνη διαφορά είναι ότι αντί να πακετάρει ακέραιους στους καταχωρητές, πακετάρει δύο αριθμούς κινητής υποδιαστολής απλής ακρίβειας. Το πλεονέκτημα της χρήσης ονομάτων για τους καταχωρητές της μονάδας κινητής υποδιαστολής είναι ότι μπορούν να χρησιμοποιηθούν οι ίδιες εντολές και δομές δεδομένων που αποθηκεύουν την κατάσταση της μονάδας κινητής υποδιαστολής γιανα αποθηκεύσουν την κατάσταση των καταχωρητών 3DNow! καιμε αυτόν τον τρόπο δεν χρειάζονται μετατροπές στα λειτουργικά συστήματα (τα οποία δεν χρειάζεται καννα γνωρίζουν γιατην ύπαρξη της τεχνολογίας αυτής).
Το 1999 η Intel κυκλοφόρησε τοσύνολο εντολών Streaming SIMD Extensions (SSE) καιστη συνέχεια, το 2000, το SSE2. Η πρώτη προσθήκη επέτρεψε σε βασικές λειτουργίες κινητής υποδιαστολής ναμην επιβαρύνουν πιατην στοίβα του x87 και η δεύτερη έκανε το MMX σχεδόν περιττό αφού επέτρεπε στις εντολές να χρησιμοποιούνται στην πράξη από τους κλασικούς μεταγλωττιστές. Το SSE3 κυκλοφόρησε το 2004 μετην έκδοση Prescottτων επεξεργαστών Pentium 4και πρόσθεσε ειδικές εντολές μνήμης και χειρισμού νημάτων ώστε να αυξηθεί η ταχύτητα της τεχνολογίας HyperThreading της Intel. Η AMD αγόρασε δικαιώματα χρήσης του συνόλου εντολών SSE3 και υλοποίησε τις περισσότερες από τις εντολές από την έκδοση E και μετά, στους επεξεργαστές Athlon 64. Ο Athlon 64 δεν υποστηρίζει HyperThreading και άρα δεν έχει τις εντολές SSE3 που χρησιμοποιούνται μόνο για αυτό.
Το SSE σταμάτησε να συνδέεται μετην στοίβα της μονάδας κινητής υποδιαστολής (FPU), με αποτέλεσμα ναμην είναι συμβατό με παλιότερες γενιές συνόλων εντολών SIMD όπως το MMX. Απελευθέρωσε ομως τους σχεδιαστές από τους περιορισμούς των καταχωρητών της FPU, επιτρέποντάς τους να χρησιμοποιούν οχτώ μεγαλύτερους καταχωρητές των 128-bit, με ονόματα XMM0 έως XMM7. (Σημείωση: ο αριθμός τους στονAMD64 έχει αυξηθεί από 8 σε 16.) Το μειονέκτημα αυτής της προσέγγισης ήταν ότι τα λειτουργικά συστήματα έπρεπε να γνωρίζουν γιατην ύπαρξη του SSE ώστε να μπορούν να σώζουν την κατάσταση των καταχωρητών τους. Έτσι η Intel δημιούργησε μια ελαφρώς τροποποιημένη έκδοση της προστατευμένης κατάστασης, πουτην ονόμασε enhanced mode, η οποία επιτρέπει την χρήση εντολών SSE, ενώ αυτές είναι απενεργοποιημένες στην κανονική προστατευμένη κατάσταση. Ένα λειτουργικό σύστημα που γνωρίζει γιατην ύπαρξη του SSE θαμπεισε αυτήν την νέα κατάσταση, ενώ ένα λειτουργικό πουδεντην αναγνωρίζει θαμπει μόνο σε προστατευμένη κατάσταση.
Το SSE είναι ένα σύνολο εντολών SIMD που λειτουργεί μόνο με τιμές κινητής υποδιαστολής, όπως το 3DNow! αλλά σε αντίθεση με αυτό, δεν είναι συμβατό με τις παλιές χρήσεις της στοίβας της FPU. Έχοντας μεγαλύτερους καταχωρητές από το 3DNow!, το SSE μπορεί να περιέχει διπλάσιο αριθμό από αριθμούς κινητής υποδιαστολής στους καταχωρητές του. Το αρχικό SSE περιοριζόταν σε αριθμούς απλής ακρίβειας, όπως το 3DNow!, ενώ το SSE2 εισήγαγε τη δυνατότητα να πακετάρονται και αριθμοί διπλής ακρίβειας, κάτι πουτο 3DNow! δε μπορούσε να υποστηρίξει, γιατί ένας αριθμός διπλής ακρίβειας έχει μέγεθος 64-bit καιθα χρειαζόταν έναν ολόκληρο καταχωρητή 3DNow! MMn από μόνος του. Με μέγεθος 128 bit, οι καταχωρητές XMMn του SSE μπορούσαν να χωρέσουν δύο αριθμούς κινητής υποδιαστολής διπλής ακρίβειας σε έναν καταχωρητή με αποτέλεσμα το SSE2 να είναι πιο κατάλληλο για επιστημονικούς υπολογισμούς σε σχέση μετο SSE1 ή το 3DNow!, τα οποία περιορίζονταν σε αριθμούς απλής ακρίβειας. Το SSE3 δε πρόσθεσε επιπλέον καταχωρητές.
Η Επέκταση Φυσικής Διεύθυνσης (Physical Address Extension, PAE) προστέθηκε αρχικά στονPentium Pro της Intel, γιανα επιτρέψει επιπλέον 4 bit φυσικών διευθύνσεων στην προστατευμένη κατάσταση 32-bit. Το μέγεθος της μνήμης στην προστατευμένη κατάσταση περιορίζεται συνήθως σε 4 GB. Μέσω κάποιων τεχνικών των συστημάτων διαχείρισης της μνήμης (όσον αφορά τις σελίδες καιτα τμήματα), τα λειτουργικά συστήματα για x86 μπορούν να έχουν πρόσβαση σε περισσότερα από 32-bit χώρου διευθύνσεων, ακόμα και χωρίς χρήση της κατάστασης 64-bit. Το μήκος των μετατοπίσεων στα τμήματα καιτων γραμμικών διευθύνσεων μένει ίδιο, στα 32 bit.
Τον Απρίλιο του 2003, η AMD κυκλοφόρησε τον πρώτο επεξεργαστή x86 με καταχωρητές φυσικών διευθύνσεων μνήμης 64-bit, οι οποίοι μπορούσαν να αναφερθούν σε πολύ περισσότερη μνήμη από 4 GB χρησιμοποιώντας την νέα επέκταση x86-64 (γνωστή καισαν x64). Η Intel εμφάνισε τον πρώτο της επεξεργαστή x86-64 τον Ιούλιο του 2004.
Πριν από τους x86-64 είχε προηγηθεί μια άλλη αρχιτεκτονική που χρησιμοποιούσε διευθύνσεις μνήμης 64-bit: η Intel είχε κυκλοφορήσει τονItaniumτο 2001, στοχεύοντας στην αγορά υπολογιστών υψηλών επιδόσεων. Ο Itanium όμως ήταν ασύμβατος μετον x86 και χρησιμοποιείται λιγότερο σήμερα. Οι x86-64 επίσης είχαν τοNX bit, το οποίο πρόσφερε κάποια προστασία από σφάλματα ασφάλειας που προκαλούνταν από buffer overruns.
Μέχρι πρόσφατα η αρχιτεκτονική x86 δεν ικανοποιούσε τις απαιτήσεις των Popek και Goldberg, οι οποίοι το 1974 είχαν δώσει τις προδιαγραφές της εικονικής εκτέλεσης πολλών λειτουργικών σεμια πλατφόρμα (virtualization). Παρόλα αυτά υπήρξαν διάφορα εμπορικά προϊόντα για "x86 virtualization", όπως τοVMware vSphere, τοParallels, το Microsoft Hyper-V Server καιτοMicrosoft Virtual PC. Στην κοινότητα τουανοιχτού κώδικαταπιο σημαντικά εγχειρήματα virtualization ήταν οQEMU/KQEMU, τοVirtualBoxκαιτοXen.
Η Intel καιη AMD έχουν κυκλοφορήσει επεξεργαστές x86 με επεκτάσεις virtualization στο υλικό τους, οι οποίες αντιμετωπίζουν τους περιορισμούς της αρχιτεκτονικής x86. Αυτές οι επεκτάσεις είναι γνωστές σανIntel VT (κωδικό όνομα "Vanderpool") καιAMD-V (κωδικό όνομα "Pacifica"). Ανκαιοι περισσότεροι σύγχρονοι επεξεργαστές x86 περιλαμβάνουν αυτές τις επεκτάσεις, η τεχνολογία θεωρείται ότι ακόμα εξελίσσεται, με πολλές λύσεις σε λογισμικό να είναι γρηγορότερες από αυτές τις λύσεις σε υλικό.[18] This is expected to change as the technology matures
↑80486 32-bit CPU breaks new ground in chip density and operating performance. (Intel Corp.) (product announcement) EDN | May 11, 1989 | Pryce, Dave
↑Σε αντίθεση μετημικροαρχιτεκτονική (microarchitecture) καιτη συγκεκριμένη ηλεκτρονική και φυσική υλοποίηση που χρησιμοποιείται στη σχεδίαση ενός τσιπ.
↑Η Intel σταμάτησε να ονομάζει τους επεξεργαστές σαν "x86" από τονP5Pentiumτου 1993 (επειδή οιαριθμοίδε μπορούν να αποτελούν κατοχυρωμένες εμπορικές ονομασίες). Παρόλα αυτά, ο όρος x86 ήταν πια εδραιωμένος όσον αφορά τις τεχνικές συζητήσεις, την συγγραφή μεταγλωττιστών, κλπ.
↑Η Intel χρησιμοποιεί τους όρους IA-32καιIntel 64 (παλαιότερα EM64T ή IA-32e) γιατο x86 και τοx86-64 αντίστοιχα. Η AMD σήμερα προτιμά την ονομασία AMD64 έναντι της x86-64που εισήγαγε παλαιότερα.
↑Η αγορά των ενσωματωμένων συστημάτων περιλαμβάνει πάνω από 25 διαφορετικές αρχιτεκτονικές, οι οποίες, λόγω κόστους, κατανάλωσης ενέργειας και απλούστερης υλοποίησης, υπερέχουν των x86.
↑Οι V20 και V30 της NEC περιλαμβάνουν καιτο παλιότερο σύνολο εντολών του 8080, γιανα μπορούν να εκτελούν εφαρμογές του CP/M σε πλήρη ταχύτητα (δηλ. χωρίς να χρειάζεται προσομοίωση του 8080 με λογισμικό).
↑Είχε όμως πιο αργή FPU, παρά το γεγονός ότι η Cyrix ξεκίνησε σαν σχεδιαστής γρήγορων FPU για επεξεργαστές x86.
↑Τα τσιπ 16-bit και 32-bit κυκλοφόρησαν το 1978 και το 1985 αντίστοιχα. Η σχεδίαση για υποστήριξη 64-bit ανακοινώθηκε το 1999 και κυκλοφόρησε σταδιακά από το 2003 και έπειτα.
↑Αυτό συμβαίνει γιατί η αριθμητική ακεραίων δημιουργεί υπόλοιπο (carry) ανάμεσα σε διπλανά bit (σε αντίθεση με τις απλές λειτουργίες σε επίπεδο bit).