Compare commits
2 Commits
0aed286bcb
...
a309019bdb
| Author | SHA1 | Date | |
|---|---|---|---|
| a309019bdb | |||
| f2ca981037 |
@ -46,7 +46,7 @@ section .text
|
|||||||
syscall
|
syscall
|
||||||
RPOP_M rax, rdi, rsi, rcx
|
RPOP_M rax, rdi, rsi, rcx
|
||||||
|
|
||||||
mov rcx, 1000000000 ; выполняем миллион раз
|
mov rcx, 10000000000; выполняем миллион раз
|
||||||
%%loop:
|
%%loop:
|
||||||
%1
|
%1
|
||||||
loop %%loop
|
loop %%loop
|
||||||
@ -76,46 +76,64 @@ section .text
|
|||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro PRINT_DELTATIME 1
|
%macro PRINT_DELTATIME 1
|
||||||
sub rsp, 8
|
;sub rsp, 8
|
||||||
mov rdi, str_template
|
mov rdi, str_template
|
||||||
mov rsi, %1
|
mov rsi, %1
|
||||||
mov rdx, [deltatime + timespec.tv_sec]
|
mov rdx, [deltatime + timespec.tv_sec]
|
||||||
mov rcx, [deltatime + timespec.tv_nsec]
|
mov rcx, [deltatime + timespec.tv_nsec]
|
||||||
call printf
|
call printf
|
||||||
add rsp, 8
|
;add rsp, 8
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
main:
|
main:
|
||||||
|
push rbp
|
||||||
|
mov rbp, rsp
|
||||||
|
sub rsp, 16
|
||||||
xor rax, rax ; поскольку приходим сюда из компилятора, лучше обнулить
|
xor rax, rax ; поскольку приходим сюда из компилятора, лучше обнулить
|
||||||
TIME_1_000_000
|
TIME_1_000_000
|
||||||
nop
|
|
||||||
PRINT_DELTATIME nop_command
|
PRINT_DELTATIME nop_command
|
||||||
nop ; для дебага
|
|
||||||
|
|
||||||
TIME_1_000_000 inc rax
|
TIME_1_000_000 inc rax
|
||||||
nop
|
|
||||||
PRINT_DELTATIME reg_command
|
PRINT_DELTATIME reg_command
|
||||||
nop
|
|
||||||
|
|
||||||
mov rax, example
|
mov rax, example
|
||||||
TIME_1_000_000 inc byte [rax]
|
TIME_1_000_000 inc byte [rax]
|
||||||
nop
|
|
||||||
PRINT_DELTATIME rel_reg
|
PRINT_DELTATIME rel_reg
|
||||||
nop
|
|
||||||
|
|
||||||
mov rax, example
|
mov rax, example
|
||||||
xor rbx, rbx
|
xor rbx, rbx
|
||||||
TIME_1_000_000 inc byte [rax + rbx]
|
TIME_1_000_000 inc byte [rax + rbx]
|
||||||
nop
|
|
||||||
PRINT_DELTATIME ind_base
|
PRINT_DELTATIME ind_base
|
||||||
nop
|
|
||||||
|
|
||||||
mov rax, example
|
mov rax, example
|
||||||
xor rbx, rbx
|
xor rbx, rbx
|
||||||
TIME_1_000_000 inc byte [rax + rbx + 122]
|
TIME_1_000_000 inc byte [rax + rbx + 122]
|
||||||
nop
|
|
||||||
PRINT_DELTATIME ind_base_disp
|
PRINT_DELTATIME ind_base_disp
|
||||||
nop
|
|
||||||
|
|
||||||
|
; Под конец давайте посчитаем тактовую частоту на примере той же самой команды
|
||||||
|
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, что все закончилось успешно
|
xor rax, rax ; сообщаем gcc, что все закончилось успешно
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
@ -9,3 +9,5 @@ section .data
|
|||||||
ind_base: db '`inc byte [rax + rbx]`', 0
|
ind_base: db '`inc byte [rax + rbx]`', 0
|
||||||
ind_base_disp: db '`inc byte [rax + rbx + 122]`', 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