if-in-MIPS中的多个条件

if-in-MIPS中的多个条件,mips,Mips,MIPS提供分支指令,如等于上的分支、不等于寄存器上的分支、小于或等于零的分支、大于或等于零的分支等等。。。所有分支指令只使用两个操作数和一个条件。如果我们在if语句中突然遇到多个条件,会发生什么 因此,问题是如何为以下各项编写MIPS代码: if( (a<b) & ( b>c ) || (c==d)) { } else { } if((ac)| |(c==d)){ } 其他的 { } 请在if语句中帮助处理此类多个条件。您可以重写: if( (a<b) &

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

因此,问题是如何为以下各项编写MIPS代码:

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

}
else 
{

 }
if((ac)| |(c==d)){
}
其他的
{
}
请在if语句中帮助处理此类多个条件。

您可以重写:

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

}
if((ac)| |(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 {
}
bool altb=ac;
bool-ceqd=c==d;
bool AND 1=altb&bgtc;
布尔条件=和1 | | ceqd;
如果(条件){
}否则{
}

这是大多数编译器在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
outter\u如果:
bge$t0,$t1,退出#如果a>=b中断
ble$t1,$t2,退出#如果b=

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

考虑如何重新构造上述C代码,使每个
if
只有一个条件项……这将限制使用MIPS设计编译器。现在,我正在尝试为“if”和“while”语句构建一个编译器。一旦您重新构造了C代码,那么在汇编程序中如何实现等效应该是显而易见的。我们只能在和条件下重新构造。这不是MIPS或
if
条件所独有的。读一读编译器设计中的表达式计算,它应该会变得更清晰。