AlexNeagu11

dubla precizie bl

Jan 31st, 2022
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void p1(...) {
  5. /*
  6. Observatii na :
  7. daca se fac adunari/scaderi pe stiva deja inseamna ca trebuie sa pun rezultatul in FLOAT!!! cu fst
  8. daca pun din intreg -> fild, altfel fld
  9. la floaturi se face lea, la inturi nu!
  10. */
  11. _asm {
  12.  
  13. mov ebx, [ebp + 8]
  14. mov ecx, [ebp + 12]
  15. mov esi, 0
  16. fldz
  17. bucla :
  18. cmp esi, ecx
  19. je end_bucla
  20. fild dword ptr [ebx + esi * 4]
  21. fabs
  22. faddp st(1), st(0)
  23. inc esi
  24. jmp bucla
  25. end_bucla :
  26. mov ebx, [ebp + 16]
  27. fstp [ebx]
  28. }
  29.  
  30. }
  31.  
  32. void p2(...) {
  33. _asm {
  34.  
  35. mov ebx, [ebp + 8]
  36. mov ecx, [ebp + 12]
  37. mov esi, 0
  38. fldz
  39. bucla :
  40. cmp esi, ecx
  41. je end_bucla
  42. fild dword ptr[ebx + esi * 4]
  43. fchs
  44. faddp st(1), st(0)
  45. inc esi
  46. jmp bucla
  47. end_bucla :
  48. mov ebx, [ebp + 16]
  49. fstp[ebx]
  50. }
  51. }
  52.  
  53. void p3(...) {
  54. _asm {
  55.  
  56. mov ebx, [ebp + 8]
  57. mov ecx, [ebp + 12]
  58. mov esi, 0
  59. fldz
  60. bucla :
  61. cmp esi, ecx
  62. je end_bucla
  63. mov eax, [ebx + esi * 4]
  64. cmp eax, 0
  65. jle nu
  66. fild dword ptr[ebx + esi * 4]
  67. fsqrt
  68. faddp st(1), st(0)
  69. nu :
  70. inc esi
  71. jmp bucla
  72. end_bucla :
  73. mov ebx, [ebp + 16]
  74. fstp[ebx]
  75.  
  76. }
  77. }
  78.  
  79. void p4(...) {
  80. _asm {
  81.  
  82. mov ebx, [ebp + 20] // punem 2 pe stiva
  83. fild dword ptr [ebx]
  84.  
  85. fldz // punem 0 pe stiva
  86.  
  87. mov ebx, [ebp + 8] // v
  88. mov ecx, [ebp + 12] // n
  89. mov esi, 0
  90. bucla :
  91. cmp esi, ecx
  92. je end_bucla
  93. fild dword ptr [ebx + esi * 4]
  94. fdiv st(0), st(2)
  95. faddp st(1), st(0)
  96. inc esi
  97. jmp bucla
  98. end_bucla :
  99. mov ebx, [ebp + 16]
  100. fstp[ebx]
  101. }
  102. }
  103. int main()
  104. {
  105.  
  106.  
  107. int v[9] = { -1, 2, -3, -4, 5, 6, 7, 0, -9 };
  108. int n = 9;
  109.  
  110. float sum;
  111. _asm {
  112.  
  113. lea ebx, v
  114. lea esi, sum
  115.  
  116. push esi
  117. push n
  118. push ebx
  119.  
  120. call p1
  121. add esp, 12
  122.  
  123. }
  124.  
  125. cout << sum << '\n';
  126.  
  127. _asm {
  128.  
  129. lea ebx, v
  130. lea esi, sum
  131.  
  132. push esi
  133. push n
  134. push ebx
  135.  
  136. call p2
  137. add esp, 12
  138.  
  139. }
  140.  
  141. cout << sum << '\n';
  142.  
  143.  
  144. _asm {
  145.  
  146. lea ebx, v
  147. lea esi, sum
  148.  
  149. push esi
  150. push n
  151. push ebx
  152.  
  153. call p3
  154. add esp, 12
  155.  
  156. }
  157.  
  158. cout << sum << '\n';
  159.  
  160. int doi = 2;
  161. _asm {
  162.  
  163. lea edi, doi
  164. lea ebx, v
  165. lea esi, sum
  166.  
  167. push edi
  168. push esi
  169. push n
  170. push ebx
  171.  
  172. call p4
  173. add esp, 16
  174.  
  175. }
  176.  
  177. cout << sum << '\n';
  178.  
  179. return 0;
  180. }
  181.  
Advertisement
Add Comment
Please, Sign In to add comment