3.11 Expresiones de Punto Flotante para Ensamblador

 

 

Unidad de punto flotante

El procesador Intel 8086 se diseñó para manejar sólo la aritmética de enteros. Esto resultó ser un problema para el software de gráficos y de uso intensivo de cálculos, en donde se utilizaban los cálculos con números de punto flotante. Era posible emular la aritmética de punto flotante sólo mediante el software, pero el castigo en el rendimiento era severo. Los programas como AutoCAD (de Autodesk) demandaban un método más poderoso para realizar operaciones matemáticas de punto flotante. Intel vendió un chip coprocesador de punto flotante por separado, llamado 8087, y lo actualizó junto con cada generación de procesadores. Con la llegada del Intel486, el hardware de punto flotante se integró en la CPU principal y se le llamó Unidad de punto flotante (FPU).

 

Pila de registros FPU

La FPU no utiliza los registros de propósito general (EAX, EBX, etcétera). En vez de ello, tiene su propio conjunto de registros llamado pila de registros. Carga los valores de memoria y los coloca en la pila de registros, realiza cálculos y almacena los valores de la pila en la memoria. Las instrucciones de la FPU evalúan expresiones matemáticas en formato postfijo, en forma muy parecida a las calculadoras Hewlett-Packard.

Por ejemplo, a la siguiente expresión se le conoce como expresión infijo: (5 * 6) + 4. El equivalente en postfijo es:

5  6  * 4  +

La expresión infijo (A + B) * C requiere paréntesis para ignorar las reglas de precedencia predeterminadas (la multiplicación antes que la suma). La expresión postfijo equivalente no requiere paréntesis:

A  B  +  C  *

Pila de expresiones Una pila almacena los valores intermedios durante la evaluación de las expresiones postfijo. Las entradas de la pila se etiquetan como ST (0) y ST (1), en donde ST (0) indica la posición a la que apuntaría generalmente el apuntador de la pila.

Los métodos de uso común para traducir expresiones infijo a expresiones postfijo están bien documentados en los textos de introducción a las ciencias computacionales y en Internet, por lo que no los explicaremos aquí. La siguiente tabla contiene algunos ejemplos de expresiones equivalentes.

 

Registros de datos de la FPU

La FPU tiene ocho registros de datos de 80 bits que se pueden direccionar en forma individual, denominados R0 a R7. En conjunto se les conoce como pila de registros. Un campo de tres bits llamado TOP en la palabra de estado de la FPU identifica el número de registro que se encuentra en la parte superior de la pila, en ese momento. Por ejemplo, en la siguiente figura es igual al número 011 binario, con lo cual identifica a R3 como la parte superior de la pila. Esta ubicación de la pila se conoce también como ST (0) (o simplemente ST) al escribir instrucciones de punto flotante. El último registro es ST (7).

 

Como podríamos esperar, una operación push (también conocida como cargar) decrementa a TOP en 1 y copia un operando en el registro identificado como ST (0). Si TOP es igual a 0 antes de una operación push, TOP pasa al registro ST (7). Una operación pop (también conocida como almacenar) copia los datos que hay en ST (0) a un operando y después suma 1 a TOP. Si TOP es igual a 7 antes de la operación pop, pasa al registro R0. Si al cargar un valor en la pila se sobrescriben los datos existentes en la pila de registros, se genera una excepción de punto flotante. La siguiente figura muestra la misma pila después de haber metido (cargado) los valores 1.0 y 2.0.

Aunque es interesante comprender cómo la FPU implementa la pila usando un conjunto limitado de registros, sólo tenemos que enfocarnos en la notación ST(n), en donde ST  (0) siempre es la parte superior de la pila. De aquí en adelante, nos referiremos a los registros de la pila como ST (0), ST (1), etcétera. Los operandos de las instrucciones no pueden hacer referencia directa a los números de los registros.

 

 

Los valores de punto flotante en los registros utilizan el formato real extendido de 10 bytes del IEEE (también conocido como real temporal). Cuando la FPU almacena el resultado de una operación aritmética en memoria, traduce el resultado a uno de los siguientes formatos: entero, entero largo, de precisión simple (real corto), de precisión doble (real largo), o decimal codificado en binario empaquetado.

 

 

Inicio