[英]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
只能填充低64位。 因此, 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.