How to count number of words in a sentence in Assembly.

2.4k Views Asked by At

Sorry, this is the first time posting on stackoverflow so excuse me for any improper edicts. I've posted my LC-3 assembly code that asks user for a sentence and a word. Then the program checks how many times that word comes up in the sentence; then outputs the counter. I'm pretty sure my issue is that the two strings include ether space or enter so its not a match.

Also, I have not implemented the overall counter yet, and thanks in advance for the help.

.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

There are 1 best solutions below

0
On

In COMPARE_BOTH you increment sentence pointer (R2) but not word pointer (R3), so you enter LETTERS_MATCHED with pointers "out of sync".

I don't know if there is something more, but check that first.

It's a bit tedious to read with so "sparse" comments - especially about register usage.