list 1.9 KB

12345678910111213141516171819202122232425262728293031323334
  1. 1 SEGMENT .text
  2. 2 GLOBAL _start
  3. 3 _start:
  4. 4 00000000 B802000000 MOV RAX, 2 ; open(filename, flags)
  5. 5 00000005 48BF- MOV RDI, filename
  6. 5 00000007 [0000000000000000]
  7. 6 0000000F 4831F6 XOR RSI, RSI ; set flags to 0: RD_ONLY
  8. 7 00000012 0F05 SYSCALL
  9. 8 00000014 4883F8FF CMP RAX, -1
  10. 9 00000018 7433 JE err
  11. 10 0000001A 4889C7 MOV RDI, RAX ; file descriptor
  12. 11 0000001D 4831C0 XOR RAX, RAX ; read(fd, buf, count)
  13. 12 00000020 48BE- MOV RSI, buf
  14. 12 00000022 [0000000000000000]
  15. 13 0000002A BA13000000 MOV RDX, 19 ; We read at most 19 bytes
  16. 14 0000002F 0F05 SYSCALL
  17. 15 00000031 4883F8FF CMP RAX, -1
  18. 16 00000035 7416 JE err
  19. 17 00000037 B801000000 MOV RAX, 1 ; write(fd, buf) (buf is already set from previous call)
  20. 18 0000003C BF01000000 MOV RDI, 1 ; standard output
  21. 19 00000041 0F05 SYSCALL
  22. 20 00000043 B83C000000 MOV RAX, 60 ; exit(code)
  23. 21 00000048 4831FF XOR RDI, RDI ; success
  24. 22 0000004B 0F05 SYSCALL
  25. 23 err:
  26. 24 0000004D B83C000000 MOV RAX, 60 ; exit(code)
  27. 25 00000052 BF01000000 MOV RDI, 1 ; 1 (fail)
  28. 26 00000057 0F05 SYSCALL
  29. 27
  30. 28 SEGMENT .bss
  31. 29 00000000 <res 00000014> buf RESB 20
  32. 30
  33. 31 SEGMENT .rodata
  34. 32 00000000 66696C6500 filename DB "file",0