1
我很難理解程序集中的條件代碼。右邊的程序集是爲了左邊的funA(),但是我在裝配中的線3-4有問題。有條件的標誌組件 - cmp,test
這裏是我的思維過程:
cmp rax, rcx // a[idx] <= *b
然而,實際如果在代碼語句是完全相反的。我知道它與裝配中的方式有關,條件執行是相反的...因此它改爲[idx]> * b。 這是否與「jle」有關?有人會介意給我解釋嗎?
我很難理解程序集中的條件代碼。右邊的程序集是爲了左邊的funA(),但是我在裝配中的線3-4有問題。有條件的標誌組件 - cmp,test
這裏是我的思維過程:
cmp rax, rcx // a[idx] <= *b
然而,實際如果在代碼語句是完全相反的。我知道它與裝配中的方式有關,條件執行是相反的...因此它改爲[idx]> * b。 這是否與「jle」有關?有人會介意給我解釋嗎?
如果你看看.L1和.L2,JIT編譯器剛剛決定顛倒順序 - 它首先把else
代碼,並扭轉了條件。 jle
是「跳轉,如果小於或等於」,所以它成爲C#的等價物:
if (a[idx] <= *b)
{
*b = *b + *b;
}
else
{
*b = a[idx];
}
謝謝!當它被這樣寫出來時,它會更有意義。我會確保下次再做,所以我不會迷惑自己。 – helloworld
這與C#有什麼關係? – fuz
他只是想引起Jon Skeet的注意:D – Jester