feat: добавлена отдельная логика компиляции для task2
Дело в том, что там я намереваюсь воспользоваться фукнциями стандратной библиотеки Си, поэтому процесс компиляции должен быть особым
This commit is contained in:
67
01-asm-basics/time.asm
Normal file
67
01-asm-basics/time.asm
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user