13/08/2026 - Sgrubak ha scritto:
Ma senza tutto il codice, non sappiamo cosa effettivamente c'è nei registri.
Ok allora ti tedio :-))))
L'errore che riscontro nella funzione sub è questo:
(faccio un esempio) supponiamo di voler inserire tre numeri ed effettuarne la sub:
inserisco 2 e, ovviamente, il risultato della sub è -2, quando dovrebbe essere +2...come posso risolvere?
# Programma che esegue la somma e la differenza
# di una serie di numeri inseriti dall'utente
.globl _start
.data
input: .asciz " Quanti numeri vuoi inserire? "
in_num: .asciz " Digita un numero: "
msg_err: .asciz " Il valore digitato non è corretto. Riprova!\n"
sum: .asciz " La somma dei numeri è "
diff: .asciz "\n La differenza dei numeri è "
.text
_start:
restart:
la a0, input
li a7, 4
ecall
li a7, 5
ecall
mv t1, a0
bgtz t1, loop
la a0, msg_err
li a7, 4
ecall
j restart
li t5, 0 # Indice di controllo
loop:
la a0, in_num
li a7, 4
ecall
li a7, 5
ecall
mv t2, a0
jal func_sum
jal func_diff
# add t3, t3, t2 # somma
addi t5, t5, 1
bgt t1, t5, loop
end:
# Stampa somma
la a0, sum
li a7, 4
ecall
mv a0, t3
li a7, 1
ecall
# Stampa differenza
la a0, diff
li a7, 4
ecall
mv a0, t4
li a7, 1
ecall
# Fine del programma
li a7, 10
ecall
func_sum:
add t3, t3, t2
ret
func_diff:
sub t4, t4, t2
ret