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 και οι απόγονοί του να επικρατήσουν σε αυτόν τον κλάδο της αγοράς μικροεπεξεργαστών.

Ο iAPX 432 και ο 80286

Ένας άλλος παράγοντας ήταν ο προχωρημένος αλλά ασύμβατος επεξεργαστής 32-bit Intel 8800 (γνωστός και σαν iAPX 432) που απέτυχε στην αγορά περίπου την ίδια εποχή που κυκλοφόρησε ο IBM-PC: ο 8800 απογοήτευσε από πλευράς ταχύτητας σε σχέση με τον καινούριο και γρήγορο 80286 στις αρχές του 1982. (Ο 80186, που κυκλοφόρησε παράλληλα με τον 80286, προοριζόταν για ενσωματωμένα συστήματα, και στόχευε ήδη σε μια μεγάλη αγορά.) Η εμπορική αποτυχία του 32-bit 8800 ήταν ένας βασικός λόγος που η Intel συνέχισε να αναπτύσσει πιο προχωρημένους επεξεργαστές συμβατούς με τον 8086, όπως ο 80386 (επέκταση στα 32-bit του γρήγορου 80286).

Άλλοι κατασκευαστές

Διάφορες εταιρείες, όπως η IBM, η NEC, η 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), ο οποίος, εσωτερικά, ήταν βασισμένος σε σημαντικό βαθμό στις παλιότερες σχεδιάσεις 29K RISC της AMD - παρόμοια με τον Nx586 της NexGen, χρησιμοποιούσε μια στρατηγική όπου αφιερωμένες βαθμίδες της διοχέτευσης αποκωδικοποιούν εντολές x86 σε εύκολα διαχειρίσιμες μικρολειτουργίες (micro-operations), μια μέθοδος που από τότε έγινε ο κανόνας για τις περισσότερες σχεδιάσεις του x86 μέχρι σήμερα.
Κάποιες πρώιμες εκδόσεις αυτών των τσιπ είχαν προβλήματα απαγωγής θερμότητας. Ο 6x86 είχε επίσης κάποια μικρά προβλήματα συμβατότητας και από τον Nx586 έλειπε η μονάδα κινητής υποδιαστολής (FPU) και η (τότε σημαντική) συμβατότητα σε ακίδες (pin-compatibility), ενώ ο K5 αποδείχτηκε λιγο αργός, όταν (τελικά) κυκλοφόρησε. Πολλοί καταναλωτές επίσης δεν γνώριζαν για αυτές τις εναλλακτικές έναντι του Pentium. Αυτά τα προβλήματα οδήγησαν σε εμπορική αποτυχία των εναλλακτικών σχεδιάσεων, παρά το γεγονός ότι ο K5 είχε πολύ καλή συμβατότητα με τον Pentium και ο 6x86 ήταν σημαντικά πιο γρήγορος από τον Pentium σε πράξεις ακεραίων. Η AMD αργότερα κατάφερε να εδραιωθεί σαν σημαντικός παίχτης στην αγορά, λόγω των επεξεργαστών K6, ενώ τελικά ανέπτυξε τους πολύ επιτυχημένους Athlon και Opteron. Υπήρξαν και άλλες εταιρείες που συμμετείχαν στην αγορά, όπως η Centaur Technology (γνωστή παλιότερα σαν IDT), η Rise Technology και η Transmeta. Η επεξεργαστές C3 και C7 της VIA Technologies, που έχουν χαμηλή κατανάλωση ενέργειας, σχεδιάστηκαν από την Centaur και κυκλοφορούν για μεγάλο χρονικό διάστημα. Η τελευταία σχεδίαση της Centaur, ο VIA Nano, είναι ο πρώτος επεξεργαστής τους με υπερβαθμωτή και υποθετική εκτέλεση. Έχει ενδιαφέρον το ότι κυκλοφόρησε περίπου την ίδια χρονική περίοδο με τον πρώτο επεξεργαστή της Intel με εκτέλεση εντός σειράς ("in-order") μετά τον Pentium P5, τον 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 που περιλαμβάνεται στις μεταγενέστερες γενιές, όπως περιγράφεται στη συνέχεια. Για κοινές καταστάσεις και τιμές που βρίσκονται στο εύρος -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) και μικρές σχετικές διευθύνσεις, ειδικά για πρόσβαση στην στοίβα. Έχει υπάρξει σημαντική έρευνα για να γίνουν αυτές οι περιπτώσεις πρόσβασης τόσο γρήγορες, όσο η πρόσβαση στους καταχωρητές, δηλ. με μια μόνο εντολή, συνήθως όταν τα δεδομένα υπάρχουν ήδη στην κρυφή μνήμη πρώτου επιπέδου.

Αριθμοί κινητής υποδιαστολής και SIMD

Για τον αρχικό επεξεργαστή 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 (αλλά όχι αριθμητική ακεραίων) σε ποσότητες πλήρως 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. Ο συνολικός χώρος διευθύνσεων στην πραγματική κατάσταση είναι επομένως 2²⁰ 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). Οι μετατοπίσεις που αναφέρονται σε θέσεις μέσα στο τμήμα συνδυάζονται με τις φυσικές διευθύνσεις στην αρχή του τμήματος για να προκύψει η τελική διεύθυνση που αντιστοιχεί σε αυτήν την μετατόπιση.
Η χρήση τμημάτων δυσκολεύει τον προγραμματισμό και την σχεδίαση μεταγλωττιστών γιατί η χρήση κοντινών και μακρινών δεικτών επηρεάζει την ταχύτητα των προγραμμάτων.

16-bit

Ο αρχικός 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

Με την εμφάνιση του επεξεργαστή 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 και αντίστροφα.
Στον 80486 προστέθηκε Μονάδα Κινητής Υποδιαστολής (FPU), με οχτώ καταχωρητές 80-bit.
Στον Pentium II προστέθηκαν οχτώ καταχωρητές ακεραίων MMX 64-bit (MMX0..MMX7, που μοιράζονται τα κατώτερα bit με τη στοίβα της μονάδας κινητής υποδιαστολής που είναι 80-bit (st(0)..st(7))). Στον Pentium III προστέθηκαν ένας καταχωρητής ελέγχου κατάστασης των 32-bit (control/status register, MXCSR) για το σύνολο εντολών Streaming SIMD Extension (SSE) και οχτώ καταχωρητές SSE των 128-bit για αριθμούς κινητής υποδιαστολής (XMM0..XMM7).

64-bit

Από τον επεξεργαστή 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).

Επέκταση Φυσικής Διεύθυνσης (PAE)

Η Επέκταση Φυσικής Διεύθυνσης (Physical Address Extension, PAE) προστέθηκε αρχικά στον Pentium Pro της Intel, για να επιτρέψει επιπλέον 4 bit φυσικών διευθύνσεων στην προστατευμένη κατάσταση 32-bit. Το μέγεθος της μνήμης στην προστατευμένη κατάσταση περιορίζεται συνήθως σε 4 GB. Μέσω κάποιων τεχνικών των συστημάτων διαχείρισης της μνήμης (όσον αφορά τις σελίδες και τα τμήματα), τα λειτουργικά συστήματα για x86 μπορούν να έχουν πρόσβαση σε περισσότερα από 32-bit χώρου διευθύνσεων, ακόμα και χωρίς χρήση της κατάστασης 64-bit. Το μήκος των μετατοπίσεων στα τμήματα και των γραμμικών διευθύνσεων μένει ίδιο, στα 32 bit.

Virtualization

Μέχρι πρόσφατα η αρχιτεκτονική 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 περιλαμβάνουν αυτές τις επεκτάσεις, η τεχνολογία θεωρείται ότι ακόμα εξελίσσεται, με πολλές λύσεις σε λογισμικό να είναι γρηγορότερες από αυτές τις λύσεις σε υλικό. This is expected to change as the technology matures