Assembly 我无法解决的基本装配练习

Assembly 我无法解决的基本装配练习,assembly,x86,Assembly,X86,我刚开始学习汇编x86,我必须做一个练习,我无法解决这个问题。 其想法是制作一个程序,让用户使用Scanf输入一个数字。然后程序在数字上加1并输出该数字,因此基本上输出=输入+1 当我使用代码时,控制台会显示一个分段错误 守则: mystring: .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n" #Creëert een stuk tekst nrstring: .as

我刚开始学习汇编x86,我必须做一个练习,我无法解决这个问题。 其想法是制作一个程序,让用户使用Scanf输入一个数字。然后程序在数字上加1并输出该数字,因此基本上输出=输入+1

当我使用代码时,控制台会显示一个分段错误

守则:

mystring:   .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n"    #Creëert een stuk tekst
nrstring:   .asciz "%d"

.global main


main:

    movq        $0, %rax                                #Geeft de locatie %rdi een waarde van 0, maakt %rdi leeg
    movq        $mystring, %rdi                             #Voegt de waarde van mystring (het stuk tekst) toe aan %rdi
    call        printf                                  #Print de waarde van  %rdi
    call        inout                                   #roept inout op

inout:  

        pushq %rbp
        movq %rsp , %rbp

        subq $8, %rsp                                   #Plaatst stackPointer goed 
        leaq -8(%rbp), %rsi                             #Laad het adres in rsi

        movq $0, %rdi                                   #Maakt rdi leeg     
        movq $nrstring, %rdi                                #Verplaatst string nrstring naar rdi    (1e arg. scanf)
        movq $0, %rax                                   #Maakt RAX leeg   (2e arg. scanf)
        call scanf                                  #Roept Scanf op

        incq %rdi
        movq %rdi, %rax
        call printf

        movq %rbp, %rsp
        popq %rbp
        ret

end:
    mov         $0, %rdi                                #Maakt %rdi leeg
    call        exit                                    #Sluit het programma af

我来自荷兰,所以请不要担心评论,我为我的英语不好道歉。

问题是分段错误在哪里?您可以使用调试器单步执行程序,并找到导致该程序的步骤。一旦知道是哪条指令导致了错误,您就可以思考该指令出错的原因,并对其进行修复。带你去调试器那儿。@TNH你的英语没那么差。一、 例如,他一个字也不会说荷兰语。然而,在源代码中使用除英语以外的任何语言,无论是代码还是注释,通常都不是一个好主意。这是一个完美的例子:如果这些评论是英文的,那么我们中的一些人可能会发现你的代码偏离了你的实际意图;或者至少他们会提供一些更清晰的线索,说明断层可能来自哪里。