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
相关产品推荐
相关产品推荐

