MIPS中的多个条件

时间:2013-03-13 01:10:23

标签: mips

MIPS提供分支指令,如分支相等,分支不等于寄存器,分支小于或等于零,分支大于或等于零等等......所有分支指令仅使用两个操作数和一个条件。如果我们突然遇到if语句中的多个条件会发生什么。

所以问题是如何编写MIPS代码:

if( (a<b) & ( b>c ) || (c==d)) {

}
else 
{

 }

请在if语句中帮助解决这种多种情况。

2 个答案:

答案 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转换规则)。