[英]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 會分支. 我想我只是努力讓它合理,但我仍然無法區分在beq
或bne
實現它之間的核心區別。 如果有人解釋原因,我將不勝感激。
考慮代碼是什么樣子,如果你曾經使用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.