2015-12-22 107 views
0

我使用XMM寄存器在彙編器dll庫中編寫c#程序。在彙編器中調試xmm寄存器

我的彙編代碼:

mov eax, 5 
mov ecx, 2 
movd xmm0, eax   // here 
movd xmm1, ecx   // here 
addss xmm0,xmm1   // and here no difference 
movd eax, xmm0   
ret 

它的工作原理,因爲我想但我想解決一個小問題。 雖然我正在調試此代碼,但我正在更改eax和exc寄存器的值,並且它在調試期間顯示在寄存器窗口中的紅色colore上,因爲值已更改。 但如果我改變的XMM寄存器的值,它不是紅色,這個寄存器的值顯示依然: XMM0 = 00000000000000000000000000000000 XMM1 = 00000000000000000000000000000000 ,當我調試運行我可以看到,登記時我在C#中唯一的漚後改變。 XMM0 = 00000000000000000000000000000007 XMM1 = 00000000000000000000000000000002
我的問題是:爲什麼在調試過程中xmms的值在寄存器窗口中不會改變,但程序工作正常嗎?

+0

這取決於你的調試器,你顯然忘了提及。 – Jester

+0

我正在使用VS 2013. – alokkoolol123

+1

您意識到您正在使用浮點添加,對吧?你要添加兩個非常規浮點數:7.0E-45和2.8E-45來獲得9.8E-45。這種情況發生了,但是當你使用大於2^23左右的整數時,就會中斷,當某些非零位處於指數狀態時。也許你的調試器正在使用FP比較和更改閾值? –

回答

2

大家知道,12月1日發佈的VS的RTM更新並未正確顯示YMM/XMM寄存器的調試器中的數據。這個問題已經引起了MSFT團隊的注意,並且正在開展工作。

如果您可以提取2015年12月1日之前更新的SW版本,則不會顯示此特定問題。

希望這有助於...

+0

關於此問題的進一步注意事項 - VS 2015.1中的彙編程序不生成YMM兼容代碼 - 例如,vmovdqu ymm0,mem256將只生成XMM兼容代碼,因此僅加載128位數據 - MSFT已收到通知並已承認 - 這只是爲了防止同行程序員浪費數小時調試 – quasar66