首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIPS - bne分支公约

MIPS - bne分支公约
EN

Stack Overflow用户
提问于 2016-01-21 02:48:00
回答 1查看 295关注 0票数 0

在讲座中,我们的教授说,在分支中使用bne而不是使用beq是有原因的(并让我们来找出它),如下所示。

代码语言:javascript
复制
if ( i == j )
    i++ ;
j-- ;

它可以编译成

代码语言:javascript
复制
bne  $r1, $r2, L1        # branch if ! ( i == j ) 
addi $r1, $r1, 1         # i++ 
L1: addi $r2, $r2, -1    # j-- 

此外,在这个链接中还暗示,在MIPS程序集中,以否定方式实现条件分支是一种惯例。我的最佳选择是,它是为了保持普通情况简单--因此是快速的--因为从直觉上说,如果我们检查的是相等性,那么我们就会期望它更有可能变得平等,因此当而不是相等时,PC会分支。我认为我只是努力让它变得合理,但是我仍然无法区分在beq中实现它还是在bne中实现它的核心区别。如果有人解释原因,我会非常感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-21 06:52:25

考虑一下,如果您使用了beq,代码会是什么样的。你可能最终会有这样的结果:

代码语言:javascript
复制
beq $r1, $r2, L1
L2: addi $r2, $r2, -1 # j--
...
...
L1: addi $r1, $r1, 1 #i++
j L2

或者这个:

代码语言:javascript
复制
beq $r1, $r2, L1
addi $r2, $r2, -1 # j--
j L2
L1: addi $r1, $r1, 1 #i++
addi $r2, $r2, -1 # j--
L2:

在任何一种情况下,与最初使用bne相比,在其中一个执行路径中都会有一个额外的分支。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34914531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档