assembly - 如何使用 MIPS 程序集将循环函数更改为递归函数?
问题描述
我编写的程序提示用户输入一个整数值,读取该值并找到等于或小于用户输入的值的 2 的最大幂。例如,用户输入 40,输出为 5。我有这个循环函数,但我想递归地编写它并得到相同的结果。这是函数的代码片段:
.ent largest
largest:
addi $sp, $sp, -4
sw $ra, 0($sp)
addi $t0, $a0, 0 # place the number passed in as parameter into $t0
li $t1, 1 # load 2^0 into $t1
li $t2, 0 # load 0 into $t2
loop: bgt $t1, $t0, done # if 2^n is larger than $t0, done, return n-1
mul $t1, $t1, 2
addi $t2, $t2, 1
b loop
done:
addi $a0, $t2, -1 # return n-1
lw $ra, 0($sp)
addiu $sp, $sp, 4
jr $ra # return from main method
.end largest
我实在想不通。如果有人可以帮助我,我将不胜感激。
解决方案
推荐阅读
- c++ - 在 C++ 中使用带有向量的 while 循环时出现超出范围异常
- windows - C ++获取/更改文件夹和文件的权限?
- c - 使用 & 和 * 互换来解除引用?
- python - 将浮点数四舍五入到一位小数(具体问题)
- c++ - 如何修复“错误:需要左值作为赋值的左操作数”
- php - 如何使用弹性搜索为“随机化”结果创建高级查询
- jenkins - 在詹金斯开始另一项工作时如何获取内部错误消息
- c# - 最近邻分类算法的 NumPy 实现以完全相同的方式对所有内容进行分类
- javascript - 上传多个文件时处理 multer.single('file') 错误
- java - 如何遍历 HashMap
> 并返回哪个 Set 是最大的?