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

LC3中如何输入多位正整数?现有双自然数输入代码故障排查

LC3 输入自然数代码的错误排查

核心错误

  • R2初始化代码不可达
    你的AND R2, R2, #0语句放在了INPUT1循环的BRnzp INPUT1之后,而INPUT1循环的逻辑是:要么通过BRnzp INPUT1无限循环接收数字字符,要么通过BRn INPUT2/BRp INPUT2直接跳转到第二个输入阶段。这导致初始化R2的代码永远不会被执行,R2会保留寄存器中的随机初始值,最终第二个自然数的计算完全错误。

    修复方案:将AND R2, R2, #0移动到INPUT2标签的开头,确保进入第二个输入循环前先重置R2。

次要问题与优化点

  • 乘法循环逻辑冗余
    你通过循环9次累加原数实现乘以10的操作,逻辑上是正确的,但可以简化:乘以10等价于R1 = (R1 << 1) + (R1 << 3)(即2倍值加8倍值),用ADD R1, R1, R1(左移1位)可以减少循环次数,提升执行效率。例如:

    ; 替换原有的MULT1循环
    ADD R1, R1, R1       ; R1 *= 2
    ADD R3, R1, R1       ; R3 = 4*R1
    ADD R3, R3, R3       ; R3 = 8*R1
    ADD R1, R1, R3       ; R1 = 2*R1 +8*R1 =10*R1
    
  • 控制字符处理不完善
    TRAP x20会读取所有键盘输入,包括退格、回车等控制字符。如果用户输入退格键(ASCII x08),会被判定为非数字直接跳转到INPUT2,导致第一个数的输入意外中断。如果需要支持输入修正,需额外处理退格字符并回退已累积的数值。

修复后的关键代码片段

START           LD R6, ASCII        ; load ascii offset for printing numbers
                NOT R6, R6
                ADD R6, R6, #1

                AND R1, R1, #0
INPUT1          TRAP x20
                ADD R5, R0, R6
                BRn INPUT2          ; 输入非数字,进入第二个数输入
                ADD R3, R5, #-9     
                BRp INPUT2          ; 输入非数字,进入第二个数输入
                ; 输入是数字,将R1乘以10并加上当前数字
                AND R3, R3, #0
                ADD R3, R3, #9
                ADD R4, R1, #0      
MULT1           ADD R1, R4, R1
                ADD R3, R3, #-1
                BRp MULT1           ; 完成乘以10的操作
                ADD R1, R1, R5      ; 加上当前输入的数字
                BRnzp INPUT1
                
INPUT2          AND R2, R2, #0      ; 移动到此处,确保R2初始化为0
                TRAP x20
                ADD R5, R0, R6
                BRn PREP          ; 输入非数字,结束第二个数输入
                ADD R3, R5, #-9     
                BRp PREP          ; 输入非数字,结束第二个数输入
                ; 输入是数字,将R2乘以10并加上当前数字
                AND R3, R3, #0
                ADD R3, R3, #9
                ADD R4, R2, #0
MULT2           ADD R2, R4, R2
                ADD R3, R3, #-1
                BRp MULT2           ; 完成乘以10的操作
                ADD R2, R2, R5      ; 加上当前输入的数字
                BRnzp INPUT2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:07:05