MIPS 中的递归
我想在 MIPS 的汇编中实现一个递归程序。更具体地说,我想实现著名的斐波那契函数。
下面是 C 中的实现:
int fib(int n) {
if(n<2)
return 1;
return fib(n-1)+fib(n-2);
}
I want to implement a recursive program in assembly for MIPS. More specifically, I want to implement the well-known Fibonacci function.
Here's the implementation in C:
int fib(int n) {
if(n<2)
return 1;
return fib(n-1)+fib(n-2);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
以下是在 MIPS 汇编中执行递归阶乘函数的代码。将其更改为斐波那契数列作为练习留给读者。 (注意:此代码中未优化延迟槽,因为它是为了可读性而设计的。)
Here is the code to do a recursive factorial function in MIPS assembly. Changing it to do Fibonacci is left as an exercise to the reader. (Note: delay slots aren't optimized in this code, as it's designed for readability.)
-将
n-1
加载到$a0
中-使用
jal
指令递归调用fib
。-从
$v0
寄存器中获取结果。-将
n-2
加载到$a0
中-使用
jal
指令递归调用fib
。-从
$v0
寄存器中获取结果。然后,有一些与
addu
指令有关的东西......哦,是的,您必须使用分支检查
if
,但这与递归无关。如果您需要帮助,编译器是您的朋友。
但
会更清晰。
-Load
n-1
into$a0
-Use a
jal
instruction to callfib
recursively.-Fetch result from the
$v0
register.-Load
n-2
into$a0
-Use a
jal
instruction to callfib
recursively.-Fetch result from the
$v0
register.Then, there's something with the
addu
instruction...Oh yeah, you must check the
if
using a branch, but that has nothing to do with recursion.if you need help, the compiler is your friend.
but
will be clearer.
提示 - 考虑一个堆栈。
顺便说一句,就复杂性(时间和空间)而言,递归对于解决问题来说确实是一个糟糕的解决方案。一个循环和两个变量会工作得更好。
Hint - think about a stack.
By the way, recursion is a really bad solution to the problem in terms of complexity (both time and space). A loop and two variables would work much better.
将 C 函数编译为目标文件,然后查看
“可能”是您的起点。
Compile your C function to an object file and look at
Could be your starting point.