Как упоминает @jaquadro, вы можете указать точку входа в командной строке для компоновщика (или использовать скрипт ссылки): gcc -Wall -Wextra -nostdlib -Wl,-eMyEntry minimal.S && ./a.out
Причина, по которой ваша программа вызывает ошибки, заключается в том, что, поскольку выне используя стандартную библиотеку, возвращаться назад некуда (retq
).Вместо этого вызовите exit, используя правильный системный вызов (в данном случае это значение 60, которое вводится в rax
, первый (и единственный) параметр вводится в rdi
.
Пример:
.text
.globl MyEntry
MyEntry:
# Use Syscall 60 (exit) to exit with error code 42
movq $60, %rax
movq $42, %rdi
syscall
Смежный вопрос о том, как выполнять системные вызовы на x86_64