Buongiorno, sto cercando di svolgere questo programma, è una traccia d'esame. Il problema è sulla parte dell'overflow...

Io per semplicità ho cercato di gestire i numeri come unsigned...ma il risultato non mi convince...

Qualche parere?

Grazie

Il codice: 
#ESAME del 27 Febbraio 2025
#
# Scrivere un programma assembly che legga due numeri interi (positivi, negativi o nulli) da tastiera, 
# e stampi la loro somma e la loro differenza. 
# L’individuazione della somma e della differenza va fatta utilizzando due funzioni 
# (trova_somma, trova_differenza), che ricevono come parametri i due numeri interi e ne ritornano 
# la somma e differenza, rispettivamente senza effettuare nessuna verifica di eventuali overflow. 
# La chiamata delle due funzioni dovrà rispettare le convenzioni per il salvataggio dei registri. 
# Utilizzare le system call RARS (MARS) per l’I/O e la terminazione del main. 
# È obbligatorio utilizzare funzioni con scambio dei parametri per individuare somma e differenza. 
# Facoltativo: inserire il codice per verificare la presenza di overflow (sia nella somma che nella differenza), 
# ed eventualmente segnalarne l’occorrenza.

.global _start

.data
	insert1: 			.asciz "\n Inserisci il primo numero: "
	insert2: 			.asciz "\n Inserisci il secondo numero: "
	print_sum:		.asciz "\n La somma è: "
	print_diff:			.asciz "\n La differenza è: "
	over_sum:		.asciz "\n Per la somma"
	over_diff:			.asciz "\n Per la differenza"
	no_overflow:	.asciz " non c'è overflow!"
	si_overflow:		.asciz " c'è overflow!"

.text 
_start:
	
	la a0, insert1
	li a7, 4
	ecall
	li a7, 5
	ecall
	mv t0, a0
	
	la a0, insert2
	li a7, 4
	ecall
	li a7, 5
	ecall
	mv t1, a0	
	
	jal ra, trova_somma
	jal ra, trova_differenza
		
	la a0, print_sum
	li a7, 4
	ecall
	mv a0, s2					# s2: registro per la somma
	li a7, 1
	ecall
	
	la a0, print_diff
	li a7, 4
	ecall
	mv a0, s3					# s3: registro per la differenza
	li a7, 1
	ecall
	
# Punto falcotativo (controllo dell'overflow sia per la somma che per la differenza)
#
# Per la somma
	la a0, over_sum
	li a7, 4
	ecall

	bgt s2, t0, no_over
	la a0, si_overflow
	li a7, 4
	ecall
	j end_0
no_over:
	la a0, no_overflow
	li a7, 4
	ecall
	
end_0:
# Per la differenza
	la a0, over_diff
	li a7, 4
	ecall
	
	bltu s3, t1, si_over
	la a0, no_overflow
	li a7, 4
	ecall
	j end_1
si_over:
	la a0, si_overflow
	li a7, 4
	ecall
	
# Fine del Programma
end_1:
li a7, 10
ecall

# Funzione trova_somma
trova_somma:
	li s2, 0				# inizializzo la somma
	add s2, t0, t1
	ret
	
# Funzione trova_differenza
trova_differenza:
	li s3, 0				# inizializzo la differenza
	sub s3, t0, t1
	ret