De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Las arquitecturas x86 se basaron en el chip microprocesador Intel 8086, lanzado inicialmente en 1978.
Intel Core 2 Duo, un ejemplo de un procesador multinúcleo de 64 bits compatible con x86
AMD Athlon (versión inicial), una implementación x86 técnicamente diferente pero totalmente compatible

x86 es una familia de arquitecturas de conjuntos de instrucciones [a] desarrolladas inicialmente por Intel basadas en el microprocesador Intel 8086 y su variante 8088 . El 8086 se introdujo en 1978 como una extensión de 16 bits del microprocesador 8080 de 8 bits de Intel, con la segmentación de memoria como una 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 Intel 8086 terminan en "86", incluidos los 80186 , 80286 , 80386 y 80486 procesadores.

Se han agregado muchas adiciones y extensiones al conjunto de instrucciones x86 a lo largo de los años, casi de manera consistente con total compatibilidad con versiones anteriores . [b] La arquitectura se ha implementado en procesadores de Intel, Cyrix , AMD , VIA Technologies y muchas otras empresas; también hay implementaciones abiertas, como la plataforma Zet SoC (actualmente inactiva). [2] Sin embargo, de esos, solo Intel, AMD, VIA Technologies y DM&P Electronics poseen licencias arquitectónicas x86, y de estos, solo los dos primeros están produciendo activamente diseños modernos de 64 bits.

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

A partir de 2021 , la mayoría de las computadoras personales , portátiles y consolas de juegos que se venden se basan en la arquitectura x86, mientras que las categorías móviles como teléfonos inteligentes o tabletas están dominadas por ARM ; en el extremo superior, x86 continúa dominando los segmentos de computación en la nube y estaciones de trabajo con uso intensivo de cómputo , [3] mientras que la supercomputadora más rápida está basada en ARM, y las 4 principales ya no están basadas en x86.

Resumen [ editar ]

En la década de 1980 y principios de la de 1990, cuando el 8088 y el 80286 todavía eran de uso común, el término x86 generalmente representaba cualquier CPU compatible con 8086. Hoy, sin embargo, x86 generalmente implica una compatibilidad binaria también con el conjunto de instrucciones de 32 bits del 80386. Esto se debe al hecho de que este conjunto de instrucciones se ha convertido en un mínimo común denominador para muchos sistemas operativos modernos y probablemente también porque el El término se volvió común después de la introducción del 80386 en 1985.

Unos años después de la introducción de los 8086 y 8088, Intel agregó algo de complejidad a su esquema de nomenclatura y terminología cuando se probó el "iAPX" del ambicioso pero desafortunado procesador Intel iAPX 432 en la familia de chips 8086 más exitosa, [ d] aplicado como una especie de prefijo a nivel de sistema. Un sistema 8086 , que incluía coprocesadores como 8087 y 8089 , y chips de sistema específicos de Intel más simples, [e] se describió así como un sistema iAPX 86 . [4] [f] También había términos iRMX (para sistemas operativos), iSBC (para computadoras de placa única) yiSBX (para placas multimódulo basadas en la arquitectura 8086), todas juntas bajo el título Microsistema 80 . [5] [6] Sin embargo, este esquema de nomenclatura fue bastante temporal y duró algunos años a principios de la década de 1980. [gramo]

Aunque el 8086 se desarrolló principalmente para sistemas integrados y pequeñas computadoras multiusuario o de un solo usuario, en gran parte como respuesta al exitoso Zilog Z80 compatible con 8080 , [7] la línea x86 pronto creció en características y potencia de procesamiento. Hoy en día, x86 es omnipresente tanto en computadoras personales estacionarias como portátiles, y también se usa en computadoras de rango medio , estaciones de trabajo , servidores y la mayoría de los nuevos grupos de supercomputadoras de la lista TOP500 . Una gran cantidad de software , incluida una gran lista de sistemas operativos x86, utilizan hardware basado en x86.

Sin embargo, el x86 moderno es relativamente poco común en los sistemas integrados , y las aplicaciones pequeñas de baja potencia (que usan 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. [h] Las arquitecturas simples basadas en 8 y 16 bits son comunes aquí, aunque VIA C7 , VIA Nano , AMD 's Geode , Athlon Neo e Intel Atom compatibles con x86 son ejemplos de diseños de 32 y 64 bits utilizados en algunos segmentos de relativamente bajo consumo y bajo costo.

Ha habido varios intentos, incluso por parte de Intel, de poner fin al dominio del mercado de la arquitectura x86 "poco elegante" diseñada directamente a partir de los primeros microprocesadores simples de 8 bits. Ejemplos de esto son el iAPX 432 (un proyecto originalmente llamado Intel 8800 [8] ), Intel 960 , Intel 860 y la arquitectura Intel / Hewlett-Packard Itanium . Sin embargo, el refinamiento continuo de la fabricación de microarquitecturas , circuitos y semiconductores x86 dificultaría la sustitución de x86 en muchos segmentos. La extensión x86 de 64 bits de AMD (a la que Intel finalmente respondió con un diseño compatible) [9]y la escalabilidad de los chips x86 en forma de modernas CPU multinúcleo, destaca a x86 como un ejemplo de cómo el refinamiento continuo de los estándares establecidos de la industria puede resistir la competencia de arquitecturas completamente nuevas. [10]

Cronología [ editar ]

La siguiente tabla enumera los modelos de procesador y las series de modelos que implementan variaciones del conjunto de instrucciones x86 , en orden cronológico. Cada artículo de línea se caracteriza por diseños de microarquitectura de procesador significativamente mejorados o comercialmente exitosos .

Historia [ editar ]

Otros fabricantes [ editar ]

Am386 , lanzado por AMD en 1991

En varias ocasiones, empresas como IBM , NEC , [i] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC y DM&P comenzaron a diseñar o fabricar [j] procesadores x86 (CPU ) destinado a ordenadores personales y sistemas integrados. Tales implementaciones x86 rara vez son copias simples, pero a menudo emplean diferentes microarquitecturas internas.y diferentes soluciones a nivel electrónico y físico. Naturalmente, 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 reales alrededor de 1990 con procesadores compatibles i386 e i486 , a menudo denominados de manera similar a los chips originales de Intel. Otras empresas que diseñaron o fabricaron procesadores x86 o x87 incluyen ITT Corporation , National Semiconductor , ULSI System Technology y Weitek .

Después del i486 totalmente canalizado , Intel introdujo el nombre de la marca Pentium (que, a diferencia de los números, podría ser una marca registrada ) para su nuevo conjunto de diseños x86 superescalares . Con el esquema de nomenclatura x86 ahora legalmente autorizado, otros proveedores de x86 tuvieron que elegir diferentes nombres 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 el muy eficiente 6x86 (M1) y 6x86 MX ( MII) líneas 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 estrechamente en el diseño anterior 29K RISC de AMD ; similar a NexGen 's Nx586 , se utilizó una estrategia de tal manera que las etapas de tuberías específicas decodifican x86 instrucciones en uniforme y de fácil manejo micro-operaciones , un método que ha seguido siendo la base para la mayoría de los diseños x86 a este día.

Algunas versiones tempranas de estos microprocesadores tenían 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 (la entonces crucial) compatibilidad de pines, mientras que el K5 tenía un rendimiento algo decepcionante cuando (finalmente) se introdujo. La ignorancia de los clientes sobre las alternativas a la serie Pentium contribuyó aún más a que estos diseños fueran comparativamente infructuosos, 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. [k] AMD luego logró convertirse en un competidor serio con el K6conjunto de procesadores, que dio paso a los exitosos Athlon y Opteron . También hubo otros contendientes, como Centaur Technology (anteriormente IDT ), Rise Technology y Transmeta . Los procesadores C3 y C7 energéticamente eficientes de VIA Technologies , que fueron diseñados por la empresa Centaur , se han vendido durante muchos años. El diseño más nuevo de Centaur, el VIA Nano , es su primer procesador con ejecución superescalar y especulativa. Se introdujo aproximadamente al mismo tiempo que el primer procesador "en orden" de Intel desde el Pentium P5 , el Intel Atom .

Extensiones del tamaño de la palabra [ editar ]

La arquitectura del conjunto de instrucciones se ha ampliado dos veces a un tamaño de palabra más grande. En 1985, Intel lanzó el 80386 de 32 bits (más tarde conocido como i386) que reemplazó gradualmente a los primeros chips de 16 bits en las computadoras (aunque generalmente no en los sistemas integrados ) durante los años siguientes; Este modelo de programación extendido se conoció originalmente como la arquitectura i386 (como su primera implementación), pero Intel más tarde lo denominó IA-32 cuando presentó su arquitectura IA-64 (no relacionada) .

En 1999-2003, AMD amplió esta arquitectura de 32 bits a 64 bits y se refirió a ella como x86-64 en los primeros documentos y posteriormente como AMD64 . Intel pronto adoptó las extensiones arquitectónicas de AMD bajo el nombre IA-32e, luego usando el nombre EM64T y finalmente usando Intel 64. Microsoft y Sun Microsystems / Oracle también usan el término "x64", mientras que muchas distribuciones de Linux , y los BSD también usan el "amd64 " término. Microsoft Windows, por ejemplo, designa sus versiones de 32 bits como "x86" y las versiones 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".[14]

Propiedades básicas de la arquitectura [ editar ]

La arquitectura x86 tiene una longitud de instrucción variable, principalmente diseño " CISC " con énfasis en la compatibilidad con versiones anteriores . Sin embargo, el conjunto de instrucciones no es CISC típico, sino básicamente una versión extendida de las arquitecturas simples 8008 y 8080 de ocho bits . El direccionamiento de bytes está habilitado y las palabras se almacenan en la memoria con un orden de bytes little-endian . Se permite el acceso a la memoria a direcciones no alineadas para todos los tamaños de palabra válidos. El tamaño nativo más grande para direcciones de memoria y aritmética de enteros (o compensaciones) es de 16, 32 o 64 bits, dependiendo de la generación de 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] Las compensaciones de direccionamiento inmediato y los datos inmediatos pueden expresarse como cantidades de 8 bits para los casos o contextos que ocurren con frecuencia en los que 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 más conservar el espacio de codificación, la mayoría de los registros se expresan en opcodes utilizando tres o cuatro bits, esta última a través de un prefijo de código de operación en el modo de 64 bits, mientras que a lo sumo un operando a 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 fuente y un destino combinados ), mientras que el otro operando, la fuente , puede ser de registro o inmediato.. Entre otros factores, esto contribuye a un tamaño de código que compite con 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 heredados de sus antepasados ​​de 8 bits) ha hecho que el direccionamiento relativo al registro (utilizando pequeñas compensaciones inmediatas) 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 donde los datos accedidos están disponibles en la caché de nivel superior.

Punto flotante y SIMD [ editar ]

Un procesador de punto flotante dedicado con registros internos de 80 bits, el 8087 , fue desarrollado para el 8086 original . Este microprocesador se desarrolló posteriormente en el 80387 extendido , y los procesadores posteriores incorporaron una versión compatible con versiones anteriores de esta funcionalidad en el mismo microprocesador que el procesador principal. Además de esto, los diseños x86 modernos también contienen una unidad SIMD (consulte SSE a continuación) donde las instrucciones pueden funcionar en paralelo en (una o dos) palabras de 128 bits, cada una con dos o cuatro números de coma flotante. (cada uno de 64 o 32 bits de ancho respectivamente), o alternativamente, 2, 4, 8 o 16 enteros (cada uno de 64, 32, 16 u 8 bits de ancho respectivamente).

La presencia de registros SIMD amplios significa que los procesadores x86 existentes pueden cargar o almacenar hasta 128 bits de datos de memoria en una sola instrucción y también realizar operaciones bit a bit (aunque no aritmética entera [n] ) en cantidades completas de 128 bits en paralelo. Los procesadores Sandy Bridge de Intel agregaron las instrucciones de Advanced Vector Extensions (AVX), ampliando los registros SIMD a 256 bits. Las instrucciones iniciales de muchos núcleos de Intel implementadas por los procesadores Knights Corner Xeon Phi y las instrucciones AVX-512 implementadas por los procesadores Knights Landing Xeon Phi y los procesadores Skylake-X utilizan registros SIMD de 512 bits de ancho.

Implementaciones actuales [ editar ]

Durante la ejecución , los procesadores x86 actuales emplean algunos pasos de decodificación adicionales para dividir la mayoría de las instrucciones en partes más pequeñas llamadas microoperaciones. Luego, estos se entregan a una unidad de control que los almacena en búfer y los programa de acuerdo con la semántica x86 para que puedan ser ejecutados, en parte en paralelo, por una de varias unidades de ejecución (más o menos especializadas) . Estos diseños x86 modernos son así pipeline , superescalar , y también capaz de fuera de servicio y la ejecución especulativa (a través de la predicción de saltos , de renombrado de registros , y la predicción de la dependencia de la memoria), lo que significa que pueden ejecutar varias instrucciones x86 (parciales o completas) simultáneamente, y no necesariamente en el mismo orden que se indica en el flujo de instrucciones. [15] 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 realizar múltiples subprocesos simultáneos con dos subprocesos por núcleo ( Xeon Phi tiene cuatro subprocesos por centro). Algunas CPU Intel admiten memoria transaccional ( TSX ).

Cuando se introdujo, a mediados de la década de 1990, este método a veces se denominaba "núcleo RISC" o "traducción RISC", en parte por razones 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 de forma inherente muchas de las mismas propiedades; el nuevo método se diferencia principalmente en que la traducción a microoperaciones ahora se produce de forma asincrónica. 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 se pueden realizar en paralelo, alimentando simultáneamente más de una unidad de ejecución.

Los últimos procesadores 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 máquina involucrados.

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

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

Segmentación [ editar ]

Las minicomputadoras de finales de la década de 1970 se enfrentaban al límite de direcciones de 16 bits y 64 KB , ya que la memoria se había vuelto más barata. Algunas miniordenadores como el PDP-11 utilizaron esquemas complejos de conmutación de bancos o, en el caso del VAX de Digital , rediseñaron procesadores mucho más costosos que podían manejar directamente datos y direcciones de 32 bits. El 8086 original, desarrollado a partir del simple microprocesador 8080 y destinado principalmente a computadoras muy pequeñas y económicas y otros dispositivos especializados, adoptó en cambio registros de segmento simples que aumentaron el ancho de la dirección de memoria en solo 4 bits. Al multiplicar una dirección de 64 KB por 16, la dirección de 20 bits podría abordar un total de un megabyte(1.048.576 bytes) que era una cantidad bastante grande para una computadora pequeña en ese momento. El concepto de registros de segmento no era nuevo para muchos mainframes que usaban registros de segmento para cambiar rápidamente a diferentes tareas. En la práctica, en el x86 fue (es) una implementación muy criticada que complicó en gran medida muchas tareas de programación y compiladores comunes. Sin embargo, la arquitectura pronto permitió el direccionamiento lineal de 32 bits (comenzando con el 80386 a fines de 1985), pero los principales actores (como Microsoft ) tardaron varios años en convertir sus sistemas basados ​​en 16 bits. Por lo tanto, el 80386 (y el 80486) se utilizó en gran medida como un 8086 rápido (pero todavía basado en 16 bits) durante muchos años.

Los datos y el código podrían administrarse dentro de segmentos "cercanos" de 16 bits dentro de porciones de 64 KB del espacio total de direcciones de 1  MB , o un compilador podría operar en un modo "lejano" usando segment:offsetpares de 32 bits que alcanzan (solo) 1 MB. Si bien eso también resultaría bastante limitante a mediados de la década de 1980, estaba funcionando para el mercado emergente de PC y simplificó la traducción del software de los antiguos 8008 , 8080 , 8085 y Z80 al procesador más nuevo. Durante 1985, el modelo de direccionamiento de segmento de 16 bits se eliminó efectivamente mediante la introducción de registros de desplazamiento de 32 bits, en el diseño 386 .

En el modo real , la segmentación se logra desplazando la dirección del segmento a la izquierda 4 bits y agregando un desplazamiento para recibir una dirección final de 20 bits. Por ejemplo, si DS es A000h y SI es 5677h, DS: SI apuntará a la dirección absoluta DS × 10h + SI = A5677h. Por tanto, el espacio total de direcciones en modo real es de 20 bytes, o 1 MB , una cifra bastante impresionante para 1978. Todas las direcciones de memoria constan de un segmento y un desplazamiento; cada tipo de acceso (código, datos o pila) tiene un registro de segmento predeterminado asociado (para los datos, el registro suele ser DS, para el código es CS y para la pila es SS). Para los accesos a datos, el registro de segmento se puede especificar explícitamente (usando un prefijo de anulación de segmento) para usar cualquiera de los cuatro registros de segmento.

En este esquema, dos pares de segmento / desplazamiento diferentes pueden apuntar a una única ubicación absoluta. Por lo tanto, si DS es A111h y SI es 4567h, DS: SI apuntará al mismo A5677h que el anterior. Este esquema hace que sea imposible utilizar más de cuatro segmentos a la vez. CS y SS son vitales para el correcto funcionamiento del programa, por lo que solo DS y ES pueden usarse para apuntar a segmentos de datos fuera del programa (o, más precisamente, fuera del segmento del programa que se está ejecutando actualmente) o de la pila.

En el modo protegido , introducido en el 80286, un registro de segmento ya no contiene la dirección física del comienzo de un segmento, sino que contiene un "selector" que apunta a una estructura a nivel de sistema llamada descriptor de segmento . Un descriptor de segmento contiene la dirección física del comienzo del segmento, la longitud del segmento y los permisos de acceso a ese segmento. El desplazamiento se compara con la longitud del segmento, y los desplazamientos se refieren a ubicaciones fuera del segmento que provocan una excepción. Los desplazamientos que se refieren a ubicaciones dentro del segmento se combinan con la dirección física del comienzo del segmento para obtener la dirección física correspondiente a ese desplazamiento.

La naturaleza segmentada puede dificultar la programación y el diseño del compilador porque el uso de punteros cercanos y lejanos afecta el rendimiento.

Modos de direccionamiento [ editar ]

Los modos de direccionamiento para procesadores x86 de 16 bits se pueden resumir mediante la fórmula: [17] [18]

Los modos de direccionamiento para procesadores x86 de 32 bits, [19] y para código de 32 bits en procesadores x86 de 64 bits, se pueden resumir mediante la fórmula: [20]

Los modos de direccionamiento para código de 64 bits en procesadores x86 de 64 bits se pueden resumir mediante la fórmula: [20]

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

El 8086 tenía 64 KB de ocho bits (o alternativamente32 palabras K de 16 bits ) de espacio de E / S y unPila de 64 KB (un segmento) en memoria compatible con hardware informático . 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 empujado más recientemente. Hay 256 interrupciones , que pueden ser invocadas tanto por hardware como por software. Las interrupciones pueden en cascada, usando la pila para almacenar la dirección de retorno .

registros x86 [ editar ]

16 bits [ editar ]

Los 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 un propósito adicional; por ejemplo, solo CX se puede utilizar como contador con la instrucción de bucle . Se puede acceder a cada uno como dos bytes separados (por tanto, 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 de base) se usa a menudo para señalar a algún otro lugar de la pila, generalmente por encima de las variables locales (ver puntero de marco ). Los registros SI, DI, BX y BP son registros de direcciones, y también se puede utilizar para indexar matrices.

Se utilizan registros de cuatro segmentos (CS, DS, SS y ES) para formar una dirección de memoria. 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. [21]

Los Intel 80186 y 80188 son esencialmente una CPU 8086 o 8088 mejorada, respectivamente, con periféricos en chip agregados, y tienen los mismos registros de CPU que el 8086 y 8088 (además de los registros de interfaz para los periféricos).

El 8086, 8088, 80186 y 80188 pueden utilizar 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 contener datos numéricos en uno de los siete formatos: 32, 64 o Punto flotante de 80 bits, entero de 16, 32 o 64 bits (binario) y entero decimal empaquetado de 80 bits. [6] : 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 fntsw , y es común usar simplemente algunos de sus bits para bifurcar copiándolos en el BANDERAS normales. [22]

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

32 bits [ editar ]

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 de índice, el puntero de instrucción y el registro FLAGS , pero no los registros de segmento, se expandieron a 32 bits. La nomenclatura representó esto anteponiendo una " E " (para "extendido") a los nombres de registro en lenguaje ensamblador x86 . Por tanto, el registro AX corresponde a los 16 bits más bajos del nuevo registro EAX de 32 bits, SI corresponde a los 16 bits más bajos de ESI, y así sucesivamente. Los registros de propósito general, los registros base y los registros de índice se pueden usar como base en los modos de direccionamiento, y todos esos registros, excepto el puntero de pila, se pueden usar como índice en los modos de direccionamiento.

Se agregaron dos nuevos registros de segmento (FS y GS). Con un mayor número de registros, instrucciones y operandos, se amplió el formato de código máquina . Para proporcionar compatibilidad con versiones anteriores, los segmentos con código ejecutable se pueden marcar para que contengan instrucciones de 16 o 32 bits. Los prefijos especiales permiten la inclusión de 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), [23] como el 8087 y el 80287. El 80386 también podría usar un coprocesador 80287. [24] Con el 80486 y todos los modelos x86 posteriores, la unidad de procesamiento de punto flotante (FPU) está integrada en el chip.

El Pentium MMX agregó ocho registros enteros MMX de 64 bits (MMX0 a MMX7, que comparten bits inferiores con la pila FPU de 80 bits de ancho). [25] Con el Pentium III , Intel agregó un registro de control / estado (MXCSR) Streaming SIMD Extensions (SSE) de 32 bits y ocho registros SSE de punto flotante de 128 bits (XMM0 a XMM7). [26]

64 bits [ editar ]

Comenzando con el procesador AMD Opteron , la arquitectura x86 extendió los registros de 32 bits a registros de 64 bits de una manera similar a cómo se llevó a cabo la extensión de 16 a 32 bits. Un prefijo R (para "registro") identifica los registros de 64 bits (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP) y ocho registros generales adicionales de 64 bits (R8-R15 ) también se introdujeron en la creación de x86-64 . Sin embargo, estas extensiones solo se pueden usar en el modo de 64 bits, que es uno de los dos modos que solo están disponibles en el modo largo.. Los modos de direccionamiento no se cambiaron drásticamente desde el modo de 32 bits, excepto que el direccionamiento se extendió a 64 bits, las direcciones virtuales ahora se extienden por signo a 64 bits (para no permitir bits de modo en direcciones virtuales) y otros detalles del selector se redujeron drásticamente . Además, se agregó un modo de direccionamiento para permitir referencias de memoria relativas a RIP (el puntero de instrucción ), para facilitar la implementación del código independiente de la posición , utilizado en bibliotecas compartidas en algunos sistemas operativos.

128 bits [ editar ]

SIMD registra XMM0 – XMM15.

256 bits [ editar ]

SIMD registra YMM0 – YMM15.

512 bits [ editar ]

SIMD registra ZMM0 – ZMM31.

Miscelánea / propósito especial [ editar ]

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 (comenzando con el 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; 80486 solamente) y registros específicos del modelo (MSR, que aparecen con el Pentium [o] ).

AVX-512 tiene ocho registros de máscara de 64 bits adicionales para seleccionar elementos en un ZMM.

Propósito [ editar ]

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 pensó que se usarían para la siguientes propósitos:

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

Registros de segmento:

  • CS: Código
  • DS: Datos
  • SS: pila
  • ES: datos extra
  • FS: datos adicionales n. ° 2
  • GS: datos extra n. ° 3

No se previeron propósitos particulares para los otros 8 registros disponibles solo en modo de 64 bits.

Algunas instrucciones se compilan y ejecutan de manera más eficiente cuando se utilizan estos registros para su propósito diseñado. Por ejemplo, usar AL como un acumulador y agregarle un valor de byte inmediato produce la suma eficiente al código de operación de AL de 04h, mientras que el uso del registro BL produce el código de operación de suma al registro genérico y más largo de 80C3h. Otro ejemplo es la división y multiplicación de doble precisión que trabaja específicamente con los registros AX y DX.

Los compiladores modernos se beneficiaron de la introducción del byte sib (byte de base de índice de escala ) que permite que los registros se traten de manera uniforme ( como una minicomputadora ). Sin embargo, usar el byte sib universalmente no es óptimo, ya que produce codificaciones más largas que usarlo solo de manera selectiva cuando sea necesario. (El principal beneficio del byte sib es la ortogonalidad y los modos de direccionamiento más potentes que proporciona, que permiten guardar instrucciones y el uso de registros para cálculos de direcciones, como escalar un índice). Algunas instrucciones especiales perdieron prioridad en el diseño del hardware. y se volvió más lento que las secuencias de código pequeñas equivalentes. Un ejemplo notable es la instrucción LODSW.

Estructura [ editar ]

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

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

Modos de funcionamiento [ editar ]

Modo real [ editar ]

El modo de dirección real, [27] 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 1 MiB de memoria, en realidad, un poco más [p] ), acceso directo de software al hardware periférico y ningún concepto de protección de memoria o multitarea en el nivel de hardware. Todas las CPU x86 de la serie 80286 y posteriores se inician en modo real al encenderlas; 80186Las CPU y las versiones anteriores tenían solo un modo operativo, que es equivalente al modo real en los chips posteriores. (En la plataforma IBM PC, el acceso directo del software a las rutinas del BIOS de IBM solo está disponible en modo real, ya que el BIOS está escrito para el modo real. 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, se deben utilizar los registros de segmento. Esto creó grandes complicaciones para los implementadores de compiladores que introdujeron modos de puntero extraños como "cerca", "lejos" y "enorme" para aprovechar la naturaleza implícita de la arquitectura segmentada en diferentes grados, con algunos punteros que contienen compensaciones de 16 bits dentro de segmentos implícitos y otros punteros que contienen direcciones de segmento y compensaciones dentro de los segmentos. Es técnicamente 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 vez y luego solo usando compensaciones de 16 bits (opcionalmente con prefijos de anulación de segmento predeterminados) para dirección de memoria, pero esto impone restricciones sustanciales en la forma en que se pueden direccionar los datos y se pueden combinar los operandos de memoriay 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 direccionados por sus propias direcciones de segmento, en nuevos programas que no se portan desde 8 Procesadores de bits con espacios de direcciones de 16 bits.

Modo irreal [ editar ]

El modo Unreal es utilizado por algún sistema operativo de 16 bits o algún cargador de arranque de 32 bits .

Modo de gestión del sistema [ editar ]

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

Modo protegido [ editar ]

Además del modo real, Intel 80286 admite el modo protegido, expandiendo la memoria física direccionable a 16 MB y la memoria virtual direccionable a 1  GB , y brindando memoria protegida , lo que evita que los programas se corrompan entre sí. Esto se hace utilizando los registros de segmento solo para almacenar un índice en una tabla de descriptores que se almacena en la memoria. Hay dos tablas de este tipo, la Tabla de descriptores globales (GDT) y la Tabla de descriptores locales (LDT), cada una con hasta 8192 descriptores de segmento, cada segmento dando 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 agrega a un desplazamiento de 16 bits para crear una dirección absoluta. La dirección base de la tabla cumple el mismo rol que cumple el valor literal del registro de segmento en 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 que se utilizan 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 puede usarse con el segmento. Debido a que las compensaciones son de 16 bits, los segmentos todavía están limitados a 64 KB cada uno en el modo protegido 80286. [28]

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 en un conjunto de registros internos ocultos. Por tanto, la carga de registros de segmento es mucho más lenta en modo protegido que en modo real, y se debe evitar cambiar de segmento con mucha frecuencia. Las operaciones de memoria reales que utilizan segmentos en modo protegido no se ralentizan mucho porque el 80286 y versiones posteriores tienen hardware para verificar el desplazamiento con el límite del segmento en paralelo con la ejecución de la instrucción.

El Intel 80386 extendió las compensaciones y también 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 hace posible el uso de 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 hacer esto, usa tablas de mapeo adicionales en la memoria llamadas tablas de página. El modo protegido en el 80386 puede funcionar con la búsqueda habilitada o deshabilitada; el mecanismo de segmentación siempre está activo y genera direcciones virtuales que luego son mapeadas por el mecanismo de paginación si está habilitado. El mecanismo de segmentación también se puede deshabilitar de manera efectiva configurando todos los segmentos para que tengan 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 sólo cuatro descriptores (ya que no es necesario utilizar los segmentos FS y GS). [q]

La paginación se usa ampliamente en los sistemas operativos modernos multitarea. Linux , 386BSD y Windows NT se desarrollaron para el 386 porque fue la primera CPU con arquitectura Intel en admitir paginación y compensaciones 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 compatibilidad con versiones anteriores de la clase de procesadores 8086 más antiguos. Tras el encendido (también conocido como arranque ), el procesador se inicializa en modo real y luego comienza a ejecutar instrucciones. El código de arranque del sistema operativo, que puede estar almacenado en la ROM , puede colocar el procesador en el modo protegido para habilitar la paginación y otras funciones. El conjunto de instrucciones en modo protegido es similar al que se usa en modo real. Sin embargo, ciertas restricciones que se aplican al modo real (como no poder usar ax, cx, dx en el direccionamiento [ cita requerida ]) no se aplican en modo protegido. Por el contrario, la aritmética de segmentos, una práctica común en el código de modo real, no está permitida en el modo protegido.

Modo 8086 virtual [ editar ]

También hay un submodo de operación en el modo protegido de 32 bits ( también conocido como modo protegido 80386) llamado modo virtual 8086 , también conocido como modo V86 . Se trata básicamente de un modo operativo híbrido especial que permite que los programas y sistemas operativos en modo real se ejecuten mientras están bajo el control de un sistema operativo supervisor en modo protegido. Esto permite una gran flexibilidad en la ejecución simultánea de programas en modo protegido y programas 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 del modo protegido o en el modo largo.

Modo largo [ editar ]

A mediados de la década de 1990, era obvio que el espacio de direcciones de 32 bits de la arquitectura x86 estaba limitando su rendimiento en aplicaciones que requerían grandes conjuntos de datos. Un espacio de direcciones de 32 bits permitiría al procesador abordar directamente solo 4 GB de datos, un tamaño superado por aplicaciones como el procesamiento de video y los motores de bases de datos . Con direcciones de 64 bits, es posible direccionar directamente 16  EiB de datos, aunque la mayoría de las arquitecturas de 64 bits no admiten el acceso al espacio completo de direcciones de 64 bits; por ejemplo, AMD64 admite solo 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 llamaron x86-64 con la intención de producir. Ese diseño se usa actualmente en casi todos los procesadores x86, con algunas excepciones destinadas a sistemas integrados .

Los chips x86-64 producidos en serie para el mercado general estuvieron disponibles cuatro años más tarde, en 2003, después de que se dedicó el tiempo a probar y perfeccionar los prototipos en funcionamiento; aproximadamente 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 [29] pero optó por no habilitarlo con la esperanza de que AMD no llevara AMD64 al mercado antes de que el nuevo conjunto de instrucciones IA-64 de Itanium fuera ampliamente adoptado. Calificó su implementación de AMD64 como EM64T , y luego la renombró como Intel 64 .

En su literatura 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 se refieren a él como "x86-64", su variante "x86_64" o "amd64". Los sistemas BSD usan "amd64" mientras que macOS usa "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 descartaron en el modo de 64 bits. Esto no afecta la compatibilidad binaria retroactiva real (que ejecutaría código heredado en otros modos que mantienen el soporte para esas instrucciones), pero cambia la forma en que el ensamblador y los compiladores para el nuevo código tienen que trabajar.

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

Extensiones [ editar ]

Unidad de coma flotante [ editar ]

Los primeros procesadores x86 podían ampliarse con hardware de punto flotante en forma de una serie de coprocesadores numéricos de punto flotante con nombres como 8087 , 80287 y 80387, abreviado x87. Esto también se conocía como NPX ( Numeric Processor eXtension ), un nombre apropiado ya que los coprocesadores, aunque se usaban principalmente para cálculos de punto flotante, también realizaban operaciones enteras en formatos binarios y decimales. Con muy pocas excepciones, el 80486 y los procesadores x86 posteriores integraron esta funcionalidad x87 en el chip, lo que convirtió a las instrucciones x87 en una parte integral de facto del conjunto de instrucciones x86.

Cada registro x87, conocido como ST (0) a ST (7), tiene 80 bits de ancho y almacena números en el formato de precisión extendida doble estándar de coma flotante IEEE . Estos registros están organizados como una pila con ST (0) en la parte superior. Esto se hizo para conservar el espacio del código de operación y, por lo tanto, los registros son accesibles aleatoriamente solo para cualquiera 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 pila mediante una instrucción que intercambia cualquier ST (x) especificado con ST (0).

Las operaciones incluyen funciones aritméticas y trascendentales, incluidas 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 una de los registros de pila. Si bien la capacidad de números enteros a menudo se pasa por alto, el x87 puede operar en números enteros más grandes con una sola instrucción que el 8086, 80286, 80386 o cualquier CPU x86 sin extensiones de 64 bits, y los cálculos de números enteros repetidos incluso en valores pequeños (por ejemplo, 16 bits) se puede acelerar ejecutando instrucciones de números enteros en la CPU x86 y x87 en paralelo. (La CPU x86 sigue funcionando mientras el coprocesador x87 calcula, y el x87 establece una señal al x86 cuando termina o interrumpe el x86 si necesita atención debido a un error).

MMX [ editar ]

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

MMX agregó 8 nuevos registros a la arquitectura, conocidos como MM0 a MM7 (en adelante, MMn ). En realidad, estos nuevos registros eran solo alias para los registros de pila FPU x87 existentes. Por lo tanto, cualquier cosa que se hiciera en la pila de punto flotante también afectaría a los registros MMX. A diferencia de la pila FP, estos registros MMn eran fijos, no relativos y, por lo tanto, eran accesibles aleatoriamente. El conjunto de instrucciones no adoptó la semántica similar a la de una pila para que los sistemas operativos existentes aún pudieran guardar y restaurar correctamente el estado de registro al realizar múltiples tareas sin modificaciones.

Cada uno de los registros MMn son números enteros 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 el registro completo para un solo entero de 64 bits ( palabra cuádruple ), se puede usar para contener dos enteros de 32 bits. ( palabra doble ), cuatro enteros de 16 bits ( palabra ) u ocho enteros de 8 bits ( byte ). Dado que los registros MMn de 64 bits de MMX tienen un alias en la pila FPU y cada uno de los registros de punto flotante tiene 80 bits de ancho, los 16 bits superiores de los registros de punto flotante no se utilizan en MMX. Estos bits se establecen en todos unos mediante cualquier instrucción MMX, que corresponden a la representación de punto flotante de NaN o infinitos.

3D¡Ahora! [ editar ]

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

3D¡Ahora! fue diseñado para ser la evolución natural de MMX de enteros a punto flotante. Como tal, utiliza exactamente la misma convención de nomenclatura de registros que MMX, es decir, MM0 a MM7. La única diferencia es que en lugar de empaquetar enteros en estos registros, se empaquetan dos números de punto flotante de precisión simple en cada registro. La ventaja de asignar un alias a los registros FPU es que la misma instrucción y estructuras de datos utilizadas para guardar el estado de los registros FPU también se pueden usar para guardar 3DNow! registrar estados. Por tanto, no es necesario realizar modificaciones especiales en los sistemas operativos que, de otro modo, no los conocerían.

SSE y AVX [ editar ]

En 1999, Intel introdujo el extensiones Streaming SIMD (SSE) del conjunto de instrucciones , siguiendo en 2000 con 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 fuera casi obsoleto y permitió que las instrucciones fueran dirigidas de manera realista por los compiladores convencionales. Introducido en 2004 junto con la revisión de Prescott del procesador Pentium 4 , SSE3 agregó memoria específica e instrucciones de manejo de subprocesos para mejorar el rendimiento de HyperThreading de Intel.tecnología. AMD obtuvo la licencia del conjunto de instrucciones SSE3 e implementó la mayoría de las instrucciones SSE3 para su revisión E y procesadores Athlon 64 posteriores. El Athlon 64 no es compatible con HyperThreading y carece de las instrucciones SSE3 que se usan solo para HyperThreading.

SSE descartó todas las conexiones heredadas a la pila de FPU. Esto también significó que este conjunto de instrucciones descartaba 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, no limitados por el tamaño de los registros FPU. Los diseñadores crearon ocho registros de 128 bits, denominados XMM0 a XMM7. ( Nota : en AMD64, el número de registros SSE XMM se ha incrementado de 8 a 16.) Sin embargo, la desventaja era que los sistemas operativos debían tener conocimiento de este nuevo conjunto de instrucciones para poder guardar sus estados de registro. Entonces, Intel creó una versión ligeramente modificada del modo protegido, llamado modo mejorado, que permite 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 sepa solo entrará en el modo protegido tradicional.

SSE es un conjunto de instrucciones SIMD que funciona solo en valores de punto flotante, como 3DNow !. Sin embargo, a diferencia de 3DNow! corta todas las conexiones heredadas a la pila FPU. Debido a que tiene registros más grandes que 3DNow !, SSE puede empaquetar el doble de flotantes de precisión simple en sus registros. El SSE original estaba limitado a números de precisión simple, como 3DNow !. El SSE2 introdujo la capacidad de empacar con doble precisiónnúmeros también, que 3DNow! no tenía posibilidad de hacerlo 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 3DNow! MMn registro. A 128 bits, los registros SSE XMMn podrían empaquetar dos flotantes de doble precisión en un registro. Por lo tanto, SSE2 es mucho más adecuado para cálculos científicos que SSE1 o 3DNow !, que se limitaron a una sola precisión. SSE3 no introduce ningún registro adicional.

Advanced Vector Extensions (AVX) duplicó el tamaño de los registros SSE a registros YMM de 256 bits. También introdujo el esquema de codificación VEX para acomodar los registros más grandes, además de algunas instrucciones para permutar elementos. AVX2 no introdujo registros adicionales, pero se destacó por la adición de instrucciones de enmascaramiento, recopilación y reproducción aleatoria.

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

Extensión de dirección física (PAE) [ editar ]

La Extensión de dirección física o PAE se agregó por primera vez en Intel Pentium Pro , y luego por AMD en los procesadores Athlon, [30] para permitir que se direccionen 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ágina diferente con entradas de tabla de página más amplias y un tercer nivel de tabla de página, lo que permite bits adicionales de dirección física. Aunque las implementaciones iniciales en procesadores de 32 bits teóricamente admitían hasta 64 GB de RAM, el chipset y otras limitaciones de la plataforma a menudo restringían lo que realmente se podía usar. x86-64Los procesadores definen estructuras de tabla de páginas que teóricamente permiten hasta 52 bits de dirección física, aunque nuevamente, el chipset y otras preocupaciones de la plataforma (como la cantidad de ranuras DIMM disponibles y la RAM máxima posible por DIMM) evitan que se genere un espacio de direcciones físicas tan grande. dio cuenta. En los procesadores x86-64, el modo PAE debe estar activo antes del cambio al modo largo , y debe permanecer activo mientras el modo largo está activo, por lo que en el modo largo no hay modo "no PAE". El modo PAE no afecta el ancho de las direcciones virtuales o lineales.

x86-64 [ editar ]

En los clústeres de supercomputadoras (según el seguimiento de los datos TOP 500 y visualizados en el diagrama anterior, última actualización en 2013), la aparición de extensiones de 64 bits para la arquitectura x86 habilitó procesadores x86 de 64 bits de AMD e Intel (oliva-gris con pequeña apertura círculos y rojo con pequeños círculos abiertos, en el diagrama, respectivamente) para reemplazar la mayoría de las arquitecturas de procesador RISC utilizadas anteriormente en dichos sistemas (incluidos PA-RISC , SPARC , Alpha y otros) y x86 de 32 bits (verde en el diagrama ), a pesar de que Intel inicialmente intentó sin éxito reemplazar x86 con una nueva arquitectura incompatible de 64 bits en Itaniumprocesador. La arquitectura principal no x86 que todavía se utiliza, a partir de 2014, en clústeres de supercomputación es el Power ISA utilizado por los microprocesadores IBM POWER (azul con mosaico de diamantes en el diagrama), con SPARC como un segundo distante.

En la década de 2000, los límites de direccionamiento de memoria de los procesadores x86 de 32 bits eran un obstáculo para su uso en clústeres informáticos de alto rendimiento y potentes estaciones de trabajo de escritorio. El antiguo x86 de 32 bits competía con arquitecturas RISC de 64 bits mucho más avanzadas que podían utilizar mucha más memoria. Intel y todo el ecosistema x86 necesitaban direccionamiento de memoria de 64 bits para que x86 sobreviviera a la era de la informática de 64 bits, ya que las aplicaciones de software de escritorio y estaciones de trabajo pronto comenzarían a alcanzar los límites del direccionamiento de memoria de 32 bits. Sin embargo, Intel consideró que era el momento adecuado para dar un paso audaz y utilizar la transición a las computadoras de escritorio de 64 bits para alejarse de 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 la informática de alto rendimiento , con la esperanza de que eventualmente reemplazara al x86 de 32 bits. [31] Si bien IA-64 era incompatible con x86, el procesador Itanium proporcionaba capacidades de emulación para traducir instrucciones x86 a IA-64, pero esto afectó tanto el rendimiento de los programas x86 que rara vez, o nunca, fue realmente útil para el usuarios: los programadores deberían reescribir los programas x86 para la arquitectura IA-64 o su rendimiento en Itanium sería mucho peor que en un verdadero procesador x86. El mercado rechazó el procesador Itanium desde que se rompiócompatibilidad con versiones anteriores y prefirió seguir usando 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 compatibilidad con versiones anteriores 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 tanto, las aplicaciones y los sistemas operativos de 32 y 16 bits podrían simplemente continuar usando un procesador AMD64 en modo protegido o en otros modos, sin el más mínimo sacrificio de rendimiento [32]y con total compatibilidad con las instrucciones originales del Intel 8086 de 16 bits. [33] ( p13-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 el soporte de Microsoft AMD64, Intel tuvo que responder e introdujo su propio procesador x86-64, el Prescott Pentium 4, en julio de 2004. [34] Como resultado, el procesador Itanium con su IA-64 El conjunto de instrucciones rara vez se usa y x86, a través de su encarnación x86-64, sigue siendo la arquitectura de CPU dominante en las computadoras no integradas.

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

Como resultado de la contribución de AMD de 64 bits al linaje x86 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 casi desaparecieron del mercado de las estaciones de trabajo. x86-64 comenzó a utilizarse en potentes supercomputadoras (en sus encarnaciones AMD Opteron e Intel Xeon ), un mercado que anteriormente era el hábitat natural para los diseños RISC de 64 bits (como los microprocesadores IBM POWER o SPARCprocesadores). El gran salto hacia la informática de 64 bits y el mantenimiento de la compatibilidad con versiones anteriores del 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 ) a computadoras de escritorio para juegos rápidos (por ejemplo, Intel Core i7 y AMD FX / Ryzen ), e incluso dominan grandes clústeres de supercomputación , dejando efectivamente solo la arquitectura RISC ARM de 32 bits y 64 bits como competidor en el mercado de teléfonos inteligentes y tabletas .

Virtualización [ editar ]

Antes de 2005, los procesadores de arquitectura x86 no podían cumplir con los requisitos de Popek y Goldberg , una especificación para la virtualización creada en 1974 por Gerald J. Popek y Robert P. Goldberg . Sin embargo, tanto los productos de hipervisor de virtualización x86 de código abierto como los propietarios se desarrollaron utilizando la virtualización basada en software . Los sistemas patentados incluyen Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player y Windows Virtual PC , mientras que los sistemas gratuitos y de código abierto incluyen QEMU, Máquina virtual basada en kernel , 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. [35]

AES [ editar ]

Ver también [ editar ]

  • lenguaje ensamblador x86
  • listados de instrucciones x86
  • CPUID
  • Itanium
  • x86-64
  • 680x0 , una arquitectura competitiva en las eras de 16 bits y principios de 32 bits
  • PowerPC , una arquitectura que compite en las últimas eras de 32 y 64 bits
  • Microarquitectura
  • Lista de microprocesadores AMD
  • Lista de microprocesadores Intel
  • Lista de microarquitecturas de CPU Intel
  • Lista de microprocesadores VIA
  • Lista de fabricantes de x86
  • Dirección base de entrada / salida
  • Solicitud de interrupción
  • iAPX
  • Modelo tic-tac

Notas [ editar ]

  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. ^ Intel abandonó su esquema de nomenclatura "x86" con el Pentium P5 durante 1993 (ya que los números no podían ser marcas registradas). Sin embargo, el término x86 ya estaba establecido entre técnicos, redactores de compiladores, etc.
  3. ^ Lacomputadora portátil GRID Compass , por ejemplo.
  4. ^ Incluidos los procesadores 8088 , 80186 , 80188 y 80286 .
  5. ^ Dicho sistema también contenía la combinación habitual decomponentes de soporteestándar de la serie 7400 , incluidos multiplexores , búferes y lógica de cola .
  6. ^ El significado real de iAPX era Arquitectura de rendimiento avanzado de Intel o, a veces, Arquitectura de procesador avanzado de Intel .
  7. ^ finales de 1981 a principios de 1984, aproximadamente
  8. ^ El mercado de procesadores integrados está poblado por más de 25 arquitecturas diferentesque, debido a la sensibilidad al precio, la baja potencia y los requisitos de simplicidad del hardware, superan en número a los x86.
  9. ^ El NEC V20 y V30 también proporcionaron el conjunto de instrucciones 8080 más antiguo, lo que permite que las PC equipadas con estos microprocesadores operen aplicaciones CP / M a toda velocidad (es decir, sin la necesidad de simular un 8080 por software).
  10. ^ Las empresas fabulosas diseñaron el chip y contrataron a otra empresa para fabricarlo, mientras que las empresas fabulosas harían tanto el diseño como la fabricación ellas mismas. Algunas empresas comenzaron como fabricantes fabulosos y luego se convirtieron en diseñadores sin fabulosas, como AMD.
  11. ^ Sin embargo, tenía un FPU más lento, lo que es un poco irónico ya que Cyrix comenzó como diseñador de unidades rápidas de punto flotante para procesadores x86.
  12. ^ Los microprocesadores de 16 y 32 bits se introdujeron durante 1978 y 1985 respectivamente; Los planes para 64 bits se anunciaron durante 1999 y se introdujeron gradualmente a partir de 2003.
  13. ^ Algunos diseños "CISC", como el PDP-11 , pueden utilizar dos.
  14. ^ Eso se debe a que la aritmética de enteros genera acarreo entre bits posteriores (a diferencia de las operaciones simples de bit a bit).
  15. ^ Dos 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 servicios del sistema en modo kernel y el puntero de pila del kernel correspondiente. Inicializados durante el inicio del sistema, SYSENTER_EIP_MSR y SYSENTER_ESP_MSR son utilizados por las instrucciones SYSENTER (Intel) o SYSCALL (AMD) para lograr Fast System Calls, aproximadamente tres veces más rápido que el método de interrupción de software usado 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 direccionabilidad 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 bit de dirección), por lo que el bit 21 de la dirección, el bit 20, se descartaba y las direcciones que pasaban de 1 MB eran espejos del extremo inferior del espacio de direcciones (comenzando por la dirección cero). Desde el 80286, todas las CPU x86 tienen al menos 24 líneas de direcciones físicas, 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 agregó hardware conmutable para deshabilitar el bit de dirección 21 a las máquinas con un 80286 o posterior para que todos los programas diseñados para los modelos basados ​​en 8088/8086 pudieran ejecutarse, mientras que el software más nuevo podría aprovechar la memoria "alta" en modo real y la Espacio de direcciones de 16 MB o más en modo protegido; consulte 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 de 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 [ editar ]

  1. ^ Pryce, Dave (11 de mayo de 1989). "La CPU 80486 de 32 bits abre nuevos caminos en densidad de chips y rendimiento operativo. (Intel Corp.) (anuncio del producto) EDN" (Comunicado de prensa).
  2. ^ "Zet: La implementación abierta x86 (IA-32): descripción general" . OpenCores . 4 de noviembre de 2013 . Consultado el 5 de enero de 2014 .
  3. ^ Brandon, Jonathan (15 de abril de 2015). "La nube más allá de x86: cómo están regresando las arquitecturas antiguas" . ICloud PE . Noticias de Business Cloud . Consultado el 23 de noviembre de 2020 . A pesar del dominio de x86 en el centro de datos, es difícil ignorar el ruido que los proveedores han estado haciendo durante los últimos años en torno a arquitecturas que no son x86 como ARM ...
  4. ^ Dvorak, John C. "¿Qué pasó con Intel iAPX432?" . Dvorak.org . Consultado el 18 de abril de 2014 .
  5. ^ Referencia del programador de iAPX 286 (PDF) . Intel. 1983.
  6. ^ a b iAPX 86, 88 Manual del usuario (PDF) . Intel. Agosto de 1981.
  7. ^ Edwards, Benj (16 de junio de 2008). "Nacimiento de un estándar: el microprocesador Intel 8086" . PCWorld . Consultado el 14 de septiembre de 2014 .
  8. ^ Stanley Mazor (enero-marzo de 2010). "Intel 8086". IEEE Annals of the History of Computing . 32 (1): 75–79. doi : 10.1109 / MAHC.2010.22 .
  9. ^ "AMD revela nuevas tecnologías en el foro de microprocesadores" (Comunicado de prensa). AMD . 5 de octubre de 1999. Archivado desde el original el 2 de marzo de 2000. "Una y otra vez, los arquitectos de procesadores han analizado la arquitectura x86 poco elegante y han declarado que no se puede estirar para adaptarse a las últimas innovaciones", dijo Nathan Brookwood, analista principal de Insight 64.
  10. ^ "Microsoft para finalizar el soporte de Intel Itanium" . Consultado el 14 de septiembre de 2014 .
  11. ^ a b "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 la macrofusión.
  12. ^ a b Niebla, Agner. "La microarquitectura de las CPUs Intel, AMD y VIA" (PDF) . pag. 107. Core2 puede realizar una fusión macro-operativa solo en el modo de 16 y 32 bits. Core Nehalem también puede hacer esto en modo de 64 bits.
  13. ^ Singh, Kay (24 de noviembre de 2020). "Apple Silicon M1: Black. Magic. Fuckery" .
  14. ^ "Consideraciones de instalación y configuración para equipos basados ​​en Windows x64 Edition" . Consultado el 14 de septiembre de 2014 .
  15. ^ "Procesadores - ¿Qué modo de direccionamiento utilizan los procesadores Intel?" . Consultado el 14 de septiembre de 2014 .
  16. ^ "Interruptores DSB" . Amplificador Intel VTune 2013 . Intel . Consultado el 26 de agosto de 2013 .
  17. ^ "Manual del usuario de la familia 8086" (PDF) . Corporación Intel. Octubre de 1979. págs. 2-69.
  18. ^ "Manual de referencia del programador de iAPX 286" (PDF) . Corporación Intel. 1983. 2.4.3 Modos de direccionamiento de memoria.
  19. ^ 80386 Manual de referencia del programador (PDF) . Corporación Intel. 1986. 2.5.3.2 CÁLCULO DE DIRECCIONES EFECTIVAS.
  20. ^ a b Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, Volumen 1: Arquitectura básica . Corporación Intel. Marzo de 2018. Capítulo 3.
  21. ^ "Guía de montaje x86" . Cs.virginia.edu. 11 de septiembre de 2013 . Consultado el 6 de febrero de 2014 .
  22. ^ "FSTSW / FNSTSW - Almacenar palabra de estado FPU x87" . La forma FNSTSW AX de la instrucción se utiliza principalmente en la ramificación condicional ...
  23. ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 8.
  24. ^ "Familia Intel 80287" . CPU-mundo .
  25. ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 9.
  26. ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Capítulo 10.
  27. ^ Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Sección 1.2, "Modos de funcionamiento" . Consultado el 27 de enero de 2014 .
  28. ^ Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Capítulo 6, "Gestión de memoria y direccionamiento virtual" . Consultado el 27 de enero de 2014 .
  29. ^ Tecnología Yamhill de Intel: compatible con x86-64 | Geek.com
  30. ^ AMD, Inc. (febrero de 2002). "Apéndice E" (PDF) . Guía de optimización del código x86 del procesador AMD Athlon ™ (revisión K ed.). pag. 250 . Consultado el 13 de abril de 2017 . Se utiliza un índice de 2 bits que consta de bits PCD y PWT de la entrada de la tabla de páginas para seleccionar uno de los cuatro campos de registro PAT cuando PAE (extensiones de dirección de página) está habilitado o cuando el PDE no describe una página grande.
  31. ^ Manek Dubash (20 de julio de 2006). "¿Intel abandonará el Itanium?" . Techworld . Consultado el 19 de diciembre de 2010 . Una vez promocionado por Intel como un reemplazo para la línea de productos x86, las expectativas para Itanium se han reducido bastante.
  32. ^ "Desmitificación del rendimiento de IBM WebSphere Application Server de 64 bits" (PDF) . IBM Corporation. 6 de septiembre de 2007. p. 14 . Consultado 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 un rendimiento de hardware nativo completo en las plataformas POWER y x86-64. A diferencia de algunas arquitecturas de procesador 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 funciones de 64 bits pueden ejecutarse con un rendimiento completo en la versión de 32 bits de WebSphere que se ejecuta en las plataformas de 64 bits mencionadas anteriormente.
  33. ^ "Volumen 2: Programación del sistema" (PDF) . Manual del programador de la arquitectura AMD64 . AMD Corporation. Septiembre de 2012 . Consultado el 17 de febrero de 2014 .
  34. ^ Charlie Demerjian (26 de septiembre de 2003). "Por qué Prescott de Intel utilizará extensiones AMD64" . El indagador . Consultado el 7 de octubre de 2009 .
  35. ^ Adams, Keith; Agesen, Ole (21 al 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 . Consultado el 22 de diciembre de 2006 .

Lectura adicional [ editar ]

  • Rosenblum, Mendel; Garfinkel, Tal (mayo de 2005). Monitores de máquinas virtuales: tecnología actual y tendencias futuras . 38 . págs. 39–47. CiteSeerX  10.1.1.614.9870 . doi : 10.1109 / MC.2005.176 .

Enlaces externos [ editar ]

  • Por qué parece que Intel no puede retirar el x86
  • Referencia de instrucciones x86 de 32/64 bits
  • Intel Intrinsics Guide , una herramienta de referencia interactiva para las instrucciones intrínsecas de Intel
  • Manuales para desarrolladores de software de arquitecturas Intel® 64 e IA-32
  • Guías, manuales y documentos ISA para desarrolladores de AMD, arquitectura AMD64