簡體   English   中英

xorps在同一個寄存器上的目的是什么?

[英]What is the purpose of xorps on the same register?

我正在查看以下反匯編的c ++代碼

    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? 如果是這樣,清除登記冊的目的是什么?

注意:我只是出於純粹的好奇而問這個問題。 我對匯編語言知之甚少。

XMM寄存器有128位,使用cvtsi2sd只能填充低6​​4位。 因此, xorps指令用於清除可能影響后續操作的可能的垃圾值和/或依賴鏈。

基本上,您擁有的操作順序是:

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是通常的寄存器清除模式之一。

另請參閱 (非常詳盡且很棒,根據評論)答案,以獲取有關為什么xor可以優先於其他替代( mov x, 0 and x, 0 )的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM