MIPS中的内存地址越界错误,但在另一个函数中工作

MIPS中的内存地址越界错误,但在另一个函数中工作,mips,qtspim,Mips,Qtspim,我正在用MIPS制作一个程序,它将比较两个字符串,但我似乎无法访问正确的位置。我有一个计算字符串长度的函数,它工作得很好,但是当我尝试使用另一个函数时(在本例中,它只是一个测试,看看它是否工作),它说我访问了错误的内存。我正在使用QTSpim来测试它。起作用的是duzinaStringa,不起作用的是krajStringa。目前,它只是试图打印出字符串的第一个字符,这样我就可以确保它工作正常 .text krajStringa: li $v0,0 li $t0,0 #brojac1

我正在用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指出的,我在打印字符串的第一个字符时使用了错误的系统调用。

错误消息非常具体。如果您遇到错误并需要帮助,请共享确切的消息。syscall#4(打印字符串)使用指针而不是字节。您可以打印整数,也可以使用地址。@ErikEidt它的字面意思是“内存地址超出边界”,并在console@ErikEidt就这样,切换到打印字符的系统调用,谢谢