58 lines
1.1 KiB
NASM
58 lines
1.1 KiB
NASM
; Chamadas de sistema...
|
|
%define SYS_WRITE 1
|
|
%define SYS_OPEN 2
|
|
%define SYS_CLOSE 3
|
|
%define SYS_DUP2 33
|
|
%define SYS_EXIT 60
|
|
|
|
; Flags da chamada SYS_OPEN...
|
|
%define O_WRONLY 0x1 ; apenas para escrita
|
|
%define O_CREAT 0x40 ; cria se não existir
|
|
%define O_TRUNC 0x200 ; trunca conteúdo existente
|
|
|
|
; Permissões do arquivo criado...
|
|
%define F_MODE 0o644
|
|
|
|
; Descritores de arquivos...
|
|
%define STDOUT 1
|
|
|
|
section .rodata
|
|
file db "mensagem.txt", 0 ; arquivo de destino
|
|
msg db "Salve, simpatia!", 10 ; Mensagem
|
|
len equ $ - msg ; Tamanho da mensagem
|
|
|
|
section .text
|
|
global _start
|
|
|
|
_start:
|
|
; open (ARQUIVO, FLAGS, MODO)
|
|
mov rax, SYS_OPEN
|
|
mov rdi, file
|
|
mov rsi, O_WRONLY | O_CREAT | O_TRUNC
|
|
mov rdx, F_MODE
|
|
syscall
|
|
|
|
mov r12, rax ; salvar descritor de arquivo retornado
|
|
|
|
; dup2(ANTIGO_FD, NOVO_FD)
|
|
mov rax, SYS_DUP2
|
|
mov rdi, r12
|
|
mov rsi, STDOUT
|
|
syscall
|
|
|
|
; write(FD, STRING, SIZE)
|
|
mov rax, SYS_WRITE
|
|
mov rdi, STDOUT
|
|
mov rsi, msg
|
|
mov rdx, len
|
|
syscall
|
|
|
|
; close(FD)
|
|
mov rax, SYS_CLOSE
|
|
mov rdi, r12
|
|
syscall
|
|
|
|
; exit(STATUS)
|
|
mov rax, SYS_EXIT
|
|
xor rdi, rdi
|
|
syscall
|