El coprocesador matemático 80387

 

Introducción

La interfaz en los sistemas 80386/80387 es muy similar a la de los sistemas 80286/80287. Sin embargo, para prevenir la corrupción de datos del coprocesador debido a errores de los programas que corren en la CPU, se utilizan los puertos de entrada/salida 800000F8h-800000FFh que no son accesibles a los programas. La comunicación ha sido optimizada ya que, al utilizar transferencias de 32 bits, se necesitan de 14 a 20 ciclos de reloj. La única manera de eliminar esta pérdida de tiempo consiste en integrar el coprocesador y la CPU en un único chip, como se hizo posteriormente en el microprocesador 80486.

Versiones del 80387

El 80387 fue la primera generación de coprocesadores específicamente diseñados para la CPU 80386. Fue introducido en 1986, un año después que el CPU 80386.

El 80387 fue superado por el 387DX, que fue introducido en 1989. El viejo 80387 era 20% más lento que el 387DX. El 80387 estába empaquetado en el formato PGA de 68 pines y estaba manufacturado con la tecnología CHMOS III de 1,5 micrones. La máxima velocidad del 80387 fue de 20 MHz. El 387DX es la segunda generación. Esta versión está realizada en un proceso CMOS más avanzado (tecnología CHMOS IV) que permite una frecuencia de 33 MHz. Algunas instrucciones se han mejorado mucho más que el 20% de promedio. Por ejemplo, la instrucción FBSTP es 3,64 veces más rápido que en el 80387.

El 387SX es el coprocesador que se aparea con el 386SX con un bus de datos de 16 bits, en vez de los 32 que tienen los anteriores. El 387SX tiene la misma unidad de ejecución que el 80387 original. Viene en formato PLCC (Plastic Leaded Chip Carrier) de 68 pines con una frecuencia máxima de 20 MHz.

El 387SL (que se introdujo en 1992) se diseñó para ser utilizado en sistemas junto con el 386SL en notebooks y laptops. Está realizado con la tecnología CHMOS IV estática (no se pierden los datos internos si se detiene el reloj) y tiene la misma unidad de ejecución que el 387DX.

Nuevas instrucciones del 80387

FSIN: Calcula el seno del valor en ST. El resultado reemplaza el valor anterior de ST.

FCOS: Calcula el coseno del valor en st. El resultado reemplaza el valor anterior de ST.

FSINCOS: Calcula el seno y el coseno del valor en ST. Cuando se completa la instrucción, el valor de ST es el coseno del SToriginal, mientras que en ST(1) se encuentra el seno. Como se realiza una introducción en la pila, el valor que antes se encontaba en ST(1) ahora estará en ST(2).

FUCOM ST(i): Realiza una comparación entre el operando y ST. Si no se especifica parámetro se asume ST(1). Actualiza los indicadores de punto flotante como sigue:

Relación C3, C2, C0
No comparables 111
ST > Fuente 000
ST < Fuente 001
ST = Fuente 100

FUCOMP ST(i): Hace lo mismo que FUCOM ST(i) y luego elimina el elemento que está en el tope de la pila ST.

FUCOMPP: Hace lo mismo que FUCOM ST(1) y luego retira los dos elementos de la pila.

FPREM1: Es similar al instrucción FPREM del coprocesador 8087, pero cumple con la norma IEEE 754.

Las instrucciones FLENVy F[N]STENV necesitan ahora un espacio de 18 bytes de memoria y FRSTOR y F[N]SAVE necesitan 98 bytes en memoria. Esto se debe a que las direcciones que maneja el 80387 son de 32 bits (los anteriores manejan direcciones de 16 bits).