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

CPUlator MIPS汇编模拟无输出、寄存器状态及功能验证求助

问题修复方案

你遇到的无输出问题由两个核心原因导致:

  1. 开启.set noreorder后未处理跳转延迟槽,跳转指令后的指令会被提前执行,导致syscall的参数设置逻辑混乱
  2. 多数首次使用该模拟器的用户未切换到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:04