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

MIPS用户输入整数平方计算程序运行无响应问题排查

MIPS汇编程序运行异常问题排查

核心错误原因

  • 参数加载逻辑错误
    你在main段内的代码只加载了arg2的内存地址,没有读取arg2存储的实际数值,导致后续bne $t1, $t2, fin的判断是将第一个输入的数值和arg2的内存地址做比较,几乎不可能相等,程序会直接跳转到结束逻辑,所以没有任何计算输出。
# 原错误代码片段
la  $t2, arg2       # 仅把arg2的地址存入$t2,没有读取对应值
lw  $s1, 0($t1)     
lw  $t1, 0($t1)
# 缺少lw $t2, 0($t2) 读取arg2实际值的指令
  • 程序执行入口逻辑隐患
    多数MIPS模拟器(如MARS、SPIM)默认从main标签开始执行,你写的用户输入代码放在main标签之前,大概率不会被执行,两个参数存储的初始值都是0,会直接触发beqz $t1, fin直接退出程序。
  • 缺少结果输出逻辑
    就算计算逻辑正常执行,你也没有添加将$s3的结果输出到控制台的代码,执行完成后自然看不到任何输出内容。

修正后的可运行代码

.data
arg:    .word   0
arg2:   .word   0   

.text
.globl main
main:   
    # 读取第一个整数
    li $v0, 5      
    syscall
    la $t0, arg
    sw $v0, 0($t0)
    
    # 读取第二个整数
    li $v0, 5      
    syscall
    la $t1, arg2
    sw $v0, 0($t1)
    
    # 加载两个参数的实际值
    la  $t0, arg    
    la  $t1, arg2       
    lw  $s1, 0($t0)     # $s1存第一个数的值
    lw  $t2, 0($t1)     # $t2存第二个数的值
                 
    addi    $s3, $zero, 0   
    # 校验:两个数都不为0且相等
    beqz    $s1, fin
    beqz    $t2, fin
    bne     $s1, $t2, fin
# 循环计算平方
fori:
    add $s3, $s3, $s1   
    addi $s1, $s1, -1
    bnez $s1, fori
    
    # 输出结果
    li $v0, 1
    move $a0, $s3
    syscall
fin:
    li  $v0, 10
    syscall 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:06:03