Где в программе сборки hello world ошибка сегментации?

Я написал свою первую программу на ассемблере

; ----------------------------------------------------------------------------------------
; Writes "Hello, World" to the console using only system calls. Runs on 64-bit Linux only.
; To assemble and run:
;
;   nasm -felf64 hello.asm && ld hello.o && .a.out
; ----------------------------------------------------------------------------------------
            global      _start

            section     .text
_start      mov         rax, 1                      ; system call for write
            mov         rdi, 1                      ; file handle 1 is stdout
            mov         rsi, message                ; address of string to output
            mov         rdx, 13                     ; number of bytes
            syscall                                 ; invoke operating system to do the write
            mov         rax, 60                     ; system all for exit
            xor         rdi, rdi                    ; exit code 0

            section     .data

message:    db          "Hello, world", 10          ; note the newline at the end   

с помощью текстового редактора gedit в 64-битной системе Ubuntu Studio 20.04. Я запустил программу через терминал Xfce с помощью команды nasm -felf64 hello.asm && ld hello.o && ./a.out и получил вывод в две строки:

Привет, мир

Ошибка сегментации (дамп ядра)

Я получил исходный код с веб-страницы учебник по nasm. Так где же в этой программе ошибка сегментации


person Hilary Diaz    schedule 05.07.2020    source источник
comment
ЦП не знает, когда остановить выполнение кода. Вы очистили rdi, но никогда не _exit.   -  person Thomas Jager    schedule 06.07.2020
comment
Итак, как мне это исправить?   -  person Hilary Diaz    schedule 06.07.2020
comment
Вы установили регистры для системного вызова _exit, но никогда не выполняли инструкцию syscall. Добавьте syscall после xor rdi, rdi и все заработает. Эта строка присутствует в учебнике, так что я думаю, вы пропустили ее копирование.   -  person Nate Eldredge    schedule 06.07.2020
comment
Ах! Большое спасибо за это, я не заметил этого в исходном коде. Спасибо еще раз.   -  person Hilary Diaz    schedule 06.07.2020