quindi qua cosa cè di sbagliato (oltre all'errore che mi hai detto tu)?

.data
inserire : .asciiz " Inserisci una stringa: "
risultato: .asciiz " La stringa convertita è: "
buffer : .space 256
nuova : .space 256

.text

uppercase:
addi $sp, $sp, -4 #new state stack
sw $s0, 0($sp)
addi $t2,$zero,4
add $s0,$a0,$zero #metto il carattere in s0
addi $t0,$zero,97

lw $t9, 0($s0)
slt $t1,$t9,$t0
beq $t1,$zero, upper
slt $t4,$t2,$a1 #la stringa è finita?
beq $t4,$zero,esci #se cosi è esci
add $t2,$t2,$t2 #altrimenti aumenta il contatore di 4


lw $s0, 0($sp) #riporta lo stack al vecchio valore
addi $sp, $sp, 4
j uppercase


upper:
add $t3,$zero,32
sub $s0,$s0,$t3
jr $ra


main:
li $v0,4
la $a0,inserire
syscall
li $v0,8
la $a0,buffer
li $a1,256
syscall #inserisco la stringa
jal uppercase

esci:
li $v0,4
la $a0,risultato
syscall
li $v0,4
la $a0,nuova
syscall

li $v0,10 #esci dal programma
syscall