yılında yeni satır olmadan Geçenlerde mecliste printf ve scanf kullanımı hakkında bu makaleyi okudum: o printf olarak" diyor ÖzelliklePrintf montaj
Meaning of intfmt: db "%d", 10, 0 in assembly
, yeni satır (eğer o zaman bir yeni satır ve yazdırır Çıktı, büyük olasılıkla olduğu gibi satır tamponlu moddadır, iç çıktı arabelleğini temizler, böylece sonucu gerçekten görebilirsiniz. Böylece 10'u çıkardığınızda, sifon yok ve çıktıyı göremezsiniz. "
Ancak, derleme dosyasımdaki çıktımdan sonra yeni bir satır istemediğimde ne yapacağımı bilmiyorum. Burada bir satır olmadan yazdırmayı denemek için yazdım basit bir test dosyası var:
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
ama okudum makale olarak stdout'u boşaltılan değil göstermektedir. Belki de numarayı çıkardıktan sonra bir şekilde durmam gerektiğini düşünüyorum. Ama gerçekten emin değilim.
NASM derleme dilini kullanıyorum.
Şimdiden teşekkürler!
O c sözdizimi olduğunu düşünüyorum? Montajda nasıl arayacağımı arıyorum. –
C standardı uyarınca, "stdout", 'FILE *' türünde bir ifadeye genişleyen bir makrodur. Derleyicinizde nasıl tanımlandığını bilmiyorum. Stdio.h'den değeri almanız gerekir. –
Ve montaj kodunda daha kolay olan 'fflush (NULL)' diyebilirsiniz, belki 'xor% eax,% eax; fflush'ı ara –