Advertisement
Guest User

Untitled

a guest
Jul 8th, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global _uberpow
  2.  
  3. section .code use32
  4.  
  5.  
  6. %define arg_a 8
  7. %define arg_b 4
  8. _uberpow:
  9. ; argumenty:
  10. ;   podstawa w [esp + arg_b] (float)
  11. ;   wykladnik w [esp + arg_a] (int)
  12. ; zwracana wartość w st0
  13.     mov eax, [esp + arg_a]
  14.     fld dword [esp + arg_b]
  15.  
  16. .internal_begin:
  17.     test eax, eax
  18.     jl .when_less
  19.     cmp eax, 10
  20.     jg .when_more
  21.     shl eax, 2
  22.     lea ecx, [.when0 + eax * 8]
  23.     jmp ecx
  24.  
  25. .when_less:
  26.     neg eax
  27.     call .internal_begin
  28.     fld1
  29.     fdivr
  30.     ret
  31.  
  32. align 32
  33. .when0:
  34.     fstp st0
  35.     fld1
  36.     ret
  37.  
  38. align 32
  39. .when1:
  40.     ret
  41.  
  42. align 32
  43. .when2:
  44.     fld st0
  45.     fmul
  46.     ret
  47.  
  48. align 32
  49. .when3:
  50.     fld st0
  51.     fld st0
  52.     fmul
  53.     fmul
  54.     ret
  55.  
  56. align 32
  57. .when4:
  58.     fld st0
  59.     fmul
  60.     fld st0
  61.     fmul
  62.     ret
  63.  
  64. align 32
  65. .when5:
  66.     fld st0
  67.     fld st0
  68.     fmul
  69.     fld st0
  70.     fmul
  71.     fmul
  72.     ret
  73.  
  74. align 32
  75. .when6:
  76.     fld st0
  77.     fmul
  78.     fld st0
  79.     fld st0
  80.     fmul
  81.     fmul
  82.     ret
  83.  
  84. align 32
  85. .when7:
  86.     fld st0
  87.     fld st0
  88.     fld st0
  89.     fld st0
  90.     fmul
  91.     fmul
  92.     fld st0
  93.     fmul
  94.     fmul
  95.     ret
  96.  
  97. align 32
  98. .when8:
  99.     fld st0
  100.     fmul
  101.     fld st0
  102.     fmul
  103.     fld st0
  104.     fmul
  105.     ret
  106.  
  107. align 32
  108. .when9:
  109.     fld st0
  110.     fld st0
  111.     fmul
  112.     fmul
  113.     fld st0
  114.     fld st0
  115.     fmul
  116.     fmul
  117.     ret
  118.  
  119. align 32
  120. .when10:
  121.     fld st0
  122.     fmul
  123.     fld st0
  124.     fld st0
  125.     fmul
  126.     fld st0
  127.     fmul
  128.     fmul
  129.     ret
  130.  
  131. .when_more:
  132. ; argumenty w rejestrach:
  133. ;   st0 = potegowana liczba
  134. ;   eax = wykładnik
  135. ; zwracana wartość w st0
  136.     fld1
  137.     fxch st1
  138.     fyl2x
  139.     fild dword [esp + arg_a]
  140.     fmulp st1, st0
  141.     fst st1
  142.     frndint
  143.     fld1
  144.     fscale
  145.     fxch st1
  146.     fsubr st0, st2
  147.     f2xm1
  148.     fld1
  149.     faddp st1, st0
  150.     fmulp st1, st0
  151.     fstp st1
  152.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement