【问题标题】:How can I set and restore FPU CTRL registers?如何设置和恢复 FPU CTRL 寄存器?
【发布时间】:2008-10-10 13:51:51
【问题描述】:

我可以用这个来重置 FPU 的 CTRL 寄存器:

http://support.microsoft.com/kb/326219

但是我怎样才能保存当前的寄存器,并在以后恢复它们呢?

它来自 .net 代码..

我正在做的是从 Delphi 调用 .net dll 作为 COM 模块。在 delphi 中检查 Ctrl 寄存器会产生一个值,使用 .net 代码中的 controlfp 检查会产生另一个值。 我需要的,本质上就是这样做:

_controlfp(_CW_DEFAULT, 0xfffff); 

所以我在.net代码中的浮点计算不会崩溃,但是我想在返回时恢复Ctrl寄存器。

也许我没有?也许德尔福在需要时重置它们? 我在博客上写过这个问题here

【问题讨论】:

    标签: .net delphi fpu ctrl


    【解决方案1】:
    uses
       SysUtils;
    
    var
       SavedCW: Word;
    begin
       SavedCW := Get8087CW;
       try
         Set8087CW($027f);
         // Call .NET code here
       finally
         Set8087CW(SavedCW);
       end;
    end;
    

    【讨论】:

      【解决方案2】:

      用于更改它们的函数相同:_controlfp()。如果您传入掩码 0,则不会更改当前值,但会返回它 - 保存它,然后使用第二次调用 _controlfp() 来恢复它。 p>

      【讨论】:

      • 好主意,问题是我不明白要在掩码中放什么等,但是德尔福方法 Set8087CW abowe 非常好。
      • 是的...你没有提到你使用的是 Delphi,所以我假设是 C/C++。
      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多