codice:
# Title: Progetto2
# Author: Dennis Aleandro Boanini
# Description:
################# Data segment #####################
.data
str1: .asciiz "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 "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 "richiede l’inserimento di tre interi, ne visualizza su console il valore minimo e ritorna al menů di scelta;\n\n"
str4: .asciiz "visualizza un messaggio di uscita e termina il programma. \n\n"
inserimento: .asciiz "Inserisci un numero da 1 a 3\n\n"
errore: .asciiz "Il numero inserito non era compreso tra 1 e 3 \n\n"
fine: .asciiz "End of Program \n\n"
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
################# 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
li $v0, 4 # $v0 =codice della print_string
la $a0, inserimento # $a0 = indirizzo della stringa
syscall # stampa la stringa prompt
# legge la scelta
li $v0, 5
syscall
move $s0, $v0 # $s0=scelta 1, 2, 3 o 4
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 # salto all'indirizzo calcolato
# prima case action
juno:
la $a0, str1
li $v0, 4
syscall
j menu # Ritorna al menu di selezione
# seconda case action
jdue:
la $a0, str2
li $v0, 4
syscall
j menu # esce
# terza case action
jtre:
la $a0, str3
li $v0, 4
syscall
j menu # esce
# quarta case che esce dal programma visualizzando un messaggio di uscita
jquattro:
la $a0, fine
li $v0, 4
syscall
j exit # Salta all'etichetta exit e termina l'esecuzione del codice
choice_err:
li $v0, 4
la $a0, errore
syscall # stampa la stringa errore
j choice # ritorna alla richiesta di inserimento di un numero tra 1 e 3
exit:
li $v0, 10
syscall
[/spoiler]