我很难理解汇编中的条件代码。右边的程序集是左边的funA(),但我在汇编时遇到3-4行的问题。
这是我的思考过程:
cmp rax, rcx // a[idx] <= *b
但是,代码中的实际if语句恰恰相反。我知道它与汇编方式有关,条件执行是相反的......因此它会产生[idx]&gt; * b而不是。 这与“jle”有关吗?有人会介意向我解释这个吗?
答案 0 :(得分:2)
如果你看一下.L1和.L2,JIT编译器刚刚决定颠倒顺序 - 它将else
代码放在第一位,并改变了条件。如果小于或等于&#34; jle
是&#34;跳跃所以它变成了C#的等价物:
if (a[idx] <= *b)
{
*b = *b + *b;
}
else
{
*b = a[idx];
}