簡體   English   中英

條件標記程序集-CMP,測試

[英]Conditional Flags Assembly - cmp, test

我很難理解匯編中的條件代碼。 右邊的程序集用於左邊的funA(),但是我在匯編程序的3-4行時遇到了麻煩。

這是我的思考過程:

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

但是,代碼中實際的if語句恰恰相反。 我知道它與匯編的方式有關,條件執行的過程是相反的……因此它使a [idx]> * b相反。 這和“ jle”有關嗎? 有人介意向我解釋嗎?

在此處輸入圖片說明 在此處輸入圖片說明

如果查看.L1和.L2,則JIT編譯器剛剛決定反轉順序-將else代碼放在第一位,並反轉了條件。 jle是“如果小於或等於則跳轉”,因此它等效於C#:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM