在程序集x86-64中划分longfloat和int

时间:2013-02-22 03:35:59

标签: assembly x86-64 fpu x87

我有一个程序,只要用户输入Y,我就会循环播放(是的)。然后用户输入long float类型的数据。我还有一个计数器,r14,每次输入长浮点数时都会计数。循环结束后,我希望计算平均值。如果我这样做:

fld tword [r14]

并显示它,生病得到分段错误。我也尝试过其他一些东西,但它总是给我一个段。尝试分割和显示后出现故障。我认为问题是r14是一个int,我不能把它放到FPU堆栈中那样和除。但我无法想出另一种方式。

有人可以帮忙吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

FPU指令从存储器或FPU寄存器获取其参数,但不从通用CPU寄存器获取。

fld tword [r14]tword中包含的地址的内存位置获取r14,并将其推送到FPU堆栈顶部。

如果r14未指向可以读取10字节浮点值的内存位置,则会出现分段错误。

因此,将浮动内容存储在内存中并使用fld从那里读取。