在汇编 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的主要内容,如果未能解决你的问题,请参考以下文章

x86-64 汇编中的数组元素比较(AT&T 语法)

X.86 X64 汇编器中的正确堆栈操作

x86_64 ABI:反汇编问题

X86-64 汇编学习1

X86-64 汇编学习1

X86-64 汇编学习1