【发布时间】:2015-01-21 17:14:40
【问题描述】:
我有一对 32 位浮点数存储在 eax 和 ecx 中。我可以直接将这些加载到 FPU 中进行操作,而无需先存储到内存中吗?这将大大简化一些编译器代码,但fld 似乎只能对内存进行操作。
【问题讨论】:
-
不,你不能。就编译器代码而言,我怀疑是否必须遍历内存会产生重大影响。你可以很容易地模拟
fld r32(push r32; fld [esp]; pop r32)。无论如何,如果可用,请考虑使用 SSE。 -
@Jester 我愿意使用 SSE,那个 push-fld-pop 示例的等效 SSE 代码是什么?
-
您可以使用
MOVD指令直接移动到SSE 寄存器。您可以执行movd xmm0, eax; movd xmm1, ecx; addss xmm0, xmm1;,然后根据需要返回。当然,您通常可以将 xmm 寄存器用于浮点数:) -
太棒了,谢谢 :) 如果您将此作为答案发布,我会接受。是的,我想我可以将 xmm 寄存器用于所有内容,但我试图保持代码简单,即使它确实会生成低效的程序集。
-
@PascalCuoq 这是真的。但是
eax和ecx是整数寄存器,所以这个“重新解释”最终还是要做的。
标签: assembly floating-point x86 fpu x87