последовательность Фибоначчи с использованием сборки AVR рекурсивной - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь реализовать рекурсивную функцию, помещая и вставляя промежуточные значения в стек, также используя рекурсию, мне нужно реализовать числа Фибоначчи.

это часть сборки каждый раз, когда я запускаю программу, она дает мне, что сумма 10 равна 0, и когда я пытаюсь изменить ее, я получаю, что сумма 10 равна 20 или 60.

в функции "more:" я пытался выполнить f (n-1) + f (n-2).

.text
.global recur

recursion:
 clr r18
 call recur
 mov r24, r18
 ret

 recur:   // simple summation recurrence.  We look at R24 and if it is > we set up things to recur

     CPI R24, 3
     brge more  // do some more

     // we are base case
     LDI R24, 1
     CLR R25
     ret

 more:
     dec R24
     push R24
     dec r24
     call recur
     add r18, r24
     // at this point R24 is the result, we need to add on what we pushed
     pop r24
     call recur
     ADD R18, R24
     clr r24
     CLR R25
     ret

эта часть написана на C

// Cooper
// 2018
// recursion

// set up connect to AVR code

extern "C" { int recur(int);}

void setup() {


  // put your setup code here, to run once:
  int v;
  v=recur(10);
  Serial.begin(9600);

  Serial.print("The summation is ");
  Serial.println(v);



}

void loop() {
  // put your main code here, to run repeatedly:
   int v;
 v=recur(10);
  delay(1000);
  Serial.println(v);

}
...