From a309019bdbe244d25c8d4748a804a60c9f0ed316 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 1 Oct 2024 22:20:37 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=80=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B5=D0=B9=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-addr-methods/task2.asm | 32 +++++++++++++++++++++++++++++--- 04-addr-methods/timer.inc | 2 ++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/04-addr-methods/task2.asm b/04-addr-methods/task2.asm index 06a2091..0da6718 100644 --- a/04-addr-methods/task2.asm +++ b/04-addr-methods/task2.asm @@ -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 + diff --git a/04-addr-methods/timer.inc b/04-addr-methods/timer.inc index afa1e5d..25db19f 100644 --- a/04-addr-methods/timer.inc +++ b/04-addr-methods/timer.inc @@ -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 +