123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- [bits 64]
-
- section .text
- global _start
-
- _start:
-
- ; set stdin non blocking
- mov rax, 72 ; fcntl
- mov rdi, 0 ; stdin
- mov rsi, 3 ; F_GETFL
- mov rdx, 0
- syscall
- mov rdx, rax
- or rdx, 4 ; O_NONBLOCK
- mov rax, 72 ; fcntl
- mov rdi, 0 ; stdin
- mov rsi, 4 ; F_SETFL
- syscall
-
- mov rax, 228 ; clock_gettime
- mov rdi, 0 ; CLOCK_REALTIME
- mov rsi, ts_start
- syscall
-
-
- print_time:
-
- mov rax, 228 ; clock_gettime
- mov rdi, 0 ; CLOCK_REALTIME
- mov rsi, ts_cur
- syscall
-
- mov rax, [tv_cur_s]
- mov rbx, [tv_start_s]
- sub rax, rbx
- fifoo:
- add al, 0x30
- mov byte [msg], al
- ;xor rax, rax
- ;mov al, byte [msg]
- ;mov rdi, [tv_cur_s]
- ;mov rdx, [tv_start_s]
- ;sub rdi, rdx
- ;fifoo:
- ;add rax, rdi
- ;mov byte [msg], al
-
- mov rax, 1
- mov rdi, 1
- mov rsi, msg
- mov rdx, msglen
- syscall
-
- sleep:
- mov rax, 35
- mov rdi, ts_sleep
- mov rsi, 0
- syscall
- jmp print_time
-
- mov rax, 60 ; sys_exit
- mov rdi, 0 ; 0
- syscall
-
- dumprax:
- push rax
- loopdump:
- push rax
- mov rbx, rax
- and rbx, 0x0F
- cmp bl, 0xA
- jge hexdigit
- add bl, 0x30
- jmp loopcont
- hexdigit:
- sub bl, 10
- add bl, 0x41
- loopcont:
- dbg:
- mov byte [digit], bl
- mov rax, 1
- mov rdi, 1
- mov rsi, digit
- mov rdx, 1
- syscall
- pop rax
- mov rdi, 10
- xor rdx, rdx
- mov rsi, rax
- div rdi
- cmp rax, 10
- jge loopdump
-
- mov al, 10
- mov al, [digit]
- mov rax, 1
- mov rdi, 1
- mov rsi, nl
- mov rdx, 1
- syscall
-
- pop rax
- ret
-
- section .data
- foobar: ISTRUC timespec
- ts_start:
- tv_start_s dq 0
- tv_start_us dq 0
-
-
- msg: db "0 Hello, world!", 10
- msglen: equ $ - msg
-
- digit: db "0"
- nl: db 10
-
- ts_cur:
- tv_cur_s dq 0
- tv_cur_us dq 0
-
- ;ts_sleep:
- ; tv_sleep_s dd 0,0
- ; tv_sleep_us dd 10000000,0
-
-
- ; 1/2s sleep
- ts_sleep:
- tv_sleep_s dq 0
- tv_sleep_us dq 500000000
-
-
- .end:
|