En 1980, Intel introdujo el chip 8087, que hizo que las operaciones de punto flotante fueran mucho más rápidas en el IBM PC y otros sistemas. Aunque el 8087 sopera operaciones avanzadas como tangentes, raíces cuadradas y logaritmos, este artículo se centra en operaciones aritméticas básicas: suma y resta. El 8087 proporcionó una espectacular mejora de velocidad sobre el procesador 8086, acelerando la suma en un factor de casi 100, y operaciones complicadas aún más.
Para explorar la circuito del 8087, abrí el tapa del chip con un cincel y usé un microscopio para crear la alta resolución imagen de abajo. El microcod ROM es la gran región rectangular en el centro del die, que contiene las 1648 micro-instrucciones que controlan el chip. La mitad inferior del chip (caja roja) es la datapath, la circuitry que realiza cálculos de punto flotante en valores de 80 bits.
Un primer plano de la datapath del 8087 muestra los bloques funcionales que se usan para la suma y resta. El componente clave es el enter adder, ubicado en el centro. Recibe un argumento del registro B y otro argumento de un componente como los registros temporales o los registros de la pila. La salida del adder se almacena en el registro de suma. El desplazador puede desplazar un valor hacia la izquierda o hacia la derecha. El desplazador ocupa mucho espacio en el die porque su circuitry permite desplazar un valor rápidamente por un número arbitrario de bits. Las operaciones de punto flotante hacen un uso intensivo del desplazador para alinear valores; el circuito de ceros líderes cuenta el número de bits o bytes cero a la izquierda de un valor para que puedan ser desplazados. El convertidor de exponente procesa exponentes, detectando desbordamientos y subdesbordamientos. Estos circuitos especializados ayudaron al 8087 a lograr su alto rendimiento.
La mayoría de las computadoras usan enteros como su representación básica de números. Pero muchas aplicaciones necesitan usar números con parte fraccionaria, como 1.23. Además, los enteros tienen un rango muy limitado: un entero de 32 bits puede expresar números desde aproximadamente -2 mil millones hasta 2 mil millones. Para resolver estos problemas, las computadoras usualmente implementan números de punto flotante, que proporcionan fracciones sobre un rango enorme. En la mayoría de los casos, un número de punto flotante se representa por signo × significando × 2^exponente. El significando es un número binario de la forma 1.bbb…: un 1 inicial, seguido del punto binario (el equivalente binario del punto decimal) y el resto de los bits.
En un número binario, cada bit representa una potencia de 2. Para la parte fraccionaria, la parte después del punto binario, las potencias de 2 son negativas: 2^-1, 2^-2, y así sucesivamente. Así que el número binario 1.1 es 1 + 1/2, o 1.5 en decimal. Del mismo modo, binario 1.0011 es 1 + 1/8 + 1/16 o 1.1875. El exponente permite que los números escapen del rango limitado del significando. Por ejemplo, 1.1 (binario) × 2^8 es 384. Con exponentes más grandes, los números de punto flotante pueden cubrir un rango enorme; incluso un número de punto flotante corto de 32 bits cubre un rango que excede 10^-36 a 10^38.
La suma y resta de punto flotante son más complicadas que las operaciones de enteros. Antes de que los números pueda sumarse (o restarse), sus puntos binarios deben alinearse, igual que alinear los puntos decimales para los números decimales. Después de la operación, el exponente del resultado debe ajustarse, normalizando el significando para que comience con un bit 1. Los pasos para una simple suma de punto flotante. El diagrama de arriba ilustra una simple suma de punto flotante: 13.5 + 3.5. Las primeras dos líneas muestran los dos argumentos, con un exponente y significando. Ambos argumentos están normalizados, así que el bit más a la izquierda es un 1. Antes de sumar, el segundo argumento debe alinearse—ma...
Fuente: Hacker News · Resumido por HeadlinesBriefing