main.s 620 B

1234567891011121314151617181920212223242526272829303132
  1. SEGMENT .text
  2. GLOBAL _start
  3. _start:
  4. MOV RAX, 2 ; open(filename, flags)
  5. MOV RDI, filename
  6. XOR RSI, RSI ; set flags to 0: RD_ONLY
  7. SYSCALL
  8. CMP RAX, -1
  9. JE err
  10. MOV RDI, RAX ; file descriptor
  11. XOR RAX, RAX ; read(fd, buf, count)
  12. MOV RSI, buf
  13. MOV RDX, 19 ; We read at most 19 bytes
  14. SYSCALL
  15. CMP RAX, -1
  16. JE err
  17. MOV RAX, 1 ; write(fd, buf) (buf is already set from previous call)
  18. MOV RDI, 1 ; standard output
  19. SYSCALL
  20. MOV RAX, 60 ; exit(code)
  21. XOR RDI, RDI ; success
  22. SYSCALL
  23. err:
  24. MOV RAX, 60 ; exit(code)
  25. MOV RDI, 1 ; 1 (fail)
  26. SYSCALL
  27. SEGMENT .bss
  28. buf RESB 20
  29. SEGMENT .rodata
  30. filename DB "file",0