我有一個關於asm(x86/GAS)程序的問題,它返回一個分段錯誤。 這是一個關於Fibonacci:我認爲algorith是確定:(僞代碼)asm program遞歸
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:這裏是RET:
quit: movl %ecx, %eax #result in %ecx
ret
掛上,你寫了這段代碼,但是你不能在調試器中單步查找問題? –
你似乎沒有正確設置函數的堆棧框架 - 我沒有看到'ebp'被調整到任何地方... –
哎呀,這是什麼原因造成的?這個特殊的遞歸實現在堆棧上將非常困難。 –