#Esempio di procedura che fa la somma di due numeri (passati PER INDIRIZZO) e restituisce il risultato. #IMPORTANTE: confrontare con somma1 in cui i parametri sono passati PER VALORE .data num1: .word 50 num2: .word 14 result1: .word 0 num3: .word 50 num4: .word -66 result2: .word 0 .text .globl main main: #prima chiamata della procedura la $a0, num1 #Passaggio parametri per indirizzo. L'istruzione la salva nel registro $a0 l'INDIRIZZO del primo parametro, memorizzato all'etichetta num1 la $a1, num2 addi $sp, $sp, -4 sw $ra, 0($sp) jal somma2 lw $ra, 0($sp) addi $sp, $sp, 4 sw $v0, result1 #seconda chiamata della procedura la $a0, num3 la $a1, num4 addi $sp, $sp, -4 sw $ra, 0($sp) jal somma2 lw $ra, 0($sp) addi $sp, $sp, 4 sw $v0, result2 jr $ra #terminazione del programma #Procedura somma2: lw $t0, 0($a0) #copia in registri temporanei usati localmente dalla procedura ($t0 e $t1) dei parametri della procedura passati per indirizzo lw $t1, 0($a1) add $v0, $t0, $t1 jr $ra #terminazione della procedura e restituzione del controllo (jr $ra) alla procedura chiamante