在eax / ecx寄存器中添加32位浮点数?

时间:2014-11-24 03:09:04

标签: assembly floating-point x86 fpu x87

我有一对存储在eax和ecx中的32位浮点数。我可以直接将它们加载到FPU中对它们进行操作,而无需先存储到内存中吗?这会显着简化某些编译器代码,但fld似乎只能在内存上运行。

1 个答案:

答案 0 :(得分:5)

不,你不能这样做。就生成代码而言,您可以通过以下序列轻松模拟fld r32,例如(针对大小进行了优化;)):

push r32
fld [esp]
pop r32

考虑使用SSE(如果可用),它使用movd指令提供直接的GPR到XMM移动。添加两个寄存器可能看起来像:

movd xmm0, eax
movd xmm1, ecx
addss xmm0, xmm1

如果您需要GPR中的结果,可以使用另一个movd将其移回。