# Intel 80486

Los Intel 80486 (i486, 486) son una familia de microprocesadores de 32 bits con arquitectura x86 diseñados y fabricados por Intel Corporation y también fabricados mediante licencia o ingeniería inversa por otras empresas como IBM, Texas Instruments, AMD, Cyrix y Chips and Technologies con diseños distintos o clonados.
Los i486 son muy similares a sus predecesores, los Intel 80386. Las diferencias principales son que los i486 tienen un conjunto de instrucciones optimizado, una unidad de coma flotante y un caché unificado integrados en el propio circuito integrado del microprocesador y una unidad de interfaz de bus mejorada. Estas mejoras hacen que los i486 sean el doble de rápidos que un i386 e i387 a la misma frecuencia de reloj. De todos modos, algunos i486 de gama baja son más lentos que los i386 más rápidos.
Las velocidades de reloj típicas para los i486 eran:
* 16 MHz (no muy frecuente)
* 20 MHz (tampoco frecuente)
* 25 MHz
* 33 MHz
* 40 MHz
* 50 MHz (típicamente un motherboard de 25 MHz con duplicación del reloj dentro del microprocesador)
* 66 MHz (33 MHz con duplicación del reloj)
* 75 MHz (25 MHz con triplicación del reloj)
* 80 MHz (versión de AMD de 40 MHz con duplicación de reloj)
* 100 MHz (33 MHz con triplicación del reloj)
* 120 MHz (40 MHz con triplicación de reloj, exclusivo de AMD).
Existió un 80486 de 133 MHz fabricado por AMD denominado Am5x86-P75 que disponía de 16 KB de caché L1, arquitectura de 0,35 micras (contra las 0,6 micras de los modelos anteriores), un multiplicador de 4x y FSB de 33 MT/s, del cual se fabricaron también diferentes versiones con diferente voltaje y diferente encapsulación, de 3,3 V y 3,45 V, posibilitando una enorme capacidad para el overclock que le permitía subir hasta los 160 MHz, equiparando su rendimiento con el de un Pentium-90. Posteriormente AMD diseñó el Am5x86-P75+ de 150 MHz, 16 KB de caché L1, multiplicador 3x y FSB de 55 MT/s a 3,45 V, haciéndolo el procesador 80486 más potente jamás fabricado, del cual apenas se comercializaron unidades siendo un preciado objeto de colección entre aficionados.
El sucesor del microprocesador Intel 80486 es el Intel Pentium.

## Variantes del i486

Hay varias variantes del diseño básico del i486, entre las que se encuentran:
* Intel 80486-DX - la versión modelo, con las características indicadas anteriormente.
* Intel 80486-SX - un i486DX con la unidad de coma flotante deshabilitada por defecto de fabricación (más tarde sería deshabilitada aun sin defecto para cubrir la creciente demanda de modelos SX).
* Intel 80486-DX2 - un i486DX que internamente funciona al doble de la velocidad suministrada por el reloj externo, a la que funcionan el resto de dispositivos del sistema.
* Intel 80486-SX2 - un i486SX que funciona internamente al doble de la velocidad del reloj.
* Intel 80486-SL - un i486DX con una unidad de ahorro de energía.
* Intel 80486-SL-NM - un i486SX con una unidad de ahorro de energía.
* Intel 80486DX4 - como un i486DX2 pero triplicando la velocidad interna.
* Intel 80487 u 80487-SX - una versión del i486DX diseñado para ser usado como unidad de coma flotante del i486SX. El i487 se instala en el zócalo de coprocesador que se encuentra al efecto en las placas base para i486SX. el cual era un 486DX completo que inhabilitaba el 486SX
* Intel 80486 OverDrive (486SX, 486SX2, 486DX2 o 486DX4) - variaciones de los modelos anteriores diseñados como procesadores de actualización, que tienen un voltaje diferente. Normalmente estaban diseñados para ser empleados en placas base que no soportaban el microprocesador equivalente de forma directa.

## Duplicación y triplicación de reloj

Para no exigir mayor velocidad a las placas base, Intel introdujo la duplicación (y más tarde la triplicación) de frecuencia reloj dentro del integrado. Mientras el motherboard y sus comunicaciones con el microprocesador a través de sus pines se realizaba a la frecuencia del reloj, las operaciones internas del microprocesador se realizaban al doble (o al triple) de velocidad. De este modo los bloques de código cargados en la memoria caché interna alcanzaban un rendimiento mucho mayor, que bajaba a la mitad (o a un tercio) cuando accedía a la memoria RAM.
Intel designó con el sufijo «2» a los microprocesadores que empleaban duplicación de frecuencia de reloj. La frecuencia indicada en el microprocesador correspondía a la frecuencia ya duplicada. Por ejemplo, el 80486 DX2 de 66 MHz tenía un reloj de 33 MHz en el motherboard. El público no informado aceptó el sufijo «2» como un signo de superioridad, y se generalizó la creencia de que un 486 de 66 MHz duplicaba a 132 MHz. De manera aparentemente contradictoria, la mayoría de los test de velocidad mostraban que una PC con un microprocesador de 40 MHz (sin duplicación de velocidad) era más rápido que uno de 50 MHz (25 MHz con duplicación de velocidad).
De una manera sorprendente, Intel designó con el sufijo «4» en lugar de «3» a los microprocesadores que empleaban triplicación de frecuencia de reloj, lo que hacía al público no informado sobrestimar la capacidad de estos microprocesadores. De este modo, un 486 de 100 MHz tenía una frecuencia de reloj de 33 MHz, y la frecuencia triplicada llegaba a 99 MHz.

## Instrucciones a nivel de aplicación

Con respecto al 386 se añadieron tres nuevas instrucciones, dos de ellas están orientadas al uso de sistemas de multiprocesador. En estos es usual acceder a los recursos compartidos y la regulación de estos se hace mediante semáforos.
La tercera instrucción añadida tiene por misión facilitar el acceso a banco de datos de otros procesadores como los creados para ser utilizados en ordenadores IBM o equipos con microprocesadores Motorola.

### Instrucción de permutación de bytes BSWAP reg32

La instrucción BSWAP sirve para invertir el orden de los bytes en una palabra de 32 bits. Convierte una palabra almacenada con el objeto de menor peso en la dirección más baja en otra que tenga los mismos, pero con el octeto de menor peso en la dirección más alta. Proporciona mejor rendimiento en aritmética ASCII y BCD, ya que se procesan 4 octetos en lugar de uno solo.
Es una instrucción que solo actúa sobre registros de 32 bits y se ejecuta en un ciclo de reloj.

### Instrucción de intercambio y suma XADD r/m, reg

Usa dos operandos del mismo tamaño 8, 16 o 32 bits. El segundo debe ser un registro. El primero puede ser un registro o un operando en memoria.
Se ejecuta en tres o cuatro ciclos de reloj.

#### Ejemplo

Varios procesadores podrían compartir la ejecución de un mismo bucle de instrucciones simplificando el procesamiento en paralelo.
Con la nueva instrucción del 486 la codificación sería:

### Instrucción de comparación e intercambio CMPNCHG r m,reg

Necesita tres operandos del mismo tamaño 8, 16 o 32 bits. El segundo debe ser un registro. El primero puede ser un registro o un operando en memoria. El tercero debe ser implícito: el acumulador (AL, AX, EAX, dependiendo del tamaño de los otros operandos). Se ejecuta en seis o siete ciclos de reloj si la comparación resulta cierta o hasta diez si es falsa.
Los señalizadores del registro EFLAGS indican el resultado de la comparación. Si es cierta o, ZF se pone a 1; si no se pone a 0. Se pueden realizar semáforos multivalor, y utilizar las instrucciones wait y signal desde múltiples procesos que pretendan compartir un recurso simultáneamente.

## Nuevas instrucciones a nivel de sistema

El 486 tiene cuatro nuevas instrucciones específicas para él, que no existen en el 386. tres de ellas están relacionadas con la caché interna que incorpora el 486 para datos y código. La cuarta se refiere a la caché de la tabla de páginas.

### Carga y almacenamiento de registros de prueba MOV TRn, reg32

Como en el 486 existen tres nuevos registros relacionados con la caché interna, la función MOV también puede acceder a ellos.

### Invalidación del contenido de la caché INVD

Con esta se invalida totalmente el contenido de la caché interna y se genera un ciclo de bus para indicar que a su vez las cachés externas deban invalidar sus contenidos. La instrucción se ejecuta en cuatro ciclos de reloj.

### Invalidación de la caché previa actualización de la memoria WBINVD

Con esta se invalida totalmente el contenido de la caché interna y se genera dos ciclos de bus la primera indica a las cachés de tipo de escritura obligada que deberán actualizar la memoria principal. Para indicar a la segunda que a su vez las cachés externas deban invalidar sus contenidos. La instrucción se ejecuta en 5 ciclos de reloj.

### Invalidación de una entrada de la TLB (Translation Loackside Buffer)

Genera una dirección virtual a partir del operando dado e invalida la correspondiente entrada de la caché de la tabla de páginas, la TLB. Invalida la entrada de la TLB que referencia a la página que incluye la dirección del operando en memoria dado. Esta instrucción codifica como INVLPG m y se ejecuta en doce ciclos.

## Registros de prueba de la TLB

Los registros de prueba son una parte formal de la arquitectura 386 tenía para el arqueo del TLB (TR6 Y TR7). El 486 añade otros tres registros más de 32 bits para el control del buen funcionamiento de la caché interna del procesador.
El registro TR6 no se ha modificado respecto al del 386. El TR7añade algunos bits más. Estos son:
* PCD: Bit PCD de la entrada de la tabla de páginas.
* PWT: bit PWD de la entrada de la tabla de páginas.
* LRU: cuando se lee este campo se obtiene el valor de los tres bits usados en el algoritmo de reemplazo seudo-LRU de la caché.
* PL: Corresponde con el bit HT del TR7 del 386. En el 486 se puede escribir a uno o cero.

## Registros de prueba de la caché interna

* TR3 almacena los datos a transferir a la memoria caché.
* TR4 contiene el estado de prueba.
* TR5 es el registro de control de prueba de la caché.
A todos se accede mediante instrucciones MOV ingresadas a nivel de mayor privilegio (cero).

### TR4

* Válido: 4 bits de validación para las 4 vías del sector.
* LRU.
* V: bit de validación de la vía concreta que ha sido accedida entre las 4 que pertenecen al mismo sector.
* Etiqueta: fuerza el valor de la etiqueta a la dirección asignada en el campo.

### TR5

* CTL:
** 00: Escritura o lectura de la memoria intermedia de la caché.
** 01: Escritura de la caché.
** 10: Lectura de la caché.
** 11: invalidación de la caché. Se invalidan todas las posiciones.
* ENT. En lectura/escritura de la caché selecciona una de las cuatro vías del sector seleccionado. En R/W de la memoria intermedia de la caché, selecciona una de las cuatro dobles palabras que componen la línea.

### Tipos de datos

* Ordinales
* Enteros
* Reales
* Empaquetados BCD
* Cadenas de 8, 16 y 32 bit
* Cadenas de 64 a 4 Gbit
* Caracteres ASCII de 8 bit