で改行せずに、私は最近、アセンブリ内の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標準では、 'stdout'は' FILE * '型の式に展開されるマクロです。私はそれがあなたのコンパイラでどのように定義されているのか分かりません。 'stdio.h'から値を抽出する必要があります。 –
'fflush(NULL)'を呼び出すことができます。これはおそらく 'xor%eax、%eax;コールfflush' –