diff --git a/2-3_asm/src/assembleur.s b/2-3_asm/src/assembleur.s index 933934206461e0b3e4093353c8b4a73955283ccb..9faf541de502200de7e34ebe46e97d15693f8162 100644 --- a/2-3_asm/src/assembleur.s +++ b/2-3_asm/src/assembleur.s @@ -10,6 +10,7 @@ .global funcexo1 .global funcexo2 .global funcexo3 +.global funcexo4 /***************************************************** @@ -94,5 +95,58 @@ funcexo3: bx lr + + + +/***************************************************** + * function : exercice 4 + * R0: n + * return value : value of fibonacci sequence for n + *****************************************************/ +.thumb_func +funcexo4: + mov r1, r0 + push {r0, r1, lr} + bl lhs_fact + +lhs_fact: + pop {r0, r1, lr} + sub r0, #1 + cmp r0, #1 + bgt lhs_fact + bl rhs_fact + +rhs_fact: + + +exit_ret: + pop {r0, r1, lr} + mov r0, #1 + + bx lr + + + +fact: + push {r0, r1, lr} + sub r0, #1 + cmp r0, #1 + bgt rcall + sub r1, #2 + cmp r1, #1 + bgt rcall + add sp, #12 + + bx lr + + +rcall: + bl fact + pop {r0, r1, lr} + add r0, r1 + + bx lr + + //.weak add_sat .ltorg