簡體   English   中英

MIPS - 使用 bne 的分支約定

[英]MIPS - Branching convention with bne

在講座中,我們的教授說在分支中使用bne而不是使用beq是有原因的(讓我們自己弄清楚),如下所示。

if ( i == j )
    i++ ;
j-- ;

編譯成

bne  $r1, $r2, L1        # branch if ! ( i == j ) 
addi $r1, $r1, 1         # i++ 
L1: addi $r2, $r2, -1    # j-- 

此外, 在此鏈接中,還暗示以否定方式實現條件分支是 MIPS 程序集中的約定 我最好的選擇是,它是為了保持常見情況簡單 - 因此快速 - 因為直觀地,如果我們檢查相等性,那么我們會期望它更有可能變得相等,因此當它相等時 PC 會分支. 我想我只是努力讓它合理,但我仍然無法區分在beqbne實現它之間的核心區別。 如果有人解釋原因,我將不勝感激。

考慮代碼是什么樣子,如果你曾經使用beq 你可能會得到這樣的結果:

beq $r1, $r2, L1
L2: addi $r2, $r2, -1 # j--
...
...
L1: addi $r1, $r1, 1 #i++
j L2

或這個:

beq $r1, $r2, L1
addi $r2, $r2, -1 # j--
j L2
L1: addi $r1, $r1, 1 #i++
addi $r2, $r2, -1 # j--
L2:

在任何一種情況下,與在開始時使用bne相比,您在其中一個執行路徑中都會有一個額外的分支。

暫無
暫無

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

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