2016-01-21 56 views
0

在讲座中,我们的教授说,使用bne分支而不是使用beq(并让我们弄清楚)如下所示。MIPS - 分支会议与沟通

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

其编译成

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

另外,in this link,它也被暗示,这是一个惯例在MIPS组件以实现否定方式条件分支。我最好的选择是,这是为了保持常见情况简单 - 因此速度很快 - 因为直观地说,如果我们检查平等,那么我们预计它更可能变得相等,并且因此PC在不是时分支等于。我想我只是努力使之合理,但我仍然无法区分在beqbne中执行它的核心区别。如果有人解释为什么,我会很感激。

回答

3

想象一下,如果您使用已使用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来开始。

+0

啊哈我认为这个问题不仅是把一个分支,而是写一个更多的指令来完成整体功能。 –

+0

这可能不是首选,因为在指令存储器中占用大量空间。但是,我想知道,如果我们使用if-else会怎样?它再次使用相同的否定模式,即使我相信我们并不一定需要。 –