条件标志组件 - cmp,测试

时间:2016-11-02 18:37:04

标签: assembly reverse-engineering

我很难理解汇编中的条件代码。右边的程序集是左边的funA(),但我在汇编时遇到3-4行的问题。

这是我的思考过程:

cmp rax, rcx // a[idx] <= *b

但是,代码中的实际if语句恰恰相反。我知道它与汇编方式有关,条件执行是相反的......因此它会产生[idx]&gt; * b而不是。 这与“jle”有关吗?有人会介意向我解释这个吗?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

如果你看一下.L1和.L2,JIT编译器刚刚决定颠倒顺序 - 它将else代码放在第一位,并改变了条件。如果小于或等于&#34; jle是&#34;跳跃所以它变成了C#的等价物:

if (a[idx] <= *b)
{
    *b = *b + *b;
}
else
{
    *b = a[idx];
}