换行符我最近读到这篇文章在装配用printf和scanf:printf的没有装配
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
但正如文章我读过暗示stdout不是被刷新。我想也许我需要在输出数字后以某种方式刷新?但我真的不确定。
我正在使用NASM汇编语言。
在此先感谢!
我认为这是C语法?我正在寻找如何在装配中调用它。 – 2011-12-14 10:41:28
根据C标准,`stdout`是一个扩展为`FILE *`类型表达式的宏。我不知道它是如何在你的编译器中定义的。你需要从`stdio.h`中提取值。 – 2011-12-14 11:43:01