Ошибка сегментации с вводом в сборке - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь реализовать рекурсивную факториальную функцию в сборке.Это работает, когда я помещаю число непосредственно в стек, но я получаю ошибку сегментации, когда пытаюсь работать со входом.

Исходный код:

.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                                     
...