SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: Ruben3d en Domingo 29 de Febrero de 2004, 21:26

Título: Operaciones En Coma Flotante
Publicado por: Ruben3d en Domingo 29 de Febrero de 2004, 21:26
Hola.

He hecho dos pequeñas funciones en C++ con ensamblador. Se comportan igual, dividiendo f1 entre f2 y retornando el resultado. El código es éste:


Código: Text
  1.  
  2.     inline float ASM_Test(const float f1, const float f2)
  3.     {
  4.   float f3;
  5.   __asm {
  6.     fld f1
  7.     fld f2
  8.     fdivp st(1),st
  9.     fstp f3
  10.   }
  11.   return f3;
  12.     }
  13.  
  14.     inline float ASM_Test2(const float f1, const float f2)
  15.     {
  16.   float f3;
  17.   __asm {
  18.     fld f1
  19.     fdiv f2
  20.     fst f3
  21.   }
  22.   return f3;
  23.     }
  24.  
  25.  

La única diferencia es que la primera deja la pila como estaba y la segunda no lo hace, aunque son menos instrucciones. ¿Es necesario dejar la pila como estaba?

Un saludo.

Ruben3d
Título: Re: Operaciones En Coma Flotante
Publicado por: deldar en Lunes 19 de Abril de 2004, 16:15
Cuando estes trabajando en lenguaje ensamblador es una buena costumbre que: a la salida-retorno de una funcion-procedimiento todo salvo los datos que se querian modificar queden intactos.

Para ser claro la pila intacta porque en ocasiones se puede dar un uso muy variado y al mantener valores no esperados en ella se pueden dar errores de ejecución, por ejemplo: en la pila estaba la dirección de retorno al Main(). Al mantener un valor extraño ..."ups" la direccion no se corresponde ... "ups" la maquina ejecuta instrucciones incoherentes... "ups" maquina colgada. (generalmente no es para tanto pero ojo)
Título: Re: Operaciones En Coma Flotante
Publicado por: Ruben3d en Lunes 19 de Abril de 2004, 16:39
Gracias por la respuesta. Lo tendré en cuenta cuando haga este tipo de funciones.

Un saludo.

Ruben3d