XMM寄存器值

Rak*_*wal 2 sse visual-studio-debugging

我发现很难在Visual Studio的寄存器窗口中解释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
Run Code Online (Sandbox Code Playgroud)

从我运行的代码中,XMM0和XMM1的值应该是6和8(或其他方式).此处显示的寄存器值为:XMM01 = +2.37500E+000

这转化为什么?

Pau*_*l R 6

是的,它看起来像:

XMM0 = { 6.0, 0.0 }  // 6.0 = 0x4018000000000000 (double precision)
XMM1 = { 8.0, 0.0 }  // 8.0 = 0x4020000000000000 (double precision)
Run Code Online (Sandbox Code Playgroud)

你解释这个问题的原因是你的调试器只显示十六进制的每个128位XMM寄存器,然后低于4 x 精度浮点数,但你显然使用精度浮点数.

我不熟悉的Visual Studio调试器,但最好应改变你的XMM寄存器的表示方式 - 你可能要看看这个手​​册或在线帮助.

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

  • 如果有人像我一样通过Google偶然发现这件事.双打在visual studio调试器的`XMM0DL`,`XMM0DH`中,显示在启用了"AVX Double"的"registers"对话框中. (3认同)
  • 如果有人想在 VS2017+ 中看到它们(我想,我正在使用 VS2019),您必须使用监视窗口,您可以通过弹出菜单添加“XMM0”或获取特定的“XMM0.m128_f64”或获取更具体的“XMM0” .m128_f64[1]` (2认同)