Der Versuch, eine harmonische Reihe zu berechnen.Harmonische Serie mit x86-64 Baugruppe
Im Moment gebe ich die Nummer ein, die ich hinzufügen möchte.
Wenn ich eine kleine Zahl wie 1.2 eingeben, stoppt das Programm einfach, stürzt nicht ab, es scheint Berechnungen zu machen.
aber es endet nie das Programm
hier mein Code
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
Der Code ist im Grunde der Berechnung des 1/2 oder 1/3 oder 1/4 und es zu einer laufenden Summe hinzufügen, dann vergleicht, um zu sehen, wenn ich einen Wert über dem erreicht habe, was ich eingegeben habe, sobald es die Schleife verlassen sollte
siehst du meinen Fehler?
Der letzte 'jmp' ist (logisch)' springen wenn kleiner als ODER gleich'. Es gibt keinen guten Grund, 387-Code auf x86-64 zu verwenden. SSE ist orthogonaler als die plumpe, stack-basierte ISA - und macht Dinge wie Vergleiche usw. viel einfacher. –
mögliches Duplikat von [Summierung in Assembler] (http://stackoverflow.com/questions/10021071/summation-in-assembly-language) –