Дело в том, что там я намереваюсь воспользоваться фукнциями стандратной библиотеки Си, поэтому процесс компиляции должен быть особым
68 lines
1.2 KiB
NASM
68 lines
1.2 KiB
NASM
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
|
|
|