Ormai continuo qui, se poi devo aprire un altro post, ditemelo che lo apro subito..
Ho terminato il secondo esercizio di progetto, ma mi da errore. Cioč faccio la scelta, esegue il codice perfettamente e ritorna al menu di selezione, ma qui, quando vado a inserire una scelta mi da errore.
Vi posto tutto il codice dell'esercizio

codice:
# Title: Progetto2				
# Author: Dennis Aleandro Boanini			
# Description: 
################# Data segment generale ###########
.data
	str1:	.asciiz "\n\n1 - Richiede l’inserimento di un intero, visualizza a console se č un numero pari o dispari e ritorna al menů di scelta;\n\n"    
    str2:	.asciiz "2 - Richiede l’inserimento di due interi, visualizza a console se la loro somma č un numero pari o dispari e ritorna al menů di scelta;\n\n"    
    str3:	.asciiz "3 - Richiede l’inserimento di tre interi, ne visualizza su console il valore minimo e ritorna al menů di scelta;\n\n"    
	str4:	.asciiz "4 - Visualizza un messaggio di uscita e termina il programma. \n\n"
	numero1:	.asciiz "\n\nInserisci primo numero --> "
	numero2:	.asciiz "Inserisci secondo numero --> "
	numero3:	.asciiz "Inserisci terzo numero --> "
    inserimento:	.asciiz "Inserisci un numero da 1 a 4 --> "
    errore:	.asciiz "Il numero inserito non era compreso tra 1 e 4 \n\n"
    fine:	.asciiz "End of Program \n\n"
	.align 4
	jump_table: .space 16 # jump table array a 4 word che verra' instanziata dal main con gli indirizzi delle label che chiameranno le corrispondenti procedure
################# Data segment 3 case ##############
	msg:		.asciiz "\nIl minimo fra i tre numeri č --> "
################# Data segment 2 case ##############
	somma:		.asciiz "\nLa somma dei due numeri inseriti č --> "
	pari:		.asciiz "\nIl numero č pari!"
	dispari:	.asciiz "\nIl numero inserito č dispari!"
################# Code segment #####################
.text
.globl main

main:
	  la $s1, jump_table
	  la $t0, juno	  
	  sw $t0, 0($s1)
 	  la $t0, jdue  
	  sw $t0, 4($s1)
	  la $t0, jtre	  
	  sw $t0, 8($s1)
	  la $t0, jquattro
	  sw $t0, 12($s1)
	  
menu:
#Stampa del menu di selezione
	la $a0, str1	
	li $v0, 4 
	syscall
	la $a0, str2
	li $v0, 4 
	syscall	
	la $a0, str3
	li $v0, 4 
	syscall
	la $a0, str4
	li $v0, 4 
	syscall
	  
choice:
# scelta della procedura o dell'uscita
	  la $a0, inserimento
	  li $v0, 4
	  syscall
	  
      li $v0, 5
	  syscall
	  move $s0, $v0
	  
	  sle  $t0, $s0, $zero
	  bne  $t0, $zero, choice_err
	  li   $t0,4
	  sle  $t0, $s0, $t0
	  beq  $t0, $zero, choice_err

branch_case:
		addi $s0, $s0, -1 # tolgo 1 da scelta perche' prima azione nella jump table (in posizione 0) corrisponde alla prima scelta del case
	    add $t0, $s0, $s0 
	    add $t0, $t0, $t0
	    add $t0, $t0, $s1
	    lw $t0, 0($t0) 

	    jr $t0
	  
# prima case action
juno: 
	li $t3, 2
	
	la $a0, numero1
	li $v0, 4
	syscall
	li $v0, 5
	syscall
	move $t0, $v0
	
	div $t0, $t3
	mfhi $s1
	
	beq $s1, $zero, Pari
	la $a0, dispari
	li $v0, 4
	syscall

	j menu

# seconda case action
jdue: 
		li $t3, 2
		
		la $a0, numero1
		li $v0, 4
		syscall
		li $v0, 5
		syscall
		move $t1, $v0
		
		la $a0, numero2
		li $v0, 4
		syscall
		li $v0, 5
		syscall
		move $t2, $v0
		
		add $t0, $t1, $t2
		
		la $a0, somma
		li $v0, 4
		syscall
		move $a0, $t0
		li $v0, 1
		syscall
		
		div $t0, $t3
		mfhi $s1
		
		beq $s1, $zero, Pari
		la $a0, dispari
		li $v0, 4
		syscall
		j menu
	Pari:
		la $a0, pari
		li $v0, 4
		syscall
		j menu

# terza case action
jtre: 
		la $a0, numero1
		li $v0, 4
		syscall
		li $v0, 5
		syscall																																																																										
		move $t1, $v0
		la $a0, numero2
		li $v0, 4
		syscall
		li $v0, 5
		syscall
		move $t2, $v0
		la $a0, numero3
		li $v0, 4
		syscall
		li $v0, 5
		syscall
		move $t3, $v0
		
		blt $t1, $t2, control1
		
		blt $t2, $t3, minSecondoNumero
		j minTerzoNumero
	
	control1:
		blt $t1, $t3, minPrimoNumero
		j minTerzoNumero
			
		blt $t2, $t3, Controllo3
		j minTerzoNumero

		j minPrimoNumero
			
	minPrimoNumero:
		la $a0, msg
		li $v0, 4
		syscall
		move $a0, $t1
		li $v0, 1
		syscall
		j menu
	minSecondoNumero:
		la $a0, msg
		li $v0, 4
		syscall
		move $a0, $t2
		li $v0, 1
		syscall
		j menu
	minTerzoNumero:
		la $a0, msg
		li $v0, 4
		syscall
		move $a0, $t3
		li $v0, 1
		syscall
		j menu
	
# quarta case che esce dal programma visualizzando un messaggio di uscita
jquattro: 
	la $a0, fine
	li $v0, 4
	syscall
	   
	j exit
	  
choice_err: 
      li $v0, 4  
      la $a0, errore 
      syscall	
	  				  		  		  	  
      j choice
	  
exit:		
	li $v0, 10 
    syscall

PS: Ma c'č la possibilitŕ di mettere lo spoiler? altrimenti occupo un monte di spazio...