2011-10-17 235 views
1

我发现很难在Visual Studio的注册窗口中解释xmm寄存器的值。窗口显示以下内容:XMM寄存器值

XMM0 = 00000000000000004018000000000000 XMM1 = 00000000000000004020000000000000 
XMM2 = 00000000000000000000000000000000 XMM3 = 00000000000000000000000000000000 
XMM4 = 00000000000000000000000000000000 XMM5 = 00000000000000000000000000000000 
XMM6 = 00000000000000000000000000000000 XMM7 = 00000000000000000000000000000000 

XMM00 = +0.00000E+000  XMM01 = +2.37500E+000  XMM02 = +0.00000E+000  
XMM03 = +0.00000E+000  XMM10 = +0.00000E+000  XMM11 = +2.50000E+000  
XMM12 = +0.00000E+000  XMM13 = +0.00000E+000 

从我正在运行的代码,XMM0和XMM1的值应为6和8(或圆形其他的方式)。这里显示的寄存器值是:XMM01 = +2.37500E+000

这是什么转化为?

回答

5

是的,它看起来像:

XMM0 = { 6.0, 0.0 } // 6.0 = 0x4018000000000000 (double precision) 
XMM1 = { 8.0, 0.0 } // 8.0 = 0x4020000000000000 (double precision) 

原因你有解释这是你的调试器只显示在十六进制每128位XMM寄存器,然后低于4×精度问题漂浮物,但你显然使用double精密浮游物。

我对Visual Studio调试器不熟悉,但理想情况下应该有一种方法来更改XMM寄存器的表示形式 - 您可能需要查看手动或在线帮助。

请注意,通常使用SSE的双精度很少有任何价值,特别是如果您有一个相当现代的x86 CPU和两个FPU。

+1

如果有人像我一样通过谷歌绊倒这一点。双击位于Visual Studio调试器中的“XMM0DL”,“XMM0DH”中,在“寄存器”对话框中显示,并且启用了“AVX Double”。 – PeterT