我正在尝试将32位浮点数转换为扩展精度80位浮点数。 我正在使用MSVC x86。我尝试了以下内联ASM代码:
void Convert32To80(float *value, void *outValue)
{
__asm
{
fld float ptr [value];
fstp tbyte ptr [outValue];
}
}
这里,void *outValue
是一个足以容纳10个字节的缓冲区。
这对我来说是正确的,但它在运行时会崩溃。
感谢任何帮助!
答案 0 :(得分:3)
好的,这应该这样做:
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代码来做同样的事情,但是对于浮动到双重转换,查看了dissasembly,然后根据需要进行了修改。
请注意,我不是MSVC的专家,我不能100%确定我可以使用EAX和ECX寄存器,而不保存/恢复它们。其他人可能知道更多并提供更正。
答案 1 :(得分:1)
更新后人注意事项:显然,MSVC 2010没有80bit浮点类型的类型,因此C或C ++代码中的显而易见的解决方案
float inValue = 666.666f;
long double outValue = (long double)inValue;
不起作用,实际上你被迫直接使用汇编语言。