Я не знаю, почему я не могу ничего напечатать с printf
в сборке GAS, если \n
(LF - новая строка) отсутствует в конце строки. Если я помещаю символ новой строки \n
, строка печатается, но если я удаляю \n
, строка не печатается. Может кто-нибудь сказать мне, почему?
.extern printf
.section .data
hello:
.string "Hello!" # doesn't print this way when \n is missing
.section .text
.globl _start
_start:
nop
movl $hello, %edi
movl $0, %eax
call printf
_end:
movq $60, %rax #use the _exit syscall
movq $0, %rdi #return error code 0
syscall #make syscall
printf
), используйтеmain
как точку входа и не используйте системный вызовexit
. Вы не позволяете библиотеке C завершиться должным образом, поэтому буферизованная строка не печатается. PS: в следующий раз, если вы увидите, что ваш вопрос возникнет с неправильным форматированием, исправьте его самостоятельно. При необходимости используйте предварительный просмотр. - person Jester   schedule 25.05.2016.asciz
вместо.string
в определении строки для вывода. - person zx485   schedule 25.05.2016main
в качестве точки входа и ссылки на среду выполнения C. Затем вы можете использоватьret
для возврата в среду выполнения C, которая вызвала main (а неexit
syscall), которая должным образом очистит выходные буферы и выйдет из программы. Если вы непреклонны в использовании_start
в качестве точки входа, то вместо использования системного вызоваexit
вам следует вызвать функциюexit
(черезcall exit
). Введите код возврата в%edi
. - person Michael Petch   schedule 26.05.2016