我发现很难在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
从我运行的代码中,XMM0和XMM1的值应该是6和8(或其他方式)。此处显示的寄存器值为:XMM01 = +2.37500E+000
这转化为什么?
答案 0 :(得分:6)
是的,看起来像是:
XMM0 = { 6.0, 0.0 } // 6.0 = 0x4018000000000000 (double precision)
XMM1 = { 8.0, 0.0 } // 8.0 = 0x4020000000000000 (double precision)
您解释这个问题的原因是您的调试器只显示十六进制的每个128位XMM寄存器,然后低于4 x 单精度浮点数,但您显然使用双精确浮动。
我不熟悉Visual Studio调试器,但理想情况下应该有一种方法来更改XMM寄存器的表示形式 - 您可能需要查看手册或在线帮助。
请注意,通常使用SSE的双精度很少有任何值,特别是如果你有一个相当现代的x86 CPU和两个FPU。