XMM 寄存器值
Posted
技术标签:
【中文标题】XMM 寄存器值【英文标题】:XMM register values 【发布时间】:2011-10-17 09:58:54 【问题描述】:我发现很难在 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
这意味着什么?
【问题讨论】:
【参考方案1】:是的,它看起来像:
XMM0 = 6.0, 0.0 // 6.0 = 0x4018000000000000 (double precision)
XMM1 = 8.0, 0.0 // 8.0 = 0x4020000000000000 (double precision)
您在解释这一点时遇到问题的原因是您的调试器仅以十六进制显示每个 128 位 XMM 寄存器,然后在其下方显示为 4 x single 精度浮点数,但您显然正在使用 double 精度浮点数。
我不熟悉 Visual Studio 调试器,但理想情况下应该有一种方法可以更改 XMM 寄存器的表示 - 您可能需要查看手册或在线帮助。
请注意,通常在 SSE 中使用双精度几乎没有任何价值,特别是如果您有一个相当现代的 x86 CPU 和两个 FPU。
【讨论】:
如果有人像我一样通过谷歌偶然发现了这个。双打位于 Visual Studio 调试器中的XMM0DL
、XMM0DH
中,它们显示在启用了“AVX Double”的“寄存器”对话框中。
如果有人想在 VS2017+ 中看到他们(我想,我正在使用 VS2019),您必须使用监视窗口,您可以通过弹出窗口添加 XMM0
或获取特定的 XMM0.m128_f64
或更具体的XMM0.m128_f64[1]
以上是关于XMM 寄存器值的主要内容,如果未能解决你的问题,请参考以下文章