В вашем ответе несколько ошибок, прежде всего номер системного вызова. Вы вводите значение 4
в rax, но для x86_64 linux значение для sys_write равно 1
http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
во-вторых, у вас есть проблема с вашими аргументами, вызов sys_write выглядит следующим образом: sys_write(unsigned int fd, const char *buf, size_t count)
, где rdi
- fd
, rsi
- buf
и rdx
- count
, Проблема с вашим вызовом заключается в том, что вы ставите rsi в качестве буквального значения 1
, которое заставляет linux перейти по адресу 0x1
, чтобы найти что-то для печати, что явно недопустимо.
рассмотрите этот пример для правильного способа печати числа '1' и затем новой строки
section .data
myNum: db '1', 0xA
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, myNum
mov rdx, 2
syscall
mov rax, 60
mov rdi, 0
syscall
если вы собираетесь понизить голос, пожалуйста, объясните, что вы считаете неправильным с ответом, просто нажатие кнопки понижения голосов никому не поможет