我的LC-3程序如何导致无限循环?
我的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论