我正在尝试将32位浮点数转换为扩展精度80位浮点数。
我正在使用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/

10-14 05:23