Vi posto il codice che ho fatto, ho un problema, inserisco gli elementi, stampo i 5 vettori (con 0 che chiude l'inserimento) ma non riesco a fare l'unione perchè mi esce dal programma... qual'è il problema? non riesco a trovarlo.
.data
msg1: .asciiz "\n Inserisci gli elementi del vettore 1 e premi '0' per terminare: \n\n"
msg2: .asciiz "\n Inserisci gli elementi del vettore 2 e premi '0' per terminare:\n"
msg3: .asciiz "\n Inserisci gli elementi del vettore 3 e premi '0' per terminare:\n"
msg4: .asciiz "\n Inserisci gli elementi del vettore 4 e premi '0' per terminare:\n"
msg5: .asciiz "\n Inserisci gli elementi del vettore 5 e premi '0' per terminare:\n"
msg_exit: .asciiz "\n FINE INSERIMENTO!!! \n"
array1: .space 50	#creazione array in cui possono essere allocati al massimo 50 byte di memoria (per ogni array)
array2: .space 50
array3: .space 50
array4: .space 50
array5: .space 50
vettoreUnione: .space 50
.text
.globl main
main: 
	li $v0,4  #stampa msg1      
 	la $a0,msg1
 	syscall 
 	
 	li $s0, 0   #uso $s0 come indice dell'array
   	li $s1, 49   #termina l'inserimento quando sono stati inseriti 50 caratteri
   	
   	
inserimento1:
	la $t0, array1   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
  	
  	
  	move $t1, $v0	#inizializzazione del ciclo per l'inserimento
   	sb $t1, array1($s0)
   	beq $v0, '0', vett2 #se è stato inserito zero si deve concludere
   	addi $t0,$t0, 1 #incrementa di 1 per poter andare avanti nel ciclo
   	addi $s0, $s0, 1
   	bne $s0, $s1, inserimento1 
   		
vett2:
	li $v0,4  #stampa msg_successivo     
 	la $a0,msg2
 	syscall       
 	
 	li $s0, 0   #uso $s0 come indice dell'array
   	li $s1, 49   #termina l'inserimento quando sono stati inseriti 50 caratteri
   	
 	j inserimento2     
inserimento2: 
	la $t0, array2   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
  	
  	
  	move $t1, $v0
   	sb $t1, array2($s0)
   	beq $v0, '0', vett3 #se è stato inserito zero si deve concludere
   	addi $t0,$t0, 1
   	addi $s0, $s0, 1
   	bne $s0, $s1, inserimento2
   	
vett3: 
	li $v0,4  #stampa msg_successivo     
 	la $a0,msg3
 	syscall       
 	
 	li $s0, 0   #uso $s0 come indice dell'array
   	li $s1, 49   #termina l'inserimento quando sono stati inseriti 50 caratteri
   	
 	j inserimento3
 	
inserimento3: 
	la $t0, array3   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
  	
  	
  	move $t1, $v0
   	sb $t1, array3($s0)
   	beq $v0, '0', vett4 #se è stato inserito zero si deve concludere
   	addi $t0,$t0, 1
   	addi $s0, $s0, 1
   	bne $s0, $s1, inserimento3
   	
vett4: 
	li $v0,4  #stampa msg_successivo     
 	la $a0,msg4
 	syscall       
 	
 	li $s0, 0   #uso $s0 come indice dell'array
   	li $s1, 49   #termina l'inserimento quando sono stati inseriti 50 caratteri
   	
 	j inserimento4
 
inserimento4: 
	la $t0, array4   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
  	
  	
  	move $t1, $v0
   	sb $t1, array4($s0)
   	beq $v0, '0', vett5 #se è stato inserito zero si deve concludere
   	addi $t0,$t0, 1
   	addi $s0, $s0, 1
   	bne $s0, $s1, inserimento4
   	
vett5: 
	li $v0,4  #stampa msg_successivo     
 	la $a0,msg5
 	syscall       
 	
 	li $s0, 0   #uso $s0 come indice dell'array
   	li $s1, 49   #termina l'inserimento quando sono stati inseriti 50 caratteri
   	
 	j inserimento5
 
inserimento5: 
	la $t0, array5   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
  	
  	
  	move $t1, $v0
   	sb $t1, array5($s0)
   	beq $v0, '0', exit #se è stato inserito zero si deve concludere
   	addi $t0,$t0, 1
   	addi $s0, $s0, 1
   	bne $s0, $s1, inserimento5
   	
	move $t2, $zero                  # int i=0, 
   	
forIparte1:
	beq $t2, $v0, uscitaUnione       # se i==v.length ha finito e torna al main
	lbu $t0, 0($a1)                  # v = $t0
	beq $t0, $s0, updateForI         # v == 0, non considero questo elemento
	move $t3, $zero                  # int j=0
	
	
	forJ:
blt $s3, $t3, forIparte2         # if k < j esce dal j loop
lbu $t1, 0($a2)                  # unione[j] = $t1
beq $t0, $t1, updateForI         # if v==unione[j], non salva v
addi $a2, $a2, 1                 # 
addi $t3, $t3, 1                 # j++
j forJ
forIparte2:
sb $t0, vettoreUnione($s3)       # vettoreUnione[k] = v
addi $s3, $s3, 1                 # k++
beq $s2, $s3, printUnione        # if 49==k (vettoreUnione è pieno) vai al  print
updateForI:
addi $a1, $a1, 1                 # incremento il puntatore a v
addi $t2, $t2, 1                 # i++
j forIparte1
printUnione: 
	la $t0, vettoreUnione   #$t0 prende l'indirizzo dell'array
   	li $v0, 12
  	syscall
uscitaUnione:
jr $ra
   	
exit: 
	li $v0,4  #stampa msg_exit     
 	la $a0,msg_exit
 	syscall
	
	li $v0, 10      # termina programma
        syscall