c++ - 将 32 位浮点转换为 IEEE 80 位

标签 c++ assembly floating-point double

我正在尝试将 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/

相关文章:

python - 如何获取python列表中项目的索引和值?

c++ - 将凉亭主题发布到rostopic

c++ - 如何在所有线程中同步一个变量的值?

c++ - 到达流的 EOF 时,seekg() 不会设置 eofbit。是设计使然吗?

c++ - 从 istringstream 读取比 ifstream 慢

javascript - 确定一个 float 是否是另一个 float 的倍数?

c - 当一切都可以通过寄存器完成时,为什么要减少 %rsp 呢?

C++ 设置堆栈指针

assembly - 如何在屏幕上显示一个数字并使用 DOS x86 程序集休眠一秒钟?

python - 有人可以解释这种浮点行为吗?