У меня есть следующий код mips (запускающий его в QTSPIM), который должен подсчитать количество символов в строке и распечатать их.
Логика, стоящая за ним, очень проста, но работает не так, как должна.Все идет хорошо, пока не достигнет конца строки, и затем он продолжит считать, хотя я сравниваю каждый элемент с $ ноль, чтобы найти конец строки (\ 0).
Есть ли что-то не так с моим условием длявыйти из цикла, или my_string не содержит \ 0 в конце, поэтому он не выйдет?
.data
endl: .asciiz "\n"
my_string: .asciiz "thisisastring"
star: .asciiz "*"
str_end: .word 0
space: .asciiz " "
.text
.globl main
main:
la $a0, my_string
li $v0, 4
syscall
la $a0, endl
li $v0, 4
syscall
la $t0, my_string # load mystring to $t0
li $t1, 0 # make $t1 = 0, character counter
lb $t2, ($t0) # make $t2 point to the first character of "my_string"
li $t3, 1 # $t3 is the ++ register to go to the next character
li $t4, 0 # character counter
la $t5, str_end
cont:
beqz $t0, print # if \0 is found print and exit
addi $t4, $t4, 1 # increase the counter
lbu $a0, ($t0) # print current character
li $v0, 11
syscall
addi $t0, $t0, 1 # go to next char
#move $t2, $t0
j cont
print:
move $a0, $t4
li $v0, 1
syscall
j exit
exit:
li $v0, 10
syscall