Por que esta instrucción (FPU) genera una excepción.

Iniciado por .:UND3R:., 3 Julio 2012, 03:19 AM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

Estoy viendo ejemplos de como utilizar la instrucción FWAIT y me dan el siguiente ejemplo de cuando sería útil:

Código (asm) [Seleccionar]
.data
valEnt DWORD 25
.code
fild ValEnt                   ; carga entero en ST(0)
inc valEnt                    ; incrementa el entero


Me dicen que en el ejemplo mostrado se generaría una excepción.

¿Por qué con la instrucción fild ValEnt se produce tal excepción?.

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Иōҳ

Eres adicto a la Ing. Inversa? -> www.noxsoft.net

_Enko

#2
Cita de: Иōҳ en  3 Julio 2012, 03:56 AM
Código (asm) [Seleccionar]
valEnt FLOAT 25.0
fild es para INTEGER.
fld para float.


La excepcion se puede producir pero de seguro que el libro es del año 80.

la fpu funciona en paralelo con el cpu.
Entonces puede pasar que la fpu mientras este leyendo el valor valInt la cpu lo esté incrementando... poco probable no se. Pero como no estan sincronizados, puede pasar, nadie te garantiza lo contrario.
En el ejemplo tuyo es poco probable... tendria que haber mas instrucciones de fpu de por medio sin fwait. y luego el inc ValEnt sin fwait.
Lo recomendable es igual, no mezclar instrucciones de la fpu con instrucciones del cpu.

calculos cpu
calculos fpu
fwait
calculos cpu

De esa manera no hay problemas en ese sentido.

buen tuto
http://www.website.masmforum.com/tutorials/fptute/index.html

.:UND3R:.

Gracias a ambos por la respuesta, me quedo con que por seguridad, al mezclar la FPU con la CPU, debo introducir un FWAIT. Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Иōҳ

Sip tienes razón _Enko no sé como se me pasó u.u

Código (asm) [Seleccionar]
fild dword ptr [valEnt]
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

_Enko

Cita de: Иōҳ en 25 Julio 2012, 03:47 AM
Sip tienes razón _Enko no sé como se me pasó u.u

Código (asm) [Seleccionar]
fild dword ptr [valEnt]
Ahora iras al infierno y programaras en javascript por una eternidad  >:D