私はアセンブリプログラミングの初心者です。私は整数を持ってい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 が基準を確認することも理解しています。ここのオペレーターは何ですか?SF
ZF
PF
CF
OF
AF
jl
SF <> OF
<>
jl
私が使用したリファレンスEIP
はcmp arg2, arg1
、
- arg2 < arg1 であり、演算にオーバーフローがない
- arg2 < arg1 で、演算にオーバーフローがある
リファレンスには、 のjl
場合はジャンプしないとも書かれていarg2 == arg1
ます。
2 番目の質問は、の場合と?の場合はいつjl
ジャンプすべきではないということです。arg2 <= arg1
if(a <= 0)
arg2 < arg1
if(a < -1)
誰かがこれを理解するのを手伝ってくれますか?