세그먼트 화 오류를 반환하는 asm (x86/GAS) 프로그램에 대한 질문이 있습니다. 그것은 피보나치에 관하여 : 나는 algorith 확인이라고 생각 : (의사 코드)asm 프로그램에서 재귀
fibo(int number){
if (n < 2)
return number;
return fib(n - 1) + fib(n - 2);
오류가 왜 이해가 안 돼요. C 프로그램이 asm 함수를 호출합니다.
fibo:
movl 4(%esp), %ebx #argument n in %ebx
cmpl $2, %ebx # test: is n < 2 ?
jnl recur # no, recursion
jmp quit # yes : quit
recur:
movl %ebx, %eax # get value of argument n
subl $1, %eax # n-1
pushl %eax # push n-1
call fibo # recursive call : fib(n-1)
movl %eax, %edx # save result in %edx
movl %ebx, %eax # get value of argument n
subl $2, %eax # n-2
pushl %eax # push n-2
call fibo # recursive call : fib(-2)
addl %edx, %eax # add fib(n-1) + fib(n-2)
당신이 세그멘트 폴트가 어디 나를 찾는 데 도움이 될 수 있습니다 : 여기
코드인가?감사합니다.
PS :
quit: movl %ecx, %eax #result in %ecx
ret
잠시만 기다려주십시오.이 코드를 작성했지만 디버거에서 단계를 밟아 문제를 찾을 수 없습니까? –
함수에 대한 스택 프레임을 올바르게 설정하지 않은 것 같습니다. - 어디에서나 'ebp'가 조정되지 않는 것을 볼 수 있습니다 ... –
지옥, 그 원인은 무엇입니까? 그 특별한 재귀 구현은 스택에서 매우 어려울 것입니다. –