Lab 1: Основы ассемблера #1
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