You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修正MIPS斐波那契函数代码:实现终端输入位置返回对应数值

修正后的MIPS斐波那契数计算代码

你的代码存在三个核心问题导致无法正常运行,以下是修正后的完整代码及问题说明:

问题点说明

  • 参数传递缺失:主函数中读取输入值后存入$t0,但调用Fib函数前未将该值传入函数的参数寄存器$a0,导致递归函数拿到的是无效参数。
  • 返回值引用错误:Fib函数将计算结果存在$v0寄存器,但主函数打印时错误引用了$v1,无法输出正确结果。
  • 字符串笔误:输出提示文本中的"Lucas Sucession"应为"Fibonacci Sequence"(可选修正,不影响运行但符合需求描述)。

修正后的完整代码

.data 
    ask4num: .asciiz "Enter a number: "
    printNum: .asciiz "\nThe number in the Fibonacci Sequence is: "
    
.text
    
.globl main

main:
    # 打印输入提示
    addi $v0, $zero, 4
    la $a0, ask4num
    syscall
    
    # 读取用户输入的自然数
    addi $v0, $zero, 5
    syscall
    
    # 将输入值存入$t0
    addi $t0, $v0, 0
    
    # 打印结果提示文本
    addi $v0, $zero, 4
    la $a0, printNum
    syscall
    
    # 将输入值传入Fib函数的参数寄存器$a0
    move $a0, $t0
    jal Fib
    
    # 打印计算结果(引用正确的返回寄存器$v0)
    addi $v0, $zero, 1
    addi $a0, $v0, 0
    syscall
    
    # 退出程序
    addi $v0, $zero, 10
    syscall
    
Fib:
    # 保存寄存器到栈中
    addi $sp, $sp, -12
    sw $ra, 0($sp)
    sw $a0, 4($sp)
    sw $s0, 8($sp)
    
    # 递归终止条件:n=0返回0
    beq $a0, $zero, ReturnZero
    # 递归终止条件:n=1返回1
    addiu $t0, $zero, 0
    slti $t0, $a0, 2
    bne $t0, $zero, ReturnOne
    
    # 计算Fib(n-1)
    addi $a0, $a0, -1
    jal Fib
    move $s0, $v0
    
    # 计算Fib(n-2)
    lw $a0, 4($sp)
    addi $a0, $a0, -2
    jal Fib
    
    # Fib(n) = Fib(n-1) + Fib(n-2)
    add $v0, $v0, $s0
    
    # 恢复寄存器并返回
    lw $s0, 8($sp)
    lw $ra, 0($sp)
    addiu $sp, $sp, 12
    jr $ra
    
ReturnZero:
    lw $s0, 8($sp)
    lw $ra, 0($sp)
    addiu $sp, $sp, 12
    li $v0, 0
    jr $ra

ReturnOne:
    lw $s0, 8($sp)
    lw $ra, 0($sp)
    addi $sp, $sp, 12
    li $v0, 1
    jr $ra

内容的提问来源于stack exchange,提问作者ronny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:22:45