gpt4 book ai didi

c - 在这种情况下使用 JL 和 JLE 吗?

转载 作者:行者123 更新时间:2023-11-30 15:49:25 26 4
gpt4 key购买 nike

我只是汇编编程的新手。我有一个整数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 usedjl将加载EIP与指定的参数 if,对于 cmp arg2, arg1 ,

  1. arg2 < arg1 并且操作没有溢出
  2. arg2 < arg1 并且操作发生溢出

引用文献还说 jl arg2 == arg1时不会跳转.

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

有人可以帮我理解这一点吗?

最佳答案

<>运算符表示“不等于”,即与 != 相同在 C 中。

shouldn't jl jump when arg2 <= arg1 in the case of if(a <= 0)

您的条件是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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com