換行符我最近讀到這篇文章在裝配用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