# AMD64

AMD64, altresì chiamata x86-64, è un'estensione a 64 bit del set di istruzioni x86, che è comune a tutti i processori desktop Intel e AMD più altre marche minori.

## Storia

L'estensione è stata introdotta da AMD con la sua linea di processori Athlon 64, e Intel ha reso poco dopo i suoi processori compatibili, chiamando però la tecnologia EM64T.

## Caratteristiche

L'estensione AMD64 porta numerosi vantaggi e alcuni svantaggi minori: lo spazio di memoria indirizzabile (visto che i puntatori passano da 32 a 64 bit) aumenta da 4 GiB a, teoricamente, 16 EiB. In pratica, i processori oggi sul mercato si limitano a 256 TiB. Inoltre il processore diventa in grado di gestire interi a 64 bit in modo nativo.
I processori a 32 bit possono gestire in modo nativo solo numeri interi fino a 2$^{32}$, dopodiché devono combinare più numeri in modo piuttosto complicato. Un processore a 64 bit sposta questo limite a 16 miliardi di miliardi. I calcoli in virgola mobile non vengono influenzati.

### Registri

L'architettura AMD64 ha 16 registri generici a 64 bit. I primi otto registri sono chiamati RAX, RBX, RCX, RDX, RSI, RDI, RBP ed RSP, e sono versioni ampliate dei corrispondenti registri x86: è possibile accedere solo alla parte meno significativa di essi usando i vecchi nomi di registro x86. Gli altri otto sono i "registri estesi" e vengono indicati con le sigle da R8 a R15.
* I nomi EAX, EBX, ECX, EDX, ESI, EDI, EBP ed ESP sono usati per accedere ai 32 bit meno significativi dei primi otto registri.
* I nomi a 16 bit AX, BX, CX, DX, SI, DI, BP ed SP sono ancora validi e si usano per accedere ai 16 bit meno significativi dei nuovi registri.
* I nomi AL, BL, CL, DL permettono l'accesso al byte meno significativo dei corrispondenti registri. Inoltre si può accedere al byte meno significativo dei registri indice (cosa non possibile negli x86) con i nomi SIL, DIL, BPL e SPL. Perciò, per esempio, SIL è il byte basso del registro indice RSI.
* I nomi AH, BH, CH, DH permettono di accedere al secondo byte di RAX, RBX, RCX e RDX (bit da 8 a 15) come era nei processori x86. Però i codici di queste istruzioni sono stati modificati nei processori AMD64 e confliggono con quelli necessari per accedere al byte più basso dei registri da R8 a R15: per cui non è possibile usare AH, BH, CH, DH insieme a R8B ... R15B nella stessa istruzione.
* I 32 bit meno significativi dei registri estesi sono indicati con (e acceduti come) i nomi da R8D a R15D; i 16 bit meno significativi sono invece indicati con i nomi da R8W a R15W, mentre il byte meno significativo come R8B ... R15B.
* Ci sono otto nuovi registri XMM a 128 bit, da XMM8 a XMM15. I registri MMX a 64 bit (da MM0 a MM7) sono ancora disponibili, e come negli x86 sono in comune con i registri della FPU x87 (ST0 ... ST7).
* L'instruction pointer IP è stato anch'esso esteso a 64 bit e ribattezzato RIP.

### Istruzioni

Come già accennato, il set di istruzioni è leggermente diverso da quello nativo x86. In particolare alcuni codici obsoleti meno usati (AAA, AAD, AAM, AAS, DAA, alcuni tipi di PUSH e POP e altri) sono stati riassegnati ad altre operazioni.
* Sono state ampliate le istruzioni esistenti per l'uso dei registri a 64 bit:
* Sono state introdotte nuove istruzioni stringa LODSQ, MOVSQ, COMPSQ, SCASQ, STOSQ per valori a 64 bit
* Le istruzioni LOOP e LOOPZ e i prefissi REP, REPZ, REPNZ usano RCX invece di ECX.
* L'istruzione XLATB usa RBX invece di EBX
* Sono state introdotte alcune nuove istruzioni di sistema
* Le istruzioni PUSH e POP incrementano/decrementano lo stack pointer di 8 anziché di 4
Alcune istruzioni AMD64 usano un indirizzamento relativo al RIP per recuperare i dati o il codice di cui hanno bisogno.

## Vantaggi

I vantaggi di una architettura 64-bit consistono principalmente nella velocizzazione dei calcoli con numeri che occupano spazio in ram maggiore di 32 bit, che nella precedente architettura 32-bit dovevano essere scomposti e poi ricomposti per essere elaborati. Anche l'evoluzione dei compilatori ha apportato un vantaggio significativo in performance ai programmi compilati per architettura 64-bit. L'aumento di quantità di memoria installabile poi, rappresenta un vantaggio irrinunciabile, sia in ambito multimediale (video editing, fotoritocco, ecc.) che in ambito videoludico.

## Compatibilità dei sistemi operativi
### Linux

Durante tutto il 2004 e l'inizio del 2005, solo i server Linux hanno utilizzato le estensioni x86-64, beneficiando soprattutto dal fatto di poter indirizzare più di 4 GB di memoria. Attualmente la maggior parte dei sistemi GNU/Linux supporta l'architettura a 64bit.

### Windows

A partire dal 25 aprile 2005, Microsoft ha messo in commercio una versione di Windows a 64 bit, permettendo ad una fascia più ampia di utenti di sfruttare i nuovi processori.

### Altri sistemi operativi

Attualmente anche altri sistemi operativi minormente diffusi dispongono di un'edizione specifica per questo tipo di processori (es. FreeBSD, NetBSD, OpenBSD, Solaris, ecc.).