.data stringaI: .asciiz"\n inserisci un intero: " stringaO: .asciiz "\n F vale: " .text .globl main main: li $v0,4 la $a0,stringaI syscall li $v0,5 syscall move $a0,$v0 jal F move $t0,$v0 li $v0,4 la $a0,stringaO li $v0,1 move $a0,$t0 syscall li $v0,10 syscall F: ble $a0,1,CASOBASE sub $sp,$sp,8 sw $ra,0($sp)#operazione di push sw $a0,4($sp) sub $a0,$a0,1 jal H lw $ra,0($sp)#operazione di pop lw $a0,4($sp) add $sp,$sp,8 sub $sp,$sp,12#sottraggo allo stackptr il valore di 3 parole sw $v0,0($sp) sw $ra,4($sp) sw $a0,8($sp) sub $a0,$a0,2 jal G #la G ci restituisce il valorein v0 move $t0,$v0 lw $v0,0($sp) add $v0,$v0,$t0 lw $ra,4($sp)#devo ripristinare i valori che mancano, cioè ra e a0 lw $a0,8($sp) add $sp,$sp,12 jr $ra CASOBASE: beq $a0,1,UNO #ho un casobase doppio beq $a0,0,ZERO UNO: li $v0,1 jr $ra ZERO: li $v0,0 jr $ra #il caso 1 e 0 sono diversi perchè hanno risultati di uscita diversi