MIPS 提供分支指令,如相等时分支、不等于寄存器时分支、小于或等于 0 时分支、大于或等于 0 时分支等……所有分支指令仅使用两个操作数和一个条件. 如果我们在 if 语句中突然遇到多个条件会发生什么。
所以问题是如何编写 MIPS 代码:
if( (a<b) & ( b>c ) || (c==d)) {
}
else
{
}
请帮助 if 语句中的这种多重条件。
MIPS 提供分支指令,如相等时分支、不等于寄存器时分支、小于或等于 0 时分支、大于或等于 0 时分支等……所有分支指令仅使用两个操作数和一个条件. 如果我们在 if 语句中突然遇到多个条件会发生什么。
所以问题是如何编写 MIPS 代码:
if( (a<b) & ( b>c ) || (c==d)) {
}
else
{
}
请帮助 if 语句中的这种多重条件。
你可以重写:
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 语句中评估复杂条件的方式。这样做也比将许多条件分支链接在一起要快得多。
假设 $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 转换规则)。