# fattoriale.s .text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) lw $a0,n jal fact_ric # chiama fact(n) ricorsiva sw $v0,result lw $a0,n jal fact_iter # chiama fact(n) iterativa sw $v0,result+4 lw $a0,n jal fact_tab # chiama fact(n) precalcolata sw $v0,result+8 lw $ra,4($sp) addu $sp,$sp,8 jr $ra # soluzione ricorsiva fact_ric: subu $sp,$sp,8 # fact $a0 = n -> $v0 = n! sw $ra,4($sp) ble $a0,1,fact_base sw $a0,0($sp) # salva n nello stack subu $a0,$a0,1 jal fact_ric # chiama fact(n-1) lw $t0,0($sp) mul $v0,$t0,$v0 # fact(n) = n * fact(n-1) j end fact_base: li $v0,1 # caso base end: lw $ra,4($sp) addu $sp,$sp,8 jr $ra # soluzione iterativa fact_iter: ble $a0,1,base move $v0,$a0 # v0 risultato parziale e poi definitivo loop: subu $a0,$a0,1 mul $v0,$v0,$a0 bgt $a0,2,loop jr $ra base: li $v0,1 # caso base jr $ra # soluzione iterativa con tabella precalcolata fact_tab: ble $a0,10,base1 move $v0,$a0 # v0 risultato parziale e poi definitivo loop1: subu $a0,$a0,1 mul $v0,$v0,$a0 bgt $a0,2,loop1 jr $ra base1: sll $a0,$a0,2 # caso precalcolato lw $v0,table($a0) jr $ra .data n: .word 4 result: .word 0,0,0 # risultato calcolato nei tre modi table: .word 1,1,2,6,24,120,720,5040,40320,362880,3628800 #...