【发布时间】:2014-05-09 06:35:28
【问题描述】:
我正在尝试根据这个方程在汇编中实现指数函数算法: 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 。我完全不知道这段代码有什么问题。
感谢您的所有回复。
【问题讨论】:
-
为什么
n是float而不是int? -
因为我想如果我将它与另一个浮点值进行比较,我应该使用浮点数。
标签: linux assembly x86 att taylor-series