在汇编 x86-64 中划分 longfloat 和 int
Posted
技术标签:
【中文标题】在汇编 x86-64 中划分 longfloat 和 int【英文标题】:Dividing longfloat and int in Assembly x86-64 【发布时间】:2013-02-22 03:35:59 【问题描述】:我有一个程序,只要用户输入 Y(是),我就会循环。然后用户输入 long float 类型的数据。我还有一个计数器,r14,每次输入长浮点数时都会计数。循环结束后,我希望计算平均值。如果我这样做:
fld tword [r14]
并显示它,我会遇到分段错误。我也尝试了很多其他的东西,但它总是给我一个段。尝试分割显示后出现故障。我认为问题在于 r14 是一个 int,我不能像那样将它放入 FPU 堆栈并进行划分。但我想不出另一种方法。
有人可以帮忙吗?提前致谢。
【问题讨论】:
How to convert an integer to a floating point value in x86 ASM? 的可能重复项 【参考方案1】:FPU 指令的参数要么来自内存,要么来自 FPU 寄存器,但不来自通用 CPU 寄存器。
fld tword [r14]
从r14
中包含的地址处的内存位置获取tword
,并将其推送到FPU 堆栈的顶部。
如果r14
没有指向可以读取 10 字节浮点值的内存位置,则会出现分段错误。
因此,将您的浮点数存储在内存中并使用fld
从那里读取它。
【讨论】:
我不太明白。我已经在循环中用 fld 加载了我的浮点数。但它不会与计数器执行除法运算。还有其他方法吗,比如我应该加载的文件?以上是关于在汇编 x86-64 中划分 longfloat 和 int的主要内容,如果未能解决你的问题,请参考以下文章