Articulo de referencia

x86

[[Intel 386|i386]], [[Intel 486|i486]]: 4 KB pages [[P5 (microarchitecture)|P5]] [[Pentium]]: added 4 MB pages (Legacy [[Physical Address Extension|PAE]]: 4 KB→2&...

x86 (también conocido como 80x86 [ 1 ] o la familia 8086 ) [ 2 ] es una familia de arquitecturas de conjuntos de instrucciones de computadora de conjunto de instrucciones complejo (CISC) [ a ] ​​desarrolladas inicialmente por Intel , basadas en el microprocesador 8086 y su variante de bus externo de 8 bits, el 8088 . El 8086 se introdujo en 1978 como una extensión completa de 16 bits del microprocesador 8080 de 8 bits de Intel , con segmentación de memoria como solución para direccionar más memoria de la que puede cubrir una dirección simple de 16 bits. El término "x86" surgió porque los nombres de varios sucesores del procesador 8086 de Intel terminan en "86", incluidos el 80186 , 80286 , 80386 y 80486 . Coloquialmente, sus nombres eran "186", "286", "386" y "486".

El término no es sinónimo de compatibilidad con IBM PC , ya que esto implica una multitud de otros equipos informáticos . Los sistemas embebidos y los ordenadores de propósito general utilizaban chips x86 antes de que comenzara el mercado de compatibilidad con PC , [ b ] algunos de ellos antes del debut del IBM PC (1981).

A fecha de junio de 2022 La mayoría de las computadoras de escritorio y portátiles vendidas se basan en la familia de arquitectura x86, [ 3 ] mientras que las categorías de dispositivos móviles, como teléfonos inteligentes o tabletas, están dominadas por ARM . En la gama alta, x86 continúa dominando los segmentos de estaciones de trabajo de computación intensiva y computación en la nube . [ 4 ]

Descripción general

En los años ochenta y principios de los noventa, cuando los procesadores 8088 y 80286 aún eran de uso común, el término x86 generalmente se refería a cualquier CPU compatible con el 8086. Sin embargo, hoy en día, x86 suele implicar compatibilidad binaria con el conjunto de instrucciones de 32 bits del 80386. Esto se debe a que dicho conjunto de instrucciones se ha convertido en una especie de mínimo común denominador para muchos sistemas operativos modernos y, probablemente, también a que el término se popularizó tras la introducción del 80386 en 1985.

Unos años después de la introducción de los 8086 y 8088, Intel añadió cierta complejidad a su esquema de nombres y terminología, ya que el "iAPX" del ambicioso pero desafortunado procesador Intel iAPX 432 se probó en la más exitosa familia de chips 8086, [ c ] aplicado como una especie de prefijo a nivel de sistema. Un sistema 8086, incluyendo coprocesadores como el 8087 y el 8089 , y chips de sistema más simples específicos de Intel, [ d ] se describió así como un sistema iAPX 86. [ 5 ] [ e ] También existían los términos iRMX (para sistemas operativos), iSBC (para computadoras de placa única) e iSBX (para placas multimodulares basadas en la arquitectura 8086), todos juntos bajo el encabezado Microsistema 80. [ 6 ] [ 7 ] Sin embargo, este esquema de nombres fue bastante temporal, durando unos pocos años a principios de la década de 1980. [ f ]

Aunque el 8086 se desarrolló principalmente para sistemas embebidos y pequeñas computadoras multiusuario o monousuario, en gran medida como respuesta al exitoso Zilog Z80 compatible con el 8080 , [ 8 ] la línea x86 pronto creció en características y potencia de procesamiento. Hoy en día, x86 es omnipresente tanto en computadoras personales de escritorio como portátiles, y también se utiliza en consolas de videojuegos , computadoras de gama media , estaciones de trabajo , servidores y la mayoría de los nuevos clústeres de supercomputadoras de la lista TOP500 . Una gran cantidad de software , incluyendo una larga lista de sistemas operativos x86, utiliza hardware basado en x86.

El x86 moderno es relativamente poco común en sistemas embebidos ; sin embargo, las aplicaciones pequeñas de bajo consumo (que utilizan baterías diminutas) y los mercados de microprocesadores de bajo costo, como los electrodomésticos y los juguetes, carecen de una presencia significativa de x86. [ g ] Las arquitecturas simples basadas en 8 y 16 bits son comunes aquí, así como arquitecturas RISC más simples como ARM y RISC-V , aunque el VIA C7 compatible con x86 , VIA Nano , AMD Geode , Athlon Neo e Intel Atom son ejemplos de diseños de 32 y 64 bits utilizados en algunos segmentos de consumo y costo relativamente bajos.

Se han realizado varios intentos, incluso por parte de Intel, para acabar con el dominio del mercado de la arquitectura x86, considerada poco elegante y diseñada directamente a partir de los primeros microprocesadores simples de 8 bits. Ejemplos de ello son el iAPX 432 (un proyecto originalmente denominado Intel 8800 [ 9 ] ), el Intel 960 , el Intel 860 y la arquitectura Itanium de Intel/Hewlett-Packard . Sin embargo, el continuo perfeccionamiento de las microarquitecturas , los circuitos y la fabricación de semiconductores x86 dificultaría su sustitución en muchos segmentos. La extensión de 64 bits de x86 por parte de AMD (a la que Intel respondió posteriormente con un diseño compatible) [ 10 ] y la escalabilidad de los chips x86 en forma de modernas CPU multinúcleo, convierten a x86 en un ejemplo de cómo el perfeccionamiento continuo de los estándares industriales establecidos puede resistir la competencia de arquitecturas completamente nuevas. [ 11 ]

Para algunas funciones avanzadas, la arquitectura x86 puede requerir una licencia de Intel, aunque algunas no la necesitan; la arquitectura x86-64 puede requerir una licencia adicional de AMD.

Cronología

La siguiente tabla enumera los modelos y series de procesadores que implementan diversas arquitecturas de la familia x86, en orden cronológico. Cada elemento se caracteriza por diseños de microarquitectura de procesador significativamente mejorados o de éxito comercial.

Historia

Diseñadores y fabricantes

Am386 , lanzado por AMD en 1991.

En distintos momentos, empresas como IBM , VIA , NEC , [ h ] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC y DM&P comenzaron a diseñar o fabricar [ i ] procesadores x86 (CPU) destinados a ordenadores personales y sistemas embebidos. Otras empresas que diseñaron o fabricaron procesadores x86 o x87 incluyen ITT Corporation , National Semiconductor , ULSI System Technology y Weitek .

Estas implementaciones x86 rara vez eran simples copias, sino que a menudo empleaban microarquitecturas internas diferentes y soluciones distintas a nivel electrónico y físico. Como es lógico, los primeros microprocesadores compatibles eran de 16 bits, mientras que los diseños de 32 bits se desarrollaron mucho más tarde. Para el mercado de las computadoras personales , comenzaron a aparecer cantidades significativas alrededor de 1990 con los procesadores compatibles i386 e i486 , a menudo con nombres similares a los de los chips originales de Intel.

Después del i486 totalmente segmentado , en 1993 Intel introdujo la marca Pentium (que, a diferencia de los números, podía registrarse como marca comercial ) para su nuevo conjunto de diseños superescalares x86. Con el esquema de nombres x86 ahora legalmente aprobado, otros proveedores de x86 tuvieron que elegir nombres diferentes para sus productos compatibles con x86, e inicialmente algunos optaron por continuar con variaciones del esquema de numeración: IBM se asoció con Cyrix para producir el 5x86 y luego las muy eficientes líneas 6x86 (M1) y 6x86 MX ( MII ) de diseños de Cyrix, que fueron los primeros microprocesadores x86 que implementaron el cambio de nombre de registros para permitir la ejecución especulativa .

Mientras tanto, AMD diseñó y fabricó el avanzado pero retrasado 5k86 ( K5 ), que, internamente, se basaba en gran medida en el diseño RISC 29K anterior de AMD ; de forma similar al Nx586 de NexGen , utilizaba una estrategia en la que las etapas de la tubería dedicadas decodificaban las instrucciones x86 en microoperaciones uniformes y fáciles de manejar , un método que ha seguido siendo la base de la mayoría de los diseños x86 hasta el día de hoy.

Algunas versiones iniciales de estos microprocesadores presentaban problemas de disipación de calor. El 6x86 también se vio afectado por algunos problemas menores de compatibilidad, el Nx586 carecía de una unidad de punto flotante (FPU) y de compatibilidad de pines (que en aquel entonces era crucial), mientras que el K5 tuvo un rendimiento algo decepcionante cuando finalmente se lanzó al mercado.

El desconocimiento de los clientes sobre las alternativas a la serie Pentium contribuyó aún más a que estos diseños fueran relativamente poco exitosos, a pesar de que el K5 tenía muy buena compatibilidad con Pentium y el 6x86 era significativamente más rápido que el Pentium en código entero. [ j ] Posteriormente, AMD logró convertirse en un serio competidor con la serie de procesadores K6 , que dio paso a los muy exitosos Athlon y Opteron .

También hubo otros competidores, como Centaur Technology (antes IDT ), Rise Technology y Transmeta . Los procesadores C3 y C7 de bajo consumo energético de VIA Technologies , diseñados por la empresa Centaur , se vendieron durante muchos años después de su lanzamiento en 2005. El diseño de Centaur de 2008, el VIA Nano , fue su primer procesador con ejecución superescalar y especulativa . Se presentó casi al mismo tiempo (en 2008) que Intel presentó el Intel Atom , su primer procesador "en orden" después del Pentium P5 .

Se han añadido muchas adiciones y extensiones al conjunto de instrucciones x86 original a lo largo de los años, casi siempre con compatibilidad retroactiva total . [ k ] La familia de arquitectura se ha implementado en procesadores de Intel, Cyrix , AMD , VIA Technologies y muchas otras compañías; también hay implementaciones abiertas, como la plataforma Zet SoC (actualmente inactiva). [ 14 ] Sin embargo, de estas, solo Intel, AMD, VIA Technologies y DM&P Electronics poseen licencias de arquitectura x86, y de estas, solo las dos primeras producen activamente diseños modernos de 64 bits, lo que ha dado lugar a lo que se ha denominado un "duopolio" de Intel y AMD en procesadores x86.

Sin embargo, en 2014, la empresa china Zhaoxin , con sede en Shanghái , una empresa conjunta entre una empresa china y VIA Technologies, comenzó a diseñar procesadores x86 basados ​​en VIA para ordenadores de sobremesa y portátiles. El lanzamiento de su nueva familia "7" [ 15 ] de procesadores x86 (por ejemplo, KX-7000), que no son tan rápidos como los chips de AMD o Intel, pero que siguen siendo de última generación, [ 16 ] estaba previsto para 2021; sin embargo, en marzo de 2022 el lanzamiento no se había producido. [ 17 ]

De arquitectura de 16 bits y 32 bits a arquitectura de 64 bits.

La arquitectura del conjunto de instrucciones se ha ampliado dos veces a un tamaño de palabra mayor . En 1985, Intel lanzó el 80386 de 32 bits (más tarde conocido como i386), que gradualmente reemplazó a los chips de 16 bits anteriores en las computadoras (aunque normalmente no en sistemas embebidos ) durante los años siguientes; este modelo de programación extendido se denominó originalmente arquitectura i386 (como su primera implementación), pero Intel más tarde lo llamó IA-32 al presentar su arquitectura IA-64 (sin relación con la anterior) .

Entre 1999 y 2003, AMD extendió esta arquitectura de 32 bits a 64  bits y la denominó x86-64 en los primeros documentos y posteriormente AMD64 . Intel pronto adoptó las extensiones arquitectónicas de AMD bajo el nombre IA-32e, luego EM64T y finalmente Intel 64. Microsoft y Sun Microsystems / Oracle también utilizan el término "x64", mientras que muchas distribuciones de Linux y las BSD también utilizan el término "amd64". Microsoft Windows, por ejemplo, designa sus versiones de 32 bits como "x86" y las de 64 bits como "x64", mientras que los archivos de instalación de las versiones de Windows de 64 bits deben colocarse en un directorio llamado "AMD64". [ 18 ]

Compatibilidad continua con los modos de ejecución de 16 y 32 bits.

En 2023, Intel propuso un cambio importante en la arquitectura conocida como X86S (anteriormente llamada X86-S). La "S" de X86S significaba "simplificación" y tenía como objetivo eliminar la compatibilidad con los modos de ejecución e instrucciones heredados.

Un procesador que implementara esta propuesta no habría tenido soporte para el modo heredado , habría iniciado la ejecución directamente en modo largo y habría proporcionado una forma de cambiar a la paginación de 5 niveles sin pasar por el modo sin paginar.

La nueva arquitectura habría eliminado la compatibilidad con sistemas operativos de 16 y 32 bits. El código de 32 bits solo habría sido compatible con aplicaciones de usuario que se ejecutaban en el anillo 3, y habría utilizado la misma segmentación simplificada que el modo largo. [ 19 ] [ 20 ]

Las características específicas eliminadas habrían incluido: [ 21 ]

  • Compuertas de segmentación
  • anillo de 32 bits 0
    • VT-x ya no emulará esta función.
  • Anillos 1 y 2
  • Acceso al puerto de E/S del anillo 3 ( ENTRADA / SALIDA ); consulte E/S mapeada por puerto
  • Puerto de cadena E/S ( ENTRAS / SALIDAS )
  • Modo real (incluido el modo real enorme ), modo protegido de 16 bits, VM86
  • Modo de direccionamiento de 16 bits
    • VT-x ya no proporcionará modo sin restricciones
  • Compatibilidad con 8259 ; el único APIC compatible sería X2APIC.
  • Algunos bits del modo del sistema operativo no utilizados
  • IPI de inicio de 16 bits y 32 bits (SIPI)

La especificación preliminar recibió múltiples actualizaciones, alcanzando la versión 1.2 en junio de 2024. Finalmente, se abandonó en diciembre de 2024, tras la formación del Grupo Asesor del Ecosistema x86 por parte de Intel y AMD. [ 22 ]

Propiedades básicas de la arquitectura

La arquitectura x86 es de longitud de instrucción variable, principalmente un diseño " CISC " con énfasis en la retrocompatibilidad . Sin embargo, el conjunto de instrucciones no es el típico CISC, sino básicamente una versión extendida de las arquitecturas simples de ocho bits 8008 y 8080. El direccionamiento por bytes está habilitado y las palabras se almacenan en memoria con orden de bytes little-endian . Se permite el acceso a memoria a direcciones no alineadas para casi todas las instrucciones. El tamaño nativo más grande para la aritmética de enteros y las direcciones de memoria (o desplazamientos ) es de 16, 32 o 64  bits dependiendo de la generación de la arquitectura (los procesadores más nuevos también incluyen soporte directo para enteros más pequeños). Se pueden manejar múltiples valores escalares simultáneamente a través de la unidad SIMD presente en generaciones posteriores, como se describe a continuación. [ l ] Los desplazamientos de direccionamiento inmediatos y los datos inmediatos pueden expresarse como cantidades de 8 bits para los casos o contextos frecuentes donde un rango de −128..127 es suficiente. Por lo tanto, las instrucciones típicas tienen una longitud de 2 o 3 bytes (aunque algunas son mucho más largas y otras son de un solo byte).

Para conservar aún más el espacio de codificación, la mayoría de los registros se expresan en códigos de operación usando tres o cuatro bits, estos últimos mediante un prefijo de código de operación en modo de 64 bits, mientras que como máximo un operando de una instrucción puede ser una ubicación de memoria. [ m ] Sin embargo, este operando de memoria también puede ser el destino (o una combinación de origen y destino), mientras que el otro operando, el origen, puede ser un registro o un valor inmediato. Entre otros factores, esto contribuye a un tamaño de código que rivaliza con el de las máquinas de ocho bits y permite un uso eficiente de la memoria caché de instrucciones. El número relativamente pequeño de registros generales (también heredado de sus antecesores de 8 bits) ha hecho que el direccionamiento relativo a registros (usando pequeños desplazamientos inmediatos) sea un método importante para acceder a los operandos, especialmente en la pila. Por lo tanto, se ha invertido mucho trabajo en hacer que dichos accesos sean tan rápidos como los accesos a registros, es decir, un rendimiento de instrucción de un ciclo, en la mayoría de las circunstancias en las que los datos a los que se accede están disponibles en la caché de nivel superior.

Punto flotante y SIMD

Para el 8086 original se desarrolló un procesador de punto flotante dedicado con registros internos de 80 bits, el 8087. Este microprocesador evolucionó posteriormente al 80387 extendido , y los procesadores posteriores incorporaron una versión retrocompatible de esta funcionalidad en el mismo microprocesador que el procesador principal. Además, los diseños x86 modernos también contienen una unidad SIMD (véase SSE más abajo) donde las instrucciones pueden trabajar en paralelo en (una o dos) palabras de 128 bits, cada una con dos o cuatro números de punto flotante (de 64 o 32 bits respectivamente), o bien, 2, 4, 8 o 16 enteros (de 64, 32, 16 u 8 bits respectivamente).  

La presencia de registros SIMD de gran tamaño permite que los procesadores x86 actuales carguen o almacenen hasta 128  bits de datos de memoria en una sola instrucción y realicen operaciones bit a bit (aunque no aritmética de enteros [ n ] ) en cantidades completas de 128 bits en paralelo. Los procesadores Sandy Bridge de Intel añadieron las instrucciones de Extensiones Vectoriales Avanzadas (AVX), ampliando los registros SIMD a 256 bits. Las instrucciones Intel Initial Many Core implementadas por los procesadores Xeon Phi Knights Corner y las instrucciones AVX-512 implementadas por los procesadores Xeon Phi Knights Landing y por los procesadores Skylake-X utilizan registros SIMD de 512 bits.

Implementaciones actuales

Durante la ejecución , los procesadores x86 actuales emplean algunos pasos de decodificación adicionales para dividir la mayoría de las instrucciones en piezas más pequeñas llamadas microoperaciones. Estas se entregan luego a una unidad de control que las almacena en búfer y las programa de acuerdo con la semántica x86 para que puedan ser ejecutadas, parcialmente en paralelo, por una de varias unidades de ejecución (más o menos especializadas) . Estos diseños x86 modernos son, por lo tanto , segmentados , superescalares y también capaces de ejecución fuera de orden y especulativa (a través de predicción de bifurcaciones , cambio de nombre de registros y predicción de dependencia de memoria ), lo que significa que pueden ejecutar múltiples instrucciones x86 (parciales o completas) simultáneamente, y no necesariamente en el mismo orden que se da en el flujo de instrucciones. [ 23 ] Algunas CPU Intel ( Xeon Foster MP , algunos Pentium 4 y algunos procesadores Nehalem y posteriores Intel Core ) y CPU AMD (a partir de Zen ) también son capaces de multihilo simultáneo con dos hilos por núcleo ( Xeon Phi tiene cuatro hilos por núcleo). Algunos procesadores Intel admiten memoria transaccional ( TSX ).

Cuando se introdujo a mediados de la década de 1990, este método se denominó a veces "núcleo RISC" o "traducción RISC", en parte por motivos de marketing, pero también porque estas microoperaciones comparten algunas propiedades con ciertos tipos de instrucciones RISC. Sin embargo, el microcódigo tradicional (utilizado desde la década de 1950) también comparte intrínsecamente muchas de las mismas propiedades; el nuevo método se diferencia principalmente en que la traducción a microoperaciones ahora se realiza de forma asíncrona. No tener que sincronizar las unidades de ejecución con los pasos de decodificación abre posibilidades para un mayor análisis del flujo de código (almacenado en búfer) y, por lo tanto, permite la detección de operaciones que pueden realizarse en paralelo, alimentando simultáneamente a más de una unidad de ejecución.

Los procesadores más recientes también hacen lo contrario cuando es apropiado; combinan ciertas secuencias x86 (como una comparación seguida de un salto condicional) en una microoperación más compleja que se ajusta mejor al modelo de ejecución y, por lo tanto, se puede ejecutar más rápido o con menos recursos de la máquina.

Otra forma de intentar mejorar el rendimiento es almacenar en caché las microoperaciones decodificadas, de modo que el procesador pueda acceder directamente a ellas desde una caché especial, en lugar de decodificarlas de nuevo. Intel adoptó este enfoque con la función Execution Trace Cache en su microarquitectura NetBurst (para procesadores Pentium 4) y posteriormente en el Decoded Stream Buffer (para procesadores Core desde Sandy Bridge). [ 24 ]

Transmeta empleó un método completamente diferente en sus CPU Crusoe compatibles con x86. Utilizaron la traducción justo a tiempo (JIT) para convertir las instrucciones x86 al conjunto de instrucciones VLIW nativo de la CPU . Transmeta argumentó que su enfoque permite diseños más eficientes energéticamente, ya que la CPU puede prescindir del complejo paso de decodificación de las implementaciones x86 más tradicionales.

Modos de direccionamiento

Los modos de direccionamiento para los modos de procesador de 16 bits se pueden resumir mediante la fórmula: [ 25 ] [ 26 ]

doS:DS:SS:miS:  [BincógnitaBPAG]+[SIDI]+dispagladomimetrominortet{\displaystyle {\begin{matrix}{\mathtt {CS}}:\\{\mathtt {DS}}:\\{\mathtt {SS}}:\\{\mathtt {ES}}:\end{matrix}}\ \ {\begin{matrix}\\{\begin{bmatrix}{\mathtt {BX}}\\{\mathtt {BP}}\end{bmatrix}}+{\begin{bmatrix}{\mathtt {SI}}\\{\mathtt {DI}}\end{bmatrix}}\\\\\end{matrix}}+{\rm {desplazamiento}}}

Los modos de direccionamiento para los modos de procesador x86 de 32 bits [ 27 ] se pueden resumir mediante la fórmula: [ 28 ]

doS:DS:SS:miS:FS:GRAMOS:  [miAincógnitamiBincógnitamidoincógnitamiDincógnitamiSPAGmiBPAGmiSImiDI]+([miAincógnitamiBincógnitamidoincógnitamiDincógnitamiBPAGmiSImiDI][1248])+dispagladomimetrominortet{\displaystyle {\begin{matrix}{\mathtt {CS}}:\\{\mathtt {DS}}:\\{\mathtt {SS}}:\\{\mathtt {ES}}:\\{\mathtt {FS}}:\\{\mathtt {GS}}:\end{matrix}}\ \ {\begin{bmatrix}{\mathtt {EAX}}\\{\mathtt {EBX}}\\{\mathtt {ECX}}\\{\mathtt {EDX}}\\{\mathtt {ESP}}\\{\mathtt {EBP}}\\{\mathtt {ESI}}\\{\mathtt {EDI}}\end{bmatrix}}+{\begin{pmatrix}\\{\begin{bmatrix}{\mathtt {EAX}}\\{\mathtt {EBX}}\\{\mathtt {ECX}}\\{\mathtt {EDX}}\\{\mathtt {EBP}}\\{\mathtt {ESI}}\\{\mathtt {EDI}}\end{bmatrix}}*{\begin{bmatrix}1\\2\\4\\8\end{bmatrix}}\\\\\end{pmatrix}}+{\rm {desplazamiento}}}

Los modos de direccionamiento para el modo de procesador de 64 bits se pueden resumir mediante la fórmula: [ 28 ]

{FS:GRAMOS:  [GRAMOPAGR]+([GRAMOPAGR][1248])RIPAG}+dispagladomimetrominortet{\displaystyle {\begin{Bmatrix}\\{\begin{matrix}{\mathtt {FS}}:\\{\mathtt {GS}}:\end{matrix}}\ \ {\begin{bmatrix}\vdots \\{\mathtt {GPR}}\\\vdots \end{bmatrix}}+{\begin{pmatrix}\\{\begin{bmatrix}\vdots \\{\mathtt {GPR}}\\\vdots \\\end{bmatrix}}*{\begin{bmatrix}1\\2\\4\\8\end{bmatrix}}\\\\\end{pmatrix}}\\\\\hline \\{\begin{matrix}{\mathtt {RIP}}\end{matrix}}\\\\\end{Bmatrix}}+{\rm {desplazamiento}}}

El direccionamiento relativo a instrucciones en código de 64 bits (RIP + desplazamiento, donde RIP es el registro del puntero de instrucciones ) simplifica la implementación de código independiente de la posición (como el que se usa en las bibliotecas compartidas de algunos sistemas operativos). [ 29 ]

Registros x86

16 bits

Los procesadores Intel 8086 y 8088 originales tienen catorce registros de 16 bits . Cuatro de ellos (AX, BX, CX, DX) son registros de propósito general (GPR), aunque cada uno puede tener una función adicional; por ejemplo, solo CX puede usarse como contador con la instrucción loop. Se puede acceder a cada uno como dos bytes separados (así, se puede acceder al byte alto de BX como BH y al byte bajo como BL). Dos registros de puntero tienen funciones especiales: SP (puntero de pila) apunta a la parte superior de la pila , y BP (puntero base) se usa a menudo para apuntar a algún otro lugar en la pila, normalmente por encima de las variables locales (ver puntero de marco ). Los registros SI, DI, BX y BP son registros de direcciones y también pueden usarse para la indexación de matrices.

Para formar una dirección de memoria se utiliza uno de los cuatro registros de segmento posibles (CS, DS, SS y ES). En los procesadores 8086, 8088, 80186 y 80188 originales, cada dirección se construía a partir de un registro de segmento y uno de los registros de propósito general. Por ejemplo, ds:si es la notación para una dirección formada como [16 * ds + si], lo que permite el direccionamiento de 20 bits en lugar de 16, aunque esto cambió en procesadores posteriores. En aquel entonces, solo se admitían ciertas combinaciones.

El registro FLAGS contiene indicadores como el indicador de acarreo , el indicador de desbordamiento y el indicador de cero . Finalmente, el puntero de instrucción (IP) apunta a la siguiente instrucción que se obtendrá de la memoria y luego se ejecutará; este registro no puede ser accedido directamente (leído o escrito) por un programa. [ 30 ]

El 8086 tiene64  KB de ocho bits (o alternativamente32  K-word de espacio de E/S de 16 bits y un Pila de 64 KB (un segmento) en memoria compatible con hardware de computadora . Solo se pueden insertar palabras (dos bytes) en la pila. La pila crece hacia direcciones numéricamente más bajas, con SS:SP apuntando al elemento insertado más recientemente. Hay 256 interrupciones , que pueden ser invocadas tanto por hardware como por software. Las interrupciones pueden propagarse en cascada, utilizando la pila para almacenar el estado y la dirección de retorno .

Los procesadores Intel 80186 y 80188 son esencialmente una versión mejorada de la CPU 8086 o 8088, respectivamente, con periféricos integrados, y tienen los mismos registros de CPU que los 8086 y 8088 (además de los registros de interfaz para los periféricos).

Los procesadores 8086, 8088, 80186 y 80188 pueden usar un coprocesador de punto flotante opcional, el 8087. El 8087 aparece para el programador como parte de la CPU y agrega ocho registros de 80 bits de ancho, st(0) a st(7), cada uno de los cuales puede almacenar datos numéricos en uno de siete formatos: punto flotante de 32, 64 u 80 bits, entero binario de 16, 32 o 64 bits, y entero decimal empaquetado de 80 bits. [ 7 ] : S-6, S-13..S-15 También tiene su propio registro de estado de 16 bits accesible a través de la instrucción fstsw , y es común simplemente usar algunos de sus bits para bifurcaciones copiándolos en los FLAGS normales. [ 31 ]

En el Intel 80286 , para admitir el modo protegido , tres registros especiales almacenan las direcciones de la tabla de descriptores (GDTR, LDTR, IDTR ), y un cuarto registro de tareas (TR) se utiliza para la conmutación de tareas. El 80287 es el coprocesador de punto flotante del 80286 y tiene los mismos registros que el 8087 con los mismos formatos de datos.

32 bits

Registros disponibles en el conjunto de instrucciones x86-64

Con la llegada del procesador 80386 de 32 bits , los registros de propósito general de 16 bits, los registros base, los registros índice, el puntero de instrucción y el registro FLAGS , pero no los registros de segmento, se ampliaron a 32  bits. La nomenclatura representó esto anteponiendo una " E " (de "extendido") a los nombres de los registros en lenguaje ensamblador x86 . Así, el registro AX corresponde a los 16  bits inferiores del nuevo registro EAX de 32 bits, SI corresponde a los 16  bits inferiores de ESI, y así sucesivamente. Los registros de propósito general, los registros base y los registros índice pueden usarse como base en los modos de direccionamiento, y todos esos registros, excepto el puntero de pila, pueden usarse como índice en los modos de direccionamiento.

Se añadieron dos nuevos registros de segmento (FS y GS). Con un mayor número de registros, instrucciones y operandos, se amplió el formato del código máquina . Para garantizar la compatibilidad con versiones anteriores, los segmentos con código ejecutable pueden marcarse como si contuvieran instrucciones de 16 o 32 bits. Prefijos especiales permiten incluir instrucciones de 32 bits en un segmento de 16 bits, o viceversa.

El 80386 tenía un coprocesador de punto flotante opcional, el 80387 ; tenía ocho registros de 80 bits de ancho: st(0) a st(7), [ 32 ] como el 8087 y el 80287. El 80386 también podía usar un coprocesador 80287. [ 33 ] El 80486 estaba disponible con una unidad de procesamiento de punto flotante (FPU) integrada y sin ella. Todos los modelos x86 posteriores tienen la FPU integrada.

El Pentium MMX añadió ocho registros vectoriales enteros MMX de 64 bits (MM0 a MM7, que comparten los bits inferiores con la pila FPU de 80 bits de ancho). [ 34 ] Con el Pentium III , Intel añadió un registro de control/estado de Streaming SIMD Extensions (SSE) de 32 bits (MXCSR) y ocho registros de punto flotante SSE de 128 bits (XMM0 a XMM7). [ 35 ]

64 bits

A partir del procesador AMD Opteron , la arquitectura x86 extendió los registros de 32 bits a registros de 64 bits de forma similar a como se realizó la extensión de 16 a 32 bits. Un prefijo R (de "registro") identifica los registros de 64 bits (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), y también se introdujeron ocho registros generales adicionales de 64 bits (R8–R15) en la creación de x86-64 . Además, se agregaron ocho registros vectoriales SSE más (XMM8–XMM15). Sin embargo, estas extensiones solo se pueden usar en modo de 64 bits, que es uno de los dos modos disponibles únicamente en modo largo . Los modos de direccionamiento no sufrieron cambios drásticos con respecto al modo de 32 bits, salvo que el direccionamiento se extendió a 64  bits, las direcciones virtuales ahora tienen un signo extendido a 64  bits (para evitar que los bits de modo aparezcan en las direcciones virtuales) y otros detalles del selector se redujeron considerablemente. Además, se añadió un modo de direccionamiento para permitir referencias de memoria relativas al RIP ( puntero de instrucción ), lo que facilita la implementación de código independiente de la posición , utilizado en bibliotecas compartidas en algunos sistemas operativos.

128 bits

Registros SIMD XMM0–XMM15 (XMM0–XMM31 cuando se admite AVX-512 ).

256 bits

Registros SIMD YMM0–YMM15 (YMM0–YMM31 cuando se admite AVX-512 ). La mitad inferior de cada uno de los registros YMM se corresponde con el registro XMM correspondiente.

512 bits

Registros SIMD ZMM0–ZMM31. La mitad inferior de cada uno de los registros ZMM se corresponde con el registro YMM correspondiente.

Varios/para fines especiales

Los procesadores x86 que tienen un modo protegido , es decir, los procesadores 80286 y posteriores, también tienen tres registros descriptores (GDTR, LDTR, IDTR ) y un registro de tareas (TR).

Los procesadores x86 de 32 bits (a partir del 80386) también incluyen varios registros especiales/misceláneos, como registros de control (CR0 a 4, CR8 solo para 64 bits), registros de depuración (DR0 a 3, más 6 y 7), registros de prueba (TR3 a 7; solo 80486) y registros específicos del modelo (MSR, que aparecen con el Pentium [ o ] ).

AVX-512 dispone de ocho registros de máscara adicionales de 64 bits (K0-K7) para seleccionar elementos en un registro vectorial. Dependiendo del registro vectorial y del ancho de los elementos, una instrucción determinada solo podrá utilizar un subconjunto de bits del registro de máscara.

Objetivo

Aunque los registros principales (con la excepción del puntero de instrucción) son de "propósito general" en las versiones de 32 y 64 bits del conjunto de instrucciones y pueden usarse para cualquier cosa, originalmente se previó que se usaran para los siguientes propósitos:

  • AL/AH/AX/EAX/RAX: Acumulador
  • CL/CH/CX/ECX/RCX: Contador (para usar con bucles y cadenas)
  • DL/DH/DX/EDX/RDX: Amplía la precisión del acumulador (por ejemplo, combina EAX y EDX de 32 bits para operaciones con enteros de 64 bits en código de 32 bits).
  • BL/BH/BX/EBX/RBX: Índice base (para usar con matrices)
  • SP/ESP/RSP: Puntero de pila para la dirección superior de la pila.
  • BP/EBP/RBP: Puntero base de pila para almacenar la dirección del marco de pila actual .
  • SI/ESI/RSI: Índice de origen para operaciones con cadenas de caracteres .
  • DI/EDI/RDI: Índice de destino para operaciones con cadenas de caracteres.
  • IP/EIP/RIP: Puntero de instrucción. Contiene el contador de programa y la dirección de la siguiente instrucción.

Registros de segmento:

  • CS: Código
  • DS: Datos
  • SS: Pila
  • ES: Datos adicionales
  • FS: Datos adicionales n.° 2
  • GS: Datos adicionales n.º 3

No se previeron propósitos específicos para los otros 8 registros disponibles únicamente en modo de 64 bits.

Algunas instrucciones se compilan y ejecutan de forma más eficiente al usar estos registros para el propósito para el que fueron diseñados. Por ejemplo, usar AL como acumulador y sumarle un valor de byte inmediato produce la operación de suma eficiente a AL (código 04h), mientras que usar el registro BL produce la operación de suma a registro genérica y más larga (código 80C3h). Otro ejemplo es la división y multiplicación de doble precisión, que funciona específicamente con los registros AX y DX.

Los compiladores modernos se beneficiaron de la introducción del byte sib ( byte base de índice de escala ) que permite tratar los registros de forma uniforme ( como en las minicomputadoras ). Sin embargo, usar el byte sib universalmente no es óptimo, ya que produce codificaciones más largas que si se usa selectivamente solo cuando es necesario. (La principal ventaja del byte sib es la ortogonalidad y los modos de direccionamiento más potentes que proporciona, lo que permite ahorrar instrucciones y el uso de registros para cálculos de direcciones, como el escalado de un índice). Algunas instrucciones especiales perdieron prioridad en el diseño del hardware y se volvieron más lentas que secuencias de código pequeñas equivalentes. Un ejemplo notable es la instrucción LODSW.

Estructura

Nota: Los registros PL solo están disponibles en modo de 64 bits.

Nota: Los registros ?IL solo están disponibles en modo de 64 bits.

Modos de funcionamiento

Modo real

El modo de direccionamiento real, [ 36 ] comúnmente llamado modo real, es un modo de funcionamiento de las CPU 8086 y posteriores compatibles con x86 . El modo real se caracteriza por un espacio de direcciones de memoria segmentado de 20 bits (lo que significa que solo se puede direccionar un poco más de 1 MiB de memoria [ p ] ), acceso directo por software al hardware periférico y la ausencia de protección de memoria o multitarea a nivel de hardware. Todas las CPU x86 de la serie 80286 y posteriores arrancan en modo real al encenderse; las CPU 80186 y anteriores tenían un único modo de funcionamiento, equivalente al modo real de los chips posteriores. (En la plataforma IBM PC, el acceso directo por software a las rutinas del BIOS de IBM solo está disponible en modo real, ya que el BIOS está escrito para este modo. Sin embargo, esto no es una propiedad de la CPU x86, sino del diseño del BIOS de IBM).

Para utilizar más de 64  KB de memoria, es necesario usar los registros de segmento. Esto generó grandes complicaciones para los desarrolladores de compiladores, quienes introdujeron modos de puntero inusuales como "near", "far" y "huge" para aprovechar la naturaleza implícita de la arquitectura segmentada en distintos grados. Algunos punteros contenían desplazamientos de 16 bits dentro de segmentos implícitos, mientras que otros contenían direcciones de segmento y desplazamientos dentro de los segmentos. Técnicamente es posible usar hasta 256  KB de memoria para código y datos, con hasta 64  KB para código, configurando los cuatro registros de segmento una sola vez y luego usando solo desplazamientos de 16 bits (opcionalmente con prefijos de anulación de segmento predeterminado) para direccionar la memoria, pero esto impone restricciones sustanciales en la forma en que se pueden direccionar los datos y se pueden combinar los operandos de memoria, y viola la intención arquitectónica de los diseñadores de Intel, que es que los elementos de datos separados (por ejemplo, matrices, estructuras, unidades de código) estén contenidos en segmentos separados y sean direccionados por sus propias direcciones de segmento, en programas nuevos que no sean portados de procesadores de 8 bits anteriores con espacios de direcciones de 16 bits.

Modo irreal

El modo Unreal es utilizado por algunos sistemas operativos de 16 bits y algunos gestores de arranque de 32 bits .

Modo de administración del sistema

El modo de administración del sistema (SMM) solo lo utiliza el firmware del sistema ( BIOS / UEFI ), no los sistemas operativos ni el software de las aplicaciones. El código del SMM se ejecuta en la SMRAM.

Modo protegido

Además del modo real, el Intel 80286 admite el modo protegido, que amplía la memoria física direccionable a 16 MB y la memoria virtual direccionable a 1 GB , y proporciona memoria protegida , lo que impide que los programas se corrompan entre sí. Esto se logra utilizando los registros de segmento únicamente para almacenar un índice en una tabla de descriptores que se almacena en la memoria. Existen dos tablas de este tipo, la Tabla de Descriptores Globales (GDT) y la Tabla de Descriptores Locales (LDT), cada una con capacidad para hasta 8192 descriptores de segmento, y cada segmento proporciona acceso a 64 KB de memoria. En el 80286, un descriptor de segmento proporciona una dirección base de 24 bits , y esta dirección base se suma a un desplazamiento de 16 bits para crear una dirección absoluta. La dirección base de la tabla cumple la misma función que el valor literal del registro de segmento en el modo real; los registros de segmento se han convertido de registros directos a registros indirectos. A cada segmento se le puede asignar uno de los cuatro niveles de anillo utilizados para la seguridad informática basada en hardware . Cada descriptor de segmento también contiene un campo de límite de segmento que especifica el desplazamiento máximo que se puede usar con el segmento. Dado que los desplazamientos son de 16 bits, los segmentos siguen estando limitados a 64 KB cada uno en el modo protegido 80286. [ 37 ]   

Cada vez que se carga un registro de segmento en modo protegido, el 80286 debe leer un descriptor de segmento de 6 bytes de la memoria y almacenarlo en un conjunto de registros internos ocultos. Por lo tanto, la carga de registros de segmento es mucho más lenta en modo protegido que en modo real, y conviene evitar cambiar de segmento con mucha frecuencia. Las operaciones de memoria reales que utilizan segmentos en modo protegido no se ralentizan demasiado, ya que el 80286 y los modelos posteriores cuentan con hardware para comprobar el desplazamiento con respecto al límite del segmento en paralelo con la ejecución de las instrucciones.

El Intel 80386 extendió los desplazamientos y el campo de límite de segmento en cada descriptor de segmento a 32 bits, lo que permite que un segmento abarque todo el espacio de memoria. También introdujo soporte en modo protegido para paginación , un mecanismo que permite usar memoria virtual paginada (con un tamaño de página de 4  KB). La paginación permite que la CPU asigne cualquier página del espacio de memoria virtual a cualquier página del espacio de memoria física. Para ello, utiliza tablas de asignación adicionales en la memoria llamadas tablas de páginas. El modo protegido en el 80386 puede funcionar con la paginación habilitada o deshabilitada; el mecanismo de segmentación siempre está activo y genera direcciones virtuales que luego son asignadas por el mecanismo de paginación si está habilitado. El mecanismo de segmentación también se puede deshabilitar efectivamente configurando todos los segmentos con una dirección base de 0 y un límite de tamaño igual a todo el espacio de direcciones; esto también requiere una tabla de descriptores de segmento de tamaño mínimo de solo cuatro descriptores (ya que no es necesario usar los segmentos FS y GS). [ q ]

La paginación es ampliamente utilizada por los sistemas operativos multitarea modernos. Linux , 386BSD y Windows NT se desarrollaron para el 386 porque fue la primera CPU con arquitectura Intel en admitir paginación y desplazamientos de segmento de 32 bits. La arquitectura 386 se convirtió en la base de todo el desarrollo posterior de la serie x86.

Los procesadores x86 que admiten el modo protegido arrancan en modo real para garantizar la compatibilidad con versiones anteriores de la clase de procesadores 8086. Al encenderse (arrancar ) , el procesador se inicializa en modo real y comienza a ejecutar instrucciones. El código de arranque del sistema operativo, que puede almacenarse en memoria de solo lectura , puede activar el modo protegido para habilitar la paginación y otras funciones. Por el contrario, la aritmética de segmentos, una práctica común en el código del modo real, no está permitida en el modo protegido.

Modo virtual 8086

También existe un submodo de operación en el modo protegido de 32 bits ( también conocido como modo protegido 80386) llamado modo virtual 8086 , o modo V86 . Este es básicamente un modo de operación híbrido especial que permite que los programas y sistemas operativos en modo real se ejecuten bajo el control de un sistema operativo supervisor en modo protegido. Esto proporciona una gran flexibilidad para ejecutar simultáneamente programas en modo protegido y en modo real. Este modo está disponible exclusivamente para la versión de 32 bits del modo protegido; no existe en la versión de 16 bits ni en el modo largo.

Modo largo

A mediados de la década de 1990, era evidente que el espacio de direcciones de 32 bits de la arquitectura x86 limitaba su rendimiento en aplicaciones que requerían grandes conjuntos de datos. Un espacio de direcciones de 32 bits solo permitía al procesador acceder directamente a 4  GB de datos, un tamaño superado por aplicaciones como el procesamiento de vídeo y los motores de bases de datos . Con direcciones de 64 bits, es posible acceder directamente a 16 EiB de datos, aunque la mayoría de las arquitecturas de 64 bits no admiten el acceso a todo el espacio de direcciones de 64 bits; por ejemplo, AMD64 solo admite 48 bits de una dirección de 64 bits, divididos en cuatro niveles de paginación.  

En 1999, AMD publicó una especificación (casi) completa para una extensión de 64 bits de la arquitectura x86, a la que denominaron x86-64 , con la intención declarada de producirla. Ese diseño se utiliza actualmente en casi todos los procesadores x86, con algunas excepciones destinadas a sistemas embebidos .

Los chips x86-64 producidos en masa para el mercado general estuvieron disponibles cuatro años después, en 2003, después de que se invirtiera tiempo en probar y perfeccionar prototipos funcionales; casi al mismo tiempo, el nombre inicial x86-64 se cambió a AMD64 . El éxito de la línea de procesadores AMD64 junto con la tibia recepción de la arquitectura IA-64 obligó a Intel a lanzar su propia implementación del conjunto de instrucciones AMD64. Intel había implementado previamente soporte para AMD64 [ 38 ] pero optó por no habilitarlo con la esperanza de que AMD no lanzara AMD64 al mercado antes de que el nuevo conjunto de instrucciones IA-64 de Itanium fuera ampliamente adoptado. Llamó a su implementación de AMD64 EM64T , y más tarde la renombró Intel 64 .

En su documentación y nombres de versiones de productos, Microsoft y Sun se refieren a AMD64/Intel 64 colectivamente como x64 en los sistemas operativos Windows y Solaris . Las distribuciones de Linux lo denominan "x86-64", su variante "x86_64" o "amd64". Los sistemas BSD utilizan "amd64", mientras que macOS utiliza "x86_64".

El modo largo es principalmente una extensión del conjunto de instrucciones de 32 bits, pero a diferencia de la transición de 16 a 32 bits, muchas instrucciones se eliminaron en el modo de 64 bits. Esto no afecta la compatibilidad binaria retroactiva (que permitiría ejecutar código heredado en otros modos que conservan la compatibilidad con esas instrucciones), pero sí modifica la forma en que los ensambladores y compiladores deben trabajar para el código nuevo.

Esta fue la primera vez que una extensión importante de la arquitectura x86 fue iniciada y desarrollada por un fabricante distinto a Intel. También fue la primera vez que Intel aceptó tecnología de esta naturaleza de una fuente externa.

Extensiones

x87

Un Intel 386 con el coprocesador 387

Los primeros procesadores x86 podían ampliarse con hardware de punto flotante mediante una serie de coprocesadores numéricos de punto flotante con nombres como 8087 , 80287 y 80387, abreviados como x87. Esto también se conocía como NPX ( Numeric Processor eXtension ), un nombre apropiado ya que los coprocesadores, si bien se usaban principalmente para cálculos de punto flotante, también realizaban operaciones con números enteros en formatos binario y decimal. Salvo contadas excepciones, el 80486 y los procesadores x86 posteriores integraron esta funcionalidad x87 en el chip, lo que convirtió las instrucciones x87 en una parte integral de facto del conjunto de instrucciones x86.

Cada registro x87, denominado ST(0) a ST(7), tiene 80  bits de ancho y almacena números en formato de precisión extendida doble estándar de punto flotante IEEE . Estos registros están organizados en una pila con ST(0) en la parte superior. Esto se hizo para ahorrar espacio de código de operación, por lo que los registros solo son accesibles aleatoriamente para uno de los operandos en una instrucción de registro a registro; ST0 siempre debe ser uno de los dos operandos, ya sea el origen o el destino, independientemente de si el otro operando es ST(x) o un operando de memoria. Sin embargo, se puede obtener acceso aleatorio a los registros de la pila mediante una instrucción que intercambia cualquier ST(x) especificado con ST(0).

Las operaciones incluyen funciones aritméticas y trascendentales, incluyendo funciones trigonométricas y exponenciales, e instrucciones que cargan constantes comunes (como 0; 1; e, la base del logaritmo natural; log2(10); y log10(2)) en uno de los registros de la pila. Si bien la capacidad de trabajar con enteros a menudo se pasa por alto, el x87 puede operar con enteros mayores con una sola instrucción que el 8086, 80286, 80386 o cualquier CPU x86 sin extensiones a 64 bits, y los cálculos repetidos con enteros, incluso con valores pequeños (por ejemplo, de 16 bits), se pueden acelerar ejecutando instrucciones de enteros en la CPU x86 y el x87 en paralelo. (La CPU x86 continúa funcionando mientras el coprocesador x87 calcula, y el x87 envía una señal al x86 cuando termina o lo interrumpe si necesita atención debido a un error).

PAE

La extensión de dirección física (PAE) se agregó por primera vez en el Intel Pentium Pro y, posteriormente, por AMD en los procesadores Athlon, [ 39 ]  para permitir el direccionamiento de hasta 64 GB de RAM. Sin PAE, la RAM física en modo protegido de 32 bits suele estar limitada a 4 GB . PAE define una estructura de tabla de páginas diferente con entradas de tabla de páginas más amplias y un tercer nivel de tabla de páginas, lo que permite bits adicionales de dirección física. Aunque las implementaciones iniciales en procesadores de 32 bits admitían teóricamente hasta 64 GB de RAM, las limitaciones del chipset y otras plataformas a menudo restringían lo que realmente se podía usar. Los procesadores x86-64 definen estructuras de tabla de páginas que teóricamente permiten hasta 52 bits de dirección física, aunque, de nuevo, las consideraciones del chipset y otras plataformas (como el número de ranuras DIMM disponibles y la RAM máxima posible por DIMM) impiden que se realice un espacio de direcciones físicas tan grande. En los procesadores x86-64, el modo PAE debe estar activo antes de cambiar al modo largo y debe permanecer activo mientras el modo largo esté activo; por lo tanto, mientras se está en modo largo, no existe un modo "no PAE". El modo PAE no afecta el ancho de las direcciones lineales o virtuales.  

MMX

MMX es un conjunto de instrucciones SIMD diseñado por Intel e introducido en 1997 para el microprocesador Pentium MMX . [ 40 ] El conjunto de instrucciones MMX se desarrolló a partir de un concepto similar utilizado por primera vez en el Intel i860 . Es compatible con la mayoría de los procesadores IA-32 posteriores de Intel y otros fabricantes. MMX se utiliza normalmente para el procesamiento de vídeo (en aplicaciones multimedia, por ejemplo). [ 41 ]

MMX añadió 8 nuevos registros a la arquitectura, conocidos como MM0 a MM7 (en adelante, MMn ). En realidad, estos nuevos registros eran simplemente alias de los registros de la pila de la FPU x87 existentes. Por lo tanto, cualquier modificación realizada en la pila de punto flotante también afectaba a los registros MMX. A diferencia de la pila de punto flotante, estos registros MMn eran fijos, no relativos, y por consiguiente, su acceso era aleatorio. El conjunto de instrucciones no adoptó la semántica de pila, de modo que los sistemas operativos existentes podían guardar y restaurar correctamente el estado de los registros durante la multitarea sin modificaciones. [ 40 ]

Cada uno de los registros MMn es un entero de 64 bits. Sin embargo, uno de los conceptos principales del conjunto de instrucciones MMX es el concepto de tipos de datos empaquetados , lo que significa que en lugar de usar todo el registro para un solo entero de 64 bits ( quadword ), se puede usar para contener dos enteros de 32 bits ( doubleword ), cuatro enteros de 16 bits ( word ) u ocho enteros de 8 bits ( byte ). Dado que los registros MMn de 64 bits de MMX están en alias de la pila de la FPU y cada uno de los registros de punto flotante tiene  un ancho de 80 bits, los 16  bits superiores de los registros de punto flotante no se utilizan en MMX. Estos bits se establecen a todos unos mediante cualquier instrucción MMX, que corresponde a la representación de punto flotante de NaN o infinitos. [ 40 ]

¡3D ahora!

En 1997, AMD presentó 3DNow!. [ 42 ] La introducción de esta tecnología coincidió con el auge de las aplicaciones de entretenimiento 3D y fue diseñada para mejorar el rendimiento del procesamiento vectorial de la CPU en aplicaciones con uso intensivo de gráficos. Los desarrolladores de videojuegos 3D y los proveedores de hardware gráfico 3D utilizan 3DNow! para mejorar su rendimiento en los procesadores AMD de las series K6 y Athlon . [ 43 ]

3DNow! fue diseñado para ser la evolución natural de MMX, pasando de enteros a punto flotante. Por ello, utiliza exactamente la misma convención de nomenclatura de registros que MMX, es decir, de MM0 a MM7. [ 44 ] La única diferencia es que, en lugar de almacenar enteros en estos registros, se almacenan dos números de punto flotante de precisión simple en cada uno. La ventaja de usar alias para los registros de la FPU es que las mismas instrucciones y estructuras de datos utilizadas para guardar el estado de los registros de la FPU también se pueden usar para guardar el estado de los registros de 3DNow!. Por lo tanto, no se requieren modificaciones especiales en los sistemas operativos, que de otro modo no los conocerían. [ 45 ]

SSE

En 1999, Intel introdujo el conjunto de instrucciones Streaming SIMD Extensions (SSE) , seguido en 2000 por SSE2. La primera adición permitió la descarga de operaciones básicas de punto flotante de la pila x87 y la segunda hizo que MMX quedara prácticamente obsoleto y permitió que las instrucciones fueran utilizadas de forma realista por compiladores convencionales. Introducido en 2004 junto con la revisión Prescott del procesador Pentium 4 , SSE3 añadió instrucciones específicas de gestión de memoria e hilos para aumentar el rendimiento de la tecnología HyperThreading de Intel . AMD obtuvo la licencia del conjunto de instrucciones SSE3 e implementó la mayoría de las instrucciones SSE3 para su revisión E y posteriores procesadores Athlon 64. El Athlon 64 no es compatible con HyperThreading y carece de las instrucciones SSE3 utilizadas exclusivamente para HyperThreading. [ 46 ]

SSE descartó todas las conexiones heredadas a la pila de la FPU. Esto también significó que este conjunto de instrucciones descartó todas las conexiones heredadas a generaciones anteriores de conjuntos de instrucciones SIMD como MMX. Pero liberó a los diseñadores, permitiéndoles usar registros más grandes, sin la limitación del tamaño de los registros de la FPU. Los diseñadores crearon ocho registros de 128 bits, denominados XMM0 a XMM7. (En AMD64 , el número de registros XMM de SSE se ha incrementado de 8 a 16). Sin embargo, la desventaja era que los sistemas operativos debían conocer este nuevo conjunto de instrucciones para poder guardar sus estados de registro. Por lo tanto, Intel creó una versión ligeramente modificada del modo protegido, llamada modo mejorado, que habilita el uso de instrucciones SSE, mientras que permanecen deshabilitadas en el modo protegido normal. Un sistema operativo que conoce SSE activará el modo mejorado, mientras que un sistema operativo que no lo conoce solo entrará en el modo protegido tradicional.

SSE es un conjunto de instrucciones SIMD que funciona únicamente con valores de punto flotante, al igual que 3DNow!. Sin embargo, a diferencia de 3DNow!, elimina toda conexión heredada con la pila de la FPU. Debido a que tiene registros más grandes que 3DNow!, SSE puede almacenar el doble de números de coma flotante de precisión simple en sus registros. El SSE original estaba limitado a números de precisión simple, como 3DNow!. SSE2 introdujo la capacidad de almacenar también números de doble precisión , algo que 3DNow! no podía hacer, ya que un número de doble precisión tiene un tamaño de 64 bits, que sería el tamaño completo de un solo registro MMn de 3DNow!. Con 128  bits, los registros XMMn de SSE podían almacenar dos números de coma flotante de doble precisión en un solo registro. Por lo tanto, SSE2 es mucho más adecuado para cálculos científicos que SSE1 o 3DNow!, que estaban limitados a precisión simple. SSE3 no introduce ningún registro adicional. [ 46 ]

x86-64

En los clústeres de supercomputadoras (según los datos del TOP 500 y visualizados en el diagrama anterior, actualizado por última vez en 2013), la aparición de extensiones de 64 bits para la arquitectura x86 permitió que los procesadores x86 de 64 bits de AMD e Intel (en verde azulado y azul en el diagrama, respectivamente) reemplazaran la mayoría de las arquitecturas de procesadores RISC utilizadas anteriormente en dichos sistemas (incluidas PA-RISC , SPARC , Alpha y otras), y x86 de 32 bits (en verde en el diagrama), a pesar de que Intel intentó inicialmente, sin éxito, reemplazar x86 con una nueva arquitectura de 64 bits incompatible en el procesador Itanium . La principal arquitectura no x86 que todavía se utiliza, a partir de 2014, en clústeres de supercomputación es la Power ISA utilizada por los microprocesadores IBM Power (en azul con mosaico de diamante en el diagrama), con SPARC en un distante segundo lugar.

Para la década del 2000, las limitaciones de los procesadores x86 de 32 bits en el direccionamiento de memoria representaban un obstáculo para su uso en clústeres de computación de alto rendimiento y potentes estaciones de trabajo de escritorio. El obsoleto x86 de 32 bits competía con arquitecturas RISC de 64 bits mucho más avanzadas, capaces de direccionar mucha más memoria. Intel y todo el ecosistema x86 necesitaban direccionamiento de memoria de 64 bits para sobrevivir a la era de la computación de 64 bits, ya que las aplicaciones de software para estaciones de trabajo y escritorios pronto alcanzarían los límites del direccionamiento de memoria de 32 bits. Sin embargo, Intel consideró que era el momento oportuno para dar un paso audaz y aprovechar la transición a las computadoras de escritorio de 64 bits para abandonar la arquitectura x86 en general, un experimento que finalmente fracasó.

En 2001, Intel intentó introducir una arquitectura de 64 bits no x86 llamada IA-64 en su procesador Itanium , inicialmente apuntando al mercado de computación de alto rendimiento , con la esperanza de que eventualmente reemplazara al x86 de 32 bits. [ 47 ] Si bien IA-64 era incompatible con x86, el procesador Itanium sí proporcionaba capacidades de emulación para traducir instrucciones x86 a IA-64, pero esto afectaba tan mal el rendimiento de los programas x86 que rara vez, o nunca, era realmente útil para los usuarios: los programadores debían reescribir los programas x86 para la arquitectura IA-64 o su rendimiento en Itanium sería órdenes de magnitud peor que en un verdadero procesador x86. El mercado rechazó el procesador Itanium ya que rompió la retrocompatibilidad y prefirió seguir utilizando chips x86, y muy pocos programas se reescribieron para IA-64.

AMD decidió tomar otro camino hacia el direccionamiento de memoria de 64 bits, asegurándose de que la retrocompatibilidad no se viera afectada. En abril de 2003, AMD lanzó el primer procesador x86 con registros de propósito general de 64 bits, el Opteron , capaz de direccionar mucho más de 4 GB de memoria virtual utilizando la nueva extensión x86-64 (también conocida como AMD64 o x64). Las extensiones de 64 bits a la arquitectura x86 se habilitaron solo en el modo largo recién introducido , por lo que las aplicaciones y sistemas operativos de 32 bits y 16 bits podían simplemente continuar usando un procesador AMD64 en modos protegidos u otros, sin el más mínimo sacrificio de rendimiento [ 48 ] y con compatibilidad total hasta las instrucciones originales del Intel 8086 de 16 bits. [ 49 ] : 13–14 El mercado respondió positivamente, adoptando los procesadores AMD de 64 bits tanto para aplicaciones de alto rendimiento como para computadoras comerciales o domésticas. 

Al ver que el mercado rechazaba el procesador Itanium incompatible y que Microsoft apoyaba a AMD64, Intel tuvo que responder e introdujo su propio procesador x86-64, el Prescott Pentium  4, en julio de 2004. [ 50 ] Como resultado, el procesador Itanium con su conjunto de instrucciones IA-64 se usa raramente y x86, a través de su encarnación x86-64, sigue siendo la arquitectura de CPU dominante en computadoras no integradas.

La arquitectura x86-64 también introdujo el bit NX , que ofrece cierta protección contra fallos de seguridad causados ​​por desbordamientos de búfer .

Como resultado de la contribución de AMD a la arquitectura x86 con su tecnología de 64 bits y su posterior aceptación por parte de Intel, las arquitecturas RISC de 64 bits dejaron de ser una amenaza para el ecosistema x86 y prácticamente desaparecieron del mercado de estaciones de trabajo. La arquitectura x86-64 comenzó a utilizarse en potentes supercomputadoras (en sus versiones AMD Opteron e Intel Xeon ), un mercado que anteriormente era el hábitat natural de los diseños RISC de 64 bits (como los microprocesadores IBM Power o los procesadores SPARC ). El gran salto hacia la computación de 64 bits y el mantenimiento de la retrocompatibilidad con el software de 32 y 16 bits permitieron que la arquitectura x86 se convirtiera en una plataforma extremadamente flexible en la actualidad, con chips x86 que se utilizan desde pequeños sistemas de bajo consumo (por ejemplo, Intel Quark e Intel Atom ) hasta ordenadores de sobremesa rápidos para juegos (por ejemplo, Intel Core i7 y AMD FX / Ryzen ), e incluso dominan grandes clústeres de supercomputación , dejando efectivamente solo a la arquitectura RISC ARM de 32 y 64 bits como competidora en el mercado de teléfonos inteligentes y tabletas .

AMD-V y VT-x

Antes de 2005, los procesadores con arquitectura x86 no podían cumplir con los requisitos de virtualización de Popek y Goldberg , un conjunto de condiciones para una virtualización eficiente creadas en 1974 por Gerald J. Popek y Robert P. Goldberg . Sin embargo, se desarrollaron hipervisores de virtualización x86, tanto propietarios como de código abierto, que utilizaban virtualización basada en software . Entre los sistemas propietarios se incluyen Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player y Windows Virtual PC , mientras que entre los sistemas gratuitos y de código abierto se incluyen QEMU , Kernel-based Virtual Machine , VirtualBox y Xen .

La introducción de los conjuntos de instrucciones AMD-V e Intel VT-x en 2005 permitió que los procesadores x86 cumplieran con los requisitos de virtualización de Popek y Goldberg. [ 51 ]

AES-NI

La extensión del conjunto de instrucciones del Estándar de Cifrado Avanzado (AES-NI) está diseñada para acelerar las operaciones de cifrado y descifrado AES . Fue propuesta por primera vez por Intel en 2008.

AVX

Las Extensiones Vectoriales Avanzadas (AVX) duplicaron el tamaño de los registros SSE a registros YMM de 256 bits. También introdujeron el esquema de codificación VEX para adaptarse a los registros más grandes, además de algunas instrucciones para permutar elementos. AVX2 no introdujo registros adicionales, pero destacó por la incorporación de instrucciones de enmascaramiento, recopilación y mezcla.

AVX-512 incorpora una nueva expansión a 32 registros ZMM de 512 bits y un nuevo esquema EVEX. A diferencia de sus predecesores, que presentaban una extensión monolítica, se divide en numerosos subconjuntos que los modelos específicos de CPU pueden implementar.

APX

Las Extensiones de Rendimiento Avanzado (APX) son extensiones para duplicar el número de registros de propósito general de 16 a 32 y agregar nuevas características para mejorar el rendimiento de propósito general. [ 52 ] [ 53 ] [ 54 ] [ 55 ] Estas extensiones han sido llamadas "generacionales" [ 56 ] y "la mayor adición x86 desde los 64 bits". [ 57 ] Intel contribuyó con soporte para APX a GNU Compiler Collection (GCC) 14. [ 58 ] Microsoft Visual Studio 2026 también agregó soporte para APX. A partir de junio de 2025 La primera generación de chips que admitirá APX está programada para ser Diamond Rapids . [ 59 ]

Según la especificación de arquitectura de 2023, [ 60 ] las características principales de APX son:

  • 16 registros adicionales de propósito general R16-R31, denominados GPR extendidos (EGPR).
  • Formatos de instrucciones de tres operandos para muchas instrucciones enteras.
  • Nuevas instrucciones condicionales para cargas, almacenamientos y comparaciones con instrucciones comunes que no modifican indicadores.
  • Operaciones optimizadas de guardado/restauración de registros
  • Una instrucción de salto directo absoluto de 64 bits; los sistemas operativos de 32 bits y las aplicaciones de 32 bits no pueden invocar APX.

Las instrucciones de propósito general (GPR) extendidas se codifican utilizando un prefijo REX2 de 2 bytes , mientras que las nuevas instrucciones y los operandos extendidos para las instrucciones AVX / AVX2 / AVX-512 existentes se codifican con un prefijo EVEX extendido que tiene cuatro variantes utilizadas para diferentes grupos de instrucciones.

Grupo Asesor del Ecosistema x86

En octubre de 2024, Intel y AMD formaron conjuntamente el Grupo Asesor del Ecosistema x86 [ 61 ] . Entre sus objetivos se incluían la mejora de la consistencia del software y la estandarización de las interfaces y características de x86 [ 62 ].

Entre los hitos técnicos clave se incluyen: FRED (Flexible Return and Event Delivery), un modelo de interrupción modernizado diseñado para reducir la latencia; ChkTag (x86 Memory Tagging), para combatir las vulnerabilidades de seguridad de la memoria; y ACE (Advanced Matrix Extensions for Matrix Multiplication), para estandarizar las capacidades y la experiencia de los desarrolladores en todos los dispositivos. AVX10 se ha consolidado como el conjunto de instrucciones vectoriales y de propósito general de próxima generación.

Véase también

Notas

  1. A diferencia de la microarquitectura (y la implementación electrónica y física específica) utilizada para un diseño de microprocesador específico.
  2. Por ejemplo, el portátil GRID Compass .
  3. Incluyendo losprocesadores 8088 , 80186 , 80188 y 80286 .
  4. Dicho sistema también contenía la mezcla habitual decomponentes de soporte estándar de la serie 7400 , incluidos multiplexores , búferes y lógica de interconexión .
  5. El significado real de iAPX era Intel Advanced Performance Architecture , o a veces Intel Advanced Processor Architecture .
  6. finales de 1981 a principios de 1984, aproximadamente
  7. El mercado de procesadores integrados está poblado por más de 25 arquitecturas diferentes , que, debido a la sensibilidad al precio, el bajo consumo de energía y los requisitos de simplicidad de hardware, superan en número a la arquitectura x86.
  8. Los NEC V20 y V30 también proporcionaban el conjunto de instrucciones 8080 anterior, lo que permitía a los PC equipados con estos microprocesadores ejecutar aplicaciones CP/M a toda velocidad (es decir, sin necesidad de simular un 8080 mediante software).
  9. Las empresas sin fábrica propia diseñaban el chip y subcontrataban su fabricación a otra empresa, mientras que las empresas con fábrica propia realizaban tanto el diseño como la fabricación. Algunas empresas comenzaron como fabricantes con fábrica propia y posteriormente se convirtieron en diseñadoras sin fábrica propia; un ejemplo de ello es AMD.
  10. Sin embargo, tenía una FPU más lenta, lo cual resulta un tanto irónico, ya que Cyrix comenzó diseñando unidades de punto flotante rápidas para procesadores x86.
  11. Intel abandonó su esquema de nomenclatura "x86" con el procesador Pentium P5 en 1993 (ya que los números no podían registrarse como marca). Sin embargo, el término x86 ya estaba establecido entre técnicos, desarrolladores de compiladores, etc.
  12. Los microprocesadores de 16 y 32 bits se introdujeron en 1978 y 1985 respectivamente; los planes para los de 64 bits se anunciaron en 1999 y se introdujeron gradualmente a partir de 2003.
  13. Algunos diseños "CISC", como el PDP-11 , pueden usar dos.
  14. Esto se debe a que la aritmética de enteros genera un acarreo entre bits consecutivos (a diferencia de las operaciones simples a nivel de bits).
  15. Dos registros de servicio de memoria (MSR) de particular interés son SYSENTER_EIP_MSR y SYSENTER_ESP_MSR, introducidos en el procesador Pentium® II, que almacenan la dirección del controlador de servicio del sistema en modo kernel y el puntero de pila del kernel correspondiente. Inicializados durante el arranque del sistema, SYSENTER_EIP_MSR y SYSENTER_ESP_MSR son utilizados por las instrucciones SYSENTER (Intel) o SYSCALL (AMD) para lograr llamadas al sistema rápidas, aproximadamente tres veces más rápidas que el método de interrupción por software utilizado anteriormente.
  16. Debido a que una dirección segmentada es la suma de un segmento de 16 bits multiplicado por 16 y un desplazamiento de 16 bits, la dirección máxima es 1.114.095 (10FFEF hexadecimal), para una capacidad de direccionamiento de 1.114.096 bytes = 1 MB + 65.520 bytes. Antes del 80286, las CPU x86 tenían solo 20 líneas de dirección física (señales de bits de dirección), por lo que el bit 21 de la dirección, el bit 20, se descartaba y las direcciones más allá de 1 MB eran espejos del extremo inferior del espacio de direcciones (comenzando desde la dirección cero). Desde el 80286, todas las CPU x86 tienen al menos 24 líneas de dirección física, y el bit 20 de la dirección calculada se lleva al bus de direcciones en modo real, lo que permite a la CPU direccionar los 1.114.096 bytes completos alcanzables con una dirección segmentada x86. En la popular plataforma IBM PC, se añadió hardware conmutable para deshabilitar el bit de dirección 21 a las máquinas con un procesador 80286 o posterior, de modo que todos los programas diseñados para modelos basados ​​en 8088/8086 pudieran ejecutarse, mientras que el software más reciente pudiera aprovechar la memoria "alta" en modo real y el espacio de direcciones completo de 16 MB o más en modo protegido (véase la puerta A20).
  17. También se requiere un registro descriptor adicional en la parte superior de la tabla, porque la tabla comienza en cero, pero el índice descriptor mínimo que se puede cargar en un registro de segmento es 1; el valor 0 está reservado para representar un registro de segmento que no apunta a ningún segmento.

Referencias

  1. Rao, PVS (2009). Arquitectura de sistemas informáticos . Prentice-Hall of India. pág.  402 (Sección 19.1, La familia de procesadores x86 ). ISBN 978-81-203-3594-3.
  2. Mhatre, Swapneel Chandrakant (2012). Microprocesadores y técnicas de interfaz: Para el segundo semestre de Ingeniería Informática de la Universidad de Pune . Editorial Jaico. ISBN 978-81-8495-325-1.
  3. Alcorn, Paul (9 de febrero de 2022). "AMD establece un récord histórico de participación de mercado en CPU mientras Intel gana terreno en PC de escritorio y portátiles" . Tom's Hardware .
  4. Brandon, Jonathan (15 de abril de 2015). "La nube más allá de x86: cómo las arquitecturas antiguas están regresando" . ICloud PE . Business Cloud News. Archivado del original el 19 de agosto de 2021. Recuperado el 23 de noviembre de 2020. A pesar del dominio de x86 en el centro de datos, es difícil ignorar el revuelo que los proveedores han estado causando en los últimos años en torno a arquitecturas que no son x86, como ARM...
  5. Dvorak, John C. "¿Qué pasó con el Intel iAPX432?" . Dvorak.org. Archivado del original el 25 de noviembre de 2017. Recuperado el 18 de abril de 2014 .
  6. Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Archivado (PDF) del original el 28 de agosto de 2017. Recuperado el 28 de agosto de 2017 .
  7. 1 2 iAPX 86, 88 Manual del usuario (PDF) . Intel. Agosto de 1981. Archivado (PDF) del original el 28 de agosto de 2017. Recuperado el 28 de agosto de 2017 .
  8. Edwards, Benj (16 de junio de 2008). "El nacimiento de un estándar: el microprocesador Intel 8086" . PCWorld . Archivado del original el 26 de septiembre de 2010. Recuperado el 14 de septiembre de 2014 .
  9. Stanley Mazor (enero-marzo de 2010). "El 8086 de Intel". IEEE Annals of the History of Computing . 32 (1): 75– 79. Bibcode : 2010IAHC...32a..75M . doi : 10.1109/MAHC.2010.22 . S2CID 16451604 . 
  10. «AMD presenta nuevas tecnologías en el Foro de Microprocesadores» (Comunicado de prensa). AMD . 5 de octubre de 1999. Archivado del original el 2 de marzo de 2000."Una y otra vez, los arquitectos de procesadores han analizado la poco elegante arquitectura x86 y han declarado que no se puede ampliar para dar cabida a las últimas innovaciones", dijo Nathan Brookwood, analista principal de Insight 64.
  11. Burt, Jeff (5 de abril de 2010). "Microsoft dejará de dar soporte a Intel Itanium" . eWeek . Consultado el 2 de junio de 2022 .
  12. 1 2 "Manual de referencia de optimización de arquitecturas Intel 64 e IA-32" (PDF) . Intel. Septiembre de 2019. 3.4.2.2 Optimización para macrofusión. Archivado (PDF) del original el 14 de febrero de 2020. Recuperado el 7 de marzo de 2020 .
  13. 1 2 Fog, Agner. "La microarquitectura de las CPU de Intel, AMD y VIA" (PDF) . pág. 107. Archivado (PDF) del original el 22 de marzo de 2019. Recuperado el 7 de marzo de 2020. Core2 puede realizar la fusión de macrooperaciones solo en modo de 16 bits y 32 bits. Core Nehalem también puede hacerlo en modo de 64 bits . 
  14. "Zet: La implementación abierta x86 (IA-32): Descripción general" . OpenCores . 4 de noviembre de 2013. Archivado del original el 11 de febrero de 2018. Consultado el 5 de enero de 2014 .
  15. "Zhaoxin prepara soporte para el kernel de Linux para las CPU Centaur de la serie 7" . Phoronix.com . Archivado del original el 5 de abril de 2022. Consultado el 5 de abril de 2022 .
  16. "Zhaoxin apunta a lanzar sus CPU x86 de 7 nm en 2021 - CPU - Noticias - HEXUS.net" . m.hexus.net . Archivado del original el 3 de julio de 2022. Consultado el 5 de abril de 2022 .
  17. "Zhaoxin finalmente agrega la optimización de CPU "Lujiazui" x86_64 a GCC" . Phoronix.com . Consultado el 5 de abril de 2022 .
  18. "Consideraciones de configuración e instalación para equipos con Windows x64 Edition" . Archivado del original el 11 de septiembre de 2014. Consultado el 14 de septiembre de 2014 .
  19. "Visualizando una arquitectura Intel simplificada" . Intel . Archivado del original el 20 de diciembre de 2024. Consultado el 20 de mayo de 2023 .
  20. Larabel, Michael (20 de mayo de 2023). "Intel publica la especificación "X86-S" para arquitectura de solo 64 bits" . Phoronix . Consultado el 20 de mayo de 2023 .
  21. "Visualizando una arquitectura Intel simplificada para el futuro" . Intel . Archivado del original el 20 de diciembre de 2024. Consultado el 20 de mayo de 2023 .
  22. Paul Alcorn (19 de diciembre de 2024). "Intel pone fin a la iniciativa x86S: la búsqueda unilateral para reducir el tamaño del conjunto de instrucciones x86 llega a su fin" . Tom's Hardware . Archivado del original el 20 de diciembre de 2024. Consultado el 20 de diciembre de 2024 .
  23. "Procesadores: ¿Qué modo de direccionamiento utilizan los procesadores Intel?" . Archivado del original el 11 de septiembre de 2014. Consultado el 14 de septiembre de 2014 .
  24. "Interruptores DSB" . Intel VTune Amplifier 2013. Intel. Archivado del original el 2 de diciembre de 2013. Recuperado el 26 de agosto de 2013 .
  25. "Manual del usuario de la familia 8086" (PDF) . Intel Corporation. Octubre de 1979. págs. 2-68 . Archivado (PDF) del original el 4 de abril de 2018. Consultado el 28 de marzo de 2018 . 
  26. "Manual de referencia del programador iAPX 286" (PDF) . Intel Corporation. 1983. 2.4.3 Modos de direccionamiento de memoria. Archivado (PDF) del original el 28 de agosto de 2017. Recuperado el 28 de agosto de 2017 .
  27. Manual de referencia del programador 80386 (PDF) . Intel Corporation. 1986. 2.5.3.2 CÁLCULO DE DIRECCIÓN EFECTIVA. Archivado (PDF) del original el 28 de diciembre de 2018. Recuperado el 28 de marzo de 2018 .
  28. 1 2 Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32, Volumen 1: Arquitectura básica . Intel Corporation. Marzo de 2018. Capítulo 3. Archivado del original el 26 de enero de 2012. Recuperado el 19 de marzo de 2014 .
  29. Andriesse, Dennis (2019). "6.5 Efectos de la configuración del compilador en el desensamblaje". Análisis binario práctico: crea tus propias herramientas Linux para instrumentación, análisis y desensamblaje binario . San Francisco, CA: No Starch Press, Inc. ISBN 978-1-59327-913-4OCLC 1050453850 
  30. "Guía para ensamblador x86" . Cs.virginia.edu. 11 de septiembre de 2013. Archivado del original el 24 de marzo de 2020. Consultado el 6 de febrero de 2014 .
  31. "FSTSW/FNSTSW — Almacenar la palabra de estado de la FPU x87" . Archivado del original el 25 de enero de 2022. Recuperado el 15 de enero de 2020. La forma FNSTSW AX de la instrucción se utiliza principalmente en bifurcaciones condicionales...
  32. Manual del desarrollador de software de las arquitecturas Intel 64 e IA-32, Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 8. Archivado (PDF) del original el 2 de abril de 2013. Consultado el 23 de abril de 2013 .
  33. "Familia Intel 80287" . CPU-world . Archivado del original el 9 de agosto de 2016. Consultado el 21 de julio de 2016 .
  34. Manual del desarrollador de software de las arquitecturas Intel 64 e IA-32, Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 9. Archivado (PDF) del original el 2 de abril de 2013. Consultado el 23 de abril de 2013 .
  35. Manual del desarrollador de software de las arquitecturas Intel 64 e IA-32, Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 10. Archivado (PDF) del original el 2 de abril de 2013. Consultado el 23 de abril de 2013 .
  36. Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Sección 1.2, "Modos de operación". Archivado (PDF) del original el 28 de agosto de 2017. Recuperado el 27 de enero de 2014 .
  37. Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Capítulo 6, "Gestión de memoria y direccionamiento virtual". Archivado (PDF) del original el 28 de agosto de 2017. Consultado el 27 de enero de 2014 .
  38. "Tecnología Yamhill de Intel: compatible con x86-64 | Geek.com" . Consultado el 18 de julio de 2008 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  39. AMD, Inc. (febrero de 2002). "Apéndice E" (PDF) . Guía de optimización de código del procesador AMD Athlon™ x86 (ed. Revisión K ). pág. 250. Archivado (PDF) del original el 13 de abril de 2017. Recuperado el 13 de abril de 2017. Se utiliza un índice de 2 bits que consta de los bits PCD y PWT de la entrada de la tabla de páginas para seleccionar uno de los cuatro campos del registro PAT cuando se habilita PAE (extensiones de dirección de página) o cuando PDE no describe una página grande.  
  40. 1 2 3 "Programación con la tecnología Intel MMX™" . Centro de información técnica de la familia de procesadores Pentium® integrados . Intel. Archivado del original el 25 de julio de 2003. Recuperado el 5 de junio de 2022 .
  41. Krishnaprasad, S. (1 de enero de 2004). "Programación SIMD ilustrada con el conjunto de instrucciones MMX de Intel" . Journal of Computing Sciences in Colleges . 19 (3): 268– 277. ISSN 1937-4771 . 
  42. Sexton, Michael Justin Allen (21 de abril de 2017). "La historia de las CPU AMD" . Tom's Hardware . Archivado del original el 5 de junio de 2022. Recuperado el 5 de junio de 2022 .
  43. Shimpi, Anand Lal (29 de octubre de 1998). "AMD's K6-2 350: Algo que hacer..." AnandTech . Archivado del original el 14 de julio de 2012. Recuperado el 5 de junio de 2022 .
  44. "Operaciones SIMD de MMX de Intel y 3DNow! de AMD" . web.mit.edu . Archivado del original el 27 de julio de 2022. Consultado el 5 de junio de 2022 .
  45. "Manual de tecnología 3DNow!™" (PDF) . Advanced Micro Devices. Archivado (PDF) del original el 9 de octubre de 2018. Consultado el 5 de junio de 2022 .
  46. 1 2 "Actualización y reparación de PCs 21.ª edición: características del procesador" . Tom's Hardware . 31 de octubre de 2013. Consultado el 5 de junio de 2022 .
  47. Manek Dubash (20 de julio de 2006). "¿Abandonará Intel el Itanium?" . Techworld . Archivado del original el 19 de febrero de 2011. Consultado el 19 de diciembre de 2010. Intel lo promocionó en su momento como un reemplazo para la línea de productos x86, pero las expectativas para el Itanium se han visto seriamente reducidas.
  48. "Desmitificando el rendimiento de IBM WebSphere Application Server de 64 bits" (PDF) . IBM Corporation. 6 de septiembre de 2007. pág. 14. Archivado (PDF) del original el 25 de enero de 2022. Recuperado el 9 de abril de 2010. Las figuras 5, 6 y 7 también muestran que la versión de 32 bits de WAS ejecuta aplicaciones con el máximo rendimiento del hardware nativo en las plataformas POWER y x86-64. A diferencia de algunas arquitecturas de procesadores de 64 bits, el hardware POWER y x86-64 no emula el modo de 32 bits. Por lo tanto, las aplicaciones que no se benefician de las características de 64 bits pueden ejecutarse con el máximo rendimiento en la versión de 32 bits de WebSphere que se ejecuta en las plataformas de 64 bits mencionadas anteriormente. 
  49. "Volumen 2: Programación del sistema" (PDF) . Manual del programador de la arquitectura AMD64 . AMD Corporation. Marzo de 2024. Archivado (PDF) del original el 4 de abril de 2024. Consultado el 24 de abril de 2024 .
  50. Charlie Demerjian (26 de septiembre de 2003). "Por qué Prescott de Intel utilizará las extensiones AMD64" . The Inquirer . Archivado del original el 10 de octubre de 2009. Consultado el 7 de octubre de 2009 .
  51. Adams, Keith; Agesen, Ole (21-25 de octubre de 2006). Una comparación de técnicas de software y hardware para la virtualización x86 (PDF) . Actas de la Conferencia Internacional sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos, San José, CA, EE. UU., 2006. ACM 1-59593-451-0/06/0010. Archivado (PDF) del original el 20 de agosto de 2010. Recuperado el 22 de diciembre de 2006 .
  52. Winkel, Sebastian; Agron, Jason. "Extensiones de rendimiento avanzadas (APX)" . Intel . Consultado el 22 de octubre de 2023 .
  53. Robinson, Dan. "Intel añade nuevas instrucciones x86 y vectoriales para futuros chips" . The Register . Archivado del original el 2 de octubre de 2023. Consultado el 22 de octubre de 2023 .
  54. Bonshor, Gavin. "Intel presenta los conjuntos de instrucciones AVX10 y APX: Unificando AVX-512 para arquitecturas híbridas" . AnandTech . Consultado el 22 de octubre de 2023 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  55. Alcorn, Paul (24 de julio de 2023). "El nuevo AVX10 de Intel aporta capacidades AVX-512 a los E-Cores" . Tom's Hardware . Archivado del original el 25 de diciembre de 2024. Consultado el 22 de octubre de 2023 .
  56. Shah, Agam (9 de agosto de 2023). "El cambio generacional en el chip APX de Intel hará que todas las aplicaciones sean más rápidas" . The New Stack . Consultado el 22 de octubre de 2023 .
  57. Byrne, Joseph. "APX es la mayor incorporación a la arquitectura x86 desde los 64 bits" . Tech Insights . Archivado del original el 28 de noviembre de 2023. Consultado el 22 de octubre de 2023 .
  58. Larabel, Michael. "El código Intel APX comienza a integrarse en el compilador GCC" . Phoronix . Archivado del original el 22 de octubre de 2023. Consultado el 22 de octubre de 2023 .
  59. "Llevando la próxima generación de optimizaciones de rendimiento de CPU Intel® a GCC* 15" . Intel . 15 de junio de 2025.
  60. "Especificación de la arquitectura de Intel® Advanced Performance Extensions (Intel® APX)" . Intel . 21 de julio de 2023. Consultado el 22 de octubre de 2023 .
  61. Sitio web del Grupo Asesor del Ecosistema x86
  62. "Intel y AMD forman un grupo asesor del ecosistema x86 para acelerar la innovación para desarrolladores y clientes" . Intel Corporation . 15 de octubre de 2024. Consultado el 12 de junio de 2026 .

Lecturas adicionales

  • Rosenblum, Mendel; Garfinkel, Tal (mayo de 2005). "Monitores de máquinas virtuales: tecnología actual y tendencias futuras". IEEE Computer . 38 (5): 39– 47. Bibcode : 2005Compr..38e..39R . CiteSeerX 10.1.1.614.9870 . doi : 10.1109/MC.2005.176 . S2CID 10385623 .  
  • Grupo Asesor del Ecosistema x86 , un grupo conjunto entre AMD e Intel.
  • ¿Por qué Intel parece no poder retirar la arquitectura x86?
  • Referencia de instrucciones x86 de 32/64 bits
  • Guía de instrucciones intrínsecas de Intel , una herramienta de referencia interactiva para instrucciones intrínsecas de Intel.
  • Manuales para desarrolladores de software de las arquitecturas Intel® 64 e IA-32
  • Guías para desarrolladores, manuales y documentos ISA de AMD, arquitectura AMD64
Obtenido de " https://en.wikipedia.org/w/index.php?title=X86&oldid=1362917323#16-bit "