Я написал свою первую программу на ассемблере
; ----------------------------------------------------------------------------------------
; 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. Так где же в этой программе ошибка сегментации
rdi
, но никогда не_exit
. - person Thomas Jager   schedule 06.07.2020_exit
, но никогда не выполняли инструкциюsyscall
. Добавьтеsyscall
послеxor rdi, rdi
и все заработает. Эта строка присутствует в учебнике, так что я думаю, вы пропустили ее копирование. - person Nate Eldredge   schedule 06.07.2020