我正在尝试将 32 位 float 转换为扩展精度 80 位 float 。 我正在使用 MSVC x86。我尝试了以下内联 ASM 代码:
void Convert32To80(float *value, void *outValue)
{
__asm
{
fld float ptr [value];
fstp tbyte ptr [outValue];
}
}
此处,void *outValue
是一个足以容纳 10 个字节的缓冲区。
这在我看来是正确的,但运行时会崩溃。
感谢任何帮助!
最佳答案
好的,应该可以了:
void Convert32To80(float *value, void *outValue)
{
__asm
{
mov eax,dword ptr [value]
fld dword ptr [eax]
mov ecx,dword ptr [outValue]
fstp tbyte ptr [ecx]
}
}
我所做的只是编写了一些 C 代码来执行相同的操作,但是对于浮点到 double 的转换,查看了反汇编,然后根据需要进行修改。
请注意,我不是 MSVC 方面的专家,并且我不能 100% 确定我可以像这样使用 EAX 和 ECX 寄存器而不保存/恢复它们。其他人可能了解更多并提供更正。
关于c++ - 将 32 位浮点转换为 IEEE 80 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614784/