我在尝试查找一个编译器错误时,在Visual Studio 2008生成的代码中发现了这一行:
movss dword ptr [this], xmm2
尽管我认为这与我正在寻找的错误无关,但我感到十分困惑。将一个浮点值(完全与
this
无关)存储在[this]
中?那行代码到底是做什么的?因为我真的看不懂!还是反汇编视图在玩弄我?我在尝试查找一个编译器错误时,在Visual Studio 2008生成的代码中发现了这一行:
movss dword ptr [this], xmm2
this
无关)存储在[this]
中?那行代码到底是做什么的?因为我真的看不懂!还是反汇编视图在玩弄我?this
不是一个指向当前对象的指针,而只是一个指向某个内存区域的随机寄存器。反汇编器之所以这样命名,是因为它先前在函数中被用作当前对象指针或出于其他原因。
this
确实指向一个类实例,并且该类具有浮点数字段作为第一个成员并且没有虚方法。
xmm寄存器不一定包含浮点值。它们是128位宽的SIMD寄存器,这意味着一个或多个值可以存储在SIMD寄存器中;通常的配置是8个16位整数、4个32位整数、4个浮点数、2个双精度浮点数等。
然而,编译器可以自由地将任何东西放在其中,只要“this”的第一个元素是32位即可。
this
指向的内存位置。我认为这是因为编译器正在使用XMM2作为存储寄存器(而不是使用通用寄存器如EAX)。
this
是C++关键字,在汇编中没有意义。this
指针通常存储在ecx
中。另一方面,x64编译器不支持内联汇编。 - Ben Voigt