x86-64 (también conocido como x64, x86_64, AMD64) es la versión de 64 bits del conjunto de instrucciones x86. Soporta una cantidad mucho mayor de memoria virtual y memoria física de lo que le es posible a sus predecesores, permitiendo a los programas almacenar grandes cantidades de datos en la memoria. x86-64 también provee registros de uso general de 64 bits y muchas otras mejoras. La especificación fue creada por AMD, y ha sido implementada por AMD, Intel, VIA y otros. Es totalmente retrocompatible con el código x86 de 16 y 32 bits.[1] : 13–14 Debido a que el juego de instrucciones x86 completo de 16 bits y 32 bits está implementado en hardware sin ningún tipo de emulación, los programas ejecutables x86 existentes pueden correr sin ningún tipo de penalización de velocidad o compatibilidad,[2] mientras que las aplicaciones existentes que fueron recodificadas para aprovechar las características del nuevo procesador, pueden alcanzar mejoras en el rendimiento.
Antes del lanzamiento, se usaron los nombres "x86-64" y "x86_64" para referirse al juego de instrucciones. Tras la publicación, AMD lo llamó "AMD64".[3] Intel inicialmente usó los nombres IA-32e y EM64T antes de utilizar "Intel 64" para su implementación. Algunos, incluido Apple,[4][5][6] usan "x86-64" y "x86_64", mientras que otros, notablemente Sun Microsystems[7] (ahora Oracle Corporation) y Microsoft,[8] usan "x64" mientras que la familia de sistemas operativos BSD y muchas distribuciones Linux[9][10] usan "AMD64".
El procesador AMD K8 fue el primero en implementar esta arquitectura; fue el primero en realizar un agregado importante a la arquitectura x86 diseñada por otra compañía que no era Intel. Intel se vio forzada a seguir su ejemplo y lanzar una familia NetBurst modificada la cual era totalmente compatible en software con la especificación y el diseño de AMD. VIA Technologies introdujo el x86-64 en su arquitectura VIA Isaiah con el VIA Nano.
La especificación x86-64 es diferente de la arquitectura del Intel Itanium (antiguamente "IA-64"), la cual no es compatible con el juego de instrucciones nativo de la arquitectura x86.
Se trata de una arquitectura desarrollada originalmente por AMD a partir de la arquitectura x86, e implementada bajo el nombre de AMD64. El primer procesador (para computadoras personales) con soporte para este conjunto de instrucciones fue el Opteron, lanzado en abril de 2003. Posteriormente ha sido implementado en múltiples variantes del Athlon 64 y posteriores.
La empresa Intel desarrolló una arquitectura compatible bajo el nombre Intel 64 (antes EM64T). La cual ha sido utilizada en el Pentium 4 y posteriores microprocesadores de la compañía.
El conjunto de instrucciones del AMD x86-64 (renombrado posteriormente como AMD64) es una extensión directa de la arquitectura del x86 a una arquitectura de 64 bits, motivado por el hecho de que los 4GB de memoria que son direccionables directamente por una CPU de 32 bits ya no es suficiente para todas las aplicaciones. Algunos de los cambios:
Modo de funcionamiento | Requerido por el Sistema Operativo | Es necesaria la recompilación de la aplicación | Tamaño por defecto del direccionamiento | Tamaño por defecto de los operandos | Extensiones del registro | Tamaño típico del Registro de Propósito General | |
---|---|---|---|---|---|---|---|
Modo largo | Modo 64 bits | SO nuevos de 64 bits | sí | 64 | 32 | sí | 64 |
Modo de compatibilidad |
no | 32 | no | 32 | |||
16 | 16 | 16 | |||||
Modo de Herencia |
Modo protegido | SO de 32 bit heredados | no | 32 | 32 | no | 32 |
16 | 16 | ||||||
Modo 8086 virtual | 16 | 16 | 16 | ||||
Modo real | SO de 16 bit heredados |
Hay dos modos primarios de operación para esta arquitectura:
Es el utilizado por algunos BSDs, GNU/Linux (x86_64), Solaris 10, y por las ediciones de 64 bits de Windows XP Professional, Windows Vista, Windows 7 y Windows 8.
Dado que el conjunto de instrucciones es el mismo, no hay una penalización importante en la ejecución del código x86. Esto no sucede en la arquitectura de Intel IA-64, donde las diferencias en el ISA subyacente implican que la ejecución de código de 32 bits equivale a utilizar un procesador completamente diferente. En todo caso, en AMD 64, las aplicaciones de 32 bits del x86 podrían todavía beneficiarse de una recompilación a 64 bits. Los registros adicionales disponibles en el código de 64 bits, pueden ser utilizados por un compilador de alto nivel para la optimización.
Usando el modo largo, un sistema operativo de 64 bits puede ejecutar aplicaciones de 32 bits y 64 bits simultáneamente. También un x86-64 incluye un soporte nativo para ejecutar las aplicaciones de 16 bits del x86. Microsoft ha excluido explícitamente el soporte para aplicaciones de 16 bits en la edición x64 de Windows XP Professional debido a los problemas de conseguir que el código de 16 bits del x86 pueda funcionar con su emulador WoW64.
El modo utilizado por los sistemas operativos de 16 bits, como MS-DOS, y los sistemas operativos de 32 bits, como Windows XP. En este modo, sólo se puede ejecutar código de 16 bits o de 32 bits. Los sistemas operativos de 64 bits como Windows XP Professional x64 y Windows Server 2003 x64 no se ejecutarán.
AMD64 representa un cambio con el pasado de AMD cuyo comportamiento era seguir los estándares de Intel, aunque mantiene los comportamientos anteriores de Intel extendiendo la arquitectura del x86, desde los 16 bits 8086 hasta los 32 bits 80386, siempre sin eliminar compatibilidad hacia atrás. La arquitectura del AMD64 extiende la arquitectura de 32 bits del x86 (IA-32) añadiendo registros de 64 bits, con modos de total compatibilidad de 32 bits y 16 bits para software ya existente. Incluso el modo de 64 bits permite compatibilidad hacia atrás, facilitando que las herramientas del x86 como los compiladores puedan ser adaptadas a la arquitectura AMD64 con un esfuerzo mínimo. La arquitectura del AMD64 dispone de características como el bit NX.
Los procesadores siguientes implementan la arquitectura AMD64:
Intel 64 (antes conocida como EM64T) es la implementación Intel de la tecnología x86-64.
Durante mucho tiempo de la historia, AMD ha producido y distribuido procesadores basados en los diseños originales de Intel, pero en un giro de la historia, Intel, al ver la oportunidad, adoptó la arquitectura x86-64 de AMD, creada como una extensión de la línea de procesadores x86 propios de Intel. Como AMD luego renombró su arquitectura a AMD64, Intel de igual manera renombró la suya a Intel 64.
Esta arquitectura está implementada en los siguientes modelos de procesadores:
Aunque existe un alto nivel de compatibilidad a nivel binario, se pueden encontrar pequeñas diferencias entre los dos conjuntos de instrucciones. Un ejemplo menor es el añadido de la instrucción CMPXCHG16B (que intercambia dos palabras de 64 bits), una extensión de la instrucción CMPXCHG8B presente en la mayoría de los procesadores x86 del mercado; los primeros procesadores AMD no disponían de esta instrucción, por lo tanto todos los procesadores EM64T la incluyeron.