Advertisement
UnrestrainedGTA

Floats To Doubles

Oct 4th, 2022 (edited)
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. alloc(TypeName,256)
  2.  
  3. alloc(ByteSize,4)
  4. alloc(UsesFloat,4)
  5. alloc(PreferedAlignment,4)
  6.  
  7. alloc(ConvertRoutine,1024)
  8.  
  9. label(SKIP)
  10.  
  11. TypeName:
  12. db 'CustomType_for_Csimbi',0
  13.  
  14. ByteSize:
  15. dd (int)40 // struct has 40 bytes
  16. UsesFloat:
  17. db 01
  18. PreferedAlignment:
  19. db 04
  20.  
  21. //double dValue; //0x00
  22. //double dKey1; //0x08
  23. //double dKey2; //0x10
  24. //double dChecksum; // Irrelevant //0x18
  25. //double dZero; // 0 or 1; 0: valid, 1:invalid //0x20
  26.  
  27. //dSearchVal = dKey1 - dKey2 + dValue;
  28.  
  29. define(dValue ,eax+00)
  30. define(dKey1 ,eax+08)
  31. define(dKey2 ,eax+10)
  32. define(dZero_1,eax+20)
  33. define(dZero_2,eax+24)
  34.  
  35. ConvertRoutine:
  36. push ebp
  37. mov ebp,esp
  38. mov eax,[ebp+8] //place the address that contains the bytes into eax
  39.  
  40. cmp dword ptr [dZero_1],0
  41. jne SKIP
  42. cmp dword ptr [dZero_2],0
  43. jne SKIP
  44.  
  45. finit
  46.  
  47. push eax
  48. fld qword ptr [dKey1]
  49. fadd qword ptr [dValue]
  50. fsub qword ptr [dKey2]
  51. fstp dword ptr [esp] // store and convert to float
  52. pop eax
  53.  
  54. //(I used qword three times because values are "double". I used dword at the end because UsesFloat is used)
  55.  
  56.  
  57. pop ebp
  58. ret 4
  59.  
  60. SKIP:
  61. mov eax,7fffffff // gives NaN, CE will skip it
  62. pop ebp
  63. ret 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement