2012-04-05 2 views
-2

Можно создать дубликат:
harmonic series with x86-64 assemblyСуммирование в ассемблере

пытается сделать версию гармонического ряда в сборе

Текущий код занимает 1 + 1/2 + 1/3 + 1/4 + 1/n, пока значение, которое суммируется, больше значения, которое было введено. (Значение с плавающей точкой)

в настоящее время код выходит из цикла после первого цикла через и печатает .33333

это мой выход состояние?

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 
addParts: 
fxch st2    ;put the current value that is in st2 into st0 
fadd qword [currentSum]  ;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 
jae done    ;jump if greater than 
jmp denomLoop   ;jump if less than 
+0

Вы должны выполнить свой код в отладчике, вместо того чтобы просить незнакомых людей обнаружить проблему. –

+0

oh спасибо за ваш вклад, я думал, что доска объявлений должна помогать сотрудничать и помогать друг другу? вы думаете, что я еще не пытался отлаживать это сам? – user1050632

+1

Stack Overflow - это не доска объявлений; это не место, чтобы заставить других отлаживать ваш код для вас. Вы не указали результаты каких-либо отладочных усилий с вашей стороны. Если бы вы прошли через это в отладчике, вы могли бы ответить на собственный вопрос. –

ответ

1

Эта линия кажется подозрительным:

fst qword [currentSum]  ;pop current sum value into currentSum 

вопреки замечанием, fst сохраняет вершину стека в память без выскакивают его. Вы хотите, чтобы вы выбрали fstp.

+0

fstp выскочит и ничего не оставит в st0, поэтому я использовал fst, поэтому он просто копирует его в переменную, и я все еще могу использовать значение в st0, мой комментарий должен быть обновлен – user1050632

Смежные вопросы