Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';我不知道为什么循环是';t-LC3_Lc3 - Fatal编程技术网

我能';我不知道为什么循环是';t-LC3

我能';我不知道为什么循环是';t-LC3,lc3,Lc3,我只是一个超级新手,就像我刚刚学会如何做这只是12个小时,我想知道为什么我的循环没有停止。你能帮我找出哪里不对劲吗。我知道这个代码是垃圾,请容忍我 因此,我们的任务是让用户要求用户输入一个最多80个字符的字符串,并且应该以句号结尾,因为我们的基础是知道它是否是字符串的结尾。程序将计算字符和单词并显示,但在我的情况下,程序不会停止。请帮忙 .ORIG X3000 LEA R0, PROMPT_ENTER ;Message for entering number. PUTS LEA R2, SEN

我只是一个超级新手,就像我刚刚学会如何做这只是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

我只是浏览了一下这段代码

这是一个无限循环,因为在COUNT_元素的每次迭代中,您将R4重置为指向句子的开头

我可以在您的代码中看到,在返回COUNT_元素之前递增R4(顺便说一句,如果您希望无条件地使用BR进行分支,那么JSR仅用于调用子例程)

您可能希望将R4设置为只指向句子一次。我相信您可以简单地删除COUNT_元素中的LEA R4语句,因为它以前是作为COUNT_长度的一部分设置的


将来,我建议您将代码放在lc3模拟器中,并在执行过程中检查寄存器的值。

修复了一些文本