Witam,
Dopiero rozpocząłem swoją przygodę z programowaniem oraz z assemblerem, dlatego być może moje pytanie jest banalne, ale nie mogę dojść do tego co właściwie jest nie tak w kodzie.

Program ma służyć do sprawdzania, czy wpisywane słowo jest palindromem.
Używam programu Mars 4.5.

To co dotychczas udało mi się wysmażyć:

.data
	bufor: .asciiz
	string_len: $t1 #długość podanego wyrazu
.text
first:
	li $v0, 8
	li $a1, 100
	la $a0, bufor #pobieranie od 1 do 100 znaków z klawiatury
syscall

	li $v0, 4
	la $a0, bufor #wyświetlanie pobranego stringa
syscall
	#liczenie ilości wprowadzonych znaków
	li $a0, -1 #licznik ustawiony na -1, ponieważ enter wysyłający ciąg znaków też jest liczony jako znak
	la $t0, bufor
	
	loop: lb $t1, 0 ($t0) #załaduj do pamięci t1 pierwszy znak z t0
	beq $t1, 0, next #jeżeli odczytamy znak to znak 0, to przeskocz w next (wyskocz z pętli)
	addi $a0, $a0, 1 #wywołaj a0, a następnie dodaj do niego 1 i nadpisz jako a0
	
	addi $t0, $t0, 1
	b loop
	
	next: li $v0, 1
syscall
	compare:	#pętla porównująca znaki
	la $a0, string_len
	lw $a0, 0($a0)
	la $a1, bufor
	jal 	isPalindrome
	add	$a0, $v0, $zero
	jal	printRes
	addi	$v0, $zero, 10
	syscall


isPalindrome:
	# pętla porównująca pierwszy z ostatnim znakiem
	slti	$t0, $a0, 2
	bne	$t0, $zero, returnTrue

	lb	$t0, 0($a1)
	addi	$t1, $a0, -1
	add	$t1, $t1, $a1
	lb	$t1, 0($t1) #w tej linii wyskakuje błąd
	bne	$t0, $t1, returnFalse
	
	addi	$a0, $a0, -2
	addi	$a1, $a1, 1
	j	isPalindrome
	
returnFalse:
	addi	$v0, $zero, 0
	jr	$ra


returnTrue:
	addi	$v0, $zero, 1
	jr	$ra


.data
IS_STRING: .asciiz	" is"
NOT_STRING: .asciiz	" NOT"
A_PAL_STRING: .asciiz	" a PALinDROME!"

.text		
printRes:
	add	$t4, $a0, $zero
	addi	$v0, $zero, 4
	la	$a0, bufor
	syscall
	la	$a0, IS_STRING
	syscall
	bne	$t4, $zero, printResCont
		la $a0, NOT_STRING  
		syscall
printResCont:
	la	$a0, A_PAL_STRING
	syscall
	jr	$ra

Słowo pobiera prawidłowo, obliczanie ilości znaków w słowie również przebiega jak należy.
Błąd, który wyświetla program:

Error in  line 46: Runtime exception at 0x0040008c: address out of range 0x716b616a

Będę wdzięczny za wskazówki, co powinienem poprawić i na czym polega błąd.
Pozdrawiam! :)