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

LC-3汇编程序结束数字输入提示持续循环问题排查咨询

故障排查与修复建议

核心根因

结束数字输入后,将输入值从R0存入R4的指令位置放错了,导致校验时读取的始终是初始化为0的R4,永远无法通过校验触发循环退出。
你写的ADD R4, R0, #0指令放在了HALT语句和END .STRINGZ的后面,LC-3是按地址顺序执行指令的,结束输入GETC/OUT之后,程序直接运行校验逻辑,根本不会执行到后面的存R4的指令,校验用的R4永远是初始化的0值,输入任何值都过不了校验,自然进入死循环。

具体修复步骤

  1. 调整结束数字相关代码的执行顺序:
    在RESTARTE块的GETC+OUT之后,立刻加存储R0到R4的指令,不要放在后续逻辑后面。
    正确的顺序应该是:
RESTARTE        LEA R0, END
                PUTS 
                GETC 
                OUT
; 输入完成后立刻把输入值存到R4
ADD R4, R0, #0
; 再执行校验逻辑
LD R5, NASCII
ADD R6, R4, R5
BRn RESTARTE

LD R5, ADSCII
ADD R1, R4, R5
BRp RESTARTE
  1. 删除原来放在HALT后面的冗余ADD R4, R0, #0指令,那个位置的指令永远不会被执行到。

其他可优化的问题点

  • 起始数字校验部分的注释有误:LD R5, NASCII 加载的是#-48不是注释写的#-57,后续注意注释和实际逻辑对齐
  • 目前的校验逻辑只能覆盖0-9的单数字输入,你需求里写的是0-16,10到16的两位数输入现在没有处理逻辑,后续如果需要支持两位数输入要额外加代码处理
  • 不要把字符串定义放在指令流中间,LC-3会把字符串的ASCII值当成指令执行,起始数字部分的START .STRINGZ建议挪到程序末尾的常量区,和NASCII、ADSCII放在一起

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:03