Serie armónica con montaje x86-64.
Tratando de calcular una serie armónica.
Ahora mismo estoy ingresando el número al que quiero que se agregue la suma.
Cuando ingreso un número pequeño como 1.2, el programa simplemente se detiene, no se bloquea, parece estar haciendo cálculos.
Pero nunca termina el programa.
aqui esta mi codigo
denominator:
xor r14,r14 ;zero out r14 register
add r14, 2 ;start counter at 2
fld1 ;load 1 into st0
fxch st2
denomLoop:
fld1
mov [divisor], r14 ;put 1 into st0
fidiv dword [divisor] ;divide st0 by r14
inc r14 ;increment r14
fst qword [currentSum] ;pop current sum value into currentSum
jmp addParts
addParts:
fld qword [currentSum]
fadd st2 ;add result of first division to 1
fxch st2 ;place result of addition into st2
fld qword [realNumber] ;place real number into st0
;compare to see if greater than inputed value
fcom st2 ;compare st0 with st2
fstsw ax ;needed to do floating point comparisons on FPU
sahf ;needed to do floating point comaprisons on FPU
jg done ;jump if greater than
jmp denomLoop ;jump if less than
El código es básicamente el cálculo de 1/2 o 1/3 o 1/4 y lo agrega a una suma corriente, luego se compara para ver si he alcanzado un valor por encima de lo que ingresé, una vez que lo haya hecho debería salir del bucle
¿Ustedes ven mi error?