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