# ======= Premiere version demandée sans pile, passage par paramètre ========
.text
    addi    $a0,    $0, 1       # Chargement premier chiffre
    addi    $a1,    $0, 2       # Chargement second chiffre
    jal foo2                # Appel de la fonction avec en parametre $a0 et $a1
    add $a0,    $0, $v0     # Recuperation du résultat de fonctio
    addi    $v0,    $0, 1       # Affichage décimal
    syscall                 # Appel système
    addi    $v0,    $0, 10      # Affichage de fin
    syscall                 # Appel système
foo2:                       
    sw  $t0,    0($sp)          # Chargement dans la pile
    sub $t0,    $a0,    $a1     # $t0 = x - y
    blez    $t0,    foo2_suite      # if $t0 < 0 => foo2_suite
    add $v0,    $0, $a0     # else return x;
    beq $0, $0, foo2_fin    # retour de fin
foo2_suite:
    add $v0,    $0, $a1     # return y
foo2_fin:
    lw  $t0,    0($sp)          # Chargement résultat
    jr  $ra             # Retour fonction
    
 
# ====== Seconde version avec pile =======
.text
    addi    $a0,    $0, 1       # Chargement premier chiffre
    addi    $a1,    $0, 2       # Chargement second chiffre
    jal foo2                # Appel de la fonction avec en parametre $a0 et $a1
    add $a0,    $0, $v0     # Recuperation du résultat de fonctio
    addi    $v0,    $0, 1       # Affichage décimal
    syscall                 # Appel système
    addi    $v0,    $0, 10      # Affichage de fin
    syscall                 # Appel système
foo2:                       
    addi    $t0,    $0, 3       # Me demandez pas pourquoi je ne sais pas 
    sw  $t0,    0($sp)          # Chargement dans la pile
    addi    $t0,    $0, 1       # Pareil que ligne 11
    sw  $t0,    -4($sp)         # Chargement dans la pile
    addi    $sp,    $sp,    -8      # On bouge le pointeur de pile
    jal foo2_pile           # Appel de la fonction 
    addi    $sp,    $sp,    0       # Reset du pointeur de pile
foo2_pile:
    sw  $t0,    0($sp)          # On charge ce qu'il y a dans $t0 dans la pile 
    sw  $t1,    -4($sp)         # On charge ce qu'il y a dans $t1 dans la pile
    sw  $t2,    -8($sp)         # Pareil
    lw  $t0,    0($sp)          # On charge dans $t0 ce qu'il y a dans la pile
    lw  $t1,    4($sp)          # Pareil 
    sub $t2,    $t0,    $t1     # $t2 = $t0 - $t1
    blez    $t2,    foo2_pile_suit      # $t2 <= 0 => foo2_pile_suit
    add $v0,    $0, $t0     # On ajoute dans $v0 $t0
    beq $0, $0, foo2_pile_fin   # On va à la fin de la fonction
foo2_pile_suit:     
    add $v0,    $0, $t1     # On ajoute le résultat contraire sinon
foo2_pile_fin:
    lw  $t0,    0($sp)          # On charge les résultat dans la pile
    lw  $t1,    4($sp)          # Pareil
    lw  $t2,    8($sp)          # Pareil
    jr  $ra             # Fin de fonction