"cmp"の代わりに "or"を使用すると大きな正の品質がありますか?なぜ0をチェックするときにcmpを使用するか、代わりに
は、この関数のプロローグを考えてみましょう:
push ebp
mov ebp,esp
push ebx
xor eax,eax ;error return code
mov ecx,[ebp +8] ;first integer arg after return addr.
mov edx,[ebp +12] ;second integer argument
機能はa/b
またはa % b
を計算するものとします。
まず、0除数をチェックする必要があります。
私の直感的な動きが
cmp edx,0
je InvalidDivisor
を組み立てることであろう。しかし、私は、アセンブラに高度な図書に見たときにも使用されます。この:
or edx,edx
jz InvalidDivisor
この第二の溶液「より、なぜ私の質問は正しい"?
or-演算を計算してゼロフラグをチェックするのに、2つの値を比較するよりも時間がかかりませんか?
より高度なコーディングスタイルの問題ですか?
これらはレイテンシとスループットは同じですが、マシンコードに直接エンコードする必要がないため、「または」形式は小さくなります。 – Michael
これは何度も尋ねられ、回答されました。重複したリンクを見つける必要があります... –
[またはeax、eaxとtest eax、eaxの違い]の可能な複製(https://stackoverflow.com/questions)/23691989/difference-between-or-eax-eax-and-test-eax-eax) –