.data prompt: .asciz "Inserire un numero intero: " output: .asciz "Il numero di Fibonacci e': " nca: .asciz "Il numero totale di cicli per il processore A e': " ncb: .asciz "\nIl numero totale di cicli per il processore B e': " BB: .asciz "\nConteggio dei BB: " virgola: .asciz "," .text .globl main main: la a0, prompt addi a7,x0,4 # stampa della stringa "Inserire un numero intero: " ecall addi a7,x0,5 # lettura del valore inserito ecall add a4, x0, a0 # salvo il valore letto in a4 #Azzeramento variabili per instrumentazione add s10, x0, x0 # contatore cicli macchina A add s11, x0, x0 # contatore cicli macchina B add s3, x0, x0 # contatore istanze Basic-Block #1 add s4, x0, x0 # contatore istanze Basic-Block #2 add s5, x0, x0 # contatore istanze Basic-Block #3 add s6, x0, x0 # contatore istanze Basic-Block #4 jal fibo # chiamata della funzione fibo() add s2, a0, x0 # salvo il risultato x18 la a0, output # stampa della stringa "Il numero di Fibonacci e': " addi a7,x0,4 ecall add a0, s2, x0 # stampo il numero di fibonacci addi a7,x0,1 ecall # Stampa risultati instrumentazione la a0, BB # stampa della stringa "\nConteggio dei BB: "⏎ addi a7,x0,4 ecall add a0, x0, s3 # stampo il numero corrispondente alle esecuzioni di BB1 addi a7,x0,1 ecall la a0, virgola # stampo la stringa "," addi a7,x0,4 ecall add a0, x0, s4 # stampo il numero corrispondente alle esecuzioni di BB2 addi a7,x0,1 ecall la a0, virgola # stampo la stringa "," addi a7,x0,4 ecall add a0, x0, s5 # stampo il numero corrispondente alle esecuzioni di BB3 addi a7,x0,1 ecall la a0, virgola # stampo la stringa "," addi a7,x0,4 ecall add a0, x0, s6 # stampo il numero corrispondente alle esecuzioni di BB4 addi a7,x0,1 ecall la a0, nca # stampo la stringa "\nIl numero totale di cicli per il processore A e': " addi a7,x0,4 ecall add a0, x0, s10 # stampo il numero di cicli eseguiti dalla macchina A addi a7,x0,1 ecall la a0, ncb # stampo la stringa "\nIl numero totale di cicli per il processore B e': " addi a7,x0,4 ecall add a0, x0, s11 # stampo il numero di cicli eseguiti dalla macchina B addi a7,x0,1 ecall addi a7,x0,10 #Uscita ecall fibo: #__________________________________________________________________________________________BB1 addi s10, s10, 16 # contributo cicli di BB1 su macchina A addi s11, s11, 11 # contributo cicli di BB1 su macchina B addi s3, s3, 1 # incrementa n. volte in cui e' eseguito BB1 addi sp, sp, -8 # riservo due word nello stack sw ra, 0(sp) # salvo l'indirizzo di ritorno nella prima word dello stack addi t0, x0, 2 # metto il valore fisso di confronto 2 in t0 (t0 = 2) slt t1, t0, a4 # se 22) allora calcolo iterativamente (etichetta 'return') #__________________________________________________________________________________________BB2 addi s10, s10, 2 # contributo cicli di BB2 su macchina A addi s11, s11, 2 # contributo cicli di BB2 su macchina B addi s4, s4, 1 # incrementa n. volte in cui e' eseguito BB2 addi a0, x0, 1 # restituisco 1 (casi n<=2) j exit return: #__________________________________________________________________________________________BB3 addi s10, s10, 45 # contributo cicli di BB3 su macchina A addi s11, s11, 25 # contributo cicli di BB3 su macchina B addi s5, s5, 1 # incrementa n. volte in cui e' eseguito BB3 addi s2, a4, -2 # x18 = n-2 addi a4, a4, -1 # a4 = n-1 sw s2, 4(sp) # salva x18 nello stack jal fibo # chiama fibo(n-1): risultato in a0 lw a4, 4(sp) # ripristino ex-x18 in a4 (n-2) sw a0, 4(sp) # salva a0 nello stack jal fibo # chiama fibo(n-2): risultato in a0 lw s2, 4(sp) # ripristina ex-a0 in a4 (fibo(n-1)) add a0, a0, s2 # somma fibo(n-2) e fibo(n-1) exit: #__________________________________________________________________________________________BB4 addi s10, s10, 12 # contributo cicli di BB4 su macchina A addi s11, s11, 7 # contributo cicli di BB4 su macchina B addi s6, s6, 1 # incrementa n. volte in cui e' eseguito BB4 lw ra, 0(sp) # recupero l'indirizzo di ritorno dallo stack addi sp, sp, 8 # incremento lo stack jr ra # passo il controllo al chiamante