에서 줄 바꿈없이 나는 최근 어셈블리에서의 printf와 scanf와 사용에 대한이 문서 읽었습니다 : 그것의 printf에서 " 을 말한다 특히은 printf와 어셈블리
Meaning of intfmt: db "%d", 10, 0 in assembly
을, 줄 바꿈은 (만약 다음 줄 바꿈 및 인쇄 출력은 라인 버퍼 모드입니다.), 결과를 실제로 볼 수 있도록 내부 출력 버퍼를 플러시합니다. 따라서 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 구문이라고 생각? 어셈블리에서 호출하는 방법을 찾고 있습니다. –
C 표준에 따르면'stdout'은'FILE *'유형의 표현식으로 확장되는 매크로입니다. 컴파일러에서 어떻게 정의되어 있는지 모르겠습니다. 'stdio.h '에서 값을 추출해야합니다. –
그리고 어셈블리 코드에서 더 쉬운'fflush (NULL)'을 호출 할 수 있습니다. 아마'xor % eax, % eax; call fflush' –