Equivalencia de __ftol2_sse en MASM

Iniciado por MCKSys Argentina, 8 Febrero 2010, 05:50 AM

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

MCKSys Argentina

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 ?
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Eternal Idol

#1
Directo del WinDbg:
Código (asm) [Seleccionar]
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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MCKSys Argentina

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:
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Eternal Idol

De nada y si como te decia de igual manera podias encontrar _ftol2.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón