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 tipos
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.
|