以[this]为目的地的movss指令的目的是什么?

时间:2011-07-13 13:41:38

标签: assembly visual-c++ x86 64-bit sse

我在Visual Studio 2008中由MSVC编译器生成的代码中找到了这一行,同时试图找出似乎是编译器错误的内容:

movss dword ptr [this], xmm2

虽然我不认为这与我正在寻找的错误有关,但我是什么样的哔哔声?在this中存储浮动值(与[this] btw完全无关)?

这条线到底是做什么的?因为我肯定无法理解它!或者反汇编视图在我身上耍花招?

3 个答案:

答案 0 :(得分:4)

提供更多的汇编和/或源代码确实会有所帮助,但我发现至少有两种可能性:

  1. this不是这个指针,只是一个指向某个内存区域的随机寄存器。反汇编程序将其命名为,因为它之前在函数中用作此指针或出于其他原因。

  2. this指向一个类实例,该类有一个浮点字段作为第一个成员,没有虚拟方法。

答案 1 :(得分:3)

xmm寄存器不一定包含浮点值。它们是128位宽的SIMD寄存器,基本上意味着一个或多个值可以存储在SIMD寄存器内;通常配置是8个16位整数,4个32位,4个浮点数,2个双精度;等。

然而,编译器可以自由地放置任何它喜欢的内容,只要'this'的第一个元素是32位就可以了。

答案 2 :(得分:3)

根据Intel manual on x86 instructions,MOVSS复制XMM寄存器的最低32位。 (每个XMM寄存器的长度为128位。)

虽然该指令被称为“移动标量单精度浮点值”,但您应该将其视为“移动32位值”。该指令不关心数据是否实际上是浮点数;它只是复制没有解释的位。

在您的情况下,指令将XMM2的最低32位复制到this指向的存储单元。我想这是因为你的编译器使用XMM2作为存储寄存器(而不是使用像EAX这样的通用寄存器)。