Vous êtes sur la page 1sur 18

EL COPROCESADOR MATEMTICO En los procesadores actuales: Unidad de punto flotante

CPU
dir

Bus local

datos

dir

FPU
datos

CPU 8086 80286 80386 80486 SX 80486

Coprocesador 8087 80287 80387 80487 SX Integrado

Ejecuta instrucciones sobre nmeros reales Maneja operandos de alta precisin (hasta 80 bits) Existen instrucciones especficas para su manejo

EL COPROCESADOR MATEMTICO Procesadores antiguos sin FPU integrada Necesidad de emulacin Multitud de programas emuladores Filtran las instrucciones del coproc.

Comparacin de velocidad (Caso del par 8086 / 8087) a 5 MHz Operacin Coproc. (s) Emulado (s)

Suma-resta Multiplicacin Divisin Comparacin LOAD STORE Raz cuadrada Tangente Exponenciacin

17 19 39 9 10 21 36 90 100

1600 1600 3200 1300 1700 1200 19600 13000 17000

EL COPROCESADOR MATEMTICO El juego de registros


79 78 64 63 0

Bit de signo

Exponente 15 bits

Mantisa 64 bits

Pila de 8 registros de 80 bits R0 .. R7


TAG 2 S 1 EXP 15 MANTISA 64
R0 R1 R2 R3 R4 R5 R6 R7

Adems:
15 0

Registro de CONTROL Registro de STATUS Palabra TAG Puntero instrucciones Puntero datos

EL COPROCESADOR MATEMTICO Tipos de datos manejados por la FPU Norma IEEE 754 (Floating Point Standard)
Tipo de datos ENTEROS ENTEROS CORTOS ENTEROS LARGOS DECIMAL EMPAQUETADO REAL REAL DOBLE PRECISIN REAL PREC. EXTENDIDA Bits 16 32 64 80 32 64 80 Dg. signif. 4 9 18 18 67 15 16 19 Margen de valores -32768 a +32767 2.147.483.648 8.646.744.073.709.551.616 18 dgitos con signo 1,1810-37 a 3,41038 2,2310-307 a 1,810308 3,310-4932 a 1,21104932 Equivalente C o PASCAL int short long float double long double

Siempre trabaja internamente con 80 bits Enteros se representan en complemento a dos Decimal empaquetado: 10 bytes 9 bytes ms 1 de signo
Byte 9 Byte 8 Byte 7 Byte 0

SIGNO 0 0 3 1 1 1 0 9 0 1

EL COPROCESADOR MATEMTICO Funcionamiento interno


Trabaja como ciertas calculadoras cientficas Utiliza RPN (Notacin polaca inversa) Primero operandos, luego signo Registro en el tope de la pila : TOP ST(0)

R0 R1 R2 R3 R4 R5 R6 R7

Registro activo

ST(6) ST(7) ST(0) ST(1) ST(2) ST(3) ST(4) ST(5)

3 bits Puntero de pila

Registro de STATUS

EL COPROCESADOR MATEMTICO Ejemplo de operacin con la FPU


Calcular:

x+ y S = sin z

Instrucciones ensamblador para la FPU


1 2 3 4 5 6 7 FLD FLD FLD FADD FDIV FSIN FST z y x ST,ST(2) S Carga z en registro TOP Carga y en registro TOP Carga x en registro TOP Suma ST y ST(1) Divide ST entre ST(2) Calcula sen(ST) Almacena TOP en S

Puntero:
110 101 100 100 100 100 101

y z

x y z

x+y y z

(x+y)/z y z

S y z

S y z

R0 R1 R2 R3 R4 R5 R6 R7

EL COPROCESADOR MATEMTICO Ejecucin en paralelo

Repartidor de trabajo

Unidad de ejecucin Unidad de enteros de ejecucin de enteros Operaciones FP Operaciones FP

Unidad de ejecucin de enteros Ejecucin de saltos

Puerto 0 clculo de direcciones Puerto1 Puerto 2 Puerto 3 Puerto 4

Unidad de almacenamiento de datos (STORE)

Unidad de almacenamiento de direcc. (STORE)

Unidad de carga (LOAD)

Instrucciones del coprocesador: Sus mnemnicos empiezan por F Su cdigo mquina comienza por 11011 (ESC)

EL COPROCESADOR MATEMTICO Patillaje externo


Seal FERR : Activa cuando la FPU detecta un error en una operacin Generalmente conectada a una entrada de interrupcin IRQ 5 (PIC 2)

CPU
FERR IRQ 5

PIC 8259

Antiguamente seal necesaria Actualmente se mantiene por compatibilidad Seal IGNNE : Si se activa el procesador ignora los errores numricos Puede tambien realizarse por software.

EL COPROCESADOR MATEMTICO Control de la ejecucin concurrente


Tres tipos de sincronizacin necesarios: 1. Sincronizacin de instrucciones
No debe comenzar la ejecucin de una nueva instruccin en la FPU hasta no finalizar las anteriores
CPU Coproc. CPU CPU CPU Coproc. Coproc. CPU

STALL

Slo si no relacionada

Se encarga de ello el procesador, transparente al usuario

2. Sincronizacin de datos
Datos compartidos por la CPU y el procesador:
Ejecucin concurrente: FIST mem MOV AX, mem Solucin: FIST mem FWAIT MOV AX, mem Se detiene la ejecucin hasta que FST termina No se garantiza que AX contenga el dato grabado previamente

EL COPROCESADOR MATEMTICO Control de la ejecucin concurrente


3. Sincronizacin de errores El coprocesador activa la interrupcin en la instruccin siguiente a la que ha producido el error.
FLD contador INC contador FSQRT

FLD puede generar un error (formato incorrecto) No se detecta hasta FSQRT

FLD contador FSQRT INC contador

De esta forma se asegura que el error se detecta antes de incrementar la variable

Generalmente los compiladores tienen en cuenta este tipo de sincronizacin.

EL COPROCESADOR MATEMTICO El juego de instrucciones del coprocesador


Los mnemnicos comienzan siempre por F Instrucciones de transferencia de datos
FLD FST FSTP FILD FIST FISTP FBLD FBSTP FXCH FXCH ST(i) Cargar nmero real desde memoria Salvar nmero real a memoria Salvar nmero real e incrementar puntero de pila Cargar nmero entero desde memoria Salvar nmero entero a memoria Salvar nmero entero e incrementar puntero de pila Cargar nmero en BCD desde memoria Salvar nmero en BCD a memoria e incrementar puntero Intercambia ST con ST(1) Intercambia ST con el registro especificado

Instrucciones aritmticas
Formatos: OPERACIN OPERACIN ST, ST(i) OPERACIN ST(i), ST OPERACIN mem opera sobre ST y ST(1) opera sobre ST y ST(i) opera sobre ST(i) y ST opera sobre ST y memoria

EL COPROCESADOR MATEMTICO El juego de instrucciones del coprocesador


Instrucciones aritmticas
FADD FADDP FIADD FSUB FSUBP FISUB FSUBR FSUBRP FISUBR FMUL FMULP FIMUL FDIV FDIVP FIDIV FDIVR FDIVRP FIDIVR Suma nmeros reales Suma nmeros reales e incrementa puntero de pila Suma nmeros enteros Resta nmeros reales Resta nmeros reales e incrementa puntero Resta nmeros enteros Resta nmeros reales en orden inverso Resta nmeros reales en orden inverso e inc. punt. Resta nmeros enteros en orden inverso Multiplica nmeros reales Multiplica nmeros reales e incrementa puntero Multiplica nmeros enteros Divide nmeros reales Divide nmeros reales e incrementa puntero Divide nmeros enteros Divide nmeros reales en orden inverso Divide nmeros reales en orden inverso e inc. puntero Divide nmeros enteros en orden inverso

Otras instrucciones aritmticas


FSQRT FSCALE FPREM FRNDINT FXTRACT FABS FCHS Raz cuadrada Para multiplicar o dividir por potencias de 2 Resto Redondeo a entero Extrae exponente y mantisa Valor absolto Cambiar signo

EL COPROCESADOR MATEMTICO El juego de instrucciones del coprocesador


Instrucciones transcendentes
FSIN FCOS FSINCOS FPTAN FPATAN F2XM1 FYLSX FYL2XP1 Calcula seno Calcula coseno Calcula seno y coseno Calcula tangente Calcula arco tangente Calcula 2x-1 Calcula Ylog2 (X) Calcula Ylog2 (X+1)

Instrucciones de manejo de constantes


FLDZ FLD1 FLDPI FLDL2T FLDL2E FLDLG2 FLDLN2 Carga el valor 0 Carga el valor 1 Carga el valor PI Carga el valor log2 (10) Carga el valor log2 (e) Carga el valor log10 (2) Carga el valor ln (2)

Instrucciones de comparacin
FCOM FCOMP FCOMPP FICOM FICOMP FTST FXAM Compara dos nmeros reales Compara dos nmeros reales e inc. puntero Compara dos nmeros reales e inc. punt. 2 veces Compara nmeros enteros Compara enteros con incremento de puntero TEST: Compara el registro TOP con 0 Informa del tipo de objeto contenido en ST

Los resultados de la comparacin se reflejan en los bits de condicin del registro de status

EL COPROCESADOR MATEMTICO El juego de instrucciones del coprocesador

Instrucciones de control
FINIT FLDCW FSTCW FSTSW FSTSW AX FNSTSW AX FCLEX FSTENV FLDENV FSAVE FRSTOR FINCSTP FDECSTP FFREE FNOP FWAIT Inicializa el coprocesador Carga palabra de CONTROL Almacena palabra de CONTROL Almacena palabra de STATUS Almacena palabra de STATUS en AX Borra flags de excepcin Almacena entorno (CONTROL, SATUS, TAG y errores) Carga entorno Salvaguarda todos los registros de coprocesador Restaura todos los registros Incrementa el puntero de pila Decrementa el puntero de pila Libera un registro (anota vaco en TAG) No operacin Instruccin WAIT de la CPU

EL COPROCESADOR MATEMTICO Las excepciones en el coprocesador


Existen 6 excepciones diferentes: El coprocesador lanza una interrupcin a travs de FERR. La rutina de atencin debe tomar la accin que considere en funcin de la excepcin activada. Si la excepcin est enmascarada, el coprocesador toma una accin por defecto.

EXCEPCIN
OPERACIN INVLIDA

Causa que la origina


Operando con formato no soportado, no se identifica como nmero, es indeterminado, etc... Cualquiera de los operandos no se ajusta a la norma de representacin de nmeros en punto flotante. El divisor de una divisin es 0 y el dividendo no es 0 ni infinito El resultado es demasiado grande para ser representado en el formato de trabajo El resultado no es cero, pero es demasiado pequeo para ser representado en el formato de trabajo. El resultado no es representable en el formato de trabajo y por tanto se produce redondeo.

Accin por defecto


Adopta un formato especial indefinido que reconoce el procesador Ninguno. Contina el proceso normal

OPERANDO FUERA DE NORMA DIVISIN POR CERO OVERFLOW

Se anota resultado INFINITO

Se pone el nmero ms grande representable en ese formato Se pone el resultado 0

UNDERFLOW

RESULTADO INEXACTO

Ninguno. Contina el proceso Normal

EL COPROCESADOR MATEMTICO El registro de control


Permite: Enmascarar las interrupciones Controlar la precisin Controlar el redondeo Controlar otros parmetros de funcionamiento
IC RC RC PC PC M PM UM OM ZM DM IM

Mscaras individuales de excepcin


IM DM ZM OM UM PM RC RC 0 0 1 1 0 1 0 1 OPERACIN INVLIDA OPERANDO FUERA DE NORMA DIVISIN POR CERO OVERFLOW UNDERFLOW RESULTADO INEXACTO

Redondeo
Hacia el valor ms prximo Hacia abajo (-) Hacia arriba (+) Truncar hacia cero

PC PC 0 0 1 1 0 1 0 1

Precisin
24 bits reservado 53 bits 64 bits

No se gana en velocidad por reducir la precisin

EL COPROCESADOR MATEMTICO El registro de estado (STATUS)


Contiene el puntero de la pila Contiene los cdigos de condicin Indica las causas de excepcin
C3 T T T C2 C1 C0 ES SF PE UE OE ZE DE IE

C3 C2 C1 C0

Cdigos de condicin de las operaciones de comparacin Puntero de la pila

SF

STACK FAULT

Indicadores de excepcin
IE DE ZE OE UE PE ES OPERACIN INVLIDA OPERANDO FUERA DE NORMA DIVISIN POR CERO OVERFLOW UNDERFLOW RESULTADO INEXACTO Indicador general de excepcin

EL COPROCESADOR MATEMTICO Otros registros


El registro TAG
TAG 2 S 1 EXP 15 MANTISA 64
R0 R1 R2 R3 R4 R5 R6 R7

TAG 00 01 10 11

Significado Contenido vlido Contenido CERO Contenido especial (infinito, fuera de norma) Registro vaco

Los punteros de instruccn y dato Almacenan la direccin de memoria y el dato que han producido la ltima excepcin Tambin almacenan informacin de depuracin Ocupan un total de 28 bytes