Ejemplo de FPU (Organización del Computador II)
aca esta el ejercicio a mi considerar mas dificil (lease largo) de la practica, lo digo a ojo porque es el unico que hice!!
#include <math.h>
extern float probar(float,float);
int main(int argc, char *argv[]) {
//y = (1/5)sen(x)cos(z) – (3/2)cos(7a/4)e² //a = (x - PI)² + (x + PI)² float x = 7.0; float z = 5.0; float a = (x-M_PI)*(x-M_PI) + (x+M_PI)*(x+M_PI); float y = (1.0/5.0) * sin(x) * cos(z) - (3.0/2.0) * cos((7.0/4.0)*a) * pow(exp(1.0),2.0); printf("\ny: %f\n\n", y); printf("\ndevolvi: %f\n\n", probar(x,z)); system("PAUSE"); return 0;
}
y el .asm:
global _probar
section .data
cinco dd 5 cuatro dd 4 siete dd 7
section .text
_probar:
- obtengo (1/5)*sen(x)*cos(z) en st0
fld1 fild dword [cinco] fdivp st1,st0 fld dword [esp+4] fsin fld dword [esp+8] fcos fmulp st1,st0 fmulp st1,st0
- obtengo (3/2)*e^2 en st0
fld1 fld1 fadd st1,st0 fadd st0,st1 fdivrp st1,st0
fldl2e fldl2e frndint fsub st1,st0 fld1 fscale fstp st1 fxch st1 f2xm1 fld1 faddp st1,st0 fmulp st1,st0 fld st0 fmulp st1,st0
fmulp st1,st0
- obtengo cos((7/4) * a) = ((7/4) * ((x - PI)² + (x + PI)²)) en st0
fld dword [esp+4]
fld st0 fldpi fsubp st1,st0 fld st0 fmulp st1,st0
fld st1 fldpi faddp st1,st0 fld st0 fmulp st1,st0 faddp st1,st0
fild dword [siete] fild dword [cuatro] fdivp st1,st0 fmulp st1,st0 fcos fstp st1
- situacion hasta el momento
- st2 = | (1/5)*sen(x)*cos(z) |
- st1 = | (3/2)*e^2 |
- st0 = | cos((7/4) * a) |
- termino de hacer las cuentas
fmulp st1,st0 fsubp st1,st0
ret