diff --git a/lab-1/fib.s b/lab-1/fib.s index 14c6734..879fde5 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -15,18 +15,28 @@ fibonacci: @ R4 = R0 - 0 (update flags) @ if(R0 <= 0) goto .L3 (which returns 0) + subs r4, r0, #0 + ble .L3 @ Compare R4 wtih 1 @ If R4 == 1 goto .L4 (which returns 1) + cmp r4, #1 + beq .L4 @ R0 = R4 - 1 @ Recursive call to fibonacci with R4 - 1 as parameter + subs r0, r4, #1 + bl fibonacci @ R5 = R0 @ R0 = R4 - 2 @ Recursive call to fibonacci with R4 - 2 as parameter + mov r5, r0 + subs r0, r4, #2 + bl fibonacci @ R0 = R5 + R0 (update flags) + adds r0, r5, r0 pop {r3, r4, r5, pc} @EPILOG diff --git a/lab-1/fibseq.c b/lab-1/fibseq.c index a7163dd..eeaf4ce 100644 --- a/lab-1/fibseq.c +++ b/lab-1/fibseq.c @@ -8,8 +8,12 @@ int main(int argc, char **argv) int result=0; printf("Please input a number:"); - scanf("%d",&number); - result = fibonacci(number); - printf("The fibonacci sequence at %d is: %d\n", number, result); + + if (scanf("%d",&number) == 1) { + result = fibonacci(number); + printf("The fibonacci sequence at %d is: %d\n", number, result); + } + + return 0; }