CPUlator MIPS汇编模拟无输出、寄存器状态及功能验证求助
问题修复方案
你遇到的无输出问题由两个核心原因导致:
- 开启
.set noreorder后未处理跳转延迟槽,跳转指令后的指令会被提前执行,导致syscall的参数设置逻辑混乱 - 多数首次使用该模拟器的用户未切换到Console输出标签,默认显示的是寄存器列表,看不到标准输出内容
修正后的汇编代码
.set noreorder .data message1: .asciiz "Absolute value of " message2: .asciiz " is " # 补充空格优化显示效果 .text .global _start _start: li $t0,-10 # 存储输入值-10到$t0 xor $t1,$t1 # 初始化$t1为0 li $t2, -1 # 存储-1到$t2用于取反 j PRINT nop # 填充延迟槽,开启noreorder必须加 abs_calc: BGEZ $t0, store_result # 如果$t0 >= 0跳转到store_result nop j get_abs nop store_result: move $t1, $t0 j result_print nop get_abs: mul $t1, $t2, $t0 # 负数取反 j result_print nop PRINT: li $v0, 4 la $a0, message1 syscall li $v0, 1 move $a0, $t0 syscall j abs_calc nop result_print: li $v0, 4 la $a0, message2 syscall li $v0, 1 move $a0, $t1 syscall j DONE nop DONE: li $v0, 10 syscall nop
模拟器运行验证方法
- 首先确认界面右侧顶部的输出面板切换到Console标签,所有标准输出内容都会显示在这里
- 单步调试:点击「Step」按钮(快捷键F2)逐行执行指令,观察左侧寄存器面板中$t0、$t1的数值变化,执行完abs_calc逻辑后$t1变为10即说明函数功能正常
- 断点调试:点击代码行左侧位置添加断点,点击「Continue」运行到断点位置,直接查看对应寄存器、内存的状态,快速验证核心逻辑是否符合预期
- 程序正常执行完成后,Console会打印输出内容
Absolute value of -10 is 10,无报错提示即运行正常
内容的提问来源于stack exchange,提问作者p20xx
相关产品推荐
相关产品推荐

