Sar*_*all 6 c assembly printf newline nasm
我最近阅读了有关在汇编中使用printf和scanf的这篇文章:
特别是它说"在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
Run Code Online (Sandbox Code Playgroud)
但正如我读过的那篇文章所暗示的那样,stdout没有被刷新.我想也许我输出数字后需要以某种方式冲洗?但我真的不确定.
我正在使用NASM汇编语言.
提前致谢!
fflush()在行或全缓冲 stdio 流中刷新缓冲输出:
extern fflush
...
xor edi, edi ; RDI = 0
call fflush ; fflush(NULL) flushes all streams
...
Run Code Online (Sandbox Code Playgroud)
或者,mov rdi, [stdout]/call fflush也可以仅刷新该流。(default rel用于高效的 RIP 相对寻址,您也需要extern stdout。)