Ok problema risolto:
l'input lo fai così li $v0,5 e poi chiami la syscall tu invece prima fai uno spostamento da v0 a t0... quando chiami le syscall devi fare tutto in blocchi che è meglio perchè nel mentre non sai bene cos'è successo ai registri (diciamo che è buona abitudine). già sistemando quella funziona. Infine abituati a scrivere il codice in modo un filo più pulito ti aiuterà a notare queste cose:
Codice:
.data
domanda: .asciiz "Inserisci un numero N: "
risposta: .asciiz "Il quadrato di N è: "
.text
.globl main
main:
li $v0, 4
la $a0, domanda
syscall
li $v0, 5 #prepari l'input
syscall #chiami l'input
move $t0, $v0
mul $t1, $t0, $t0
li $v0, 4
la $a0, risposta
syscall
move $a0, $t1
li $v0, 1
syscall
li $v0, 10
syscall
Mi pare che così vada
EDIT: dopo il mul avevi anche messo una syscall inutile che faceva un secondo input senza che ce ne fosse bisogno
EDIT2: ho verificato sia con spim che con MARS (simulatore/editor che consiglio) e funziona correttamente