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

MIPS翻译C条件判断时beq指令始终跳转输出True问题求助

问题原因及修正方案

核心问题梳理

你遇到的问题主要来自分支逻辑设计错误,具体问题点如下:

  • 分支落空漏洞:当A≠2且B≠3时,你写的两条beq指令都不会触发跳转,程序会直接顺序执行到下方的outputT标签,这就是无论输入如何都打印True的核心原因。
  • 冗余代码:读取C值的move $t5, $v0后多了一行无效的syscall,可直接删除。
  • 冗余判断:checkT分支是只有B==3才会进入的,不需要在该分支内再次判断B是否等于3。
  • 逻辑优先级处理不到位:C语言中&&优先级高于||,原条件等价于A == 2 || (B == 3 && C != 4),你的代码没有处理B不等于3时直接走False分支的逻辑。

修正后的MIPS代码

.data
varA:   .word   2
A:  .asciiz "A: "
B:  .asciiz "B: "
C:  .asciiz "C: "
outputTrue:   .asciiz     "\nTrue"
outputFalse:   .asciiz     "\nFalse"

.text
addi $t0, $zero, 2
addi $t1, $zero, 3
addi $t2, $zero, 4

.globl main
main:
# 读取A
li  $v0, 4
la  $a0, A
syscall
li  $v0, 5
syscall
move    $t3, $v0

# 读取B
li  $v0, 4
la  $a0, B
syscall
li  $v0, 5
syscall
move    $t4, $v0

# 读取C
li  $v0, 4
la  $a0, C
syscall
li  $v0, 5
syscall
move    $t5, $v0

# 条件判断逻辑
# 先判断A==2,满足直接输出True
beq $t3, $t0, outputT
# A不等于2,判断B是否不等于3,如果B≠3直接输出False
bne $t4, $t1, outputF
# 到这里说明B==3,判断C是否等于4,等于的话输出False
beq $t5, $t2, outputF

# 剩下的情况:A≠2,B==3,C≠4,满足条件输出True
outputT:
li $v0, 4
la $a0, outputTrue
syscall
j   EXIT

outputF:
li $v0, 4
la $a0, outputFalse
syscall
j   EXIT

EXIT:
li  $v0, 10
syscall

逻辑说明

修正后的逻辑完全匹配原C代码的条件优先级:

  1. 若A == 2,直接满足||条件,输出True
  2. 若A != 2,需要判断后面的&&条件:
    • 若B != 3,&&条件直接不成立,输出False
    • 若B == 3,再判断C != 4:如果C等于4则不满足,输出False;否则输出True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:07