这两个MIPS翻译是否与C等效?

时间:2016-10-02 10:00:49

标签: c mips mips32

这些以下MIPS翻译是否与C等效?如果没有,请详细解释。我的教授说第一版是正确的。如果我像第二版那样编写指令,即使它们产生相同的输出也不会得到标记。她没有解释原因。提前谢谢!

C代码

if (i==j) { f = g + h ; } else f = g -h ;

MIPS第一版

        bne $s3, $s4, Else
        add $s0, $s1, $s2
        j Exit
  Else: sub $s0, $s1, $s2 
  Exit:... 

MIPS第二版:

         beq $s3, $s4, Else
         sub $s0, $s1, $s2
         j Exit
   Else: add $s0, $s1, $s2 
   Exit:... 

2 个答案:

答案 0 :(得分:1)

当我不等于j时,你转到else语句,所以使用bne(分支不相等)。 MIPS描述的第二个代码是:

if (i!=j) {
     f = g - h ;
}
else 
     f = g + h ;

所以它是等价的,但你的第二个MIPS代码没有描述第一个if-else代码,它描述的东西是等价的,但它不是正确的翻译。

答案 1 :(得分:1)

我通常会给他们两个完整的分数,除非作业是专门用于翻译if-constructs的特定模板。

由于分支结构存在差异,但C代码并不强制编译器专门选择第一个翻译(甚至不一定都是这两个),所以我认为你也不会被迫选择它。