2015-12-22 69 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