Как посчитать количество пробелов в MIPS?

#mips

#mips

Вопрос:

Мне нужно написать программу, в которой на выходе будет количество предложений и среднее количество слов. Код отлично работает для подсчета предложений, но для второй задачи он не работает. Я использую ветвь, если она равна текущему символу и регистру, в котором я объявил значение ascii для пробела, равное 32. С помощью этого кода вывод для средних слов представляет собой общее количество символов из всего ввода. Я не могу понять, как он может подсчитывать каждый символ, когда beq явно неверен. (Я также пробовал использовать emptySpace: .asciiz » «, но это не работает)

Это то, что я получил до сих пор:

 .data
str_input: .space 256
dot: .asciiz  "."
msg1: .asciiz "Number of sentences: "
msg2: .asciiz "nAverage number of words: "

.text
li $v0, 8       #read string
la $a0, str_input   #address of str_input vo $a0
li $a1, 256     #256 max
la $a2, dot
lb $a2, 0($a2)      
li $a3, 32
syscall
addi $t4, $zero, 0  #counter for words
addi $t5, $zero, 0  #counter for sentences

or $t0, $a0, $zero  #$t0 pointer to array 

start: 
lb $t1, 0($t0)      #$t1 current char
beqz $t1, end
jal check
addiu $t0, $t0, 1
j start

chech:
beq $t1, $a2, IsDot
beq $t1, $a3, IsEmptySpace

IsDot:
addi $t5, $t5, 1
jr $ra

IsEmptySpace:
addi $t4, $t4, 1
jr $ra

end: 
la $a0, msg1        #address of msg1 in $a0
li $v0, 4       #load string in $v0
syscall

add $a0, $t5, $zero
li $v0, 1
syscall         #print number of sentences

addi $t4, $t4, 1    #add the last word
div $t4, $t5        #divide number of words with number of sentences
mflo $t6

la $a0, msg2        #address of msg2
li $v0, 4       #load string in $v0
syscall

add $a0, $t6, $zero
li $v0, 1
syscall        
  

Комментарии:

1. Что вы хотите chech / check делать, когда это не точка или пробел? Что вы видите, когда выполняете один шаг каждой инструкции?

2. @ErikEidt check должен видеть только, является ли текущий символ точкой или пробелом, и если это ни то, ни другое, я хочу, чтобы он вернулся к основной функции start и перешел к следующему символу.

3. Хорошо, итак, что вы собираетесь изменить, чтобы это сделать?

4. @ErikEidt я исправил это, добавив jr $ra функцию проверки. Спасибо.