Now displays hours, minutes, seconds and miliseconds
Este commit está contenido en:
padre
eafb19672c
commit
ebf594fabc
Se han modificado 1 ficheros con 131 adiciones y 26 borrados
157
wtfstopw.asm
157
wtfstopw.asm
|
|
@ -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:
|
||||
|
|
|
|||
Cargando…
Añadir tabla
Añadir enlace
Referenciar en una nueva incidencia