Hey ich habe folgenden rekursiven Fibonacci Code geschrieben. Ich erhalte beim ausführen immer einen Speicherzugriffsfehler
Pastebin-Link: https://pastebin.com/qNWcyBa5
.intel_syntax noprefix
.section .data
n: .quad 10 # define the fibonacci number that should be calculated
.section .text
.global _start
_start:
# call Fibonacci function f(n)
push [n] # parameter: fibonacci number to calculate
call f # call function
add rsp, 8 # remove parameter from stack
# print calculated Fibonacci number on stdout
#call printnumber
# exit process with exit code 0
mov rax, 1
mov rbx, 0
int 0x80
# f: Calculates a Fibonacci number
# f(n) = {n, if n<=1; f(n-1)+f(n-2), else}.
# Parameter: Integer n >= 0, passed on stack
# Returns: Fibonacci number f(n), returned in rax
.type f, @function
f:
push rbp # basepointer auf stack pushen
mov rbp, rsp # basepointer bekommt Wert des stackpointers
add rbp, 8 # 1.Parameter
mov rbx, [rbp] # rbx= 1.Paramter
cmp rbx, 0 # wenn n=0 passiert nichts, jmp zu end
je end
cmp rbx, 1 # wenn n=1 jmp zu baseone
je baseone
dec rbx # n-1
push [rbx] # push n-1
call f # call f(n-1)
dec rbx # n-2
push [rbx] # push n-2
call f # call f(n-2)
baseone: add rdi, 1 # rdi = rdi + 1
end: pop rbp # basepointer wieder vom Stack entfernen
ret
weiß auch nicht warum gf hier so viele Leerzeichen reinmacht. Naja hab das meiste kommentiert. Also wenn jemand einen Tipp hat wäre ich sehr dankbar.
Wer es kompilieren will.
as --gstabs -o Dateiname.o Dateiname.asm
ld -m elf-x86-64 -o Name Dateiname.o
./Name
Lg Tischtennisftw