我正在尝试根据这个等式在汇编中实现指数函数算法:http: //upload.wikimedia.org/math/4/5/9/4597c1e758b3aeb83adcb03d3f75d00e.png
我的汇编代码:
.data
x:
.space 8
result:
.space 8
counter:
.space 8
factorial:
.space 8
n:
.space 8
xn:
.space 8
.text
.global expot
expot:
pushl %ebp
movl %esp, %ebp
flds 8(%ebp) # wczytaj x
fstps x
flds 12(%ebp) # wczytaj precyzje
fstps n
fldz
fstps result
fld1
fstps factorial
fld1
fstps counter
fld1
fstps xn
loop:
flds factorial
flds xn
fdiv %st(1)
fldl result
fadd %st(1), %st(0)
fstps result
flds counter
fcom n
je end
flds xn
fmul x
fstps xn
fld1
flds counter
fadd %st(1)
fstps counter
flds counter
flds factorial
fmul %st(1)
fstps factorial
jmp loop
end:
leave
ret
我在 C 中的代码:
#include <stdio.h>
extern float expot (float x, float n);
int main(void)
{
float x = expot (1, 4);
printf ("%f\n", x);
return 0;
}
我的问题是这个函数不返回任何东西。当我用 gdb 调试它时,我看到在第二次迭代中,当它应该计算 x^n 时,结果是 -nan,然后它应该计算 2!它再次返回 -nan 。我完全不知道这段代码有什么问题。
感谢您的所有回复。