2008-10-10 54 views
5

我可以重置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的博客。

回答

7
uses 
    SysUtils; 

var 
    SavedCW: Word; 
begin 
    SavedCW := Get8087CW; 
    try 
    Set8087CW($027f); 
    // Call .NET code here 
    finally 
    Set8087CW(SavedCW); 
    end; 
end; 
5

您用於更改它們的相同功能:_controlfp()。如果您傳遞的掩碼爲0,則當前值不會被更改,但會返回 - 保存它,然後使用第二次調用_controlfp()以稍後恢復。

+0

不錯的主意,問題是我不明白要在面具等放什麼,但delphi方法Set8087CW abowe是非常好的。 – neslekkiM 2008-10-14 14:43:56