Я пытаюсь реализовать рекурсивную факториальную функцию в сборке.Это работает, когда я помещаю число непосредственно в стек, но я получаю ошибку сегментации, когда пытаюсь работать со входом.
Исходный код:
.section .text
formatstr: .asciz "%d \n"
formatscan: .asciz "%1d"
.global main
main:
//push $4 <---- this works
push %rbp
movq %rsp, %rbp
subq $8, %rsp
movq $0, %rax
leaq -8(%rbp), %rsi <--- this doesn't work
movq $formatscan, %rdi
call scanf
call factorial
addq $8, %rsp
movq %rax, %rbx
movq $0, %rax
movq $formatstr, %rdi
movq %rbx, %rsi
call printf
factorial:
pushq %rbp
movq %rsp, %rbp
movq 16(%rbp), %rax
cmpq $1, %rax
je end_factorial
decq %rax
pushq %rax
call factorial
movq 16(%rbp), %rbx
imul %rbx, %rax
end_factorial:
movq %rbp, %rsp
pop %rbp
ret