有人可以解释以下代码的作用吗?

addsd   xmm0, ds:__xmm@41f00000000000000000000000000000[edx*8]

我计算出将一些值添加到浮点寄存器xmm0,但是__xmm @ 41f000000000000000000000000000000常量的含义是什么?有什么文档可以阅读吗?

这是我想要理解的完整代码片段:
cvtsi2sd xmm0, [ebp+var_2C8]
mov     edx, [ebp+var_2C8]
shr     edx, 1Fh
addsd   xmm0, ds:__xmm@41f00000000000000000000000000000[edx*8]

ebp + var_2C8是无符号整数值。
  • ebp + var_2C8转换为float并移至xmm0寄存器
  • ebp + var_2C8移至edx并右移31位
  • 从此移位中获取的内容已添加到xmm0。

  • xmm0到底添加了什么?
    该计算是否有可能达到目的?

    更新。
    这是此代码的原始反汇编:
    cvtsi2sd    xmm0,dword ptr [ebp-2C8h]
    mov         edx,dword ptr [ebp-2C8h]
    shr         edx,1Fh
    addsd       xmm0,mmword ptr [edx*8+2685CC0h]
    

    似乎常量数组中的一些 double 值已添加到xmm0中。

    最佳答案

    这是无符号整数到double的转换。

    它的工作方式是先将其转换为有符号,这意味着符号位的权重为-231,但是在最高位的权重为+231的情况下,它应为无符号的。因此,如果设置了符号,则会加上+232 = 4294967296.0(41f0000000000000为 double )进行补偿。它通过向右移动,将最高位放在最低位并清除所有其他内容来进行操作,然后将其用作包含0和4294967296.0的表的表索引。

    10-01 19:54