Исключение во время выполнения для программы, чтобы найти вхождение слова - PullRequest
0 голосов
/ 28 марта 2019

В этой программе я попытался найти слово «как» в тексте «как дела», которое жестко закодировано в начале. Но по некоторым причинам, когда я запускал программу, она не останавливается и ничего не печатает. Так что мне просто интересно, может кто-нибудь сказать мне, где я ошибся? Заранее спасибо

text: .ascii "how are you"
word: .ascii "how"
    .text
    .globl main
main:
Search:#search the occurrence of th word 
        li $s0, 0               # pointer for the text
        li $s1, 0               # pointer for the word 
        li $s7, 0               # counter for occrence

compare:lb $t0, text($s0)        
        addi $s0, $s0, 1
        lb $t1, word($s1)
        addi $s1, $s1, 1
        bne $t0, $t1, next_word # compare next word 
        beq $t6, $s1, bingo     # t6 is the length of the keyword
        j compare               # keep comparing 
bingo:    
        addi $s7, $s7, 1        # occrence + 1    
next_word:     
        li $s1, 0               # refresh the keyword    
loop:   lb $t0, text($s0)    
        addi $s0, $s0, 1    
        bne $t0, 32, loop    
        beq $t7, $s0, print_result     # we have searched the all text 
        j compare 

print_result: 
        la $a0, ($s7)
        li $v0, 1
        syscall

        li $v0, 10
        syscall

1 Ответ

0 голосов
/ 29 марта 2019

Выполнение программы приведет к бесконечному циклу между

loop:   lb $t0, text($s0)    
        addi $s0, $s0, 1    
        bne $t0, 32, loop    

, поскольку $ t0 остается равным 0 после возврата к «сравнению» в первый раз.Используйте пошаговый отладчик, который входит в состав Mars.Возможно, попробуйте загрузить ваши значения с

la $a0, text
lb $t0, 0($a0)

вместо

lb $t0, text($s0)  
...