OOStuBS - Technische Informatik II (TI-II)  2.4
task3B.cc
gehe zur Dokumentation dieser Datei
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
2  * Technische Informatik II *
3  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4  * *
5  * T A S K 3 B *
6  * *
7 \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
8 
9 /* * * * * * * * * * * * * * * * * * * * * * * * *\
10 # INCLUDES #
11 \* * * * * * * * * * * * * * * * * * * * * * * * */
12 #include "user/task3B.h"
13 #include "user/analyse.h"
14 
15 #include "object/kout.h"
16 #include "object/cpu.h"
17 #include "object/keyboard.h"
18 
19 /* * * * * * * * * * * * * * * * * * * * * * * * *\
20 # GLOBAL VARIABLES #
21 \* * * * * * * * * * * * * * * * * * * * * * * * */
22 
23 /* * * * * * * * * * * * * * * * * * * * * * * * *\
24 # FUNCTIONS #
25 \* * * * * * * * * * * * * * * * * * * * * * * * */
27  kout.setpos(31,1);
28  kout << "OOStuBs - Task 3B" << endl << endl;
29 }
30 
32 
33 void printStack(const char* func){
34  void** esp;
35  asm("lea 8(%%ebp), %0"
36  :"=r"(esp));
37  analyseProcedureStack(esp, func);
38  Key k;
39  do{
40  k=keyboard.key_hit();
41  }while(!k.valid() && k.ascii() != ' ');
42 }
43 
44 unsigned int runFib(unsigned int fib_1, unsigned int fib_2, unsigned int n){
45  printStack(__PRETTY_FUNCTION__);
46  if(n)
47  return runFib(fib_1+fib_2, fib_1, n-1);
48  else
49  return fib_1;
50 }
51 
52 unsigned int fib(unsigned int n){
53  printStack(__PRETTY_FUNCTION__);
54  unsigned int value = runFib(1,0,n-1);
55  printStack(__PRETTY_FUNCTION__);
56  return value;
57 }
58 
59 void doTask3BAction(unsigned int* ende){
60 
61  printStack(__PRETTY_FUNCTION__);
62  unsigned int n=5*(ende[1]/0x11111111); //damit keine "unused variable ende"-Warnung kommt
63 
64  kout << "Fibonacci(" << n << "): " << fib(n) << endl;
65 }
66 
68  //Var init
69  unsigned int ende[]={0xEEEEEEEE, 0x11111111, 0xDDDDDDDD, 0xEEEEEEEE};
70 
71  doTask3BAction(ende);
72 }