首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在同一个寄存器上使用xorp的目的是什么?

在同一个寄存器上使用xorp的目的是什么?
EN

Stack Overflow用户
提问于 2016-01-30 15:51:25
回答 1查看 4K关注 0票数 10

我查看了以下解压缩的c++代码

代码语言:javascript
运行
复制
    auto test2 = convert<years, weeks>(2.0);
00007FF6D6475ECC  mov         eax,16Dh  
00007FF6D6475ED1  xorps       xmm1,xmm1  
00007FF6D6475ED4  cvtsi2sd    xmm1,rax  
00007FF6D6475ED9  mulsd       xmm1,mmword ptr [__real@4000000000000000 (07FF6D64AFE38h)]  
00007FF6D6475EE1  divsd       xmm1,mmword ptr [__real@401c000000000000 (07FF6D64AFE58h)] 

并对xorps xmm1, xmm1指令的意义感到好奇。似乎任何数字xor本身都会给出0?若然,清拆登记册的目的是甚麽?

注:我只是出于好奇才问这个问题。我对汇编语言了解甚少。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 16:03:40

XMM寄存器有128位,使用cvtsi2sd只填充低64位。因此,xorps指令用于清除可能影响后续操作的垃圾值和/或依赖链。

基本上,您拥有的操作顺序是:

代码语言:javascript
运行
复制
mov         eax, 16Dh       ; load 0x16D into lower 32 bits of RAX register
xorps       xmm1, xmm1      ; zero xmm1
cvtsi2sd    xmm1, rax       ; load lower 32 bits from RAX into xmm1
<do more stuff with xmm1>

对寄存器进行归零的必要性在汇编中非常常见,当只加载寄存器的一部分时,随后的指令在它们的全部范围内运行。执行xor x, x是常见的寄存器清除模式之一。

还请参阅this (非常详尽和伟大,如注释所示),以获得更多关于为什么xor比其他替代方案(mov x, 0and x, 0)更可取的详细信息。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35103741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档