Chciałbym napisać program asemblerze MIPS (dla SPIM), który będzie "przepuszczał" tylko znaki 0 - 9, a - f i A - F oraz będzie odwracał powstały ciąg znaków (tzn. zamiana miejscami pierwszego znaku z ostatnim, drugie z przedostatnim itd.). Napisany przeze mnie program poprawnie "przepuszcza znaki", ale nie odwraca ciągu:

    .globl main
    .data
    s1: .asciiz "01amFH"
    .text
main:
    la $a0, s1
    jal stricnv
    move $a0, $v0
    li $v0, 4
    syscall
    li $v0, 10
    syscall
stricnv:
    move $v0, $a0
    move $t0, $a0
chloop:
    lb $t1, ($a0)
    beqz $t1, exit
    blt $t1, '0', skip
    ble $t1, '9', store
    blt $t1, 'A', skip
    ble $t1, 'F', store
    blt $t1, 'a', skip
    bgt $t1, 'f', skip
store:
    sb $t1, ($t0)
    addi $t0, $t0, 1
skip:
    addi $a0, $a0, 1
    j chloop
exit:
    sb $zero, ($t0)
    move $a0, $v0
    addi $t0, $t0, -1
loop:
    lb $t1, ($a0)
    beqz $t1, end
    lb $t2, ($t0)
    sb $t1, ($t0)
    sb $t2, ($a0)
    addi $a0, $a0, 1
    addi $t0, $t0, -1
    j loop
end:
    jr $ra
   

Ciąg próbuje odwrócić po etykiecie loop. Dlaczego program wyświetla nie odwrócony ciąg? Co zrobić, aby został wyświetlony w konsoli odwrócony ciąg znaków?