Я недавно читал эту статью об использовании printf и scanf в сборке:
Значение intfmt: дБ "% d", 10, 0 в сборке
В частности, это говорит
"В printf, новая строка печатает новую строку, а затем (если вывод находится в режиме буферизации строки, что, вероятно, и есть), очищает внутренний буфер вывода, чтобы вы могли увидеть результат. Поэтому, когда вы удаляете 10, сбрасывания и вы не видите вывод. "
Однако я не знаю, что делать, если мне не нужен перевод строки после моего вывода в файл сборки.
Вот простой тестовый файл, который я написал, чтобы попробовать распечатать без перевода строки:
extern printf
LINUX equ 80H ; interupt number for entering Linux kernel
EXIT equ 60 ; Linux system call 1 i.e. 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 i.e. exit ()
mov rdi, 0 ; Error code 0 i.e. no errors
syscall ; Interrupt Linux kernel 64-bit
но, как я прочитал в статье, stdout не сбрасывается. Я думал, может быть, мне нужно как-то промыть после того, как я вывел число? Но я действительно не уверен.
Я использую язык ассемблера NASM.
Заранее спасибо!