这两个来自 C if 语句的 MIPS 转换是否等效?

Are these two MIPS translations from C if statements equivalent?

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

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:... 

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

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

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

我通常会给他们两个打满分,除非作业是专门遵循特定的模板来翻译 if-constructs。

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