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

LC-3子程序持续循环问题:期望R0=1时终止却无法停止

问题分析与修复

你的LC-3子程序无法在R0=1时退出循环,问题出在X=1的判断逻辑上。原代码中使用BRnz QUIT会匹配所有≤1的情况(包括X=0或负数),且直接修改R0后再恢复的步骤存在隐含风险,可能导致条件判断未按预期触发。

修复后的代码

AND R3, R3, #0    ; Initialize step count to 0
ADD R4, R7, #0
LOOP              ; Loop until X becomes 1
ADD R2, R0, #-1   ; 计算X-1,不修改原X
BRz QUIT          ; 仅当X=1时跳转QUIT
ADD R2, R0, #0    ; Copy X into R2
AND R2, R2, #1    ; Check if X is odd
BRz EVEN          ; Branch to EVEN if X is even
JSR MUL3ADD1      ; Run the MUL3ADD1 subroutine if odd
ADD R0, R1, #0    ; Copy the result into X
ADD R3, R3, #1    ; Increment the step count
BRnzp LOOP        ; Loop again
EVEN
JSR DIVIDEBY2     ; Run the DIVIDEBY2 subroutine if even
ADD R0, R1, #0    ; Copy the result into X
ADD R3, R3, #1    ; Increment the step count
BRnzp LOOP        ; Loop again
QUIT
ADD R7, R4, #0    ; resets R7 value
RET

关键修改点

  • 改用ADD R2, R0, #-1将X-1的结果存入R2,不直接修改R0,避免后续恢复操作可能带来的错误。
  • 将BRnz QUIT替换为BRz QUIT,仅当X-1=0(即X=1)时触发跳转,判断逻辑更精准,排除了X≤1的其他无关情况干扰。

修改后,当R0的值变为1时,会直接跳转到QUIT分支执行返回操作,不会继续进入循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:45:56