El coprocesador matemático 8087

 

 

Introducción

El procesador de datos numérico (NDP) 8087 aumenta el juego de instrucciones del 8086/8088 mejorando su capacidad de tratamiento de números. Se utiliza como procesador paralelo junto al 8086/8088 añadiendo 8 registros de coma flotante de 80 bits así como instrucciones adicionales. Utiliza su propia cola de instrucciones para controlar el flujo de instrucciones del 8086/8088, ejecutando sólo aquellas instrucciones que le corresponden, e ignorando las destinadas a la CPU 8086/8088. El 8086/8088 deberá funcionar en modo máximo para poder acomodar el 8087. Las instrucciones del NDP 8087 incluyen un juego completo de funciones aritméticas así como un potente núcleo de funciones exponenciales, logarítmicas y trigonométricas. Utiliza un formato interno de números en coma flotante de
80 bits con el cual gestiona siete formatos exteriores.
Como detalle constructivo, cabe mencionar que el 8087 posee 45.000 transistores y consume 3 watt.

 

Los números y su tratamiento

Hay dos tipos de números que aparecen normalmente durante el cálculo: los números enteros y los números reales. Aunque los enteros no dejan de ser un subconjunto de los reales, la computadora trabaja de formas distintas con ambos. Los enteros son fáciles de tratar para la computadora. Los chips microprocesadores de propósito general trabajan con números enteros utilizando la representación binaria de números en complemento a dos. Pueden trabajar incluso con números que excedan el tamaño de la palabra a base de fragmentar los números en unidades más pequeñas. Es lo que se llama aritmética de
precisión múltiple. Los números reales, sin embargo, son más difíciles. En primer lugar, la mayoría de ellos nunca pueden representarse exactamente. La representación en coma flotante permite una representación aproximada muy buena en la práctica de los números reales. La representación en coma flotante es en el fondo una variación de la notación científica que puede verse en el visualizador de cualquier calculadora. Con este sistema, la representación de un número consta de tres partes: el signo, el exponente y la mantisa. Antes de continuar, veremos por qué es necesaria esta representación. Para los
principiantes en el tema, consideremos el siguiente ejemplo de notación científica: 4.1468E2. En este ejemplo el signo es positivo (porque no está se supone positivo), la mantisa es 4.1468 y el exponente 2. El valor representado por este número es: 4.1468 x 10 ^ 2 = 414.68.

 

Precisión y rango

En la representación de números reales aparecen dos problemas fundamentales: la precisión y el rango. Por precisión se entiende la exactitud de un número. En la representación de coma flotante, la mantisa es la encargada de la precisión. La mantisa contiene los dígitos significativos del número independientemente de dónde esté colocada la coma decimal. Si queremos aumentar la precisión de un esquema de representación de punto flotante, basta con añadir dígitos a la mantisa.
La precisión no es problema en el caso de los enteros, puesto que todo entero viene representado exactamente por su representación en complemento a dos. La representación precisa de los números reales sí es un problema ya que la mayoría de ellos tiene infinitos dígitos, cosa imposible de representar exactamente en una máquina con un número finito de componentes. Puesto que las computadoras
permiten almacenar un número finito de dígitos, la representación de los números reales debe realizarse necesariamente por medio de aproximaciones.

El rango está relacionado con el tamaño de los números que se pueden representar. En los enteros, el rango depende del número de bits que se utilicen. Por ejemplo, con 16 bits pueden representarse números comprendidos entre -32768 y 32767. Para representar todos los enteros sería de nuevo necesario un número infinito de bits. Como puede verse, incluso los enteros tienen un rango restringido. En la notación de coma flotante, es el exponente el que fija el rango. Separando los problemas de precisión y de rango, la notación en coma flotante permite obtener rangos muy grandes con precisión razonable. El rango sigue
siendo finito, porque sólo se puede representar un número finito de dígitos del exponente, pero tales dígitos permiten representar un número bastante grande de una forma compacta.

 

Implementación de la representación en punto flotante

Hay muchas formas de implementar la representación en punto flotante. Intel sigue el método propuesto por el instituto de normalización IEEE. Para ver cómo trabaja, volvamos de nuevo a la notación científica. Por ejemplo, en notación científica decimal el número 414.68 suele escribirse como 4.1468E2 y el número -0.00345 suele representarse como -3.45E-3. En cada caso el número consta de un signo (en el primer número no aparece por ser positivo), una mantisa y un exponente. La "E" indica sencillamente "exponente" y puede leerse como "diez a la".

Normalmente, el punto decimal se coloca a la derecha del primer dígito significativo. Cuando esto ocurre, se dice que el número está normalizado. El número cero es un caso particular que no admite normalización. Puede representarse por una mantisa cero. El exponente en tal caso es arbitrario, aunque se siguen algunos convenios dependiendo de la implementación particular.

En contraste con la notación científica usual que utiliza la base 10, las computadoras utilizan la base 2 a la vez como base de la expresión exponencial, y como base para representar la mantisa y el exponente. Así, por ejemplo, el número 5.325 sería 4 + 1 + 1/4 + 1/8 = 101.111 (base 2) y se escribe en notación científica "binaria" como +1.01011E2. En este caso "E" debe leerse como "2 a la", y el incrementar o decrementar el exponente significa desplazar convenientemente la coma binaria. Cuando se almacena un número binario en coma flotante en la máquina, se utiliza un bit para el signo, varios para la mantisa y varios para el exponente. Normalmente el bit de signo precede a los demás, después vienen los bits de exponente y finalmente los de la mantisa. La forma más común de guardar el exponente es adicionarle una constante, que recibe el nombre de "exceso". El número que se guarda recibe el nombre de "exponente en notación de exceso". A la inversa, dada la representación de un exponente, para recuperar su valor verdadero, basta con restarle el exceso.

Como exceso se toma un número cuyo valor es aproximadamente igual a la mitad del rango de los posibles exponentes, para poder representar más o menos la misma cantidad de exponentes positivos que negativos.


El NDP 8087 como procesador paralelo

El NDP 8087 actúa también como procesador paralelo. Esto es, comparte con la CPU el mismo bus, y el mismo flujo de instrucciones.

Las instrucciones del NDP aparecen mezcladas con el flujo de instrucciones de la CPU. Sin embargo, cada cual selecciona y ejecuta sólo las que le corresponden. Todas las instrucciones correspondientes al NDP comienzan con una variante de la instrucción ESC del 8086/8088. Esta es una instrucción ficticia, con un operando ficticio que puede especificarse con cualquiera de los 24 modos de direccionamiento a memoria y otro operando ficticio que no es más que un registro.
Cada instrucción que lee la CPU, también lo lee el NDP. Cuando la CPU lee una instrucción ESC, el NDP se da por enterado que pronto tendrá que ponerse a trabajar. El NDP lee el código de operación, mientras que la CPU calcula la dirección de memoria, la que pone en el bus de direcciones. La CPU finalmente pasa el control al NDP, que extrae los bytes de datos necesarios, hace los cálculos correspondientes, y coloca los resultados sobre el bus.

 

El NDP como ampliación del 8086/8088


El NDP 8087 amplía el juego de instrucciones del 8086/8088, incluyendo operaciones en punto flotante.
Estas nuevas instrucciones implementan por hardware el paquete Intel de tratamiento de números en punto flotante, proveyendo un método mucho mejor de ejecución de estos algoritmos. Dicho de otra manera, las rutinas de tratamiento de números en coma flotante pueden realizarse a velocidades muy altas.
Intel estima que el NDP 8087 ejecuta las operaciones de puntoflotante hasta 100 veces más rápidamente que una CPU 8086 que los realizase por software.

 

Tipos de datos del NDP 8087


El NDP puede trabajar con siete t
ipos de datos distintos: enteros de tres longitudes distintas, untipo de BCD empaquetado, y tres tipos de representación en coma flotante. Los siete tipos de datos se almacenan internamente en el formato real temporal de 80 bits ya discutido. Todos los tipos de datos pueden guardarse con la suficiente precisión en este formato.
Los tipos de datos son los siguientes: palabra entera de 16 bits, entero corto de 32 bits, entero largo de 64 bits (en todos los casos en representación de complemento a dos), BCD empaquetado con 18 dígitos decimales (como son dos dígitos por byte, se requieren diez bytes, estando uno de ellos reservado para el signo), real corto de 32 bits (1 bit de signo, 8 de exponente y 23 de mantisa), real largo de 64 bits (1 de signo, 11 de exponente y 52 de mantisa) y real temporal (1 de signo, 15 de exponente y 64 de mantisa).
Como se vio anteriormente, el primer bit de la mantisa siempre es uno (en caso contrario el número no estaría normalizado). Este uno no aparece en los formatos real corto y real largo, por lo que la precisión de la mantisa es de 24 y 53 bits, respectivamente.

Regresar