这些以下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:...
答案 0 :(得分:1)
当我不等于j时,你转到else语句,所以使用bne
(分支不相等)。 MIPS描述的第二个代码是:
if (i!=j) {
f = g - h ;
}
else
f = g + h ;
所以它是等价的,但你的第二个MIPS代码没有描述第一个if-else代码,它描述的东西是等价的,但它不是正确的翻译。
答案 1 :(得分:1)
我通常会给他们两个完整的分数,除非作业是专门用于翻译if-constructs的特定模板。
由于分支结构存在差异,但C代码并不强制编译器专门选择第一个翻译(甚至不一定都是这两个),所以我认为你也不会被迫选择它。