Programación General > ASM (Ensamblador)

 Operaciones En Coma Flotante

(1/1)

Ruben3d:
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 ---     inline float ASM_Test(const float f1, const float f2)    {  float f3;  __asm {    fld f1    fld f2    fdivp st(1),st    fstp f3  }  return f3;    }     inline float ASM_Test2(const float f1, const float f2)    {  float f3;  __asm {    fld f1    fdiv f2    fst f3  }  return f3;    }  
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

deldar:
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)

Ruben3d:
Gracias por la respuesta. Lo tendré en cuenta cuando haga este tipo de funciones.

Un saludo.

Ruben3d

Navegación

[0] Índice de Mensajes

Ir a la versión completa