x86

Familia de arquitecturas de conjuntos de instrucciones

x86
DiseñadorIntel , AMD
Pedazos16 bits , 32 bits y 64 bits
Introducido1978 (16 bits), 1985 (32 bits), 2003 (64 bits)
DiseñoCISC
TipoRegistro–memoria
CodificaciónVariable (1 a 15 bytes)
DerivaciónCódigo de condición
EndianidadPequeño
Tamaño de página8086i286 : Ninguno
i386 , i486 : páginas de 4 KB
P5 Pentium : páginas de 4 MB agregadas ( PAE
heredado : 4 KB→2 MB) x86-64 : páginas de 1 GB agregadas
Extensionesx87 , IA-32 , x86-64 , X86S , MMX , 3DNow! , SSE , MCA , ACPI , SSE2 , NX bit , SMT , SSE3 , SSSE3 , SSE4 , SSE4.2 , AES-NI , CLMUL , SM3 , SM4 , RDRAND , SHA , MPX , SME , SGX , XOP , F16C , ADX , BMI , FMA , AVX , AVX2 , AVX-VNNI , AVX512 , AVX10 , AMX , VT-x , VT-d , AMD-V , AMD-Vi , TSX , ASF , TXT , APX
AbiertoEn parte. Para algunas funciones avanzadas, x86 puede requerir una licencia de Intel; x86-64 puede requerir una licencia adicional de AMD. El procesador Pentium Pro (y NetBurst ) ha estado en el mercado durante más de 21 años [1] y, por lo tanto, no puede estar sujeto a reclamaciones de patentes. Por lo tanto, el subconjunto i686 de la arquitectura x86 está completamente abierto. Los procesadores de la serie Opteron 1000 han estado en el mercado durante más de 21 años [2] y, por lo tanto, no pueden estar sujetos a reclamaciones de patentes. Por lo tanto, el subconjunto AMD K8 de la arquitectura x86 está completamente abierto.
Registros
De propósito general
  • 16 bits: 6 registros semidedicados, BP y SP no son de propósito general
  • 32 bits: 8 GPR, incluidos EBP y ESP
  • 64 bits: 16 GPR, incluidos RBP y RSP
Punto flotante
Las arquitecturas x86 se basaron en el chip microprocesador Intel 8086, lanzado inicialmente en 1978.
Intel Core 2 Duo, un ejemplo de procesador multinúcleo de 64 bits compatible con x86
AMD Athlon (versión anterior), una implementación x86 técnicamente diferente pero totalmente compatible

x86 (también conocido como 80x86 [3] o la familia 8086 [4] ) es una familia de arquitecturas de conjunto de instrucciones de ordenador de conjunto de instrucciones complejo (CISC) [a] desarrollada inicialmente por Intel basada 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 de 16 bits del microprocesador 8080 de 8 bits de Intel , con la 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 integrados y las computadoras de propósito general usaban chips x86 antes de que comenzara el mercado de compatibilidad con PC , [b] algunos de ellos antes del debut de IBM PC (1981).

A partir de junio de 2022 [actualizar], la mayoría de las computadoras de escritorio y portátiles vendidas se basan en la familia de arquitectura x86, [5] mientras que las categorías móviles como los teléfonos inteligentes o las tabletas están dominadas por ARM . En el extremo superior, x86 sigue dominando los segmentos de estaciones de trabajo con uso intensivo de recursos computacionales y computación en la nube . [6]

Descripción general

En los años 80 y principios de los 90, cuando el 8088 y el 80286 todavía eran de uso común, el término x86 solía representar 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 al hecho de que este conjunto de instrucciones se ha convertido en una especie de mínimo común denominador para muchos sistemas operativos modernos y también probablemente a que 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 del 8086 y el 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 familia de chips 8086, más exitosa, [c] aplicado como una especie de prefijo a nivel de sistema. Un sistema 8086, que incluía coprocesadores como el 8087 y el 8089 , y chips de sistema más simples específicos de Intel, [d] se describía así como un sistema iAPX 86. [7] [e] También existían los términos iRMX (para sistemas operativos), iSBC (para computadoras de placa única) e iSBX (para placas multimódulo basadas en la arquitectura 8086), todos juntos bajo el encabezado Microsystem 80. [ 8] [9] Sin embargo, este esquema de nombres fue bastante temporal y duró unos pocos años a principios de la década de 1980. [f]

Aunque el 8086 se desarrolló principalmente para sistemas integrados y pequeñas computadoras multiusuario o monousuario, en gran medida como respuesta al exitoso Zilog Z80 compatible con 8080 , [10] 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 clústeres de supercomputadoras de la lista TOP500 . Una gran cantidad de software , incluida una gran lista de sistemas operativos x86, utilizan hardware basado en x86.

El x86 moderno es relativamente poco común en sistemas integrados , sin embargo, y las pequeñas aplicaciones de bajo consumo (que usan baterías diminutas) y los mercados de microprocesadores de bajo costo, como electrodomésticos y 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 RISC-V , aunque VIA C7 compatible con x86 , VIA Nano , Geode de AMD , Athlon Neo e Intel Atom 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 acabar con el dominio del mercado de la "inelegante" arquitectura x86 diseñada directamente a partir de los primeros microprocesadores simples de 8 bits. Ejemplos de ello son el iAPX 432 (un proyecto originalmente llamado Intel 8800 [11] ), el Intel 960 , el Intel 860 y la arquitectura Intel/Hewlett-Packard Itanium . Sin embargo, el continuo refinamiento de las microarquitecturas x86 , los circuitos y la fabricación de semiconductores haría difícil reemplazar a x86 en muchos segmentos. La extensión de 64 bits de x86 de AMD (a la que Intel finalmente respondió con un diseño compatible) [12] y la escalabilidad de los chips x86 en forma de modernas CPU multinúcleo, están subrayando a x86 como un ejemplo de cómo el continuo refinamiento de los estándares establecidos de la industria puede resistir la competencia de arquitecturas completamente nuevas. [13]

Cronología

En la siguiente tabla se enumeran los modelos de procesadores y las series de modelos que implementan diversas arquitecturas de la familia x86, en orden cronológico. Cada línea de productos se caracteriza por diseños de microarquitectura de procesadores significativamente mejorados o comercialmente exitosos.

Cronología de los procesadores x86
EraIntroducciónModelos de CPU destacadosEspacio de direcciónCaracterísticas destacables
LinealVirtualFísico
x86-161978Intel 8086 , Intel 8088 (1979)16 bitsN / A20 bits ISA de 16 bits , IBM PC (8088), IBM PC/XT (8088)
1982Intel 80186 , Intel 80188
NEC V20 /V30 (1983)
8086-2 ISA, integrado (80186/80188)
2doIntel 80286 y clones30 bits24 bitsmodo protegido , IBM PC/XT 286 , IBM PC/AT
IA-321985Intel 80386 , AMD Am386 (1991)32 bits46 bits32 bits ISA de 32 bits , paginación, IBM PS/2
(tubería, caché)1989Intel 80486
Cyrix Cx486S , DLC (1992),
AMD Am486 (1993), Am5x86 (1995)
canalización , FPU x87 en chip (486DX), caché en chip

( Superescalar )
1993Intel Pentium , Pentium MMX (1996)Superescalar , bus de datos de 64 bits , FPU más rápida, MMX (Pentium MMX), APIC , SMP
1994NexGen Nx586
AMD 5k86 / K5 (1996)
Microarquitectura discreta ( traducción μ-op )
1995Cyrix Cx5x86
Cyrix 6x86 /MX (1997)/ MII (1998)
ejecución dinámica
6.º
( PAE , traducción μ-op)
1995Intel Pentium Pro36 bits ( PAE )Traducción de μ-op, instrucciones de movimiento condicionales, ejecución dinámica , ejecución especulativa , superescalar x86 de 3 vías, FPU superescalar, PAE , caché L2 en chip
1997Intel Pentium II , Pentium III (1999),
Celeron (1998), Xeon (1998)
Caché L2 en paquete (Pentium II) o en chip (Celeron), SSE (Pentium III), ranura 1 , socket 370 o ranura 2 (Xeon)
1997AMD K6 / K6-2 (1998)/ K6-III (1999)32 bits3DNow!, sistema de caché de 3 niveles (K6-III)
Plataforma mejorada1999Procesador AMD Athlon
Athlon XP / MP (2001)
Duron (2000)
Sempron (2004)
36 bitsMMX+, 3DNow!+, bus de doble bombeo, ranura A o zócalo A
2000Transmeta Crusoe32 bitsProcesador de plataforma x86 con tecnología CMS , núcleo VLIW -128, controlador de memoria integrado, lógica de puente PCI integrado
Intel Pentium 436 bitsSSE2 , HTT (Northwood), NetBurst, bus de cuatro bombeos, caché de seguimiento, Socket 478
2003Intel Pentium M
Intel Core (2006)
Pentium de doble núcleo (2007)
Fusión μ-op , bit XD (Dothan) (Intel Core "Yonah")
Eficacia transmetaCMS 6.0.4, VLIW -256, bits NX , HT
IA-64Transición de 64 bits
1999-2005
2001Intel Itanium (2001-2017)52 bitsArquitectura EPIC de 64 bits , paquete de instrucciones VLIW de 128 bits, hardware integrado IA-32 H/W que permite sistemas operativos x86 y aplicaciones x86 (primeras generaciones), software IA-32 EL que permite aplicaciones x86 (Itanium 2), los archivos de registro de Itanium se reasignan a registros x86
x86-6464 bits ampliado
desde 2001
x86-64 es la arquitectura extendida de 64 bits de x86, su modo Legacy conserva la arquitectura x86 completa e inalterada. La arquitectura nativa de los procesadores x86-64: reside en el modo de 64 bits, carece de modo de acceso en la segmentación, presenta un espacio de direcciones lineal con permiso arquitectónico de 64 bits; se proporciona una arquitectura IA-32 adaptada que reside en el modo de compatibilidad junto con el modo de 64 bits para admitir la mayoría de las aplicaciones x86
2003Athlon 64 / FX / X2 (2005), Opteron
Sempron (2004)/ X2 (2008),
Turion 64 (2005)/ X2 (2006)
40 bitsAMD64 (excepto algunos procesadores Sempron presentados como procesadores puramente x86), controlador de memoria integrado, HyperTransport , núcleo dual integrado (X2), AMD-V (Athlon 64 Orleans), Socket 754 / 939 / 940 o AM2
2004Pentium 4 (Prescott)
Celeron D , Pentium D (2005)
36 bitsEM64T (habilitado en modelos seleccionados de Pentium 4 y Celeron D), SSE3 , canalización NetBurst de segunda generación, núcleo doble (en chip: Pentium D 8xx, en chip: Pentium D 9xx), Intel VT (Pentium 4 6x2), socket LGA 775
2006Intel Core 2
Pentium de doble núcleo (2007)
Celeron de doble núcleo (2008)
Intel 64 (<<== EM64T), SSSE3 (65 nm), ejecución dinámica amplia, fusión de μ-op, fusión de macro-op en modo de 16 y 32 bits, [14] [15] núcleo cuádruple integrado (Core 2 Quad), caché L2 compartida inteligente (Intel Core 2 "Merom")
2007AMD Phenom / II (2008)
Athlon II (2009)
Turion II (2009)
48 bitsMonolítico de cuatro núcleos (X4)/triple núcleo (X3), SSE4a , Rapid Virtualization Indexing (RVI), HyperTransport 3, AM2+ o AM3
2008Intel Core 2 (45 nm)40 bitsSSE4.1
Intel AtomProcesador de netbook o dispositivo inteligente de bajo consumo, núcleo P54C reutilizado
Intel Core i7
Core i5 (2009)
Core i3 (2010)
QuickPath, GMCH en chip ( Clarkdale ), SSE4.2 , tablas de páginas extendidas (EPT) para virtualización, fusión de macrooperaciones en modo de 64 bits, [14] [15] (Intel Xeon "Bloomfield" con microarquitectura Nehalem)
VIA Nanocifrado basado en hardware ; gestión de energía adaptativa
2010AMD FX48 bitsOcta-core, CMT (Multi-Thread agrupado), FMA, OpenCL, AM3+
2011APU AMD Serie A y E ( Llano )40 bitsGPGPU en matriz, PCI Express 2.0, Socket FM1
APU AMD serie C, E y Z ( Bobcat )36 bitsAPU de dispositivo inteligente de bajo consumo
Intel Core i3 , Core i5 y Core i7
( Sandy Bridge / Ivy Bridge )
Conexión de anillo interna, caché μ-op decodificada, zócalo LGA 1155
2012Serie A de APU AMD ( Bulldozer, Trinity y posteriores)48 bitsAVX , APU basada en Bulldozer, Socket FM2 o Socket FM2+
Intel Xeon Phi ( Rincón de los Caballeros )Coprocesador de tarjeta adicional PCI-E para sistemas basados ​​en XEON, chip Manycore, P54C en orden , VPU muy amplia (SSE de 512 bits), instrucciones LRBni (8 de 64 bits)
2013AMD Jaguar
(Athlon, Sempron)
SoC , consola de juegos y procesador de dispositivos inteligentes de bajo consumo
Intel Silvermont
(Atom, Celeron, Pentium)
36 bitsSoC , procesador para dispositivos inteligentes de consumo de energía bajo o ultrabaja
Intel Core i3 , Core i5 y Core i7 ( Haswell / Broadwell )39 bitsInstrucciones AVX2 , FMA3 , TSX , BMI1 y BMI2 , zócalo LGA 1150
2015Procesadores Intel Broadwell-U
( Intel Core i3 , Core i5 , Core i7 , Core M , Pentium , Celeron )
SoC, Broadwell-U PCH-LP en chip (módulo multichip)
2015–2020Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake
(Intel Pentium/Celeron Gold, Core i3 , Core i5 , Core i7 , Core i9 )
46 bitsAVX-512 (restringido a Cannon Lake-U y variantes de estación de trabajo/servidor de Skylake)
2016Intel Xeon Phi ( Desembarco de los Caballeros )48 bitsCPU y coprocesador de varios núcleos para sistemas Xeon, núcleo basado en Airmont (Atom)
2016AMD Bristol Ridge
(AMD (Pro) A6/A8/A10/A12)
FCH integrado en chip, SoC, zócalo AM4
2017Serie AMD Ryzen / Serie AMD EpycImplementación de SMT por parte de AMD, múltiples matrices en chip
2017Zhaoxin WuDaoKou (KX-5000, KH-20000)La primera arquitectura x86-64 completamente nueva de Zhaoxin
2018–2021Intel Sunny Cove ( Ice Lake -U e Y), Cypress Cove ( Rocket Lake )57 bitsPrimera implementación de Intel de AVX-512 para el segmento de consumo. Incorporación de instrucciones de red neuronal vectorial (VNNI)
2019Matisse de AMD48 bitsDiseño de módulo de múltiples chips con matriz de E/S separada de la(s) matriz(s) de la CPU, compatibilidad con PCIe Gen4
2020Información sobre Willow Cove ( Tiger Lake -Y/U/H)57 bitsArquitectura de interconexión de doble anillo, acelerador neuronal gaussiano (GNA2) actualizado, nuevas instrucciones de intersección vectorial AVX-512, incorporación de tecnología de control de flujo (CET)
2021Intel Alder LakeDiseño híbrido con núcleos de alto rendimiento (Golden Cove) y eficiencia (Gracemont), compatibilidad con PCIe Gen5 y DDR5, acelerador neuronal gaussiano actualizado (GNA3). AVX-512 no es compatible oficialmente
2022Cámara AMD Vermeer (5800X3D)48 bitsLos chips X3D tienen una caché L3 apilada verticalmente en 3D de 64 MB adicional (3D V-Cache) para un máximo de 96 MB de caché L3
2022AMD RafaelLa primera implementación de AVX-512 de AMD para el segmento de consumo, iGPU ahora estándar en las CPU Ryzen con 2 núcleos de cómputo RDNA 2
EraIntroducciónModelos de CPU destacadosEspacio de direcciónCaracterísticas destacables

Historia

Diseñadores y fabricantes

Am386 , lanzado por AMD en 1991

En varias ocasiones, 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 integrados. 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 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 los procesadores compatibles i386 e i486 , a menudo con nombres similares a los chips originales de Intel.

Después del i486 completamente desarrollado , en 1993 Intel introdujo la marca Pentium (que, a diferencia de los números, podía ser una marca registrada ) para su nuevo conjunto de diseños x86 superescalares . 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 las líneas 5x86 y luego las muy eficientes 6x86 (M1) y 6x86 MX ( MII ) de diseños 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, estaba basado estrechamente en el diseño RISC 29K anterior de AMD ; similar al Nx586 de NexGen , utilizaba una estrategia tal que etapas de canalización dedicadas decodificaban las instrucciones x86 en microoperaciones uniformes y fácilmente manejables , un método que ha permanecido como la base de la mayoría de los diseños x86 hasta el día de hoy.

Algunas de las primeras versiones 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 de compatibilidad de pines (que entonces era crucial), mientras que el K5 tuvo un rendimiento algo decepcionante cuando se presentó (finalmente).

La ignorancia de los clientes sobre las alternativas a la serie Pentium contribuyó aún más a que estos diseños fueran comparativamente poco exitosos, a pesar del hecho 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] AMD luego logró convertirse en un serio contendiente con el conjunto de procesadores K6 , que dio paso a los muy exitosos Athlon y Opteron .

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

A lo largo de los años se han añadido muchas adiciones y extensiones al conjunto de instrucciones x86 original, casi de manera consistente con total compatibilidad con versiones anteriores . [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). [16] Sin embargo, de ellas, 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 lleva a lo que se ha llamado 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" [17] de procesadores x86 (por ejemplo, el KX-7000), que no son tan rápidos como los chips AMD o Intel pero siguen siendo de última generación, [18] se había planificado para 2021; sin embargo, a marzo de 2022 el lanzamiento no se había producido. [19]

De arquitectura de 16 y 32 bits a 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 por lo general no en los sistemas integrados ) 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 denominó IA-32 cuando presentó su arquitectura IA-64 (no relacionada) .

Entre 1999 y 2003, AMD extendió esta arquitectura de 32 bits a 64 bits y se refirió a ella como x86-64 en los primeros documentos y más tarde como AMD64 . Intel pronto adoptó las extensiones arquitectónicas de AMD bajo el nombre IA-32e, más tarde utilizando el nombre EM64T y finalmente utilizando Intel 64. Microsoft y Sun Microsystems / Oracle también utilizan el término "x64", mientras que muchas distribuciones Linux y los BSD también utilizan el término "amd64". 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". [20]

En 2023, Intel propuso un cambio importante en la arquitectura denominada X86S (antes conocida como X86-S). La S en X86S significa "simplificación", que tiene como objetivo eliminar la compatibilidad con los modos de ejecución e instrucciones heredados. Un procesador que implemente esta propuesta iniciaría la ejecución directamente en modo largo y solo admitiría sistemas operativos de 64 bits. El código de 32 bits solo sería compatible con las aplicaciones de usuario que se ejecutan en el anillo 3 y utilizaría la misma segmentación simplificada que el modo largo. [21] [22]

Propiedades básicas de la arquitectura

La arquitectura x86 es una longitud de instrucción variable, principalmente un diseño " CISC " con énfasis en la compatibilidad con versiones anteriores . 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 de bytes está habilitado y las palabras se almacenan en la memoria con un orden de bytes little-endian . El acceso a la memoria a direcciones no alineadas está permitido para casi todas las instrucciones. El tamaño nativo más grande para aritmética de números enteros y direcciones de memoria (o desplazamientos ) es de 16, 32 o 64 bits según la generación de la arquitectura (los procesadores más nuevos también incluyen soporte directo para números 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 inmediato y los datos inmediatos se pueden expresar como cantidades de 8 bits para los casos o contextos que ocurren con frecuencia 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 que utilizan tres o cuatro bits, estos últimos a través de 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 fuente y destino combinados), mientras que el otro operando, la fuente, puede ser un registro o inmediato. Entre otros factores, esto contribuye a un tamaño de código que rivaliza 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 antecesores de 8 bits) ha hecho que el direccionamiento relativo al registro (utilizando 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

Un procesador de punto flotante dedicado con registros internos de 80 bits, el 8087 , fue desarrollado para el 8086 original . Este microprocesador posteriormente se desarrolló en el 80387 ampliado , 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 (ver 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 punto flotante (cada uno de 64 o 32 bits de ancho respectivamente), o alternativamente, 2, 4, 8 o 16 números 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 de números enteros [n] ) en cantidades completas de 128 bits en paralelo. Los procesadores Sandy Bridge de Intel agregaron las instrucciones 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 por los procesadores Skylake-X , utilizan registros SIMD de 512 bits de ancho.

Implementaciones actuales

Durante la ejecución , los procesadores x86 actuales emplean unos pocos 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 tanto, pipelined , superscaler y también capaces de ejecución desordenada y especulativa (a través de predicción de bifurcación , cambio de nombre de registro 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 , algunas Pentium 4 y algunas Nehalem y procesadores Intel Core posteriores ) y CPU AMD (empezando por Zen ) también son capaces de multithreading simultáneo con dos subprocesos por núcleo ( Xeon Phi tiene cuatro subprocesos por núcleo). Algunas CPU Intel admiten memoria transaccional ( TSX ).

Cuando se introdujo, a mediados de los años 1990, este método se conocía a veces como "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 los años 1950) también comparte inherentemente muchas de las mismas propiedades; el nuevo método difiere principalmente en que la traducción a microoperaciones ahora se produce de forma asincrónica. El hecho de 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 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, puede ejecutarse más rápido o con menos recursos de la 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 ellas desde una caché especial, en lugar de tener que decodificarlas de nuevo. 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 la marca Core desde Sandy Bridge). [24]

Transmeta utilizó un método completamente diferente en sus CPU Crusoe compatibles con x86. Utilizaron la traducción justo a tiempo 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 en términos de consumo de energía, ya que la CPU puede prescindir del complicado 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]

do S : D S : S S : mi S :     ( [ B incógnita B PAG ] + [ S I D I ] ) + d i s pag yo a do mi metro mi norte a {\displaystyle {\begin{matrix}{\mathtt {CS}}:\\{\mathtt {DS}}:\\{\mathtt {SS}}:\\{\mathtt {ES}}:\end{matrix}}\ \ {\begin{pmatrix}\\{\begin{bmatrix}{\mathtt {BX}}\\{\mathtt {BP}}\end{bmatrix}}+{\begin{bmatrix}{\mathtt {SI}}\\{\mathtt {DI}}\end{bmatrix}}\\\\\end{pmatrix}}+{\rm {desplazamiento}}}

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

do S : D S : S S : mi S : F S : GRAMO S :     [ mi A incógnita mi B incógnita mi do incógnita mi D incógnita mi S PAG mi B PAG mi S I mi D I ] + ( [ mi A incógnita mi B incógnita mi do incógnita mi D incógnita mi B PAG mi S I mi D I ] [ 1 2 4 8 ] ) + d i s pag yo a do mi metro mi norte a {\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}}\\{{ECX}}\\{{EDX}}\\{{EBP}}\\{{ESI}}\\{{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]

{ F S : GRAMO S :     [ GRAMO PAG R ] + ( [ GRAMO PAG R ] [ 1 2 4 8 ] ) R I PAG } + d i s pag yo a do mi metro mi norte a {\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{matriz}}\\\\\end{Bmatrix}}+{\rm {desplazamiento}}}

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

El 8086 tenía64 KB de ocho bits (o alternativamente32 K-word de 16 bits ) espacio de E/S y unPila de 64 KB (un segmento) en la memoria admitida por el hardware de la computadora . Solo se pueden insertar palabras (dos bytes) en la pila. La pila crece hacia direcciones numéricamente inferiores, 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 funcionar en cascada, utilizando la pila para almacenar la dirección de retorno .

registros x86

16 bits

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 usar como un contador con la instrucción de bucle. Se puede acceder a cada uno como dos bytes separados (por lo 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 base) se usa a menudo para apuntar a algún otro lugar en la pila, generalmente por encima de las variables locales (ver puntero de marco ). Los registros SI, DI, BX y BP son registros de dirección y también se pueden usar para indexar matrices.

Se utiliza uno de los cuatro "registros de segmento" posibles (CS, DS, SS y ES) para formar una dirección de memoria. En los procesadores 8086/8088/80186/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] para permitir un direccionamiento de 20 bits en lugar de 16 bits, aunque esto cambió en procesadores posteriores. En ese momento, 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 . Por último, el puntero de instrucción (IP) apunta a la siguiente instrucción que se obtendrá de la memoria y luego se ejecutará; un programa no puede acceder directamente a este registro (leerlo o escribirlo). [30]

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 el 8088 (además de los registros de interfaz para los periféricos).

Los 8086, 8088, 80186 y 80188 pueden utilizar un coprocesador de punto flotante opcional, el 8087. El 8087 aparece ante el programador como parte de la CPU y añade 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 siete formatos: punto flotante de 32, 64 u 80 bits, entero de 16, 32 o 64 bits (binario) y entero decimal empaquetado de 80 bits. [9] : 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 utilizar algunos de sus bits para la ramificación copiándolos en los FLAGS normales. [31]

En el Intel 80286 , para admitir el modo protegido , tres registros especiales contienen direcciones de la tabla de descriptores (GDTR, LDTR, IDTR ) y se utiliza un cuarto registro de tareas (TR) 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 de í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 prefijando una " E " (por "extendido") a los nombres de registro en lenguaje ensamblador x86 . Por lo tanto, 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 de índice se pueden utilizar como base en los modos de direccionamiento, y todos esos registros, excepto el puntero de pila, se pueden utilizar 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 de máquina . Para proporcionar compatibilidad con versiones anteriores, los segmentos con código ejecutable pueden marcarse como si contuvieran 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), [32] como el 8087 y el 80287. El 80386 también podía usar un coprocesador 80287. [33] 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 de vectores enteros MMX de 64 bits (MM0 a MM7, que comparten bits inferiores con la pila FPU de 80 bits de ancho). [34] Con el Pentium III , Intel agregó un registro de control/estado (MXCSR) Streaming SIMD Extensions (SSE) de 32 bits 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 una manera similar a cómo se produjo 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 también se introdujeron ocho registros generales de 64 bits adicionales (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 el modo de 64 bits, que es uno de los dos modos solo disponibles en el modo largo . Los modos de direccionamiento no cambiaron drásticamente con respecto al modo de 32 bits, excepto que el direccionamiento se extendió a 64 bits, las direcciones virtuales ahora tienen signo extendido 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 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 asigna al registro XMM correspondiente.

512 bits

Registros SIMD ZMM0–ZMM31. La mitad inferior de cada uno de los registros ZMM se asigna al registro YMM correspondiente.

Varios/propósito especial

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 Pentium [o] ).

AVX-512 tiene ocho registros de máscara de 64 bits adicionales K0–K7 para seleccionar elementos en un registro vectorial. Según el registro vectorial y el ancho de los elementos, una instrucción determinada puede utilizar solo un subconjunto de bits del registro de máscara.

Objetivo

Aunque los registros principales (con excepción del puntero de instrucciones) son "de propósito general" en las versiones de 32 y 64 bits del conjunto de instrucciones y se pueden usar para cualquier cosa, originalmente se pensó que se utilizarían para los siguientes propósitos:

  • AL/AH/AX/EAX/RAX: Acumulador
  • CL/CH/CX/ECX/RCX: Contador (para uso con bucles y cuerdas)
  • 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 de cadenas .
  • DI/EDI/RDI: Índice de destino para operaciones de cadena.
  • IP/EIP/RIP: puntero de instrucción. Contiene el contador del 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 #2
  • GS: Datos adicionales #3

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

Algunas instrucciones se compilan y ejecutan de manera más eficiente cuando se utilizan estos registros para el propósito para el que fueron diseñadas. Por ejemplo, usar AL como acumulador y agregarle un valor de byte inmediato produce el código de operación de adición a AL eficiente de 04h, mientras que usar el registro BL produce el código de operación de adición a registro genérico y más largo de 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 de escala-índice-base ) que permite que los registros sean tratados de manera uniforme ( similar a una minicomputadora ). Sin embargo, el uso del byte sib de manera universal no es óptimo, ya que produce codificaciones más largas que si solo se lo usara de manera selectiva cuando fuera necesario. (El principal beneficio del byte sib es la ortogonalidad y los modos de direccionamiento más potentes que proporciona, lo que hace posible ahorrar 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 volvieron más lentas que las secuencias de código pequeñas equivalentes. Un ejemplo notable es la instrucción LODSW.

Estructura

Registros de propósito general (A, B, C y D)
645648403224168
R?X
EX
?INCÓGNITA
?El?El
Registros de propósito general de solo modo de 64 bits (R8, R9, R10, R11, R12, R13, R14, R15)
645648403224168
?
?D
¿?
?B
Registros de segmento (C, D, S, E, F y G)
168
?S
Registros de puntero (S y B)
645648403224168
R?P
¿E?P
?PAG
?ES

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

Registros de índice (S y D)
645648403224168
RHODE ISLAND
¿E?yo
?I
?ILLINOIS

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

Registro de puntero de instrucción (I)
645648403224168
ROTURA
EIP
Propiedad intelectual

Modos de funcionamiento

Modo real

El modo de dirección real, [36] comúnmente llamado modo real, es un modo operativo 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 ningún concepto de protección de memoria o multitarea a nivel de hardware. Todas las CPU x86 de la serie 80286 y posteriores se inician en modo real al encenderse; las CPU 80186 y anteriores tenían solo un modo operativo, que es equivalente al modo real en chips posteriores. (En la plataforma IBM PC, el acceso directo por software a las rutinas de BIOS de IBM está disponible solo en modo real, ya que el BIOS está escrito para modo real. Sin embargo, esto no es una propiedad de la CPU x86 sino del diseño de BIOS de IBM).

Para poder 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 "near", "far" y "huge" para aprovechar la naturaleza implícita de la arquitectura segmentada en diferentes grados, con algunos punteros que contienen desplazamientos de 16 bits dentro de segmentos implícitos y otros punteros que contienen direcciones de segmento y desplazamientos dentro de segmentos. Es técnicamente posible utilizar 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 usando solo desplazamientos de 16 bits (opcionalmente con prefijos de anulación de segmento predeterminados) 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 direccionados por sus propias direcciones de segmento, en nuevos programas que no se hayan portado desde 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 cargadores de arranque de 32 bits .

Modo de gestió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 SMM se ejecuta en la SMRAM.

Modo protegido

Además del modo real, el Intel 80286 admite el modo protegido, lo que amplía la memoria física direccionable a 16 MB y la memoria virtual direccionable a 1  GB , y proporciona memoria protegida , 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 de las cuales contiene hasta 8192 descriptores de segmento, y cada segmento da 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 la misma función que el valor literal del registro de segmento cumple 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 utilizar con el segmento. Debido a que los desplazamientos son de 16 bits, los segmentos aún están 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 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 se debe evitar cambiar segmentos con mucha frecuencia. Las operaciones de memoria reales que utilizan segmentos en modo protegido no se ralentizan mucho porque el 80286 y los modelos posteriores tienen hardware para comprobar el desplazamiento con respecto al límite de segmento en paralelo con la ejecución de instrucciones.

El Intel 80386 amplió los desplazamientos 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 ello, utiliza tablas de mapeo 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 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 solo cuatro descriptores (ya que no es necesario utilizar los segmentos FS y GS). [q]

La paginación se utiliza ampliamente en los sistemas operativos multitarea modernos. Linux , 386BSD y Windows NT se desarrollaron para el 386 porque fue la primera CPU de arquitectura Intel que admitió paginación y desplazamientos de segmentos 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 lograr compatibilidad con la antigua clase de procesadores 8086. Al encenderse (es decir, arrancar ), 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 memoria de solo lectura , puede colocar el procesador en 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 de modo real, no está permitida en el modo protegido.

Modo virtual 8086

También existe un submodo de funcionamiento en el modo protegido de 32 bits (también conocido como modo protegido 80386) llamado modo 8086 virtual , también conocido como modo V86 . Se trata básicamente de un modo de funcionamiento 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 a la hora de ejecutar simultáneamente 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 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 permitiría al procesador direccionar directamente solo 4 GB de datos, un tamaño superado por aplicaciones como el procesamiento de vídeo y los motores de bases de datos . Utilizando 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 a todo el espacio 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 declarada de producir un diseño que actualmente se utiliza en casi todos los procesadores x86, con algunas excepciones destinadas a sistemas integrados .

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 dedicara el tiempo necesario para probar y refinar los 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 el soporte para AMD64 [38] 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. Llamó a su implementación de AMD64 EM64T y luego la rebautizó Intel 64 .

En su literatura y en los nombres de las versiones de sus productos, Microsoft y Sun se refieren a AMD64/Intel 64 colectivamente como x64 en los sistemas operativos Windows y Solaris . Las distribuciones 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 en su mayor parte 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 real con versiones anteriores (que ejecutaría código heredado en otros modos que mantienen la compatibilidad con esas instrucciones), pero cambia la forma en que deben funcionar el ensamblador y los compiladores para el código nuevo.

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

Extensiones

Unidad de punto flotante

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 adecuado ya que los coprocesadores, aunque se usaban principalmente para cálculos de punto flotante, también realizaban operaciones con números enteros tanto en formato binario como decimal. Con muy pocas excepciones, los procesadores x86 80486 y posteriores integraron esta funcionalidad x87 en el chip, lo que hizo que las instrucciones x87 fueran 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 del estándar IEEE de punto flotante . Estos registros están organizados como una pila con ST(0) como 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 de origen o el de 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 a través de 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 uno de los registros de la pila. Si bien la capacidad de trabajar con números enteros a menudo se pasa por alto, el x87 puede operar con 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 repetidos de números enteros incluso con valores pequeños (por ejemplo, 16 bits) se pueden acelerar ejecutando instrucciones de números enteros en la CPU x86 y el x87 en paralelo. (La CPU x86 sigue funcionando mientras el coprocesador x87 calcula, y el x87 envía una señal al x86 cuando termina o interrumpe al x86 si necesita atención debido a un error).

MMX

MMX es un conjunto de instrucciones SIMD diseñado por Intel e introducido en 1997 para el microprocesador Pentium MMX . [39] 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 proveedores. MMX se utiliza normalmente para el procesamiento de vídeo (en aplicaciones multimedia, por ejemplo). [40]

MMX agregó 8 nuevos registros a la arquitectura, conocidos como MM0 a MM7 (en adelante denominados MMn ). En realidad, estos nuevos registros eran solo alias para los registros de pila de 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 pila, de modo que los sistemas operativos existentes aún podían guardar y restaurar correctamente el estado del registro al realizar múltiples tareas sin modificaciones. [39]

Cada uno de los registros MMn son 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 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 asociados a 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 usan en MMX. Estos bits se establecen en todos unos por cualquier instrucción MMX, que corresponde a la representación de punto flotante de NaN o infinitos. [39]

¡3DAhora!

En 1997, AMD presentó 3DNow!. [41] 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 de procesamiento vectorial de la CPU de las aplicaciones con 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 K6 y Athlon de AMD . [42]

3DNow! fue diseñado para ser la evolución natural de MMX de números enteros a números de punto flotante. Como tal, utiliza exactamente la misma convención de nombres de registros que MMX, es decir, MM0 a MM7. [43] La única diferencia es que en lugar de empaquetar números enteros en estos registros, se empaquetan dos números de punto flotante de precisión simple en cada registro. La ventaja de crear alias para los registros FPU es que las mismas instrucciones y estructuras de datos utilizadas para guardar el estado de los registros FPU también se pueden utilizar para guardar los estados de los registros de 3DNow!. Por lo tanto, no se requieren modificaciones especiales en los sistemas operativos que, de lo contrario, no sabrían sobre ellos. [44]

ESSy AVX

En 1999, Intel introdujo el conjunto de instrucciones Streaming SIMD Extensions (SSE) , seguido en 2000 por SSE2. La primera incorporación permitió la descarga de operaciones básicas de punto flotante de la pila x87 y la segunda hizo que MMX quedara casi obsoleto y permitió que las instrucciones fueran dirigidas de manera realista por compiladores convencionales. Introducido en 2004 junto con la revisión Prescott del procesador Pentium 4 , SSE3 agregó instrucciones específicas de manejo de memoria y subprocesos para aumentar el rendimiento de la tecnología HyperThreading de Intel . AMD licenció el conjunto de instrucciones SSE3 e implementó la mayoría de las instrucciones SSE3 para su revisión E y los procesadores Athlon 64 posteriores. El Athlon 64 no admite HyperThreading y carece de las instrucciones SSE3 que se usan solo para HyperThreading. [45]

SSE descartó todas las conexiones heredadas a la pila 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 estar limitados por el tamaño de los registros FPU. Los diseñadores crearon ocho registros de 128 bits, llamados XMM0 a XMM7. (En AMD64 , la cantidad de registros SSE XMM se ha incrementado de 8 a 16). Sin embargo, la desventaja fue que los sistemas operativos tenían que 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, llamada modo mejorado que permite el uso de instrucciones SSE, mientras que permanecen deshabilitadas en el modo protegido normal. Un sistema operativo que es consciente de SSE activará el modo mejorado, mientras que un sistema operativo que no lo es solo ingresará al modo protegido tradicional.

SSE es un conjunto de instrucciones SIMD que funciona solo con valores de punto flotante, como 3DNow!. Sin embargo, a diferencia de 3DNow!, corta toda conexión heredada a la pila FPU. Debido a que tiene registros más grandes que 3DNow!, SSE puede empaquetar el doble de números flotantes de precisión simple en sus registros. El SSE original estaba limitado solo a números de precisión simple, como 3DNow!. El SSE2 introdujo la capacidad de empaquetar también números de doble precisión , algo que 3DNow! no tenía posibilidad de 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 SSE XMMn podían empaquetar dos números flotantes 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 solo a precisión simple. SSE3 no introduce ningún registro adicional. [45]

Las Extensiones Avanzadas de Vectores (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 dar cabida a registros más grandes, además de algunas instrucciones para permutar elementos. AVX2 no introdujo registros adicionales, pero se destacó por la incorporación de instrucciones de enmascaramiento, recopilación y mezcla.

AVX-512 incluye 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, está dividido en muchos subconjuntos que los modelos específicos de CPU pueden elegir implementar.

Extensión de dirección física (PAE)

La extensión de dirección física o PAE se agregó por primera vez en el Intel Pentium Pro y, más tarde, por AMD en los procesadores Athlon [46] para permitir que se direccionaran 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 anchas 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 de 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 nuevamente, las preocupaciones del chipset y de otras plataformas (como la cantidad de ranuras DIMM disponibles y la RAM máxima posible por DIMM) impiden que se realice un espacio de dirección física 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 que mientras se esté en modo largo no existe ningún modo "no PAE". El modo PAE no afecta el ancho de las direcciones lineales o virtuales.

x86-64

En los clústeres de supercomputadoras (como se rastrea en los datos TOP 500 y se visualiza en el diagrama anterior, última actualización 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 (rayados en verde azulado y azul, en el diagrama, respectivamente) reemplazaran la mayoría de las arquitecturas de procesadores RISC utilizadas anteriormente en dichos sistemas (incluidos PA-RISC , SPARC , Alpha y otros), y x86 de 32 bits (verde en el diagrama), aunque Intel inicialmente intentó 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 usa, a partir de 2014, en los clústeres de supercomputación es Power ISA utilizada por los microprocesadores IBM Power (azul con mosaico de diamantes en el diagrama), con SPARC en un distante segundo lugar.

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 direccionar mucha más memoria. Intel y todo el ecosistema x86 necesitaban direccionamiento de memoria de 64 bits si quería sobrevivir a la era de la informática de 64 bits, ya que las aplicaciones de software de estaciones de trabajo y de escritorio 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 abandonar la arquitectura x86 en general, un experimento que finalmente fracasó.

En 2001, Intel intentó introducir una arquitectura de 64 bits no x86 denominada IA-64 en su procesador Itanium , inicialmente apuntando al mercado de computación de alto rendimiento , con la esperanza de que eventualmente reemplazaría al x86 de 32 bits. [47] Si bien IA-64 era incompatible con x86, el procesador Itanium proporcionó capacidades de emulación para traducir instrucciones x86 a IA-64, pero esto afectó tanto al rendimiento de los programas x86 que rara vez, o nunca, fue 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 porque rompía la compatibilidad con versiones anteriores y prefirió seguir usando chips x86, y muy pocos programas fueron reescritos 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 vería 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 recientemente introducido , por lo tanto, las aplicaciones y sistemas operativos de 32 y 16 bits simplemente podían continuar usando un procesador AMD64 en modo protegido u otros modos, sin siquiera el más mínimo sacrificio de rendimiento [48] y con total compatibilidad con 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 el AMD64, Intel tuvo que responder y presentó 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 rara vez se utiliza y x86, a través de su encarnación x86-64, sigue siendo la arquitectura de CPU dominante en computadoras no integradas.

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

Como resultado de la contribución de 64 bits de AMD 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 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 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 compatibilidad con versiones anteriores de software de 32 y 16 bits permitieron que la arquitectura x86 se convirtiera en una plataforma extremadamente flexible hoy en día, con chips x86 siendo utilizados desde pequeños sistemas de bajo consumo (por ejemplo, Intel Quark e Intel Atom ) hasta rápidas computadoras de escritorio para juegos (por ejemplo, Intel Core i7 y AMD FX / Ryzen ), e incluso dominando 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 .

Virtualización

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, los productos de hipervisor de virtualización x86, tanto propietarios como de código abierto, se desarrollaron utilizando virtualización basada en software . Los sistemas propietarios incluyen Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player y Windows Virtual PC , mientras que los sistemas libres y de código abierto 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

APX (Extensiones de rendimiento avanzadas)

APX (Advanced Performance Extensions) son extensiones que duplican el número de registros de propósito general de 16 a 32 y agregan 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 incorporación de x86 desde los 64 bits". [57] Intel contribuyó con soporte APX a GNU Compiler Collection (GCC) 14. [58]

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

  • 16 registros de propósito general adicionales, llamados GPR extendidos (EGPR)
  • Formatos de instrucciones de tres operandos para muchas instrucciones de números enteros
  • Nuevas instrucciones condicionales para cargas, almacenamientos y comparaciones con instrucciones comunes que no modifican indicadores
  • Operaciones optimizadas de guardado y restauración de registros
  • Una instrucción de salto directo absoluto de 64 bits

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

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. ^ La computadora portátil GRID Compass , por ejemplo.
  3. ^ Incluidos los procesadores 8088 , 80186 , 80188 y 80286 .
  4. ^ Este sistema también contenía la combinación habitual de componentes de soporte de la serie 7400 estándar, incluidos multiplexores , buffers y lógica de unió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 y los requisitos de simplicidad del hardware, superan en número a las x86.
  8. ^ Los NEC V20 y V30 también proporcionaban el antiguo conjunto de instrucciones 8080, lo que permitía a las PC equipadas con estos microprocesadores operar aplicaciones CP/M a plena velocidad (es decir, sin la necesidad de simular un 8080 por software).
  9. ^ Las empresas sin fábrica diseñaban el chip y contrataban a otra empresa para fabricarlo, mientras que las empresas con fábrica hacían tanto el diseño como la fabricación por sí mismas. Algunas empresas empezaron como fabricantes con fábrica y luego se convirtieron en diseñadores sin fábrica, como por ejemplo AMD.
  10. ^ Sin embargo, tenía una FPU más lenta, lo cual es un poco irónico ya que Cyrix comenzó como diseñador de unidades de punto flotante rápidas para procesadores x86.
  11. ^ Intel abandonó su esquema de nombres "x86" con el Pentium P5 durante 1993 (ya que los números no podían registrarse como marca). Sin embargo, el término x86 ya estaba establecido entre los técnicos, los escritores de compiladores, etc.
  12. ^ Los microprocesadores de 16 bits y 32 bits se introdujeron durante 1978 y 1985 respectivamente; los planes para los de 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. ^ Esto se debe a que la aritmética de números enteros genera acarreo entre bits subsiguientes (a diferencia de las operaciones bit a bit simples).
  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 manejador de servicios del sistema en modo kernel y el puntero de pila del kernel correspondiente. SYSENTER_EIP_MSR y SYSENTER_ESP_MSR se inicializan durante el inicio del sistema y son utilizados por las instrucciones SYSENTER (Intel) o SYSCALL (AMD) para lograr llamadas rápidas al sistema, aproximadamente tres veces más rápidas que el método de interrupción de 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 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 posteriores a 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 que la CPU direccione 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, de modo que todos los programas diseñados para modelos basados ​​en 8088/8086 pudieran ejecutarse, mientras que el software más nuevo pudiera aprovechar la memoria "alta" en modo real y el espacio de dirección completo de 16 MB o más en modo protegido (ver 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. ^ Pryce, Dave (11 de mayo de 1989). "La CPU 80486 de 32 bits abre nuevos caminos en cuanto a densidad de chips y rendimiento operativo. (Intel Corp.) (anuncio de producto) EDN" (Comunicado de prensa).
  2. ^ Swoyer, Stephen (24 de abril de 2003). "AMD presenta el chip Opteron de 64 bits (ESJ) (artículo de prensa)".
  3. ^ Rao, PVS (2009). Arquitectura de sistemas informáticos . Prentice-Hall de India. pág. 402 (Sección 19.1, La familia de procesadores x86 ). ISBN 978-81-203-3594-3.
  4. ^ Mhatre, Swapneel Chandrakant (2012). Microprocesadores y técnicas de interconexión: para el segundo semestre de Ingeniería Informática de la Universidad de Pune . Editorial Jaico. ISBN 978-81-8495-325-1.
  5. ^ Alcorn, Paul (9 de febrero de 2022). "AMD establece un récord histórico de participación en el mercado de CPU mientras Intel gana terreno en PC de escritorio y portátiles". Tom's Hardware .
  6. ^ Brandon, Jonathan (15 de abril de 2015). "La nube más allá de x86: cómo las arquitecturas antiguas están volviendo". ICloud PE . Business Cloud News. Archivado del original el 19 de agosto de 2021 . Consultado el 23 de noviembre de 2020 . A pesar del predominio 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...
  7. ^ Dvorak, John C. "¿Qué pasó con el Intel iAPX432?". Dvorak.org. Archivado desde el original el 25 de noviembre de 2017. Consultado el 18 de abril de 2014 .
  8. ^ Referencia del programador de iAPX 286 (PDF) . Intel. 1983. Archivado (PDF) del original el 28 de agosto de 2017 . Consultado el 28 de agosto de 2017 .
  9. ^ ab iAPX 86, 88 Manual del usuario (PDF) . Intel. Agosto de 1981. Archivado (PDF) del original el 28 de agosto de 2017 . Consultado el 28 de agosto de 2017 .
  10. ^ Edwards, Benj (16 de junio de 2008). «El nacimiento de un estándar: el microprocesador Intel 8086». PCWorld . Archivado desde el original el 26 de septiembre de 2010. Consultado el 14 de septiembre de 2014 .
  11. ^ Stanley Mazor (enero-marzo de 2010). "8086 de Intel". IEEE Annals of the History of Computing . 32 (1): 75–79. doi :10.1109/MAHC.2010.22. S2CID  16451604.
  12. ^ "AMD revela nuevas tecnologías en el foro de microprocesadores" (nota 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 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.
  13. ^ Burt, Jeff (5 de abril de 2010). "Microsoft dejará de ofrecer soporte para Intel Itanium". eWeek . Consultado el 2 de junio de 2022 .
  14. ^ ab "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 Macro-fusión. Archivado (PDF) del original el 14 de febrero de 2020 . Consultado el 7 de marzo de 2020 .
  15. ^ ab Fog, Agner. "La microarquitectura de las CPU Intel, AMD y VIA" (PDF) . p. 107. Archivado (PDF) del original el 22 de marzo de 2019. Consultado el 7 de marzo de 2020. Core2 puede realizar la fusión de operaciones macro solo en modo de 16 y 32 bits. Core Nehalem también puede hacer esto en modo de 64 bits.
  16. ^ "Zet: La implementación abierta x86 (IA-32): descripción general". OpenCores . 4 de noviembre de 2013. Archivado desde el original el 11 de febrero de 2018 . Consultado el 5 de enero de 2014 .
  17. ^ "Zhaoxin prepara el soporte del kernel de Linux para las CPU Centaur de la serie 7". www.phoronix.com . Consultado el 5 de abril de 2022 .
  18. ^ "Zhaoxin apunta al lanzamiento en 2021 de sus CPU x86 de 7 nm - CPU - Noticias - HEXUS.net". m.hexus.net . Consultado el 5 de abril de 2022 .
  19. ^ "Zhaoxin finalmente agrega el ajuste de CPU x86_64 "Lujiazui" a GCC". www.phoronix.com . Consultado el 5 de abril de 2022 .
  20. ^ "Consideraciones de instalación y configuración para equipos basados ​​en Windows x64 Edition". Archivado desde el original el 11 de septiembre de 2014 . Consultado el 14 de septiembre de 2014 .
  21. ^ "Visualización de una arquitectura Intel simplificada". Intel .
  22. ^ Larabel, Michael (20 de mayo de 2023). «Intel publica la especificación «X86-S» para una arquitectura de solo 64 bits». Phoronix . Consultado el 20 de mayo de 2023 .
  23. ^ "Procesadores: ¿Qué modo de direccionamiento utilizan los procesadores Intel?". Archivado desde el original el 11 de septiembre de 2014 . Consultado el 14 de septiembre de 2014 .
  24. ^ "DSB Switches". Amplificador Intel VTune 2013. Intel. Archivado desde el original el 2 de diciembre de 2013. Consultado el 26 de agosto de 2013 .
  25. ^ "Manual del usuario de la familia 8086" (PDF) . Intel Corporation. Octubre de 1979. pág. 2-68. Archivado (PDF) desde el original el 4 de abril de 2018 . Consultado el 28 de marzo de 2018 .
  26. ^ "iAPX 286 Programmer's Reference Manual" (PDF) . Intel Corporation. 1983. 2.4.3 Modos de direccionamiento de memoria. Archivado (PDF) del original el 28 de agosto de 2017 . Consultado el 28 de agosto de 2017 .
  27. ^ 80386 Manual de referencia del programador (PDF) . Intel Corporation. 1986. 2.5.3.2 CÁLCULO DE DIRECCIONES EFECTIVAS. Archivado (PDF) del original el 28 de diciembre de 2018 . Consultado el 28 de marzo de 2018 .
  28. ^ ab Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, volumen 1: Arquitectura básica. Intel Corporation. Marzo de 2018. Capítulo 3. Archivado desde el original el 26 de enero de 2012 . Consultado 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: cree sus propias herramientas Linux para instrumentación, análisis y desensamblaje binario . San Francisco, CA: No Starch Press, Inc. ISBN 978-1-59327-913-4.OCLC 1050453850  .
  30. ^ "Guía de ensamblaje x86". Cs.virginia.edu. 11 de septiembre de 2013. Archivado desde el original el 24 de marzo de 2020. Consultado el 6 de febrero de 2014 .
  31. ^ "FSTSW/FNSTSW — Almacenar palabra de estado de FPU x87". Archivado desde el original el 25 de enero de 2022 . Consultado el 15 de enero de 2020 . La forma FNSTSW AX de la instrucción se utiliza principalmente en la bifurcación condicional...
  32. ^ 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. Archivado (PDF) desde el original el 2 de abril de 2013 . Consultado el 23 de abril de 2013 .
  33. ^ "Familia Intel 80287". CPU-world . Archivado desde el original el 9 de agosto de 2016. Consultado el 21 de julio de 2016 .
  34. ^ 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. Archivado (PDF) del original el 2 de abril de 2013 . Consultado el 23 de abril de 2013 .
  35. ^ 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. 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) desde el original el 28 de agosto de 2017 . Consultado 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) desde el 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". Archivado desde el original el 5 de septiembre de 2012. Consultado el 18 de julio de 2008 .
  39. ^ abc "Programación con la tecnología Intel MMX™". Centro de información técnica de la familia de procesadores Pentium® integrados . Intel. Archivado desde el original el 25 de julio de 2003. Consultado el 5 de junio de 2022 .
  40. ^ Krishnaprasad, S. (1 de enero de 2004). "Programación SIMD ilustrada utilizando el conjunto de instrucciones MMX de Intel". Revista de Ciencias de la Computación en la Universidad . 19 (3): 268–277. ISSN  1937-4771.
  41. ^ Sexton, Michael Justin Allen (21 de abril de 2017). "La historia de las CPU AMD". Tom's Hardware . Consultado el 5 de junio de 2022 .
  42. ^ Shimpi, Anand Lal (29 de octubre de 1998). "AMD's K6-2 350: Something to do..." AnandTech . Consultado el 5 de junio de 2022 .
  43. ^ "Operaciones SIMD de MMX de Intel y 3DNow! de AMD". web.mit.edu . Consultado el 5 de junio de 2022 .
  44. ^ "Manual de tecnología 3DNow!™" (PDF) . Advanced Micro Devices . Consultado el 5 de junio de 2022 .
  45. ^ ab "Actualización y reparación de PC, edición 21: características del procesador". Tom's Hardware . 31 de octubre de 2013 . Consultado el 5 de junio de 2022 .
  46. ^ AMD, Inc. (febrero de 2002). "Apéndice E" (PDF) . Guía de optimización de código del procesador x86 AMD Athlon™ (edición de revisión K). pág. 250. Archivado (PDF) del original el 13 de abril de 2017. 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 se habilita PAE (extensiones de dirección de página) o cuando la PDE no describe una página grande.
  47. ^ Manek Dubash (20 de julio de 2006). "¿Abandonará Intel el Itanium?". Techworld . Archivado desde el original el 19 de febrero de 2011. Consultado el 19 de diciembre de 2010. Intel, que en su día lo promocionó como un sustituto de la línea de productos x86, ha reducido considerablemente las expectativas en torno al Itanium.
  48. ^ "IBM WebSphere Application Server 64-bit Performance Demystified" (PDF) . IBM Corporation. 6 de septiembre de 2007. p. 14. Archivado (PDF) del original el 25 de enero de 2022 . 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 el máximo rendimiento de 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 usará extensiones AMD64». The Inquirer . Archivado desde el 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). A Comparison of Software and Hardware Techniques for x86 Virtualization (PDF) (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) desde el original el 20 de agosto de 2010 . Consultado 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 chips futuros». The Register . Consultado el 22 de octubre de 2023 .
  54. ^ Bonshor, Gavin. "Intel presenta los conjuntos de instrucciones AVX10 y APX: unificación de AVX-512 para arquitecturas híbridas". AnandTech . Consultado el 22 de octubre de 2023 .
  55. ^ Alcorn, Paul (24 de julio de 2023). "El nuevo AVX10 de Intel aporta capacidades AVX-512 a los núcleos E". Tom's Hardware . Consultado el 22 de octubre de 2023 .
  56. ^ Shah, Agam (9 de agosto de 2023). "El cambio generacional en 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 x86 desde los 64 bits". Tech Insights .
  58. ^ Larabel, Michael. "El código APX de Intel comienza a aparecer en el compilador GCC". Phoronix . Consultado el 22 de octubre de 2023 .
  59. ^ "Especificación de la arquitectura Intel® Advanced Performance Extensions (Intel® APX)". Intel . 21 de julio de 2023 . Consultado el 22 de octubre de 2023 .

Lectura adicional

  • Rosenblum, Mendel; Garfinkel, Tal (mayo de 2005). "Monitores de máquinas virtuales: tecnología actual y tendencias futuras". IEEE Computer . 38 (5): 39–47. CiteSeerX  10.1.1.614.9870 . doi :10.1109/MC.2005.176. S2CID  10385623.
  • Por qué Intel no parece poder retirar el 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 arquitecturas Intel® 64 e IA-32
  • Guías, manuales y documentos ISA para desarrolladores de AMD, arquitectura AMD64
Retrieved from "https://en.wikipedia.org/w/index.php?title=X86&oldid=1252102271"