feat: добавлены замеры тиков для последней команды
This commit is contained in:
@ -46,7 +46,7 @@ section .text
|
||||
syscall
|
||||
RPOP_M rax, rdi, rsi, rcx
|
||||
|
||||
mov rcx, 1000000000 ; выполняем миллион раз
|
||||
mov rcx, 10000000000; выполняем миллион раз
|
||||
%%loop:
|
||||
%1
|
||||
loop %%loop
|
||||
@ -76,16 +76,19 @@ section .text
|
||||
%endmacro
|
||||
|
||||
%macro PRINT_DELTATIME 1
|
||||
sub rsp, 8
|
||||
;sub rsp, 8
|
||||
mov rdi, str_template
|
||||
mov rsi, %1
|
||||
mov rdx, [deltatime + timespec.tv_sec]
|
||||
mov rcx, [deltatime + timespec.tv_nsec]
|
||||
call printf
|
||||
add rsp, 8
|
||||
;add rsp, 8
|
||||
%endmacro
|
||||
|
||||
main:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
sub rsp, 16
|
||||
xor rax, rax ; поскольку приходим сюда из компилятора, лучше обнулить
|
||||
TIME_1_000_000
|
||||
PRINT_DELTATIME nop_command
|
||||
@ -108,6 +111,29 @@ main:
|
||||
PRINT_DELTATIME ind_base_disp
|
||||
|
||||
; Под конец давайте посчитаем тактовую частоту на примере той же самой команды
|
||||
rdtsc
|
||||
mov [rbp - 4], edx
|
||||
mov [rbp - 8], eax
|
||||
mov rcx, 10000000000
|
||||
mov rax, example
|
||||
xor rbx, rbx
|
||||
.loop:
|
||||
inc byte [rax + rbx + 122]
|
||||
loop .loop
|
||||
rdtsc
|
||||
sub eax, [rbp - 8]
|
||||
sbb edx, [rbp - 4]
|
||||
mov [rbp - 8], eax
|
||||
mov [rbp - 4], edx
|
||||
|
||||
mov [rbp - 16], rsp
|
||||
and rsp, -16
|
||||
mov rdi, tick_count
|
||||
mov rsi, [rbp - 8]
|
||||
call printf
|
||||
|
||||
mov rsp, rbp
|
||||
pop rbp
|
||||
xor rax, rax ; сообщаем gcc, что все закончилось успешно
|
||||
ret
|
||||
|
||||
|
||||
@ -9,3 +9,5 @@ section .data
|
||||
ind_base: db '`inc byte [rax + rbx]`', 0
|
||||
ind_base_disp: db '`inc byte [rax + rbx + 122]`', 0
|
||||
|
||||
tick_count: db 'Last command also took %lli ticks to complete', 10, 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user