0

アセンブリ プログラムでセグメンテーション エラーが発生する理由を誰かが理解してくれるのではないかと思います。(心配しないでください。かなり短いプログラムです。)

segment .data

    a dq 175
    b dq 4096


segment .text

    global _start

_start:

    mov rax, [a]    ; move *a into rax
    add rax, [b]    ; add *b to rax
    xor rax, rax    ; set to zero
    ret             ; return

a と b の値を加算して、プログラムが終了したときに最後の終了コードとして返す必要がありますよね? それで、echo $? 印刷する必要があります4271か?のため、0 を出力する必要がありxorます。

しかし、ええ、次を使用してコンパイルされました:nasm -f elf64 -l main.lst main.asm -o main.o && ld main.o -o main.exec

次に実行します。./main.exec && echo $?

いつものように助けていただければ幸いです。

4

1 に答える 1

3

編集 されていないためret_startレーベルからはできません。call

segment .data

    a dq 175
    b dq 4096


segment .text

     global _start

 _start:

    mov rax, [a]    ; move *a into rax
    add rax, [b]    ; add *b to rax
    xor rax, rax    ; set to zero

    mov rdi, rax
    mov al, 60 ; sys_exit
    syscall

それを試してみてください。(未テスト!)

于 2013-07-25T03:00:39.787 に答える