Assembler - liczenie liczby e

0

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.

0

A porównujesz dobre liczby?

0

Prawdziwe WTF polega na tym, że robisz pętlę for na floatcie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1