Heute schrieb ich eine rekursive Fibonacci in Assembly und es funktioniert nicht. Ich habe es mit NASM zur Objektdatei kompiliert und dann mit gcc elf gemacht.
Wenn ich 1 oder 2 eingeben, funktioniert die Funktion perfekt, aber wenn ich 3, 4, 5, 6 oder mehr eingeben, funktioniert die Funktion nicht. Ich denke, es gibt ein Problem, wo die Funktion sich selbst nennt.Rekursive Fibonacci Assembly
Dies ist der Code:
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
Dies ist die Funktion:
Segmentation fault (core dumped)
Was das Problem sein könnte:
_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
Nachdem ich es auf Ubuntu 16.04 es Fehler senden lief ?
* "Das sollte das Problem beheben." * Ich fürchte, das ist ein bisschen zu optimistisch. Das OP verwendet nicht initialisierten Speicher, um das Funktionsergebnis zu erhalten. –
Sie haben Recht, ich habe das [ebp-4] übersehen. –