如何计算Assembly中句子中的单词数量。

时间:2013-12-05 01:25:31

标签: assembly lc3

对不起,这是第一次在stackoverflow上发帖,所以请原谅任何不正当的法令。我发布了我的LC-3汇编代码,要求用户输入一个句子和一个单词。然后程序会检查word在句子中出现的次数;然后输出计数器。我很确定我的问题是这两个字符串包含以太spaceenter,所以它不匹配。

另外,我还没有实现整体计数器,并提前感谢您的帮助。

.ORIG X3000

LEA R2, SENTENCE    
LD R4, COUNTER     
LD R6, END_COUNTER        
LEA R3, USER_WORD       
LEA R0, PROMPT                                  
PUTS                                    
AND R0, R0, #0                              

;---------GET SENTENCE FROM USER-------------------------        

GET_ANOTHER_CHAR:                           
GETC                                     
OUT                                  
STR R0, R2, #0                              
ADD R2, R2, #1                              
ADD R0, R0, #-10                            
BRz GET_WORD_FROM_USER                              
BRnp GET_ANOTHER_CHAR                               

;---------GET WORD FROM USER-----------------------------     

GET_WORD_FROM_USER:                             
LEA R0, PROMPT_TWO                              
PUTS                                    
ANOTHER_LETTER_WORD:    
AND R0, R0, #0                              
GETC                                    
OUT                                 
STR R0, R3, #0                              
ADD R3, R3, #1                              
ADD R0, R0, #-10                             
BRz COMPARE_BOTH                                
ADD R4, R4, #1                              
BRnp ANOTHER_LETTER_WORD                            

;-------COMPARE EACH WORD IN THE SENTENCE----------------   

COMPARE_BOTH:                                   
AND R0, R0, #0                              
AND R5, R5, #0                              
LDR R0, R2, #0                              
BRz END_OF_SENTENCE                         
LDR R5, R3, #0                              
NOT R5, R5                              
ADD R5, R5, #1                              
ADD R5, R0, R5                               
BRz LETTERS_MATCHED                         
ADD R2, R2, #1                                  
BRnp COMPARE_BOTH                               
BRz END_OF_SENTENCE                         

;-----COMPARE EACH LETTER-------------------------------       

LETTERS_MATCHED:         
ADD R4, R4, #-1                                     
BRz WORD_MATCHES                                    
AND R0, R0, #0                                      
AND R5, R5, #0                                  
ADD R2, R2, #1                                  
ADD R3, R3, #1                                  
LDR R0, R2, #0                                  
LDR R5, R3, #0                                  
NOT R5, R5                                      
ADD R5, R5, #1                                  
ADD R5, R0, R5                                  
BRz LETTERS_MATCHED                                 
BRnp COMPARE_BOTH                               

;------WORD MATCHES------------------------------------      

WORD_MATCHES:     
AND R0, R0, #0                                  
ADD R6, R6, #1                                  
ADD R2, R2, #1                              
LDR R0, R2, #0                               
BRz PROGRAM_FINISH                           
BRnp COMPARE_BOTH                             

PROGRAM_FINISH:    
AND R0, R0, #0                                  
LEA R0, PROMPT_THREE                             
PUTS                                    
HALT                                        

END_OF_SENTENCE:    
AND R0, R0, #0                                      
LEA R0, PROMPT_FOUR                             
PUTS                                        
HALT    

PROMPT .stringz "Enter some text(max 300 characters) \n"      
PROMPT_TWO .stringz "What word are you looking for? \n"      
PROMPT_THREE .stringz "match!"      
PROMPT_FOUR .stringz "no match!"      
SPACE .fill #-32      
COUNTER .fill #0       
END_COUNTER .fill #0      
USER_WORD .blkw 10     
SENTENCE .blkw 300    

.END     

1 个答案:

答案 0 :(得分:0)

在COMPARE_BOTH中,你增加句子指针(R2)而不是字指针(R3),所以你输入 LETTERS_MATCHED指针“不同步”。

我不知道是否还有更多东西,但先检查一下。

阅读如此“稀疏”的评论有点乏味 - 特别是关于注册用法。