#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
функцию проверки. Спасибо.