Printf без новой строки в сборке

Недавно я прочитал эту статью об использовании printf и scanf в сборке:

Значение intfmt: db “% d”, 10, 0 в сборке

В частности, он говорит: «В printf новая строка печатает новую строку, а затем (если выход находится в режиме буферизации в строке, что, вероятно, есть), сбрасывает внутренний буфер вывода, чтобы вы могли увидеть результат. Поэтому, когда вы удаляете 10 , нет флеша, и вы не видите результат ».

Однако я не знаю, что делать, если мне не нужна новая строка после моего вывода в моем файле сборки. Вот простой тестовый файл, который я написал для печати без новой строки:

extern printf LINUX equ 80H ; interupt number for entering Linux kernel EXIT equ 60 ; Linux system call 1 ie exit () section .data int_output_format: db "%ld", 0 segment .text global main main: mov r8, 10 push rdi push rsi push r10 push r9 mov rsi, r8 mov rdi, int_output_format xor rax, rax call printf pop r9 pop r10 pop rsi pop rdi call os_return ; return to operating system os_return: mov rax, EXIT ; Linux system call 1 ie exit () mov rdi, 0 ; Error code 0 ie no errors syscall ; Interrupt Linux kernel 64-bit 

но поскольку статья, которую я прочитал, предполагает, что stdout не очищается. Я думал, может быть, мне нужно как-то смыться после вывода номера? Но я действительно не уверен.

Я использую язык ассемблера NASM.

Заранее спасибо!

Вызов fflush(stdout); для отображения того, что в данный момент находится в буферах.

В FASM

 push [_iob] call [fflush] 

Для людей NASM

 extern fflush extern stdout ... push dword [stdout] call fflush add esp, 4 etc... 

Правильный ответ на мой вопрос – так говорит Базиле Старинкевич в комментарии выше. Мне нужно было добавить в свой код:

 extern fflush ... xor rax, rax call fflush ... 

Другая возможность – удалить стандартную буферизацию строки streamа stdout . Здесь вызов C для этого. Перевод на сборку позволяет как упражнение, так как я не думаю, что имеет смысл делать операции ввода / вывода с файлами / streamами в ASM, стоимость / выгода огромна.

 setvbuf(stdout, NULL, _IONBF, 0); 

Таким образом, каждый printffputs , putc , puts т. Д.) Будет иметь неявный fflush