Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 带bne的MIPS分支约定_Assembly_Mips_Branch Prediction - Fatal编程技术网

Assembly 带bne的MIPS分支约定

Assembly 带bne的MIPS分支约定,assembly,mips,branch-prediction,Assembly,Mips,Branch Prediction,在讲座中,我们的教授说,在分支中使用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汇编中,以否定方式实现条件分支是一种约定。我的最佳选择是,它是为了保持

在讲座中,我们的教授说,在分支中使用
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
相比,在其中一个执行路径中都会有一个额外的分支。

考虑一下如果使用
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
相比,在其中一条执行路径中都会有一个额外的分支。

Aha我认为问题不仅在于放置分支,还在于编写一条指令来实现整个功能。这可能不是首选,因为它会占用指令内存中的大量空间。但是我想知道,如果我们使用if-else呢?它再次使用了相同的否定模式,尽管我相信,我们不一定需要。啊哈,我认为问题不仅在于放置一个分支,而且在于编写多条指令来实现整体功能。这可能不是首选,因为它占用了指令内存中的大量空间。但是我想知道,如果我们使用if-else呢?它再次使用了相同的否定模式,尽管我相信,我们不需要这样做。