ciao
ci ho ragionato un pochino sopra sfruttando i vostri preziosi consigli ( vi ringrazio per la disponibilità e la passione con cui avete risposto);
ed ecco cio' che ho partorito:
codice:
##ALGORITMO DIVISIONE
#regola per arrotondamento: SE IL RESTO E' MAGGIORE DELLA META' DEL DIVISORE, AGGIUNGI UNO
#AL QUOZIENTE
#$LO:contiene il risultato(quoziente);
#$HI:contiene il resto
.data
dividendo: .asciiz "Inserisci dividendo: "
divisore: .asciiz "Inserisci divisore: "
risultato: .asciiz "Il risultato è: "
.text
.globl __start
.globl arrot
.globl exit
__start: ##ACQUISIZIONE DATI
li $v0, 4
la, $a0, dividendo
syscall
li $v0, 5
syscall #dividendo
move $t0, $v0
li $v0, 4
la, $a0, divisore
syscall
li $v0, 5
syscall #divisore
move $t1, $v0
div $s0, $t0, $t1 #quoziente
mfhi $t9 #copio il resto in $t9
div $s1, $t1, 2 #metà del divisore
slt $t2, $t9, $s1 #$t2=1 se resto è minore della metà del divisore;0 altrimenti
bne $t2, $zero, exit
arrot:
addi $s0, $s0, 1
j exit #incremento il quoziente di uno
exit:
li $v0, 4
la $a0, risultato
syscall
move $a0, $s0
li $v0, 1
syscall
li $v0, 10
syscall
Il programma funziona bene su spim, nonostante a volte venga approssimata per eccesso anche una divisione il cui quoziente è del tipo x,4 .
Ovviamente esisterà un maniera più compatta per esprimere un corretto arrotondamento.
Mi piacerebbe sentire il parere di qualche utente più esperto.
Grazie ancora a tutti