Определение того, является ли массив палиндромом в сборке
Я пытаюсь проверить, является ли массив палиндромом или нет. Итак, сначала я беру размер массива в $s0, затем зацикливаюсь, чтобы заполнить массив пользовательским вводом.
SPIM выдает сообщение "память вне границ", и я не могу понять, почему. Есть идеи?:")
.data
array: .space 80 # max 20 inputs
palMsg: .asciiz "This array is a palindrome!"
notPalMsg: .asciiz "This array is not a palindrome!"
.text
.globl main
main:
# take number of elements in array and save value in $s0
li $v0, 5
syscall
add $s0, $v0, $zero
# initialize a counter $t0 and an offset $t1
li $t0, 0
li $t1, 0
# initialize array with user's inputs
loop:
li $v0, 5
syscall
addi $t0, $t0, 1
sw $v0, array($t1)
addi $t1, $t1, 4
bne $t0, $s0, loop
# check if palindrome or not [$t0 goes from left to right and $t1 does the opposite]
li $t0, 0
mul $t1, $s0, 4
addi $t1, $t1, -4
test:
lw $t5, array($t0)
lw $t6, array($t1)
bne $t5, $t6, notPal
addi $t0, $t0, 4
addi $t1, $t1, -4
blt $t0, $t1, test
lw $a0, palMsg
j exit
notPal:
lw $a0, notPalMsg
j exit
# print msg then terminate
exit:
li $v0, 4
syscall
li $v0, 10
syscall
.end