Mam zrobić zadanie w asseblerze na koprocesorze, który będzie obliczał liczbę e z dokładnością podaną przez użytkownika. Wzór to Suma (1/n!)
Mam taki kod, niestety w wyniku cały czas jest 2 bez względu na to co wpiszę jako dokładność n. Wychodzi na to, że pętla wykonuje się tylko raz.
section .text use32
global _eul
_eul:
%idefine n [ebp+8] ;deklaracja stałej
push ebp
mov ebp, esp
finit ; inicjalizacja stosu FPU
fld qword n
fstp qword [nx]
fld1 ; st0=silnia
fld1 ; st0=E, st1=silnia
licz:
fxch ; st0=silnia, st1=E
fld qword [licznik] ; st0=licznik, st1=silnia, st2=E
fdivr qword [jeden]
fmulp st1,st0 ; st0=silnia, st1=E
fadd st1, st0 ; st0=silnia, st1=E
fxch; st0=E, st1=silnia
;zwiekszanie licznika i porownanie
fld qword [nx] ;st0=nx st1=e st2=silnia
fld qword [licznik] ; st0=licznik, st1=nx st2=e st3=licznik
fld qword [jeden] ; st0=jeden, st1=licznik, st2=nx, st3=e, st4=silnia
faddp; st0=licznik, st1=nx, st2=e, st3=silnia
fcomi st0,st1
fstp qword [licznik] ;st0=nx st1=e st2=silnia
fstp qword [nx] ;st0=e st1=silnia
jl licz
; LEAVE = mov esp, ebp / pop ebp
leave
ret
; ZMIENNE
licznik dq 1
jeden dq 1
nx dq 0
Oprócz tego w języku C mam kod z pobieraniem liczby, oraz wyświetleniem wyniku.