我的LC-3程序如何导致无限循环?

发布于 2025-01-25 14:09:23 字数 1097 浏览 0 评论 0原文

我的JSR调用了按预期功能的子例程,但是,当我测试程序时,它被卡在无限的循环中,我不确定为什么。有人可以把我指向正确的方向吗?

这是子例程应该要做的:

 Input: NUM     (r0, a positive integer)
 Output: STEPS  (r1, the required number of steps for calculation)

 STEPS = 0

 while NUM is not equal to 1:
 if NUM is even -> reduce NUM to NUM/2
 if NUM is odd  -> increase NUM to 3 * NUM + 1
 increment STEPS by 1

这是我的子例程:

AND R1, R1, #0             ; INSTANTIATING R1 TO 0 TO RESOLVE REG CONFLICT
ST R0, R0SAVE      
ST R1, R1SAVE

NUM1LOOP  LD R1, R1SAVE
ADD R1, R1, #1
ST R1, R1SAVE
LD R1, ONE               ;Loads 1 into R1 to compare to N
NOT R1, R1
ADD R1, R1, #1
ADD R0 R0, R1        ; CHECKS TO SEE IF N >=1
BRz DONE             ; IF N = 0, N IS 1 AND NEEDS TO STOP LOOP, ELSE CONT.

CHECKEO      AND R0, R1, #1
BRz DIV2E
AND R1, R1,  #0
JSR MUL3ADD1
ST R1, R1JSR
ST R0, R1JSR
BRnzp NUM1LOOP




DIV2E       AND R1, R1,  #0
JSR  DIVIDEBY2
ST R1, R1JSR
ST R0, R1JSR
BRnzp NUM1LOOP      
    
DONE         LD R1, R1SAVE


R1JSR      .BLKW #1
R0SAVE .BLKW #1
R1SAVE .BLKW #1
ONE .FILL #1
RET

My JSR calls subroutines that function as intended, however, when I test my program, it is stuck in an infinite loop, I am quite unsure why. Can someone please point me into the correct direction?

Here is what the subroutine is supposed to do:

 Input: NUM     (r0, a positive integer)
 Output: STEPS  (r1, the required number of steps for calculation)

 STEPS = 0

 while NUM is not equal to 1:
 if NUM is even -> reduce NUM to NUM/2
 if NUM is odd  -> increase NUM to 3 * NUM + 1
 increment STEPS by 1

Here is my subroutine:

AND R1, R1, #0             ; INSTANTIATING R1 TO 0 TO RESOLVE REG CONFLICT
ST R0, R0SAVE      
ST R1, R1SAVE

NUM1LOOP  LD R1, R1SAVE
ADD R1, R1, #1
ST R1, R1SAVE
LD R1, ONE               ;Loads 1 into R1 to compare to N
NOT R1, R1
ADD R1, R1, #1
ADD R0 R0, R1        ; CHECKS TO SEE IF N >=1
BRz DONE             ; IF N = 0, N IS 1 AND NEEDS TO STOP LOOP, ELSE CONT.

CHECKEO      AND R0, R1, #1
BRz DIV2E
AND R1, R1,  #0
JSR MUL3ADD1
ST R1, R1JSR
ST R0, R1JSR
BRnzp NUM1LOOP




DIV2E       AND R1, R1,  #0
JSR  DIVIDEBY2
ST R1, R1JSR
ST R0, R1JSR
BRnzp NUM1LOOP      
    
DONE         LD R1, R1SAVE


R1JSR      .BLKW #1
R0SAVE .BLKW #1
R1SAVE .BLKW #1
ONE .FILL #1
RET

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文