当前位置:  开发笔记 > 编程语言 > 正文

这个x86汇编指令做了什么(添加了xmm0,ds:__ xmm @ 41f00000000000000000000000000000 [edx*8])?

如何解决《这个x86汇编指令做了什么(添加了xmm0,ds:__xmm@41f00000000000000000000000000000[edx*8])?》经验,为你挑选了1个好方法。

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

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

我想浮点寄存器xmm0中加了一些值,但是__xmm @ 41f00000000000000000000000000000常量是什么意思?有没有我可以阅读的文件?

这是我想要了解的完整代码片段:

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]  

看起来像常量数组的一些双值被添加到xmm0 ...



1> harold..:

这是无符号整数转换为double.

工作原理是它首先将其转换为带符号,这意味着符号位的权重为-2 31,但它应该是无符号的,其中最高位的权重为+2 31.因此,如果设置了符号,则将+2 32 = 4294967296.0(41f0000000000000为双倍)加以补偿.它通过向右移动,将最高位置于底部位并清除其他所有内容,然后将其用作包含0和4294967296.0的表的表索引来实现.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有