調和級数を計算しようとしています。
今、私は足し算を上げたい番号を入力しています。
1.2のような小さな数値を入力すると、プログラムは停止し、クラッシュせず、計算を行っているようです。
しかし、それはプログラムを終了することはありません
これが私のコードです
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
コードは基本的に1/2または1/3または1/4を計算し、それを現在の合計に追加し、入力した値を超える値に到達したかどうかを比較して、ループを終了する必要があります
君たちは私のエラーを見ますか?