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