0
試圖計算諧波系列。與x86-64組件的諧波系列
現在我輸入我想要添加的數字。
當我輸入一個像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並將其添加到運行總和,然後比較,看看我是否達到了我輸入的值,一旦它有它應該退出循環
你們看到我的錯誤?
如果小於或等於,最終'jmp'(邏輯上)'跳轉。沒有很好的理由在x86-64上使用387代碼。 SSE比笨拙的,基於堆棧的ISA更正交 - 並且使比較等事情變得更容易。 – 2012-04-04 05:06:39
[彙編語言彙總]的可能重複(http://stackoverflow.com/questions/10021071/summation-in-assembly-language) – 2012-04-05 01:08:04