MIPS提供分支指令,如分支相等,分支不等于寄存器,分支小于或等于零,分支大于或等于零等等......所有分支指令仅使用两个操作数和一个条件。如果我们突然遇到if语句中的多个条件会发生什么。
所以问题是如何编写MIPS代码:
if( (a<b) & ( b>c ) || (c==d)) {
}
else
{
}
请在if语句中帮助解决这种多种情况。
答案 0 :(得分:3)
你可以改写:
if( (a<b) && ( b>c ) || (c==d)) {
}
像这样:
bool altb = a < b;
bool bgtc = b > c;
bool ceqd = c == d;
bool and1 = altb && bgtc;
bool condition = and1 || ceqd;
if (condition) {
} else {
}
这是大多数编译器在if语句中评估复杂条件的方法。这样做也比将很多条件分支链接在一起快得多。
答案 1 :(得分:0)
假设$ t0有a,$ t1有b,$ t2有c,$ t3有d:
outter_if_lbl:
bge $t0,$t1,exit_outter #if a>=b break
ble $t1,$t2,exit_outter #if b=< c break
bne $t2,$t3,exit_outter #if c != d break
#add functionality here
exit_outter:
jr $ra #or whatever does your job
我使用伪指令,因此如果您愿意,可以将其转换。 Google如何。其背后的想法是,您必须使用if语句的相反情况才能使代码类似地工作(这是通用的C到Mips转换规则)。