MIPS 中的内存地址越界错误,但在不同的函数中工作

Memory address out of bounds error in MIPS but works in a different function

我正在用 MIPS 编写一个程序来比较两个字符串,但我似乎无法访问正确的位置。我有一个计算字符串长度的函数,它工作正常,但是当我尝试使用不同的函数时(在这种情况下它只是一个测试,看看它是否有效),它说我正在访问错误的内存。我正在使用 QTSpim 对其进行测试。起作用的函数是 duzinaStringa,不起作用的函数是 krajStringa。目前它只是试图打印出字符串的第一个字符,所以我可以确保它有效

.text


krajStringa: 

li $v0,0
li $t0,0 #brojac1 
 
move $t2, $a0 #adresa prvog
move $t3, $a1 #adresa drugog

lb $a0,0($t2) 
li $v0,4 
syscall
jr $ra 






duzinaStringa:  
move $t1,$a0 
li $t0,0 
petlja: 
    lb $t2,0($t1) 
    beqz $t2,krajDuzine
        addi $t1,$t1,1
        addi $t0,$t0,1 
        j petlja

    krajDuzine: 
    addi $t0,$t0,-1 
    move $v0,$t0
    jr $ra


main:

la $a0,str1
li $v0, 4
syscall

la $a0, arr
li $a1,200 
li $v0, 8
syscall

la $a0,str1
li $v0, 4
syscall

la $a0, arr2
li $a1,200 
li $v0, 8
syscall

la $a0,arr
jal duzinaStringa
move $a2,$v0


la $a0,arr2
jal duzinaStringa
move $a3,$v0 

la $a0,arr
la $a1,arr2
jal krajStringa


li $v0,10
syscall

.data
arr: .space 200
arr2: .space 200
str1: .asciiz "Unesi string: \n"

正如@ErikEidt 所指出的,我在打印字符串的第一个字符时使用了错误的系统调用。