typedef int fp14; // definicion de 14 bits despues del punto
#define addfp(a,b) \ //inicio de macro asm mov eax,a \ asm add eax,b #define subfp (a,b)\ asm mov eax,a\ asm sub eax,b #define mulfp(a,b)\ asm eax,a \ asm mov edx ,b\ //se movio a otro registro para tener 64 bits asm imul edx \ // primero multiplico y despues desplazo asm shrd eax,edx,14 //desplazsamiento de edx a eax primero destino despues origen y cuanto lo quieres desplazar #define divfp(a,b) \ asm mov eax ,a \ asm cdq \ //llena el registro edx con el valor del signo del registro eax asm shld edx,eax,14 \ //desplazamos eax a edx primero el destino despues //origen y despies la cantidad de desplazo los bits mas significativos a los bits menos significativos
asm sal eax,14 \ // si el bit de signo es negativo inserta 1
por la derecha si el bit de signo es pos inserta 0 por la derecha // inserta ceros ala derecha
asm idiv b
int _tmain(int argc, _TCHAR* argv[])
{ float a,b; cin>>a>>b; fp14 fpa,fpb; fpa= (int)(a*(1<<14)); // el 1<<14 es como decir 2 ala 14 pero mas facil y es la convercion de float a int fpb= (int)(b*(1<<14)); fp14 _div,_sum,_sub,_mul; divfp(fpa,fpb); asm mov _div,eax mulfp(fpa,fpb) asm mov _mul,eax addfp(fpa,fpb) asm mov _sum,eax subpf(fpa,fpb) asm mov _sub,eax