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

MIPS求两数最大值代码报错求助:操作数类型错误

MIPS求两数最大值代码错误修正

错误原因与修正方案

错误1:$ra操作数类型错误

  • 问题:部分MIPS汇编器要求加载指令必须显式写出偏移量,lw $ra, ($fp)的省略写法不被支持;同时main函数用j $ra退出会导致非法跳转($ra初始值不确定)。
  • 修正:将lw $ra, ($fp)改为lw $ra, 0($fp),并把main的退出逻辑换成li $v0, 10; syscall(标准程序退出调用)。

错误2:else操作数类型错误

  • 问题:sle是逻辑置位指令,仅能操作寄存器,不能直接跳转到标签。你试图用它实现条件跳转,不符合MIPS指令语法。
  • 修正:使用分支指令ble $a0, $a1, else直接实现“若x <= y则跳转到else”的逻辑。

修正后的完整代码

.text
 main:
 li   $sp, 0x7ffffffc    # initialize $sp

# PROLOGUE
subu $sp, $sp, 8        # expand stack by 8 bytes
sw   $ra, 8($sp)        # push $ra (ret addr, 4 bytes)
sw   $fp, 4($sp)        # push $fp (4 bytes)
addu $fp, $sp, 8        # set $fp to saved $ra

li   $v0, 5             # read x into $a0
syscall
move $a0, $v0

li   $v0, 5             # read y into $a1
syscall
move $a1, $v0

jal  max                 # $v0 = max($a0, $a1)

move $a0, $v0           # print_int(result)
li   $v0, 1
syscall
li   $v0, 11            # print_char('\n')
li   $a0, 10
syscall

# EPILOGUE
move $sp, $fp           # restore $sp
lw   $ra, 0($fp)        # restore saved $ra(显式添加偏移量0)
lw   $fp, -4($sp)       # restore saved $fp
li   $v0, 10            # 标准程序退出
syscall

max:
  # $a0 = x, $a1 = y
  ble $a0, $a1, else    # 若x <= y,跳转到else分支
  move $v0, $a0         # x > y,将x存入返回寄存器$v0
  jr $ra                # 返回调用者
else:   
  move $v0, $a1         # x <= y,将y存入返回寄存器$v0
  jr $ra                # 返回调用者

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:36