Now displays hours, minutes, seconds and miliseconds

Este commit está contenido en:
Yann Weber 2018-08-21 08:36:19 +02:00
commit ebf594fabc

Ver archivo

@ -26,30 +26,125 @@ syscall
print_time:
; updating ts_cur time
mov rax, 228 ; clock_gettime
mov rdi, 0 ; CLOCK_REALTIME
mov rsi, ts_cur
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 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
; rax now contain elapsed seconds
; filling timestr with seconds & minutes
add rax, 3559
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msglen
xor rdx, rdx
mov rcx, 10
div rcx
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
sleep:
@ -59,9 +154,15 @@ mov rsi, 0
syscall
jmp print_time
mov rax, 60 ; sys_exit
mov rdi, 0 ; 0
syscall
exit:
mov rax, 60 ; sys_exit
mov rdi, 0 ; OK
syscall
fault:
mov rax, 60 ; sys_exit
mov rdi, 1 ; failure
syscall
dumprax:
push rax
@ -113,6 +214,10 @@ ts_start:
msg: db "0 Hello, world!", 10
msglen: equ $ - msg
hours: db "000000000"
timestr: db ":00:00.0000", 0x0D
timestrlen: equ $ - timestr
digit: db "0"
nl: db 10
@ -120,15 +225,15 @@ 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
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: