我正在将一些C代码转换为MIPS,并停留在这一行上。
int f(int n, int m)
我知道这应该用于初始化变量,但是在MIPS中会是什么样子?我有n = $ a0和m = $ a1。
对于上下文,这是完整的代码:
int f(int n, int m) {
if (n ≤ 0)
return m;
else
return f(n-1, n+m);
}
由于某些原因,我已经了解了循环的工作原理。
答案 0 :(得分:2)
这是递归函数,但是任何优化的编译器实际上都会删除递归。
int f(int n, int m) {
if (n <= 0)
return m;
else
return f(n-1, n+m);
}
f:
.L3:
MOV.B #0, R14
CMP.W R12, R14 { JGE .L1
ADD.W R12, R13
ADD.W #-1, R12
BR #.L3
.L1:
MOV.W R13, R12
RET
答案 1 :(得分:1)
它是一个简单的c递归函数。函数名称是f,它使用两个参数m和n,并简单地将m中的一系列n加到1。
例如,如果您传递f(3,5),它将返回3 + 2 + 1 + 5 = 11或f(4,5)将返回4 + 3 + 2 + 1 + 5 = 15