Você está na página 1de 1

include "stdafx.

h"
#include <iostream>

using namespace std;

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

cout<<_div<<_sum<<_sub<<_mul;

return 0;
}

Você também pode gostar