X86-64

Η **x86-64** είναι επέκταση του συνόλου εντολών x86. Υποστηρίζει σημαντικά μεγαλύτερους χώρους εικονικών και φυσικών διευθύνσεων μνήμης σε σχέση με το x86, επιτρέποντας στον προγραμματιστή να εργάζεται με μεγαλύτερους όγκους δεδομένων. Επίσης η x86-64 έχει καταχωρητές γενικής χρήσης 64-bit και πολλές άλλες βελτιώσεις. Η αρχική προδιαγραφή δημιουργήθηκε από την AMD και έχει υλοποιηθεί από την AMD, την Intel, τη VIA και άλλες εταιρείες. Διατηρεί πλήρη συμβατότητα προς τα πίσω με κώδικα 32-bit. Επειδή το πλήρες σύνολο εντολών 32-bit εξακολουθεί να υλοποιείται σε υλικό χωρίς προσομοίωση, τα εκτελέσιμα 32-bit για x86 εκτελούνται χωρίς προβλήματα συμβατότητας ή ταχύτητας,
αν και οι εφαρμογές μπορούν να μετατραπούν ώστε να εκμεταλλευτούν τις δυνατότητες της νέας σχεδίασης και να εκτελεστούν γρηγορότερα.

Αφού κυκλοφόρησε την αρχιτεκτονική με το όνομα "x86-64", η AMD τη μετονόμασε σε **AMD64** το 2003 ενώ η Intel αρχικά χρησιμοποίησε τα ονόματα **IA-32e** και **EM64T**, καταλήγοντας τελικά στο **Intel 64** για τη δική της υλοποίηση. Το όνομα x86-64 χρησιμοποιείται ακόμα από σημαντικό μέρος της βιομηχανίας ως όρος που δεν εξαρτάται από τον κάθε κατασκευαστή, ενώ κάποιες άλλες εταιρείες, όπως η Sun Microsystems (που τώρα ανήκει στην Oracle Corporation) και η Microsoft, χρησιμοποιούν το όνομα **x64**.

Ο πυρήνας AMD K8 ήταν ο πρώτος που υλοποίησε την αρχιτεκτονική - αυτό υπήρξε και η πρώτη σημαντική προσθήκη στην αρχιτεκτονική x86 που σχεδιάστηκε από άλλη εταιρεία και όχι από την Intel. Η Intel αναγκάστηκε να ακολουθήσει και κυκλοφόρησε μια τροποποιημένη οικογένεια NetBurst που ήταν πλήρως συμβατή από την πλευρά του λογισμικού με τη σχεδίαση και τις προδιαγραφές της AMD. Η VIA Technologies κυκλοφόρησε το x86-64 με την αρχιτεκτονική VIA Isaiah, στον επεξεργαστή VIA Nano.

Η προδιαγραφή x86-64 είναι διαφορετική από την αρχιτεκτονική Itanium (πρώην *IA-64*) της Intel, η οποία δεν είναι συμβατή με το σύνολο εντολών της αρχιτεκτονικής x86.

## AMD64

Το σύνολο εντολών AMD64 υλοποιείται από τους εξής επεξεργαστές της AMD: Athlon 64, Athlon 64 FX, Athlon 64 X2, Athlon II, Athlon X2, Opteron, Phenom, Phenom II, Turion 64, Turion 64 X2, και μεταγενέστερα μοντέλα των επεξεργαστών Sempron.

### Ιστορία της AMD64
Η AMD64 υλοποιήθηκε σαν εναλλακτική έναντι της ριζικά διαφορετικής αρχιτεκτονικής IA-64, η οποία σχεδιάστηκε από την Intel και τη Hewlett Packard.  Η αρχιτεκτονική AMD64 ανακοινώθηκε το 1999 με πλήρη προδιαγραφή να δημοσιεύεται τον Αύγουστο του 2000, και από την αρχή θεωρήθηκε από την AMD σαν μια εξέλιξη που θα έδινε υπολογιστικές δυνατότητες 64-bit στην υπάρχουσα αρχιτεκτονική x86, σε αντίθεση με την προσέγγιση της Intel, η οποία είχε δημιουργήσει μια εντελώς νέα αρχιτεκτονική 64-bit, την IA-64.

Ο πρώτος επεξεργαστής που βασίστηκε στην AMD64, ο Opteron, κυκλοφόρησε τον Απρίλιο του 2003.

### Χαρακτηριστικά της αρχιτεκτονικής
Το βασικό χαρακτηριστικό της αρχιτεκτονικής AMD64 είναι ότι υποστηρίζονται καταχωρητές γενικής χρήσης 64-bit (όπως ο rax και ο rbx), αριθμητικές ακεραίων και λογικές λειτουργίες 64-bit και εικονικές διευθύνσεις μνήμης 64-bit. Οι σχεδιαστές εισήγαγαν επίσης και άλλες βελτιώσεις, με τις σημαντικότερες να είναι οι εξής:

***Ακέραιοι 64-bit:** Όλοι οι καταχωρητές γενικής χρήσης επεκτείνονται από τα 32&nbsp;bit στα 64&nbsp;bit και όλες οι αριθμητικές και λογικές λειτουργίες και οι λειτουργίες μεταξύ καταχωρητών και μνήμης μπορούν να χρησιμοποιούν ακεραίους 64-bit. Η τοποθέτηση και η αφαίρεση δεδομένων από τη στοίβα γίνεται με την μείωση ή αύξηση του καταχωρητή στοίβας σε πολλαπλάσια των 8 byte και οι δείκτες έχουν πλάτος 8 byte.

***Επιπλέον καταχωρητές:** Εκτός από την αύξηση του μεγέθους των καταχωρητών γενικής χρήσης, ο αριθμός των καταχωρητών γενικής χρήσης αυξάνεται από τους 8 (eax, ebx, ecx, edx, ebp, esp, esi, edi) του x86 σε 16 (rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Με αυτόν τον τρόπο είναι δυνατή η αποθήκευση περισσότερων τοπικών μεταβλητών στους καταχωρητές σε σχέση με τη στοίβα και η τοποθέτηση συχνά χρησιμοποιούμενων σταθερών στους καταχωρητές, ενώ μπορούν να δίνονται σε καταχωρητές τα ορίσματα των μικρών και γρήγορων υπορουτινών. Το AMD64 όμως εξακολουθεί να έχει λιγότερους καταχωρητές σε σχέση με πολλές κοινές αρχιτεκτονικές συνόλου εντολών RISC (που συνήθως έχουν 32&ndash;64&nbsp;καταχωρητές) ή υπολογιστές τύπου VLIW όπως ο IA-64 (που έχει 128&nbsp;καταχωρητές), αν και λόγω της τεχνικής της μετονομασίας καταχωρητών (register renaming) ο αριθμός των φυσικών καταχωρητών είναι συχνά μεγαλύτερος από τον αριθμό που φαίνεται στο σύνολο εντολών.

***Επιπλέον καταχωρητές XMM (SSE):** Ο αριθμός των καταχωρητών XMM 128-bit (που χρησιμοποιείται για εντολές Streaming SIMD) αυξάνεται επίσης από 8 σε 16.

***Μεγαλύτερος χώρος εικονικών διευθύνσεων:** Η αρχιτεκτονική AMD64 ορίζει έναν τύπο εικονικών διευθύνσεων 64-bit, τα 48 bit χαμηλότερης τάξης του οποίου χρησιμοποιούνται στις περισσότερες υλοποιήσεις. Αυτό επιτρέπει εικονικό χώρο διευθύνσεων μέχρι 256&nbsp;TB (248 byte). Ο ορισμός της αρχιτεκτονικής επιτρέπει την αύξηση αυτού του ορίου σε μελλοντικές υλοποιήσεις πλήρως στα 64 bit, επεκτείνοντας τον εικονικό χώρο διευθύνσεων στα 16&nbsp;EB (264 byte). Αντίθετα, στην αρχιτεκτονική x86 ο αριθμός αυτός είναι μόνο 4&nbsp;GB (232 byte). Αυτό σημαίνει ότι μπορεί να γίνει επεξεργασία πολύ μεγάλων αρχείων με απευθείας αντιστοίχιση κάθε αρχείου στη μνήμη (memory-mapped file) για γρηγορότερη επεξεργασία του, σε αντίθεση με την παλαιότερη πρακτική της τμηματικής φόρτωσης και επεξεργασίας του αρχείου.

***Μεγαλύτερος φυσικός χώρος διευθύνσεων:** Η αρχική υλοποίηση της αρχιτεκτονικής AMD64 υλοποίησε φυσικές διευθύνσεις 40-bit και μπορούσε να χρησιμοποιήσει μέχρι και 1&nbsp;TB (240 byte) μνήμης RAM. Οι νεότερες υλοποιήσεις της αρχιτεκτονικής AMD64 (από τη μικροαρχιτεκτονική AMD 10h) επέκτειναν τις φυσικές διευθύνσεις στα 48-bit και μπορούν να χρησιμοποιήσουν διευθύνσεις για μέχρι 256&nbsp;TB μνήμης RAM. Η αρχιτεκτονική επιτρέπει τη μελλοντική αύξηση των διευθύνσεων στα 52 bit (με όριο τον τύπο του πίνακα των σελίδων μνήμης); που μπορεί να δώσει διευθύνσεις μέχρι 4&nbsp;PB μνήμης RAM. Συγκριτικά, οι επεξεργαστές x86 32-bit περιορίζονται σε 64&nbsp;GB RAM την κατάσταση Physical Address Extension (PAE), ή σε 4&nbsp;GB RAM χωρίς την κατάσταση PAE.

***Μεγαλύτερος χώρος φυσικών διευθύνσεων στην κατάσταση συμβατότητας:** Όταν λειτουργεί σε κατάσταη συμβατότητας με παλαιότερο κώδικα (legacy mode), η αρχιτεκτονική AMD64 υποστηρίζει την κατάσταση Physical Address Extension (PAE), όπως οι περισσότεροι σύγχρονοι επεξεργαστές x86, αλλά την επεκτείνει από τα 36 bit σε ένα αρχιτεκτονικό όριο των 52 bit για φυσικές διευθύνσεις. Κάθε υλοποίηση επομένως επιτρέπει το ίδιο όριο στις φυσικές διευθύνσεις σε σχέση με την κατάσταση long (long mode).

***Πρόσβαση σε δεδομένα με βάση τον δείκτη εντολής:** Οι εντολές μπορούν να χρησιμοποιήσουν δεδομένα που βρίσκονται σε θέση που σχετίζεται με τον δείκτη εντολής (καταχωρητής RIP). Αυτό κάνει πιο γρήγορο τον κώδικα που δεν εξαρτάται από τη διεύθυνση φόρτωσης (position independent code), ο οποίος συχνά χρησιμοποιείται σε διαμοιραζόμενες βιβλιοθήκες και στον κώδικα που φορτώνεται στον χρόνο εκτέλεσης.

***Εντολές SSE:** Η αρχική αρχιτεκτονική AMD64 υιοθέτησε τα σύνολα εντολών SSE και SSE2 της Intel σαν βασικές εντολές. Οι εντολές SSE3 προστέθηκαν τον Απρίλιο του 2005. Η SSE2 είναι εναλλακτική της ακρίβειας 80-bit IEEE του συνόλου εντολών του x87 με δυνατότητα επιλογής μεταξύ μαθηματικών κινητής υποδιαστολής IEEE 32-bit ή 64-bit. Αυτό παρέχει λειτουργίες κινητής υποδιαστολής που είναι συμβατές με πολλούς άλλους σύγχρονους επεξεργαστές. Οι εντολές SSE και SSE2 έχουν επίσης επεκταθεί ώστε να χρησιμοποιούν τους οχτώ νέους επεξεργαστές XMM. Οι SSE και SSE2 διατίθενται στην κατάσταση 32-bit στους σύγχρονου επεξεργαστές x86 αλλά αν χρησιμοποιηθούν σε προγράμματα 32-bit, αυτά μπορούν να εκτελεστούν μόνο σε συστήματα που υποστηρίζουν τις εντολές αυτές. Αυτό δεν είναι πρόβλημα για τα προγράμματα 64-bit επειδή όλοι οι επεξεργαστές AMD64 έχουν SSE και SSE2, επομένως η χρήση εντολών SSE και SSE2 αντί των εντολών του x87 δεν επηρεάζει το σύνολο των υπολογιστών που μπορούν να εκτελέσουν τα προγράμματα x86-64. Οι SSE και SSE2 είναι γενικά γρηγορότερες και περιλαμβάνουν τα περισσότερα χαρακτηριστικά των κλασικών εντολών x87, MMX και 3DNow!.

***[[NX bit|No-Execute bit]] (bit απαγόρευσης εκτέλεσης):** Το bit "NX" (bit 63 στον πίνακα σελίδων) επιτρέπει στο λειτουργικό σύστημα να ορίσει ποιες σελίδες εικονικής μνήμης μπορούν να επιτρέπουν εκτελέσιμο κώδικα και ποιες όχι. Η προσπάθεια εκτέλεσης κώδικα από μια σελίδα που έχει χαρακτηριστεί «no execute» θα προκαλέσει σφάλμα πρόσβασης μνήμης, σαν την απόπειρα εγγραφής σε μια σελίδα μόνο για ανάγνωση. Αυτό κάνει πιο δύσκολο τον έλεγχο του συστήματος από κακόβουλο λογισμικό μέσω επιθέσεων υποχείλισης («buffer overrun») ή μη ελεγχόμενης ενδιάμεσης μνήμης («unchecked buffer»). Οι επεξεργαστές x86 έχουν ένα παρόμοιο χαρακτηριστικό από τον 80286 σαν ιδιότητα των περιγραφέων τμήματος (segment descriptors) αλλά αυτό αφορά μόνο ολόκληρα τμήματα. Οι διευθύνσεις με βάση τμήματα (segmented addressing) είναι πια ξεπερασμένος τρόπος λειτουργίας και όλα τα λειτουργικά συστήματα για PC στην πράξη τον αγνοούν, θέτοντας όλα τα τμήματα να έχουν βασική διεύθυνση 0 και μέγεθος 4&nbsp;GB (στην υλοποίηση 32 bit). Η AMD ήταν ο πρώτος κατασκευαστής της οικογένειας x86 που υλοποίησε το χαρακτηριστικό της απαγόρευσης εκτέλεσης στη χρήση γραμμικών διευθύνσεων. Το χαρακτηριστικό αυτό επίσης είναι διαθέσιμο στην κατάσταση συμβατότητας των επεξεργαστών AMD64 και στους σύγχρονους επεξεργαστές, όταν χρησιμοποιείται PAE.

***Αφαίρεση παλαιότερων χαρακτηριστικών:** Κάποια χαρακτηριστικά «προγραμματισμού συστημάτων» της αρχιτεκτονικής x86 δεν χρησιμοποιούνται στα σύγχρονα λειτουργικά συστήματα και δεν είναι διαθέσιμα στην AMD64 στις καταστάσεις long (64-bit και συμβατότητας). Αυτά τα χαρακτηριστικά περιλαμβάνουν τις διευθύνσεις με χρήση τμημάτων (αν και διατηρούνται τα τμήματα FS και GS για χρήση από το λειτουργικό σύστημα), ο μηχανισμός εναλλαγής κατάστασης εργασιών και η κατάσταση Virtual 8086. Αυτά τα χαρακτηριστικά εξακολουθούν να υλοποιούνται πλήρως στην κατάσταση συμβατότητας (legacy mode), επιτρέποντας σε αυτούς τους επεξεργαστές να εκτελούν λειτουργικά συστήματα 32-bit και 16-bit χωρίς τροποποίηση.

### Εικονικός χώρος διευθύνσεων
#### Κανονική μορφή διευθύνσεων
Αν και οι εικονικές διευθύνσεις έχουν μήκος 64&nbsp;bit στην κατάσταση 64-bit, οι τρέχουσες υλοποιήσεις δεν επιτρέπουν χρήση του πλήρους χώρου εικονικών διευθύνσεων των 264 byte (16&nbsp;EB). Τα περισσότερα λειτουργικά συστήματα και εφαρμογές δεν χρειάζονται τόσο μεγάλο χώρο διευθύνσεων στο άμεσο μέλλον (για παράδειγμα η υλοποίηση των Windows για AMD64 χρησιμοποιούν μόνο 16&nbsp;TB, που αντιστοιχούν σε 44&nbsp;bit), επομένως η υλοποίηση τόσο μεγάλων εικονικών διευθύνσεων απλά θα αυξήσει την πολυπλοκότητα και το κόστος της μετάφρασης διευθύνσεων χωρίς πραγματικό όφελος. Η AMD αποφάσισε να χρησιμοποιήσει μόνο τα λιγότερο σημαντικά 48&nbsp;bit για μετάφραση διευθύνσεων στις πρώτες υλοποιήσεις της αρχιτεκτονικής (αναζήτηση στον πίνακα σελίδων, page table lookup). Επιπλέον, τα bit 48-63 κάθε εικονικής διεύθυνσης πρέπει να είναι αντίγραφα του bit 47, αλλιώς ο επεξεργαστής θα προκαλέσει σφάλμα εξαίρεσης (exception). Οι διευθύνσεις που συμφωνούν με αυτόν τον κανόνα λέγεται ότι είναι σαν «κανονική μορφή» («canonical form»). Οι διευθύνσεις σε κανονικής μορφή καταλαμβάνουν τους χώρους 0 έως 00007FFF'FFFFFFFF και FFFF8000'00000000 έως FFFFFFFF'FFFFFFFF, αντιστοιχώντας συνολικά σε 256&nbsp;TB χώρου εικονικών διευθύνσεων.

Αυτή η λεπτομέρεια επιτρέπει την ομαλή μετάβαση αργότερα σε σχηματισμό πλήρως 64-bit διευθύνσεων:
πολλά λειτουργικά συστήματα (όπως η οικογένεια των Windows NT) κρατούν για δική τους χρήση το μισό του χώρου διευθύνσεων που είναι σε υψηλότερες διευθύνσεις (που ονομάζεται χώρος πυρήνα, kernel space) και αφήνουν το άλλο μισό σε χαμηλότερες διευθύνσεις (χώρος χρήστη, user space) για κώδικα εφαρμογών, χώρο για στοίβα του χρήστη, σωρό, και άλλες περιοχές για δεδομένα. Η σχεδίαση «κανονικών διευθύνσεων» έχει σαν αποτέλεσμα κάθε υλοποίηση που είναι συμβατή με την αρχιτεκτονική AMD64 να έχει στην πράξη δύο μισά μνήμης: το χαμηλότερο μισό αρχίζει στη διεύθυνση 00000000'00000000 και μεγαλώνει προς τα πάνω με την αύξηση των διαθέσιμων bit διευθύνσεων και το υψηλότερο μισό βρίσκεται στην κορυφή της μνήμης και μεγαλώνει προς τα κάτω. Επιπλέον, ο ορισμός του περιεχομένου των επιπλέον bit απαγορεύει τη χρήση τους από το λειτουργικό σύστημα σαν σημαίες (flags), σήμανση δικαιωμάτων (privilege markers), κλπ., χαρακτηριστικά που θα δυσκόλευαν την επέκταση της αρχιτεκτονικής σε περισσότερα bit εικονικών διευθύνσεων.

#### Δομή του πίνακα σελίδων
Ο σχηματισμός διευθύνσεων 64-bit (κατάσταση long, «long mode») είναι υπερσύνολο της Physical Address Extensions (PAE) και τα μεγέθη των σελίδων μπορούν να είναι 4&nbsp;KB (212 byte) ή 2&nbsp;MB (221 byte). Η κατάσταση αυτή υποστηρίζει επίσης μεγέθη σελίδων του 1&nbsp;GB (230 byte). Αντί για το σύστημα πινάκων σελίδων τριών επιπέδων που χρησιμοποιείται σε συστήματα σε κατάσταση PAE, χρησιμοποιούνται τέσσερα επίπεδα πίνακα σελίδων: ο πίνακας *Page-Directory Pointer Table* του PAE επεκτείνεται από 4 εγγραφές σε 512, και προστίθεται ένας επιπλέον πίνακας (*Page-Map Level 4 (PML4) Table*), που περιλαμβάνει 512 εγγραφές στις υλοποιήσεις 48-bit. Στις υλοποιήσεις που έχουν μεγαλύτερες εικονικές διευθύνσεις, ο τελευταίος πίνακας μπορεί να μεγαλώσει για να χωρέσει αρκετές εγγραφές που να περιγράφουν ολόκληρο το εύρος διευθύνσεων, μέχρι το θεωρητικό μέγιστο των 33,554,432 εγγραφών μιας υλοποίησης 64-bit, ή να αντιστοιχηθεί σε κάποιο νέο επίπεδο, όπως το PML5. Μια πλήρης ιεραρχία σελίδων των 4&nbsp;KB για τον πλήρη χώρο των 48-bit θα καταλάμβανε λίγο περισσότερο χώρο από 512&nbsp;GB μνήμης RAM (το 0.196% του εικονικού χώρου των 256&nbsp;TB).

#### Περιορισμοί του λειτουργικού συστήματος
Το λειτουργικό σύστημα μπορεί επίσης να περιορίσει τον χώρο εικονικών διευθύνσεων. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».

### Λεπτομέρειες για τον χώρο φυσικών διευθύνσεων

Οι τρέχουσες υλοποιήσεις της AMD64 υποστηρίζουν έναν χώρο φυσικών διευθύνσεων μέχρι 248 byte μνήμης RAM, ή 256&nbsp;TB. Το μεγάλο μέγεθος εγκατεστημένης μνήμης RAM επιτρέπει στο λειτουργικό σύστημα να κρατά μεγαλύτερο μέρος από τα δεδομένα και τον κώδικα του προγράμματος στη RAM, με πιθανή βελτίωση της ταχύτητας, αν και αυτό εξαρτάται από την κάθε εφαρμογή.

Το άνω όριο στο μέγεθος της μνήμης RAM που μπορεί να χρησιμοποιηθεί σε ένα σύστημα x86-64 εξαρτάται από πολλούς παράγοντες και μπορεί να είναι λιγότερη από αυτήν που υλοποιεί ο επεξεργαστής. Το λειτουργικό σύστημα μπορεί να περιορίζει επιπλέον το μέγεθος της RAM που μπορεί να χρησιμοποιηθεί. Λεπτομέρειες δίνονται στην υποενότητα «Συμβατότητα και χαρακτηριστικά λειτουργικών συστημάτων».

### Καταστάσεις λειτουργίας

Η αρχιτεκτονική έχει δύο βασικές καταστάσεις λειτουργίας:

#### Long mode
Η βασική κατάσταση της αρχιτεκτονικής συνδυάζει την κανονική κατάσταση 64-bit του επεξεργαστή με ένα μείγμα των καταστάσεων συμβατότητας 32-bit και 16-bit. Χρησιμοποιείται από λειτουργικά συστήματα 64-bit. Σε ένα λειτουργικό σύστημα 64-bit τα προγράμματα 64-bit εκτελούνται σε κατάσταση 64-bit και οι εφαρμογές προστατευμένης κατάστασης 32-bit και 16-bit (που δεν χρειάζονται την πραγματική κατάσταση ή την εικονική κατάσταση 8086). Τα προγράμματα πραγματικής κατάστασης και όσα χρησιμοποιούν την εικονική κατάσταση 8086 δεν μπορούν να εκτελεστούν σε long mode, εκτός και αν εκτελεστούν μέσα σε κάποιον εξομοιωτή.

Επειδή το βασικό σύνολο εντολών είναι το ίδιο, δεν υπάρχει σχεδόν καμία διαφορά στην ταχύτητα στην εκτέλεση κώδικα x86 προστατευόμενης κατάστασης. Αυτό είναι αντίθετο με την αρχιτεκτονική IA-64 της Intel, όπου οι διαφορές στο σύνολο εντολών σημαίνει ότι η εκτέλεση κώδικα 32-bit πρέπει είτε να εξομοιωθεί (κάνοντας τον επεξεργαστή πιο αργό) ή με κάποιον εξειδικευμένο πυρήνα x86. Στην πλατφόρμα x86-64 όμως, πολλές εφαρμογές x86 θα μπορούσαν να ωφεληθούν από μια επαναμεταγλώττιση στα 64 bit, λόγω των επιπλέον καταχωρητών στον κώδικα 64-bit και την εγγυημένη υποστήριξη FPU βασισμένης στο SSE2, το οποίο ένας μεταγλωττιστής μπορεί να χρησιμοποιήσει για βελτιστοποίηση. Οι εφαρμογές όμως που χειρίζονται συχνά ακεραίους μεγαλύτερους από 32 bit, όπως οι αλγόριθμοι κρυπτογραφίας, θα χρειαστούν διορθώσεις τον κώδικα που χειρίζεται τους μεγάλους ακεραίους για να χρησιμοποιήσουν τους καταχωρητές των 64 bit.

#### Κατάσταση συμβατότητας με παλιό κώδικα (Legacy mode)
Η κατάσταση αυτή χρησιμοποιείται από τα λειτουργικά συστήματα 16-bit (προστατευμένης ή πραγματικής κατάστασης) και 32-bit. Σε αυτήν την κατάσταση ο επεξεργαστής συμπεριφέρεται ως ένας επεξεργαστής x86 32-bit, και μπορεί να εκτελέσει μόνο κώδικα 16-bit και 32-bit. Η κατάσταση αυτή επιτρέπει μέγιστο μήκος εικονικών διευθύνσεων τα 32 bit, περιορίζοντας τον χώρο εικονικών διευθύνσεων στα 4 GB. Τα προγράμματα 64-bit δε μπορούν να εκτελεστούν σε αυτήν την κατάσταση.

### Υλοποιήσεις της AMD64
Οι ακόλουθοι επεξεργαστές υλοποιούν την αρχιτεκτονική AMD64:
*AMD Athlon 64
*AMD Athlon 64 X2
*AMD Athlon 64 FX
*AMD Athlon II (τα 'X2', 'X3', ή 'X4' δείχνουν τον αριθμό των πυρήνων, και τα μοντέλα XLT)
*AMD Opteron
*AMD Turion 64
*AMD Turion 64 X2
*AMD Sempron («Palermo» E6 stepping και όλα τα μοντέλα «Manila»)
*AMD Phenom (τα 'X3' ή 'X4' δείχνουν τον αριθμό των πυρήνων)
*AMD Phenom II (τα 'X2', 'X3', 'X4' ή 'X6' δείχνουν τον αριθμό των πυρήνων)
*AMD Bulldozer FX

## Intel 64
Η **Intel 64** είναι η υλοποίηση της Intel της αρχιτεκτονικής x86-64. Χρησιμοποιείται σε νεότερες εκδόσεις των επεξεργαστών Pentium 4, Celeron D, Xeon και Pentium Dual-Core, στους Atom D510, N450, και N550, και σε όλες τις εκδόσεις των επεξεργαστών Pentium Extreme Edition, Core 2, Core i7, Core i5, και Core i3.

### Ιστορία της Intel 64
Η AMD παραδοσιακά ανέπτυσσε και κατασκεύαζε επεξεργαστές ακολουθώντας τις αρχικές σχεδιάσεις της Intel, αλλά οι ρόλοι αντιστράφηκαν με την x86-64: η Intel βρέθηκε να υιοθετεί την αρχιτεκτονική που κατασκεύασε η AMD ως επέκταση στην ίδια σειρά κατασκευαστών x86 της Intel.

Αρχικά η κωδική ονομασία του εγχειρήματος της Intel ήταν **Yamhill** (από τον ομώνυμο ποταμό του Όρεγκον). Αν και διέψευδε την ύπαρξή του για αρκετά χρόνια, η Intel ανακοίνωσε τον Φεβρουάριο του 2004 στο Intel Developer Forum (IDF) ότι το εγχείρημα ήταν ενεργό. Ο τότε πρόεδρος της Intel, Craig Barrett, παραδέχτηκε ότι το μυστικό δεν το είχαν φυλάξει καλά.

Η Intel άλλαξε όνομα για αυτό το σύνολο εντολών αρκετές φορές. Το όνομα που χρησιμοποίησε στο IDF ήταν **CT** (μάλλον **Clackamas Technology**, όπου Clackamas ένας άλλος ποταμός του Όρεγκον), ενώ μετά από κάποιες εβδομάδες άρχισαν να το αποκαλούν **IA-32e** (IA-32 extensions, επεκτάσεις) και τον Μάρτιο του 2004 δόθηκε στη δημοσιότητα το «επίσημο» όνομα **EM64T** (Extended Memory 64 Technology). Στα τέλη του 2006 η Intel άρχισε να χρησιμοποιεί το όνομα **Intel 64** για την υλοποίησή της, όπως ήδη έκανε η AMD με το αντίστοιχο όνομα AMD64.

### Υλοποιήσεις της Intel 64
Ο πρώτος επεξεργαστής που υλοποίησε την Intel 64 ήταν ο επεξεργαστής πολλών υποδοχών (multi-socket) Xeon με την κωδική ονομασία *Nocona* τον Ιούνιο του 2004. Αντίθετα, τα πρώτα τσιπ Prescott (Φεβρουάριος 2004) δεν είχαν ενεργοποιημένο το χαρακτηριστικό αυτό. Η Intel στη συνέχεια άρχισε να πουλά επεξεργαστές Pentium 4 που είχαν ενεργοποιημένη την Intel 64 χρησιμοποιώντας την έκδοση E0 του πυρήνα Prescott, που στην αγορά των OEM έγιναν γνωστοί σαν Pentium 4, μοντέλο F. Η έκδοση E0 πρόσθεσε επίσης το χαρακτηριστικό eXecute Disable (XD) (το όνομα της Intel για το NX bit) στην Intel 64, το οποίο και από τότε περιλαμβάνεται στην έκδοση *Irwindale* του Xeon. Επίσημα, η Intel διέθεσε πρώτη φορά την Intel 64 (τότε με το όνομα EM64T) για εμπορικούς επεξεργαστές σταθερών υπολογιστών με τον N0 Stepping Prescott-2M. Όλοι οι επεξεργαστές των σειρών 9xx, 8xx, 6xx, 5x9, 5x6, 5x1, 3x6, και 3x1 υποστηρίζουν την Intel 64 - το ίδιο συμβαίνει και με τους επεξεργαστές Core 2, και τοτς μελλοντικούς επεξεργαστές της Intel CPU για σταθμούς εργασίας ή εξυπηρετητές. Η Intel 64 περιλαμβάνεται επίσης στα τελευταία μέλη της σειράς Celeron D.

Ο πρώτος επεξεργαστής της Intel για κινητές πλατφόρμες (mobile processor) που υλοποίησε την Intel 64 ήταν η έκδοση Merom του επεξεργαστή Core 2, που κυκλοφόρησε στις 27 Ιουλίου 2006. Οι προηγούμενοι επεξεργαστές της Intel για κινητά (Core Duo, Pentium M, Celeron M, Mobile Pentium 4) δεν υλοποιούν την Intel 64.

Οι ακόλουθοι επεξεργαστές υλοποιούν την αρχιτεκτονική Intel 64:
*Μικροαρχιτεκτονική Intel NetBurst
**Intel Xeon (όλα τα μοντέλα από τον "Nocona")
**Intel Celeron (κάποια μοντέλα από τον "Prescott" και μετά)
**Intel Pentium 4 (κάποια μοντέλα από τον "Prescott" και μετά)
**Intel Pentium D
**Intel Pentium Extreme Edition
*Μικροαρχιτεκτονική Intel Core
**Intel Xeon (όλα τα μοντέλα από τον "Woodcrest" και μετά)
**Intel Core 2 (περιλαμβάνει τους επεξεργαστές για κινητές πλατφόρμες μετά τον "Merom")
**Intel Pentium Dual-Core (E2140, E2160, E2180, E2200, E2220, E5200, E5300, E5400, E6300, E6500, T2310, T2330, T2370, T2390, T3200 και T3400)
**Intel Celeron (Celeron 4x0; Celeron M 5xx; E3200, E3300, E3400)
* Μικροαρχιτεκτονική Intel Atom
**Intel Atom 200 series (δεν έχει σχέση με τη σειρά N200, που χρησιμοποιείται σε φορητούς υπολογιστές)
**Intel Atom 300 series
**Intel Atom N4xx, N5xx series
**Intel Atom Dxxx series
* Μικροαρχιτεκτονική Intel Nehalem
**Intel Core i3
**Intel Core i5
**Intel Core i7
* Μικροαρχιτεκτονική Intel Sandy Bridge
**Intel Core i3
**Intel Core i5
**Intel Core i7

## Υλοποίηση της x86-64 από τη VIA

Ο **VIA Nano** (πρώην κωδική ονομασία: **VIA Isaiah**) είναι επεξεργαστής 64-bit για προσωπικούς υπολογιστές. Κυκλοφόρησε από τη VIA Technologies το 2008 μετά από πέντε χρόνια ανάπτυξης από τη μονάδα επεξεργαστών της, την Centaur Technology. Η νέα αρχιτεκτονική Isaiah των 64-bit σχεδιάστηκε από την αρχή και παρουσιάστηκε στις 24 Ιανουαρίου 2008, και κυκλοφόρησε στις 29 Μαΐου, περιλαμβάνοντας εκδόσεις χαμηλής τάσης (low-voltage) και την εμπορική ονομασία Nano. Ο επεξεργαστής υποστηρίζει κάποιες επεκτάσεις της x86 που οφείλονται στη VIA και έχουν σχεδιαστεί για να αυξάνουν την απόδοση του επεξεργαστή σε συσκευές χαμηλής κατανάλωσης. Ο VIA Isaiah αναμένεται να είναι δύο φορές πιο γρήγορος σε αριθμητικές πράξεις με ακεραίους και τέσσερις φορές πιο γρήγορος σε πράξεις με αριθμούς κινητής υποδιαστολής σε σχέση με την προηγούμενη γενιά VIA Esther, στην ίδια συχνότητα ρολογιού. Η κατανάλωση ενέργειας αναμένεται επίσης να είναι αντίστοιχη με αυτήν των προηγούμενων γενιών επεξεργαστών της VIA, μεταξύ 5&nbsp;W και 25&nbsp;W (thermal design power). Επειδή είναι εντελώς νέα σχεδίαση, η αρχιτεκτονική Isaiah κατασκευάστηκε με υποστήριξη για χαρακτηριστικά όπως το σύνολο εντολών x86-64 και η δυνατότητα εικονικής εκτέλεσης κώδικα για x86 (x86 virtualization), που δεν ήταν διαθέσιμα στους προηγούμενους επεξεργαστές, τη σειρά VIA C7, ενώ διατηρεί τις επεκτάσεις κρυπτογραφίας.

## Διαφορές μεταξύ AMD64 και Intel 64
Αν και τα δύο σύνολα εντολών είναι σχεδόν ίδια, υπάρχουν κάποιες διαφορές στη σημασία ορισμένων εντολών μηχανής που χρησιμοποιούνται σπάνια, κυρίως στον προγραμματισμό συστημάτων. Οι μεταγλωττιστές γενικά παράγουν εκτελέσιμα (κώδικα μηχανής) αποφεύγοντας τέτοιες διαφορές, τουλάχιστον στα συνηθισμένα προγράμματα. Επομένως αυτές οι διαφορές αφορούν κυρίως τους προγραμματιστές μεταγλωττιστών, λειτουργικών συστημάτων και παρόμοιου λογισμικού, που πρέπει να χειριστούν εξειδικευμένες εντολές του συστήματος.

### Πρόσφατες υλοποιήσεις
* Οι εντολές BSF και BSR της Intel&nbsp;64 λειτουργούν διαφορετικά όταν η πηγή (source) είναι 0 και το μέγεθος κάθε τελεστή είναι 32&nbsp;bit. Ο επεξεργαστής θέτει τη σημαία μηδέν και τα ανώτερα 32&nbsp;bit του προορισμού (destination) θεωρούνται μη ορισμένα (undefined).
* Η AMD64 απαιτεί διαφορετική μορφή για την ενημέρωση του μικροκώδικα και για τους εξειδικευμένους καταχωρητές κάθε μοντέλου (MSRs, model-specific registers) ενώ η Intel 64 υλοποιεί την ενημέρωση του μικροκώδικα όπως και τους επεξεργαστές 32-bit.
* Η Intel&nbsp;64 δεν έχει κάποιους MSRs που θεωρούνται μέρος της αρχιτεκτονικής στην AMD64. Τέτοιο καταχωρητές είναι ο SYSCFG, ο TOP_MEM και ο TOP_MEM2.
* Η Intel&nbsp;64 επιτρέπει τις SYSCALL και SYSRET μόνο σε κατάσταση 64-bit (όχι σε κατάσταση συμβατότητας). Επιτρέπει τις SYSENTER και SYSEXIT και στις δύο καταστάσεις.
* Η AMD64 δεν έχει SYSENTER και SYSEXIT και στις δύο υποκαταστάσεις της long mode.
* Τα κοντινά άλματα (near branches) με το πρόθεμα 66H (operand size override) συμπεριφέρονται διαφορετικά. Η Intel&nbsp;64 καθαρίζει μόνο τα άνω 32&nbsp;bit, ενώ η AMD64 καθαρίζει τα άνω 48&nbsp;bit.
* Οι επεξεργαστές της AMD προκαλούν μια εξαίρεση κινητής υποδιαστολής Invalid Exception όταν εκτελούν μια FLD ή FSTP σε μια ποσότητα 80-bit που είναι τιμή NaN (Not a Number, όχι αριθμός), ενώ οι επεξεργαστές της Intel δεν κάνουν κάτι τέτοιο.
* Η Intel&nbsp;64 δε μπορεί να σώζει και να επαναφέρει μια μερική έκδοση (και άρα γρηγορότερη) της κατάστασης κινητής υποδιαστολής (που περιλαμβάνει τις εντολές FXSAVE and FXRSTOR).
* Οι πρόσφατοι επεξεργαστές AMD64 έχουν προσθέσει πάλι δυνατότητες τμημάτων μνήμης (segmentation) για ευκολότερη εκτέλεση κώδικα (virtualization) συστημάτων 64-bit.

### Παλιότερες υλοποιήσεις
* Οι πρώτοι επεξεργαστές AMD64 δεν είχαν την εντολή CMPXCHG16B, η οποία είναι επέκταση της εντολής CMPXCHG8B που υπάρχει στους περισσότερους επεξεργαστές x86 μετά τον 80486. Όπως και η CMPXCHG8B, η CMPXCHG16B επιτρέπει ατομικές λειτουργίες (atomic operations) σε οκταδικές λέξεις. Αυτό χρησιμοποιείται στους παράλληλους αλγόριθμους που χρησιμοποιούν σύγκριση και αντιμετάθεση (compare and swap) σε δεδομένα μεγαλύτερα από το μέγεθος ενός δείκτη, κάτι που συνηθίζεται στους αλγόριθμους χωρίς κλείδωμα ή αναμονή (lock-free & wait-free). Αν δεν υπάρχει η CMPXCHG16B πρέπει να χρησιμοποιηθούν άλλοι, πλάγιοι τρόποι, όπως τα κρίσιμα τμήματα (critical sections) ή εναλλακτικές προσεγγίσεις χωρίς κλειδώματα.http://www.research.ibm.com/people/m/michael/disc-2004.pdf Αυτό δεν επιτρέπει στα Windows 64-bit να έχουν χώρο διευθύνσεων στην κατάσταση χρήστη μεγαλύτερο από 8&nbsp;TB.
* Οι πρώτοι επεξεργαστές AMD64 και Intel&nbsp;64 δεν είχαν τις εντολές LAHF και SAHF. Η AMD εισήγαγε τις εντολές στους επεξεργαστές Athlon&nbsp;64, Opteron και Turion&nbsp;64 τον Μάρτιο του 2005 ενώ η Intel παρουσίασε τις εντολές στον Pentium&nbsp;4&nbsp;G1 τον Δεκέμβριο του 2005.
* Οι πρώτοι επεξεργαστές της Intel&nbsp;64 δεν είχαν επίσης το NX bit της αρχιτεκτονικής AMD64.
* Οι πρώτες υλοποιήσεις της Intel&nbsp;64 επέτρεπαν την πρόσβαση μόνο σε 64&nbsp;GB φυσικής μνήμης ενώ οι αυθεντικές υλοποιήσεις της AMD64 επέτρεπαν την πρόσβαση σε 1&nbsp;TB πραγματικής μνήμης. Οι πρόσφατες υλοποιήσεις της AMD64 και της Intel&nbsp;64 παρέχουν πρόσβαση μέχρι και σε 256&nbsp;TB φυσικού χώρου διευθύνσεων (και η AMD σχεδιάζει την επέκτασή του στα 4&nbsp;PB.) Τέτοια μεγέθη μνήμης είναι κατάλληλα για εφαρμογές μεγάλης κλίμακας (όπως οι μεγάλες σε μέγεθος βάσεις δεδομένων), οι υπολογισμοί υψηλής ταχύτητας και οι επιστημονικοί υπολογισμοί.
* Η AMD64 αρχικά δεν είχε τις εντολές MONITOR και MWAIT.

## Παραπομπές


## Εξωτερικοί σύνδεσμοι
*AMD's AMD64 Developer Guides and Manuals 
*x86-64: Extending the x86 architecture to 64-bits - τεχνική ομιλία από τον αρχιτέκτονα του AMD64  (βίντεο), και δεύτερη ομιλία από τον ίδιο ομιλητή (βίντεο)  
*AMD's "Enhanced Virus Protection"  
*Intel tweaks EM64T for full AMD64 compatibility 
*Analyst: Intel Reverse-Engineered AMD64  
*Early report of differences between Intel IA32e and AMD64 
*Tech Report article: 64-bit computing in theory and practice 
*Intel 64 Architecture 

Κατηγορία:Αρχιτεκτονικές συνόλου εντολών
Κατηγορία:Μικροεπεξεργαστές