Buongiorno, sto cercando di svolgere questo programma, è una traccia d'esame, e la parte della somma e differenza funzione...
Solo che volevo inserire anche i comandi per lo stack, ma non mi funziona che caspita sto sbagliando???
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 è: "
.text
_start:
addi sp, sp, -16
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
sw t0, 0(sp)
sw t1, 4(sp)
jal ra, trova_somma
jal ra, trova_differenza
sw s2, 8(sp)
sw s3, 12(sp)
la a0, print_sum
li a7, 4
ecall
mv a0, s2
li a7, 1
ecall
la a0, print_diff
li a7, 4
ecall
mv a0, s3
li a7, 1
ecall
lw t0, 0(sp)
lw t1, 4(sp)
lw s2, 8(sp)
lw s3, 12(sp)
addi sp, sp, 16
# Fine del Programma
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 somma
sub s3, t0, t1
ret