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

MIPS汇编实现Craps骰子游戏beq分支同时触发双提示问题咨询

MIPS Craps骰子游戏问题排查及修复

核心故障原因

  • 执行流穿透:触发获胜分支跳转到WIN标签后,打印完获胜提示没有跳转指令跳过失败分支,CPU会按地址顺序顺次执行下方的LOSE逻辑,导致两个提示同时打印。
  • 获胜条件不完整:仅实现了和为7的获胜判断,和为11的逻辑只写了li $t2,11加载立即数,没有配套的beq跳转判断,等于11的获胜规则完全未生效。
  • 分支返回逻辑缺失:输赢判断结束后没有跳转回主循环的逻辑,执行完分支后会跑出循环控制流程。
  • 冗余错误代码:第二个随机数生成后多了一个无意义的syscall,存在多处多余的.text伪指令(同一代码段无需重复声明)。

修复方案

1. 完善输赢判断逻辑

替换原有和值判断部分的代码:

add $t3, $t1, $t2 # 计算两个骰子和存在$t3
# 原有打印和值的代码保留
li $v0, 4
la $a0, combined
syscall
li $v0, 1
move $a0, $t3
syscall

# 新增完整判断逻辑
li $t0, 7
beq $t3, $t0, WIN  # 和为7跳获胜分支
li $t0, 11
beq $t3, $t0, WIN  # 和为11跳获胜分支
# 可根据Craps规则补充2/3/12直接判负的逻辑,此处示例直接跳失败
j LOSE

2. 修正分支跳转逻辑

修改输赢分支及循环收尾逻辑:

# 原有循环结束标识end保留
end:
li $v0, 10
syscall

WIN: 
li $v0, 4
la $a0, winString
syscall
j AFTER_RESULT # 跳过失败分支直接回到循环收尾

LOSE: 
li $v0, 4
la $a0, loseString
syscall

AFTER_RESULT:
addi $t5, $t5, 1 # 循环计数器+1
j loop # 跳回循环开头执行下一轮掷骰

3. 清理冗余代码

删除第二个随机数生成后多余的syscall,删除所有重复的.text伪指令声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:10