Compare commits
2 Commits
0aed286bcb
...
a309019bdb
| Author | SHA1 | Date | |
|---|---|---|---|
| a309019bdb | |||
| f2ca981037 |
@ -46,7 +46,7 @@ section .text
|
||||
syscall
|
||||
RPOP_M rax, rdi, rsi, rcx
|
||||
|
||||
mov rcx, 1000000000 ; выполняем миллион раз
|
||||
mov rcx, 10000000000; выполняем миллион раз
|
||||
%%loop:
|
||||
%1
|
||||
loop %%loop
|
||||
@ -76,46 +76,64 @@ 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
|
||||
nop
|
||||
PRINT_DELTATIME nop_command
|
||||
nop ; для дебага
|
||||
|
||||
TIME_1_000_000 inc rax
|
||||
nop
|
||||
PRINT_DELTATIME reg_command
|
||||
nop
|
||||
|
||||
mov rax, example
|
||||
TIME_1_000_000 inc byte [rax]
|
||||
nop
|
||||
PRINT_DELTATIME rel_reg
|
||||
nop
|
||||
|
||||
mov rax, example
|
||||
xor rbx, rbx
|
||||
TIME_1_000_000 inc byte [rax + rbx]
|
||||
nop
|
||||
PRINT_DELTATIME ind_base
|
||||
nop
|
||||
|
||||
mov rax, example
|
||||
xor rbx, rbx
|
||||
TIME_1_000_000 inc byte [rax + rbx + 122]
|
||||
nop
|
||||
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, что все закончилось успешно
|
||||
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