WTFStopW : a simple stopwatch
x86-64
nasm
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wtfstopw.asm 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. [bits 64]
  2. section .text
  3. global _start
  4. _start:
  5. ; set stdin non blocking
  6. mov rax, 72 ; fcntl
  7. mov rdi, 0 ; stdin
  8. mov rsi, 3 ; F_GETFL
  9. mov rdx, 0
  10. syscall
  11. mov rdx, rax
  12. or rdx, 4 ; O_NONBLOCK
  13. mov rax, 72 ; fcntl
  14. mov rdi, 0 ; stdin
  15. mov rsi, 4 ; F_SETFL
  16. syscall
  17. mov rax, 228 ; clock_gettime
  18. mov rdi, 0 ; CLOCK_REALTIME
  19. mov rsi, ts_start
  20. syscall
  21. print_time:
  22. mov rax, 228 ; clock_gettime
  23. mov rdi, 0 ; CLOCK_REALTIME
  24. mov rsi, ts_cur
  25. syscall
  26. mov rax, [tv_cur_s]
  27. mov rbx, [tv_start_s]
  28. sub rax, rbx
  29. fifoo:
  30. add al, 0x30
  31. mov byte [msg], al
  32. ;xor rax, rax
  33. ;mov al, byte [msg]
  34. ;mov rdi, [tv_cur_s]
  35. ;mov rdx, [tv_start_s]
  36. ;sub rdi, rdx
  37. ;fifoo:
  38. ;add rax, rdi
  39. ;mov byte [msg], al
  40. mov rax, 1
  41. mov rdi, 1
  42. mov rsi, msg
  43. mov rdx, msglen
  44. syscall
  45. sleep:
  46. mov rax, 35
  47. mov rdi, ts_sleep
  48. mov rsi, 0
  49. syscall
  50. jmp print_time
  51. mov rax, 60 ; sys_exit
  52. mov rdi, 0 ; 0
  53. syscall
  54. dumprax:
  55. push rax
  56. loopdump:
  57. push rax
  58. mov rbx, rax
  59. and rbx, 0x0F
  60. cmp bl, 0xA
  61. jge hexdigit
  62. add bl, 0x30
  63. jmp loopcont
  64. hexdigit:
  65. sub bl, 10
  66. add bl, 0x41
  67. loopcont:
  68. dbg:
  69. mov byte [digit], bl
  70. mov rax, 1
  71. mov rdi, 1
  72. mov rsi, digit
  73. mov rdx, 1
  74. syscall
  75. pop rax
  76. mov rdi, 10
  77. xor rdx, rdx
  78. mov rsi, rax
  79. div rdi
  80. cmp rax, 10
  81. jge loopdump
  82. mov al, 10
  83. mov al, [digit]
  84. mov rax, 1
  85. mov rdi, 1
  86. mov rsi, nl
  87. mov rdx, 1
  88. syscall
  89. pop rax
  90. ret
  91. section .data
  92. foobar: ISTRUC timespec
  93. ts_start:
  94. tv_start_s dq 0
  95. tv_start_us dq 0
  96. msg: db "0 Hello, world!", 10
  97. msglen: equ $ - msg
  98. digit: db "0"
  99. nl: db 10
  100. ts_cur:
  101. tv_cur_s dq 0
  102. tv_cur_us dq 0
  103. ;ts_sleep:
  104. ; tv_sleep_s dd 0,0
  105. ; tv_sleep_us dd 10000000,0
  106. ; 1/2s sleep
  107. ts_sleep:
  108. tv_sleep_s dq 0
  109. tv_sleep_us dq 500000000
  110. .end: