Mips 为什么我的字符串长度子程序给出一个无限循环?

Mips 为什么我的字符串长度子程序给出一个无限循环?,mips,Mips,我希望我的代码打印字符串的长度,但它似乎进入了无限循环。我不明白我的错误在哪里 .data STR_str: .asciiz "Hello" ################################# main: la $a0, STR_str jal string_length add $a0, $v0, $zero li $v0, 1 syscall ############################################ string_length:

我希望我的代码打印字符串的长度,但它似乎进入了无限循环。我不明白我的错误在哪里

.data 
STR_str:
.asciiz "Hello"
#################################
main: 

la  $a0, STR_str
jal string_length

add $a0, $v0, $zero
li  $v0, 1
syscall
############################################
string_length:

li $v0, 0 # initialize the count to zero
str_lenght_loop:
lb $t2, 0($a0) # load the next character into t2
loop_strlen: beqz $t2, exit # check for the null character
addi $a0, $a0, 1 # increment the string pointer
addi $v0, $v0, 1 # increment the count
j loop_strlen # return to the top of the loop
exit:  
jr $ra

然后是时候开始找出原因了:将字符串设为一个字符长。现在,您应该能够完全用笔和纸写出在这相当少的行数中的每一行发生了什么,并且您应该能够准确地写出为什么代码一直在运行而不是停止。您能提供一个解释吗?我弄不好。直接拿笔和纸,开始写下每一行执行时寄存器的内容(通过查看指令,而不是代码注释),并确定跳转条件的结果。你需要穿过大约10行,你“知道”它什么时候应该停止,所以:一旦你到达它应该停止的点,你的笔和纸的痕迹应该告诉你为什么它不停止。