fork download
  1. section .data
  2. msg db "Oi", 0xA, 0 ; Mensagem a ser escrita no arquivo, com nova linha (0xA)
  3. len equ $-msg ; Tamanho da mensagem (calculado automaticamente)
  4. fname db "saida.txt", 0 ; Nome do arquivo a ser criado ou aberto
  5.  
  6. section .text
  7. global _start
  8.  
  9. _start:
  10. ; 1. Syscall para criar ou abrir o arquivo ("saida.txt")
  11. mov rax, 2 ; Syscall número 2: sys_open
  12. mov rdi, fname ; Endereço do nome do arquivo ("saida.txt")
  13. mov rsi, 577 ; Flags para abrir: O_WRONLY | O_CREAT | O_TRUNC (escrever, criar se não existir, truncar se existir)
  14. mov rdx, 0644 ; Permissões do arquivo: rw-r--r-- (proprietário pode ler e escrever, outros só ler)
  15. syscall ; Chama o sistema para abrir/criar o arquivo
  16.  
  17. ; O descritor de arquivo retornado pela syscall `open` está em `rax`.
  18. ; Ele é movido para `rdi` para ser usado pela syscall `write`.
  19. ; Agora, vamos escrever a mensagem no arquivo.
  20.  
  21. mov rdi, rax ; Coloca o descritor de arquivo (em rax) em rdi para a syscall `write`
  22. mov rax, 1 ; Syscall número 1: sys_write (escrever no arquivo)
  23. mov rsi, msg ; Endereço da mensagem que queremos escrever no arquivo
  24. mov rdx, len ; Tamanho da mensagem
  25. syscall ; Chama o sistema para escrever no arquivo
  26.  
  27. ; 2. Fechar o arquivo após escrever
  28. mov rax, 3 ; Syscall número 3: sys_close
  29. syscall ; Chama o sistema para fechar o arquivo
  30.  
  31. ; 3. Finaliza o programa
  32. mov rax, 60 ; Syscall número 60: sys_exit (terminar o programa)
  33. xor rdi, rdi ; Código de saída 0 (indicando que o programa terminou com sucesso)
  34. syscall ; Chama o sistema para finalizar o programa
  35.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty