L'inversion d'une chaîne de caractères en MIPS de l'Assemblée

Je suis en train de demander à l'utilisateur la longueur d'une chaîne, d'allouer de l'espace pour que la chaîne de caractères, puis de l'imprimer dans le sens inverse.

Pour la vie de moi, je ne peux pas comprendre pourquoi cela ne fonctionne pas..

Sample Output:
(spim) run    
Please enter an integer:    
7    
string
(spim)

Maintenant la longueur de la chaîne "string" devrait être de 6 à droite? + le caractère null de la fin, qui devrait permettre de 7. Quelqu'un peut endroit où je vais mal avec mon approche?

.data
    nl: .asciiz "\n"
    inputPrompt: .asciiz "Please enter an integer:\n"

    theString: .space 32
    theInteger: .word 1

.text
main: 
    la $a0, inputPrompt #load address a0 with prompt
    li $v0, 4       #load system call, print string into v0
    syscall 

    li $v0, 5       #load system call, read int into v0
    syscall
    sw $v0, theInteger  #store saved int into $t0

    li $v0, 8           #load system call, read string with mem address
    la $a0, theString   #load address of reserved string space
    lw $a1, theInteger  #load address of saved int length for string    
    syscall

    lw $t0, theInteger
    add $a1,$zero,$t0   #pass lenght of string
    jal stringreverse   #reverse the string

stringreverse:
    add $t0,$a0,$zero   #starting address
    add $t1,$zero,$zero     #i = 0
    addi $t2,$a1,-1     #j = length-1

loop:
    add $t3,$t0,$t1
    lb $t4,0($t3)   #the lb string[i]
    add $t5,$t0,$t2
    lb $t6,0($t5)   #the lb string[j]
    sb $t4,0($t5)   #string[j] = string[i]
    sb $t6,0($t3)   #string[i] = string[j]
    addi $t1,$t1,1  #i++
    addi $t2,$t2,-1     #j--

    slt $t6,$t2,$t1
    beqz $t6,loop

exit:
    li $v1, 4       #system call to print reversed string
    la $a2, 0($a1)
    syscall

    li $v0, 10
    syscall         # Exit program
Avez-vous essayé de marcher à travers le code dans le débogueur? Il semble que vous assumez l'adresse de la chaîne dans $a0 est laissé intact après syscall 8 retours, êtes-vous sûr que ce soit le cas?
Le MARS MIPS simulateur fonctionne des merveilles pour le débogage de l'assemblée

OriginalL'auteur | 2011-11-19