feat: написана заготовка под замеры времени

This commit is contained in:
root
2024-09-13 00:07:13 +03:00
parent acc1ada69c
commit a5a36086b0

67
01-asm-basics/time.asm Normal file
View File

@ -0,0 +1,67 @@
global main
extern printf
%define CLOCK_REALTIME 0
; struct timespec { time_t tv_sec; long tv_nsec; }
struc timespec
.tv_sec: resq 1
.tv_nsec: resq 1
endstruc
section .note.GNU-stack ; чтобы не жаловался линкер
section .bss
start: ; uses timespec model
times 2 resq 1
finish:
times 2 resq 1
section .data
fstring db "Operations took %ul seconds and %ul milliseconds", 10, 0
flen equ $-fstring
section .text
main: ; лично в моей системе time_t представляет из себя long int
mov rax, 228 ; Системный вызов получения времени
mov rdi, CLOCK_REALTIME
mov rsi, start
syscall
; insert your code here
mov rcx, 20000
looper:
mov rax, start
loop looper
mov rax, 228
mov rdi, CLOCK_REALTIME
mov rsi, finish
syscall
; считаем время для секунда и миллисекунд
; секунды
mov rsi, [finish + timespec.tv_sec]
sub rsi, [start + timespec.tv_sec]
; миллисекунды
mov rdx, [finish + timespec.tv_nsec]
sub rdx, [start + timespec.tv_nsec]
mov rdi, fstring
mov rax, 0
sub rsp, 8
call printf
add rsp, 8
exit:
mov rax, 60
mov rdi, 0
syscall