1

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

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

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

}
else 
{

 }

请帮助 if 语句中的这种多重条件。

4

2 回答 2

2

你可以重写:

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 语句中评估复杂条件的方式。这样做也比将许多条件分支链接在一起要快得多。

于 2013-03-13T22:09:08.893 回答
1

假设 $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

我使用伪指令,所以如果你愿意,你可以转换它们。谷歌如何。其背后的想法是,您必须使用 if 语句的相反情况才能使代码类似地工作(这是通用的 C 到 Mips 转换规则)。

于 2019-03-02T16:51:55.547 回答