私はアセンブリプログラミングの初心者です。私は整数を持っていaます。間にパフォーマンスの違いがあるかどうかを理解しようとしていました
if(a >= 0)
と
if(a > -1)
というわけで、上記の分解を進めました。私のx86マシンでは、
if(a >= 0)
以下に逆アセンブルします。
cmp dword ptr [ebp-4],0
jl main+43h (00401053)
と、
if(a > -1)
以下に逆アセンブルします。
cmp dword ptr [ebp-4],0FFh
jle main+43h (00401053)
これらのプログラムの CPU サイクルを計算するプログラムをすぐに作成できます (まだ作成していません)。しかし、私は今、別の問題に直面しています。
cmpを実行し、 、、、、および/またはフラグを適切subに設定することを理解しています。また、a が基準を確認することも理解しています。ここのオペレーターは何ですか?SFZFPFCFOFAFjlSF <> OF<>
jl私が使用したリファレンスEIPはcmp arg2, arg1、
- arg2 < arg1 であり、演算にオーバーフローがない
- arg2 < arg1 で、演算にオーバーフローがある
リファレンスには、 のjl場合はジャンプしないとも書かれていarg2 == arg1ます。
2 番目の質問は、の場合と?の場合はいつjlジャンプすべきではないということです。arg2 <= arg1if(a <= 0)arg2 < arg1if(a < -1)
誰かがこれを理解するのを手伝ってくれますか?