Недавно я прочитал эту статью об использовании 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 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.
Заранее спасибо!