MIPS汇编浮点数比较后bc1t始终跳转异常问题求助
问题修复指导
- 第一个错误:浮点输入存储逻辑错误
MIPS中syscall 6读取单精度浮点数的返回值存放在浮点寄存器$f0,而非通用寄存器$v0,你当前用sw $v0, estimate存储的是无效值,导致后续比较的estimate全程为垃圾数据,逻辑自然不符合预期。
正确存储代码:
#get user input li $v0, 6 syscall # 存储浮点寄存器中的输入值 swc1 $f0, estimate
第二个错误:跳转目标标签写错
你条件判断后用bc1t MSG2指定跳转目标,但你的代码中输出MSG2的标签是displayMSG2,MSG2是字符串的内存地址,直接跳转至该位置执行会触发未知错误。第三个错误:条件跳转指令与需求不匹配
你的需求是$f0 < $f1不成立时跳转输出MSG2,c.lt.s $f0, $f1会在$f0 < $f1成立时将条件标记置为真,bc1t是条件为真时跳转,和你的需求完全相反,应该用bc1f(条件为假时跳转)。同时要注意执行完MSG2输出后也要加退出逻辑,避免代码跑飞。
调整后的判断逻辑代码:
c.lt.s $f0, $f1 # $f0 < $f1 不成立时跳转到displayMSG2 bc1f displayMSG2 li $v0, 4 la $a0, MSG1 syscall li $v0, 10 syscall displayMSG2: li $v0, 4 la $a0, MSG2 syscall # 此处添加退出逻辑,避免执行非法后续代码 li $v0, 10 syscall
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

