Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global _uberpow
- section .code use32
- %define arg_a 8
- %define arg_b 4
- _uberpow:
- ; argumenty:
- ; podstawa w [esp + arg_b] (float)
- ; wykladnik w [esp + arg_a] (int)
- ; zwracana wartość w st0
- mov eax, [esp + arg_a]
- fld dword [esp + arg_b]
- .internal_begin:
- test eax, eax
- jl .when_less
- cmp eax, 10
- jg .when_more
- shl eax, 2
- lea ecx, [.when0 + eax * 8]
- jmp ecx
- .when_less:
- neg eax
- call .internal_begin
- fld1
- fdivr
- ret
- align 32
- .when0:
- fstp st0
- fld1
- ret
- align 32
- .when1:
- ret
- align 32
- .when2:
- fld st0
- fmul
- ret
- align 32
- .when3:
- fld st0
- fld st0
- fmul
- fmul
- ret
- align 32
- .when4:
- fld st0
- fmul
- fld st0
- fmul
- ret
- align 32
- .when5:
- fld st0
- fld st0
- fmul
- fld st0
- fmul
- fmul
- ret
- align 32
- .when6:
- fld st0
- fmul
- fld st0
- fld st0
- fmul
- fmul
- ret
- align 32
- .when7:
- fld st0
- fld st0
- fld st0
- fld st0
- fmul
- fmul
- fld st0
- fmul
- fmul
- ret
- align 32
- .when8:
- fld st0
- fmul
- fld st0
- fmul
- fld st0
- fmul
- ret
- align 32
- .when9:
- fld st0
- fld st0
- fmul
- fmul
- fld st0
- fld st0
- fmul
- fmul
- ret
- align 32
- .when10:
- fld st0
- fmul
- fld st0
- fld st0
- fmul
- fld st0
- fmul
- fmul
- ret
- .when_more:
- ; argumenty w rejestrach:
- ; st0 = potegowana liczba
- ; eax = wykładnik
- ; zwracana wartość w st0
- fld1
- fxch st1
- fyl2x
- fild dword [esp + arg_a]
- fmulp st1, st0
- fst st1
- frndint
- fld1
- fscale
- fxch st1
- fsubr st0, st2
- f2xm1
- fld1
- faddp st1, st0
- fmulp st1, st0
- fstp st1
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement