我只是汇编编程的新手。我有一个整数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
并适当地设置SF
,ZF
,PF
,CF
,OF
和/或AF
标志。我也了解jl
将检查SF <> OF
标准。 <>
运算符在这里是什么?The reference I used表示,如果对于
jl
,EIP
将使用指定的参数加载cmp arg2, arg1
。arg2 arg2
参考文献还说
jl
在arg2 == arg1
时不会跳转。我的第二个问题是,在
jl
的情况下,当arg2 <= arg1
时,在if(a <= 0)
的情况下,在arg2 < arg1
时,if(a < -1)
不应跳转吗?有人可以帮我理解吗?
最佳答案
<>
运算符的意思是“不等于”,即与C中的!=
相同。
在if(a
您的条件是a >= 0
,而不是a <= 0
。 jl
的作用是跳过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/