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