将以下高级代码转换为MIPS汇编代码
我已经把这个C程序翻译成MIPS汇编代码。 所以,我想知道:将以下高级代码转换为MIPS汇编代码,mips,Mips,我已经把这个C程序翻译成MIPS汇编代码。 所以,我想知道: 我做错什么了吗 如果我的汇编代码是正确的,我可以通过减少 指令数。我在这里使用了14个说明 下面是我转换这个C程序的方法 这是我的MIPS汇编代码 #s0=res 这是高级C程序 int main(){ int res; res = division (27, 3); } int division(int x, int y) { int i; int val = 0; for (i =
int main(){
int res;
res = division (27, 3);
}
int division(int x, int y)
{
int i;
int val = 0;
for (i = x; i>0; i = i-y){
val = val + 1;
}
return val;
}
错误:
关系被错误地否定。您已将其翻译为
for ( i = x; i >= 0; i -= y )
因此,它将循环一次(当整数除法精确时)。您知道循环条件测试要求对程序集的if goto标签样式进行否定:
if ( ! (i > 0) ) goto break;
然而,
!(i>0)
是i“我做错什么了吗?”听起来像是你可以用类似SPIM或MARS的模拟器来测试自己。单步测试,看看它是否达到了你的预期。嗨,@Erik我们能解决(i=x;i>=0;i-=y)的错误吗?是的。MIPS没有sle
作为直接指令(一些汇编器会对此进行扩展),但有两种其他方法可以反转/求反:一种工具是交换slt
的操作数,另一种是反转/求反分支(假分支与真分支)$0代替bne$0在这两种方法之间,我们可以实现任何关系运算符。例如,a b),这与!(b完成;但是现在我们需要转移到false上,所以我们使用beq$t0,$0,label
。希望你能明白。
if ( ! (i > 0) ) goto break;