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
당신의 숙제를 얻으려면 여기로 가야합니다 : http://stackoverflow.com/questions/5616684/recursive-fibonacci-in-assembly?rq=1 – kcsoft
나는 그것을 보았지만, 내가 뭘 잘못하고 있는지 이해해야합니다. – ketrox
gdb로 디버깅 시도에서 배운 점은 무엇입니까? –