如何设置和恢复FPU CTRL寄存器?
问题描述:
我可以重置FPU的CTRL登记本:如何设置和恢复FPU CTRL寄存器?
http://support.microsoft.com/kb/326219
但我怎么能保存当前的寄存器,并在以后恢复呢?
这是一个从.NET代码..
我在做什么,是从Delphi调用的NET的DLL作为COM模块。在delphi中检查Ctrl寄存器会产生一个值,使用.net代码中的controlfp进行检查会给出另一个值。 我需要什么,是关键的是要做到这一点:
_controlfp(_CW_DEFAULT, 0xfffff);
所以在.NET代码我的浮点运算不会崩溃,但我想返回时恢复按Ctrl寄存器。
也许我不知道?也许德尔福在需要时重置它们? 我在这个问题0123pal的博客。
答
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
答
您用于更改它们的相同功能:_controlfp()
。如果您传递的掩码为0,则当前值不会被更改,但会返回将 - 保存它,然后使用第二次调用_controlfp()
以稍后恢复。
不错的主意,问题是我不明白要在面具等放什么,但delphi方法Set8087CW abowe是非常好的。 – neslekkiM 2008-10-14 14:43:56