我只是一个超级新手,就像我刚刚学会了这样做12小时我想知道为什么我的循环没有停止。你能帮我找到错误吗?我知道这段代码很垃圾,请耐心等待。
所以我们的任务是要求用户要求用户输入一个最多80个字符的字符串,并且应该以句点结束,因为知道它是否是字符串的结尾是我们的基础。程序将计算字符和单词并显示它,但在我的情况下,程序不会停止。请帮忙。
.ORIG X3000
LEA R0, PROMPT_ENTER ;Message for entering number.
PUTS
LEA R2, SENTENCE ;allocated memory
AND R3, R3, #0 ;setting R3 to zero for word counter.
ADD R3, R3, #1
AND R1, R1, #0 ;setting R4 to zero for char counter.
;---------ASKING USER TO INPUT A SENTENCE------
GET_USER_INPUT: ;loop for getting characters.
GETC
OUT
STR R0, R2, #0 ;r0 -> ( memory address stored in r2 + 0 )
PUT
ADD R2, R2, #1 ;increments the memory pointer
ADD R0, R0, #-10 ;decrements loop to proceed when pressed enter.
BRz COUNT_LENGTH
BRnp GET_USER_INPUT
;--------Element counter----
COUNT_LENGTH:
AND R0, R0, #0
LEA R4, SENTENCE
LDR R0, R4, #0
ADD R0, R0, #-10
BRz EMPTY
BRnp COUNT_ELEMENTS
EMPTY:
AND R0, R0, #0
LEA R0, PROMPT_NULL
PUTS
HALT
COUNT_ELEMENTS:
AND R0, R0, #0
LEA R4, SENTENCE
LDR R0, R4, #0
LD R6, TMNT
ADD R0, R0, R6
BRz END_OF_SENTENCE
LDR R0, R4, #0
LD R6, SPACE
ADD R0, R0, R6
BRz WORD_COUNT
ADD R4, R4, #1
ADD R1, R1, #1
BRnp COUNT_ELEMENTS
WORD_COUNT:
ADD R4, R4, #1
ADD R3, R3, #1
JSR COUNT_ELEMENTS
END_OF_SENTENCE:
AND R0, R0, #0
LDR R3, R3, #0
LD R5, ASCII
ADD R0, R0, R5
OUT
AND R0, R0, #0
LDR R1, R1, #0
ADD R0, R0, R1
OUT
HALT
SENTENCE .BLKW #80 ;initialize the array named sentence with length 80
TMNT .fill #-89
SPACE .fill #-32
ASCII .fill #48
;----MESSAGES------
PROMPT_ENTER .stringz "Enter the word(maximum 80 characters): \n"
PROMPT_AGAIN .stringz "Do you want to try again? Y/N: \n"
PROMPT_NULL .stringz "Error: Please enter a sentence!"
PROMPT_NOTMNT .stringz "Error: No terminating symbol (.) is expected at the end!"
PROMPT_DSPACE .stringz "Error: Multiple white space is not allowed!"
.END
答案 0 :(得分:0)
我只是浏览了这段代码。
它是一个无限循环,因为您在每次COUNT_ELEMENTS迭代中将R4重置为指向SENTENCE的开头。
我可以在你的代码中看到你在返回COUNT_ELEMENTS之前增加R4的顺序(如果你想分支无条件地使用BR,那么JSR仅用于调用子程序)。
您希望将R4设置为仅指向SENTENCE一次。我相信你可以简单地删除COUNT_ELEMENTS中的LEA R4,SENTENCE,因为它之前是COUNT_LENGTH的一部分。
将来我建议你在lc3模拟器中提取你的代码,然后逐步检查寄存器的值。