这两个来自 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 代码不会强制编译器专门选择第一个翻译(甚至不一定是这两个),所以我认为你没有被迫选择它要么。
这些是否遵循 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 代码不会强制编译器专门选择第一个翻译(甚至不一定是这两个),所以我认为你没有被迫选择它要么。