section .data
msg db "Oi", 0xA, 0 ; Mensagem a ser escrita no arquivo, com nova linha (0xA)
len equ $-msg ; Tamanho da mensagem (calculado automaticamente)
fname db "saida.txt", 0 ; Nome do arquivo a ser criado ou aberto
section .text
global _start
_start:
; 1. Syscall para criar ou abrir o arquivo ("saida.txt")
mov rax, 2 ; Syscall número 2: sys_open
mov rdi, fname ; Endereço do nome do arquivo ("saida.txt")
mov rsi, 577 ; Flags para abrir: O_WRONLY | O_CREAT | O_TRUNC (escrever, criar se não existir, truncar se existir)
mov rdx, 0644 ; Permissões do arquivo: rw-r--r-- (proprietário pode ler e escrever, outros só ler)
syscall ; Chama o sistema para abrir/criar o arquivo
; O descritor de arquivo retornado pela syscall `open` está em `rax`.
; Ele é movido para `rdi` para ser usado pela syscall `write`.
; Agora, vamos escrever a mensagem no arquivo.
mov rdi, rax ; Coloca o descritor de arquivo (em rax) em rdi para a syscall `write`
mov rax, 1 ; Syscall número 1: sys_write (escrever no arquivo)
mov rsi, msg ; Endereço da mensagem que queremos escrever no arquivo
mov rdx, len ; Tamanho da mensagem
syscall ; Chama o sistema para escrever no arquivo
; 2. Fechar o arquivo após escrever
mov rax, 3 ; Syscall número 3: sys_close
syscall ; Chama o sistema para fechar o arquivo
; 3. Finaliza o programa
mov rax, 60 ; Syscall número 60: sys_exit (terminar o programa)
xor rdi, rdi ; Código de saída 0 (indicando que o programa terminou com sucesso)
syscall ; Chama o sistema para finalizar o programa
c2VjdGlvbiAuZGF0YQogICAgbXNnIGRiICJPaSIsIDB4QSwgMCAgICAgICAgIDsgTWVuc2FnZW0gYSBzZXIgZXNjcml0YSBubyBhcnF1aXZvLCBjb20gbm92YSBsaW5oYSAoMHhBKQogICAgbGVuIGVxdSAkLW1zZyAgICAgICAgICAgICAgIDsgVGFtYW5obyBkYSBtZW5zYWdlbSAoY2FsY3VsYWRvIGF1dG9tYXRpY2FtZW50ZSkKICAgIGZuYW1lIGRiICJzYWlkYS50eHQiLCAwICAgICA7IE5vbWUgZG8gYXJxdWl2byBhIHNlciBjcmlhZG8gb3UgYWJlcnRvCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IDEuIFN5c2NhbGwgcGFyYSBjcmlhciBvdSBhYnJpciBvIGFycXVpdm8gKCJzYWlkYS50eHQiKQogICAgbW92IHJheCwgMiAgICAgICAgICAgICAgICAgIDsgU3lzY2FsbCBuw7ptZXJvIDI6IHN5c19vcGVuCiAgICBtb3YgcmRpLCBmbmFtZSAgICAgICAgICAgICAgOyBFbmRlcmXDp28gZG8gbm9tZSBkbyBhcnF1aXZvICgic2FpZGEudHh0IikKICAgIG1vdiByc2ksIDU3NyAgICAgICAgICAgICAgICA7IEZsYWdzIHBhcmEgYWJyaXI6IE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMgKGVzY3JldmVyLCBjcmlhciBzZSBuw6NvIGV4aXN0aXIsIHRydW5jYXIgc2UgZXhpc3RpcikKICAgIG1vdiByZHgsIDA2NDQgICAgICAgICAgICAgICA7IFBlcm1pc3PDtWVzIGRvIGFycXVpdm86IHJ3LXItLXItLSAocHJvcHJpZXTDoXJpbyBwb2RlIGxlciBlIGVzY3JldmVyLCBvdXRyb3Mgc8OzIGxlcikKICAgIHN5c2NhbGwgICAgICAgICAgICAgICAgICAgICA7IENoYW1hIG8gc2lzdGVtYSBwYXJhIGFicmlyL2NyaWFyIG8gYXJxdWl2bwoKICAgIDsgTyBkZXNjcml0b3IgZGUgYXJxdWl2byByZXRvcm5hZG8gcGVsYSBzeXNjYWxsIGBvcGVuYCBlc3TDoSBlbSBgcmF4YC4KICAgIDsgRWxlIMOpIG1vdmlkbyBwYXJhIGByZGlgIHBhcmEgc2VyIHVzYWRvIHBlbGEgc3lzY2FsbCBgd3JpdGVgLgogICAgOyBBZ29yYSwgdmFtb3MgZXNjcmV2ZXIgYSBtZW5zYWdlbSBubyBhcnF1aXZvLgoKICAgIG1vdiByZGksIHJheCAgICAgICAgICAgICAgICA7IENvbG9jYSBvIGRlc2NyaXRvciBkZSBhcnF1aXZvIChlbSByYXgpIGVtIHJkaSBwYXJhIGEgc3lzY2FsbCBgd3JpdGVgCiAgICBtb3YgcmF4LCAxICAgICAgICAgICAgICAgICAgOyBTeXNjYWxsIG7Dum1lcm8gMTogc3lzX3dyaXRlIChlc2NyZXZlciBubyBhcnF1aXZvKQogICAgbW92IHJzaSwgbXNnICAgICAgICAgICAgICAgIDsgRW5kZXJlw6dvIGRhIG1lbnNhZ2VtIHF1ZSBxdWVyZW1vcyBlc2NyZXZlciBubyBhcnF1aXZvCiAgICBtb3YgcmR4LCBsZW4gICAgICAgICAgICAgICAgOyBUYW1hbmhvIGRhIG1lbnNhZ2VtCiAgICBzeXNjYWxsICAgICAgICAgICAgICAgICAgICAgOyBDaGFtYSBvIHNpc3RlbWEgcGFyYSBlc2NyZXZlciBubyBhcnF1aXZvCgogICAgOyAyLiBGZWNoYXIgbyBhcnF1aXZvIGFww7NzIGVzY3JldmVyCiAgICBtb3YgcmF4LCAzICAgICAgICAgICAgICAgICAgOyBTeXNjYWxsIG7Dum1lcm8gMzogc3lzX2Nsb3NlCiAgICBzeXNjYWxsICAgICAgICAgICAgICAgICAgICAgOyBDaGFtYSBvIHNpc3RlbWEgcGFyYSBmZWNoYXIgbyBhcnF1aXZvCgogICAgOyAzLiBGaW5hbGl6YSBvIHByb2dyYW1hCiAgICBtb3YgcmF4LCA2MCAgICAgICAgICAgICAgICAgOyBTeXNjYWxsIG7Dum1lcm8gNjA6IHN5c19leGl0ICh0ZXJtaW5hciBvIHByb2dyYW1hKQogICAgeG9yIHJkaSwgcmRpICAgICAgICAgICAgICAgIDsgQ8OzZGlnbyBkZSBzYcOtZGEgMCAoaW5kaWNhbmRvIHF1ZSBvIHByb2dyYW1hIHRlcm1pbm91IGNvbSBzdWNlc3NvKQogICAgc3lzY2FsbCAgICAgICAgICAgICAgICAgICAgIDsgQ2hhbWEgbyBzaXN0ZW1hIHBhcmEgZmluYWxpemFyIG8gcHJvZ3JhbWEK