codice:
############################################################################################################
# #
# Data declaration section #
# #
############################################################################################################
.data
num: .asciiz "\nInserisci numero >=0:\n "
errins: .asciiz "\nIl numero deve essere maggiore di 0\n ripeti inserimento:
############################################################################################################
# #
# Main #
# #
############################################################################################################
.text
li $v0, 4 # Stampo a video la stringa
la $a0, num # "Inserici numero >=0: "
syscall
j inserisci # salta a inserisci
error:
li $v0, 4 # Stampo a video la stringa
la $a0, errins # "Il numero deve essere maggiore di 0:"
syscall
inserisci:
li $v0, 5 # Ottengo dalla chiamata di sistema read_int
syscall # lo salvo in $v0
blt $v0, 0, error # condizione numero >= 0
# salta a ripeti
move $s0, $v0
ciclo:
beq $s0, -1, exit
move $a0, $s0
jal H
move $a0, $v0
li $v0, 1 # scrivi il risultato ed esci
syscall
move $a0, $s0
jal K
move $a0, $v0
li $v0, 1 # scrivi il risultato ed esci
syscall
addi $s0, $s0, -1
j ciclo
exit:
li $v0,10
syscall
H:
beq $a0,0,CasobaseH
addi $sp, $sp, -8 # fai spazio sullo stack
sw $s0, 4($sp) # salva il parametro corrente
sw $ra, 0($sp)
addi $a0, $a0, -1
jal H
move $a0, $v0
jal K
sub $v0, $s0, $v0
lw $s0, 4($sp)
lw $ra, 0($sp)
addi $sp, $sp, 8
jr $ra
K:
beq $a0,0,CasobaseK
addi $sp, $sp, -8 # fai spazio sullo stack
sw $s0, 4($sp) # salva il parametro corrente
sw $ra, 0($sp)
addi $a0, $a0, -1
jal K
move $a0, $v0
jal H
sub $v0, $s0, $v0
lw $s0, 4($sp)
lw $ra, 0($sp)
addi $sp, $sp, 8
CasobaseK:
li $v0,1
jr $ra
CasobaseH:
li $v0,0
jr $ra