我只是汇编编程的新手。我有一个整数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并适当地设置SFZFPFCFOF和/或AF标志。我也了解jl将检查SF <> OF标准。 <>运算符在这里是什么?

The reference I used表示,如果对于jlEIP将使用指定的参数加载cmp arg2, arg1


arg2 arg2

参考文献还说jlarg2 == arg1时不会跳转。

我的第二个问题是,在jl的情况下,当arg2 <= arg1时,在if(a <= 0)的情况下,在arg2 < arg1时,if(a < -1)不应跳转吗?

有人可以帮我理解吗?

最佳答案

<>运算符的意思是“不等于”,即与C中的!=相同。


  在if(a

您的条件是a >= 0,而不是a <= 0jl的作用是跳过a >= 0将会执行的代码块。

即像这样的东西:

cmp a,0
jl end_if  ; jump past the body of the if-statement if the condition is false,
           ; i.e. a < 0
; code that should be executed if a >= 0 goes here
; ...
end_if:

关于c - 在这种情况下使用JL和JLE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16294877/

10-09 01:00