Now displays hours, minutes, seconds and miliseconds
This commit is contained in:
parent
eafb19672c
commit
ebf594fabc
1 changed files with 131 additions and 26 deletions
157
wtfstopw.asm
157
wtfstopw.asm
|
|
@ -26,30 +26,125 @@ syscall
|
||||||
|
|
||||||
print_time:
|
print_time:
|
||||||
|
|
||||||
|
; updating ts_cur time
|
||||||
mov rax, 228 ; clock_gettime
|
mov rax, 228 ; clock_gettime
|
||||||
mov rdi, 0 ; CLOCK_REALTIME
|
mov rdi, 0 ; CLOCK_REALTIME
|
||||||
mov rsi, ts_cur
|
mov rsi, ts_cur
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
|
mov rax, [tv_cur_us]
|
||||||
|
mov rbx, [tv_start_us]
|
||||||
|
sub rax, rbx
|
||||||
|
cmp rax, 0
|
||||||
|
jge print_time_us_cont
|
||||||
|
; negativ result
|
||||||
|
add rax, 1000000000
|
||||||
|
mov rbx, [tv_cur_s]
|
||||||
|
sub rbx, 1
|
||||||
|
mov [tv_cur_s], rbx
|
||||||
|
print_time_us_cont:
|
||||||
|
xor rdx, rdx
|
||||||
|
mov rcx, 100000
|
||||||
|
div rcx
|
||||||
|
; set the us char in timestr
|
||||||
|
mov r8, timestr
|
||||||
|
add r8, 10 ; r8 points on last char before \r
|
||||||
|
mov r9, 4 ; r9 count the number of digits
|
||||||
|
print_time_us_loop:
|
||||||
|
xor rdx, rdx
|
||||||
|
mov rcx, 10
|
||||||
|
div rcx
|
||||||
|
add dl, 0x30
|
||||||
|
mov [r8], dl
|
||||||
|
sub r8, 1
|
||||||
|
sub r9, 1
|
||||||
|
cmp r9, 0
|
||||||
|
jg print_time_us_loop
|
||||||
|
|
||||||
|
; handling seconds, minutes & hours
|
||||||
mov rax, [tv_cur_s]
|
mov rax, [tv_cur_s]
|
||||||
mov rbx, [tv_start_s]
|
mov rbx, [tv_start_s]
|
||||||
sub rax, rbx
|
sub rax, rbx
|
||||||
fifoo:
|
; rax now contain elapsed seconds
|
||||||
add al, 0x30
|
; filling timestr with seconds & minutes
|
||||||
mov byte [msg], al
|
add rax, 3559
|
||||||
;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
|
xor rdx, rdx
|
||||||
mov rdi, 1
|
mov rcx, 10
|
||||||
mov rsi, msg
|
div rcx
|
||||||
mov rdx, msglen
|
push rax
|
||||||
|
mov rax, rdx
|
||||||
|
add al, 0x30
|
||||||
|
mov byte [timestr + 5], al
|
||||||
|
|
||||||
|
pop rax
|
||||||
|
xor rdx, rdx
|
||||||
|
mov rcx, 6
|
||||||
|
div rcx
|
||||||
|
push rax
|
||||||
|
mov rax, rdx
|
||||||
|
add al, 0x30
|
||||||
|
mov byte [timestr + 4], al
|
||||||
|
|
||||||
|
pop rax
|
||||||
|
xor rdx, rdx
|
||||||
|
mov rcx, 10
|
||||||
|
div rcx
|
||||||
|
push rax
|
||||||
|
mov rax, rdx
|
||||||
|
add al, 0x30
|
||||||
|
mov byte [timestr + 2], al
|
||||||
|
|
||||||
|
pop rax
|
||||||
|
xor rdx, rdx
|
||||||
|
mov rcx, 6
|
||||||
|
div rcx
|
||||||
|
push rax
|
||||||
|
mov rax, rdx
|
||||||
|
add al, 0x30
|
||||||
|
mov byte[timestr + 1], al
|
||||||
|
|
||||||
|
; filling the hours buffer
|
||||||
|
; r8 will contain our digits counter : max is 8
|
||||||
|
mov r8, 8
|
||||||
|
pop rax
|
||||||
|
print_time_hours_loop:
|
||||||
|
mov rcx, 10
|
||||||
|
xor rdx, rdx
|
||||||
|
div rcx
|
||||||
|
add dl, 0x30
|
||||||
|
cmp rax, 0
|
||||||
|
jne print_time_hours_print_mod
|
||||||
|
cmp rdx, 0
|
||||||
|
je print_time_hours_loop_end
|
||||||
|
|
||||||
|
print_time_hours_print_mod:
|
||||||
|
mov r9, hours
|
||||||
|
add r9, r8
|
||||||
|
mov byte [r9], dl
|
||||||
|
cmp r8, 0
|
||||||
|
je fault
|
||||||
|
sub r8, 1
|
||||||
|
cmp rax, 0
|
||||||
|
jne print_time_hours_loop
|
||||||
|
print_time_hours_loop_end:
|
||||||
|
|
||||||
|
; print hours + timestr
|
||||||
|
add r8, 1
|
||||||
|
cmp r8, 7
|
||||||
|
jle print_time_hours_cont
|
||||||
|
mov r8, 7
|
||||||
|
print_time_hours_cont:
|
||||||
|
mov r9, hours
|
||||||
|
add r9, r8
|
||||||
|
mov rcx, 9
|
||||||
|
sub rcx, r8
|
||||||
|
add rcx, timestrlen
|
||||||
|
|
||||||
|
mov rax, 1 ; write
|
||||||
|
mov rdi, 1 ; stdout
|
||||||
|
mov rsi, r9
|
||||||
|
mov rdx, rcx
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
sleep:
|
sleep:
|
||||||
|
|
@ -59,9 +154,15 @@ mov rsi, 0
|
||||||
syscall
|
syscall
|
||||||
jmp print_time
|
jmp print_time
|
||||||
|
|
||||||
mov rax, 60 ; sys_exit
|
exit:
|
||||||
mov rdi, 0 ; 0
|
mov rax, 60 ; sys_exit
|
||||||
syscall
|
mov rdi, 0 ; OK
|
||||||
|
syscall
|
||||||
|
fault:
|
||||||
|
mov rax, 60 ; sys_exit
|
||||||
|
mov rdi, 1 ; failure
|
||||||
|
syscall
|
||||||
|
|
||||||
|
|
||||||
dumprax:
|
dumprax:
|
||||||
push rax
|
push rax
|
||||||
|
|
@ -113,6 +214,10 @@ ts_start:
|
||||||
msg: db "0 Hello, world!", 10
|
msg: db "0 Hello, world!", 10
|
||||||
msglen: equ $ - msg
|
msglen: equ $ - msg
|
||||||
|
|
||||||
|
hours: db "000000000"
|
||||||
|
timestr: db ":00:00.0000", 0x0D
|
||||||
|
timestrlen: equ $ - timestr
|
||||||
|
|
||||||
digit: db "0"
|
digit: db "0"
|
||||||
nl: db 10
|
nl: db 10
|
||||||
|
|
||||||
|
|
@ -120,15 +225,15 @@ ts_cur:
|
||||||
tv_cur_s dq 0
|
tv_cur_s dq 0
|
||||||
tv_cur_us 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:
|
ts_sleep:
|
||||||
tv_sleep_s dq 0
|
tv_sleep_s dd 0,0
|
||||||
tv_sleep_us dq 500000000
|
tv_sleep_us dd 10000000,0
|
||||||
|
|
||||||
|
|
||||||
|
;; 1/2s sleep
|
||||||
|
;ts_sleep:
|
||||||
|
; tv_sleep_s dq 0
|
||||||
|
; tv_sleep_us dq 500000000
|
||||||
|
|
||||||
|
|
||||||
.end:
|
.end:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue