【发布时间】:2012-01-20 03:17:07
【问题描述】:
我最近阅读了这篇关于在汇编中使用 printf 和 scanf 的文章:
Meaning of intfmt: db "%d", 10, 0 in assembly
特别是它说 “在 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
但正如我读过的文章所暗示的那样,标准输出没有被刷新。我在想也许我需要在输出数字后以某种方式刷新?但我真的不确定。
我正在使用 NASM 汇编语言。
提前致谢!
【问题讨论】:
标签: c assembly newline printf nasm