Título: Equivalencia de __ftol2_sse en MASM
Publicado por: MCKSys Argentina en 8 Febrero 2010, 05:50 am
Hola! Estoy pasando un código de VC 2008 a MASM y me he encontrado con lo siguiente: FLD QWORD PTR SS:[EBP-24] MOV ESI,EAX CALL 20375090 ;__ftol2_sse CDQ
Según tengo entendido, esta función se encarga de convertir un Float en Dword. El problema es que no encuentro ninguna macro o función que me permita hacer lo mismo que hace esta función en MASM. ¿ Alguien tiene alguna idea ?
Título: Re: Equivalencia de __ftol2_sse en MASM
Publicado por: Eternal Idol en 8 Febrero 2010, 08:07 am
Directo del WinDbg: floating!_ftol2_sse: 00401260 833d7093420000 cmp dword ptr [x!__sse2_available (00429370)],0 ds:0023:00429370=00000001 00401267 742d je x!_ftol2 (00401296) floating!_ftol2_pentium4: 00401269 55 push ebp 0040126a 8bec mov ebp,esp 0040126c 83ec08 sub esp,8 0040126f 83e4f8 and esp,0FFFFFFF8h 00401272 dd1c24 fstp qword ptr [esp] 00401275 f20f2c0424 cvttsd2si eax,mmword ptr [esp] 0040127a c9 leave 0040127b c3 ret
De igual manera podes encontrar _ftol2.
Título: Re: Equivalencia de __ftol2_sse en MASM
Publicado por: MCKSys Argentina en 8 Febrero 2010, 21:52 pm
Gracias Ethernal Idol!! Aunque ya habia hecho una implementación en base a OllyDbg. Me quedó asi: ftol2 proc
; local tmp:DWORD ; fistp tmp ; mov eax, tmp ; ret
push ebp mov ebp,esp sub esp,020h and esp,0fffffff0h fld st fst dword ptr ss:[esp+018h] fistp qword ptr ss:[esp+010h] fild qword ptr ss:[esp+010h] mov edx,dword ptr ss:[esp+018h] mov eax,dword ptr ss:[esp+010h] test eax,eax je @Converte_20375125
@Converte_203750E9:
fsubp st(1),st test edx,edx jns @Converte_2037510D fstp dword ptr ss:[esp] mov ecx,dword ptr ss:[esp] xor ecx,080000000h add ecx,07fffffffh adc eax,0 mov edx,dword ptr ss:[esp+014h] adc edx,0 jmp @Converte_20375139
@Converte_2037510D:
fstp dword ptr ss:[esp] mov ecx,dword ptr ss:[esp] add ecx,07fffffffh sbb eax,0 mov edx,dword ptr ss:[esp+014h] sbb edx,0 jmp @Converte_20375139
@Converte_20375125:
mov edx,dword ptr ss:[esp+014h] test edx,07fffffffh jnz @Converte_203750E9 fstp dword ptr ss:[esp+018h] fstp dword ptr ss:[esp+018h]
@Converte_20375139:
leave retn ;<= Procedure End ftol2 endp
(Es el código que viene luego del Je tuyo de 401267, es por si la PC no tiene SSE2) De todas formas, nuevamente, Gracias ;D PD: Lo comentado es una versión "reducida", pero tiene falencias... :silbar:
Título: Re: Equivalencia de __ftol2_sse en MASM
Publicado por: Eternal Idol en 8 Febrero 2010, 21:59 pm
De nada y si como te decia de igual manera podias encontrar _ftol2.
|