【发布时间】:2018-04-10 15:25:55
【问题描述】:
今天我在汇编中写了一个递归斐波那契,它不起作用。我使用 NASM 将其编译为目标文件,然后使用 gcc 使其成为精灵。
当我输入 1 或 2 时,该功能可以正常工作,但是当我输入 3、4、5、6 或更多时,该功能不起作用。
我认为函数调用自身存在问题。
这是代码:
SECTION .data ;init data
str: db "This equal: %d",10,0
SECTION .text ;asm code
extern printf
global main
main:
push ebp
mov ebp,esp
;--------------------
push 03 ; the index
call _fibonacci
add esp,4
push DWORD eax
push str
call printf
;---------------------
mov esp,ebp
pop ebp
ret
这是函数:
_fibonacci:
push ebp
mov ebp,esp
mov ebx, [ebp+8] ;; param n
cmp ebx,0
jne CHECK2
mov eax,0
jmp _endFIbofunc
CHECK2:
cmp ebx,0x1
jne ELSE3
mov eax,1
jmp _endFIbofunc
ELSE3:
mov ebx,[ebp+8]
dec ebx ;; n-1
;; FIRST call
push ebx
call _fibonacci
add esp,4
mov edx,eax
;; SEC CALL
dec ebx
push ebx
call _fibonacci
add esp,4
add eax,edx
mov eax,[ebp-4]
_endFIbofunc:
mov esp,ebp
pop ebp
ret
我在 Ubuntu 16.04 上运行它后,它发送错误:
分段错误(核心转储)
可能是什么问题?
【问题讨论】:
标签: linux recursion assembly fibonacci