2012-11-18 2 views
2

숙제를 해결하려고합니다. 작동하는 코드를 만들었지 만 잘못된 대답을 내고 있습니다. gdb로 디버깅을 시도했지만 코드에 무엇이 잘못되었는지를 알 수 없습니다. 당신의 스택의 균형이 맞지 있도록, 당신은 어디 fib에 전달할 인수를 제거하지 않는재귀 피보나치 IA32 어셈블리

.data 
     a : .long 6                                        
     r : .long 0 
     out : .string "result %d\n" 
.text 
.global main                                          
fib: 
     pushl %ebp 
     movl %esp, %ebp 
     movl 8(%ebp), %eax 
     cmpl $0, %eax #fib(0)=0 
     je endf 
     cmpl $1, %eax #fib(1)=1 
     je endf 
     decl %eax #eax=n-1 
     movl %eax, %edx #edx=n-1 
     pushl %edx #save n-1 
     pushl %eax #set arg 
     call fib #re in ecx                                      
     popl %eax #get n-1 
     decl %eax #eax=n-2 
     pushl %ecx #save result for n-1                                   
     pushl %eax #set arg 
     call fib #res in ecx                                      
     popl %eax # eax=fib(n-1)                                     
     addl %eax, %ecx #fib(n)=fib(n-1)+fib(n+2)                                
     movl %ebp,%esp #Exit                                      
     popl %ebp 
     ret 
endf: 
     movl %eax, %ecx#fib(0) or fib(1) to %ebx                                 
     movl %ebp,%esp                                       
     popl %ebp 
     ret 

main: 
     pushl a #stack [a]                                      
     call fib #result in %ecx                                     
     pushl %ecx                                        
     pushl $out                                        
     call printf 
+1

당신의 숙제를 얻으려면 여기로 가야합니다 : http://stackoverflow.com/questions/5616684/recursive-fibonacci-in-assembly?rq=1 – kcsoft

+1

나는 그것을 보았지만, 내가 뭘 잘못하고 있는지 이해해야합니다. – ketrox

+0

gdb로 디버깅 시도에서 배운 점은 무엇입니까? –

답변